mirror of
https://github.com/cirosantilli/linux-kernel-module-cheat.git
synced 2026-01-23 02:05:57 +01:00
std::set hello world example
This commit is contained in:
@@ -14068,6 +14068,8 @@ Programs under link:userland/cpp/[] are examples of https://en.wikipedia.org/wik
|
||||
** link:userland/cpp/temporary_directory.cpp[]: illustrates `std::filesystem::temp_directory_path` and answers https://stackoverflow.com/questions/3379956/how-to-create-a-temporary-directory-in-c/58454949#58454949
|
||||
* random
|
||||
** link:userland/cpp/random.cpp[]
|
||||
* containers
|
||||
** link:userland/cpp/set.cpp[]: `std::set` contains unique keys
|
||||
|
||||
[[cpp-multithreading]]
|
||||
==== C++ multithreading
|
||||
@@ -18701,7 +18703,7 @@ Notably, global monitor operations on memory accesses of regions marked by <<arm
|
||||
|
||||
This is done to allow spinlocks opens to automatically wake up WFE sleeping cores at free time without the need for a explicit SEV.
|
||||
|
||||
In the shown in the `wfe_ldrex_strex.cpp` example, which can only terminate in gem5 user mode simulation because due to this event.
|
||||
In the shown in the `wfe_ldxr_stxr.cpp` example, which can only terminate in gem5 user mode simulation because due to this event.
|
||||
|
||||
Note that that program still terminates when running on top of the Linux kernel as explained at: <<wfe-from-userland>>.
|
||||
|
||||
|
||||
39
userland/cpp/set.cpp
Normal file
39
userland/cpp/set.cpp
Normal file
@@ -0,0 +1,39 @@
|
||||
// https://cirosantilli.com/linux-kernel-module-cheat#cpp
|
||||
|
||||
#include <cassert>
|
||||
#include <set>
|
||||
|
||||
int main() {
|
||||
std::set<int> s{0, 2};
|
||||
|
||||
// Insert another element.
|
||||
auto insert_ret = s.insert(3);
|
||||
assert(insert_ret.first == s.find(3));
|
||||
assert(insert_ret.second == true);
|
||||
|
||||
// Insert something already there, second of return is false.
|
||||
insert_ret = s.insert(3);
|
||||
assert(insert_ret.second == false);
|
||||
|
||||
// Check if a value is present.
|
||||
auto zero = s.find(0);
|
||||
assert(zero != s.end());
|
||||
assert(*zero == 0);
|
||||
|
||||
// Now for a value that is not present.
|
||||
auto one = s.find(1);
|
||||
assert(one == s.end());
|
||||
|
||||
#if __cplusplus > 201703L
|
||||
// In C++20 we finally have a .contains() to avoid the end mess!
|
||||
assert(s.contains(0));
|
||||
assert(!s.contains(1));
|
||||
#endif
|
||||
|
||||
// Remove an element.
|
||||
// Was present, so return 1;
|
||||
assert(s.erase(0) == 1);
|
||||
assert(s.find(0) == s.end());
|
||||
// Not present, return 0.
|
||||
assert(s.erase(0) == 0);
|
||||
}
|
||||
Reference in New Issue
Block a user