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
|
** 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
|
* random
|
||||||
** link:userland/cpp/random.cpp[]
|
** link:userland/cpp/random.cpp[]
|
||||||
|
* containers
|
||||||
|
** link:userland/cpp/set.cpp[]: `std::set` contains unique keys
|
||||||
|
|
||||||
[[cpp-multithreading]]
|
[[cpp-multithreading]]
|
||||||
==== C++ 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.
|
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>>.
|
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