38#include <unordered_map>
39#include <unordered_set>
48template <
typename Key,
typename Hash = Hash<Key>,
49 typename KeyEqual = std::equal_to<Key>,
50 typename Allocator = std::allocator<Key>>
51using Set = std::unordered_set<Key, Hash, KeyEqual, Allocator>;
53template <
typename Key,
typename Value,
typename Hash = Hash<Key>,
54 typename KeyEqual = std::equal_to<Key>,
55 typename Allocator = std::allocator<std::pair<const Key, Value>>>
56 using Map = std::unordered_map<Key, Value, Hash, KeyEqual, Allocator>;
58 template <
typename Key,
typename Compare = std::less<Key>,
59 typename Allocator = std::allocator<Key>>
62 template <
typename Key,
typename Value,
typename Compare = std::less<Key>,
63 typename Allocator = std::allocator<std::pair<const Key, Value>>>
64 using OrderedMap = std::map<Key, Value, Compare, Allocator>;
69 typedef unsigned long long u64_t;
71 typedef unsigned char u8_t;
119template <>
struct std::hash<
SVF::NodePair>
127 uint32_t first = (uint32_t)(
p.first);
128 uint32_t second = (uint32_t)(
p.second);
129 return ((uint64_t)(first) << 32) | (uint64_t)(second);
Set< Version > VersionSet
std::stack< NodeID > NodeStack
std::pair< NodeID, Version > VersionedVar
std::deque< NodeID > NodeDeque
std::vector< NodeID > NodeVector
OrderedSet< NodeID > OrderedNodeSet
std::vector< EdgeID > EdgeVector
std::set< Key, Compare, Allocator > OrderedSet
Set< VersionedVar > VersionedVarSet
Map< NodePair, NodeID > NodePairMap
std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map
llvm::IRBuilder IRBuilder
std::vector< u32_t > CallStrCxt
std::list< NodeID > NodeList
Set< NodePair > NodePairSet
std::map< Key, Value, Compare, Allocator > OrderedMap
std::pair< NodeID, NodeID > NodePair
std::unordered_set< Key, Hash, KeyEqual, Allocator > Set
size_t operator()(const NodePair &p) const
provide extra hash function for std::pair handling
size_t operator()(const SVF::NodePair &p) const