mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-06 17:27:55 +00:00
* Add construction and assignment from a generic contiguous container. Both compile-time and run time safety checks are made to ensure the safety of this conversion. * Remove base_uint::copyFrom. The generic copy assignment operator now does this functionality with enhanced safety and better syntax. * Remove construction from and dedendence on Blob. The generic constructor and assignment now handle this functionality. * Fix client code to adhere to this new API. * Removed the use of fromVoid in PeerImp.cpp as it was an inappropriate use of this dangerous API. The generic container constructors do it with enhanced safety and better syntax. * Rename data member pn to data_ and make it private. * Remove constraint from hash_append * Remove array_type alias
Basics
Utility functions and classes.
ripple/basic should contain no dependencies on other modules.
Choosing a rippled container.
-
std::vector- For ordered containers with most insertions or erases at the end.
-
std::deque- For ordered containers with most insertions or erases at the start or end.
-
std::list- For ordered containers with inserts and erases to the middle.
- For containers with iterators stable over insert and erase.
- Generally slower and bigger than
std::vectororstd::dequeexcept for those cases.
-
std::set- For sorted containers.
-
ripple::hash_set- Where inserts and contains need to be O(1).
- For "small" sets,
std::setmight be faster and smaller.
-
ripple::hardened_hash_set- For data sets where the key could be manipulated by an attacker in an attempt to mount an algorithmic complexity attack: see http://en.wikipedia.org/wiki/Algorithmic_complexity_attack
The following container is deprecated
std::unordered_set- Use
ripple::hash_setinstead, which uses a better hashing algorithm. - Or use
ripple::hardened_hash_setto prevent algorithmic complexity attacks.