diff options
Diffstat (limited to 'extern/quadriflow/src/compare-key.hpp')
-rw-r--r-- | extern/quadriflow/src/compare-key.hpp | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/extern/quadriflow/src/compare-key.hpp b/extern/quadriflow/src/compare-key.hpp new file mode 100644 index 00000000000..df9109d62e0 --- /dev/null +++ b/extern/quadriflow/src/compare-key.hpp @@ -0,0 +1,102 @@ +#ifndef COMPARE_KEY_H_ +#define COMPARE_KEY_H_ + +#include <iostream> +#include <map> + +namespace qflow { + +struct Key2i +{ + Key2i(int x, int y) + : key(std::make_pair(x, y)) + {} + bool operator==(const Key2i& other) const + { + return key == other.key; + } + bool operator<(const Key2i& other) const + { + return key < other.key; + } + std::pair<int, int> key; +}; + +struct Key3i +{ + Key3i(int x, int y, int z) + : key(std::make_pair(x, std::make_pair(y, z))) + {} + bool operator==(const Key3i& other) const + { + return key == other.key; + } + bool operator<(const Key3i& other) const + { + return key < other.key; + } + std::pair<int, std::pair<int, int> > key; +}; + +struct Key3f +{ + Key3f(double x, double y, double z, double threshold) + : key(std::make_pair(x / threshold, std::make_pair(y / threshold, z / threshold))) + {} + bool operator==(const Key3f& other) const + { + return key == other.key; + } + bool operator<(const Key3f& other) const + { + return key < other.key; + } + std::pair<int, std::pair<int, int> > key; +}; + +struct KeySorted2i +{ + KeySorted2i(int x, int y) + : key(std::make_pair(x, y)) + { + if (x > y) + std::swap(key.first, key.second); + } + bool operator==(const KeySorted2i& other) const + { + return key == other.key; + } + bool operator<(const KeySorted2i& other) const + { + return key < other.key; + } + std::pair<int, int> key; +}; + +struct KeySorted3i +{ + KeySorted3i(int x, int y, int z) + : key(std::make_pair(x, std::make_pair(y, z))) + { + if (key.first > key.second.first) + std::swap(key.first, key.second.first); + if (key.first > key.second.second) + std::swap(key.first, key.second.second); + if (key.second.first > key.second.second) + std::swap(key.second.first, key.second.second); + } + bool operator==(const Key3i& other) const + { + return key == other.key; + } + bool operator<(const Key3i& other) const + { + return key < other.key; + } + std::pair<int, std::pair<int, int> > key; +}; + + +} // namespace qflow + +#endif |