diff options
Diffstat (limited to 'lib/include')
| -rw-r--r-- | lib/include/array_hash.hpp | 27 | ||||
| -rw-r--r-- | lib/include/graph.hpp | 2 | ||||
| -rw-r--r-- | lib/include/network.hpp | 1 | 
3 files changed, 30 insertions, 0 deletions
diff --git a/lib/include/array_hash.hpp b/lib/include/array_hash.hpp new file mode 100644 index 0000000..3b35e4a --- /dev/null +++ b/lib/include/array_hash.hpp @@ -0,0 +1,27 @@ + +#pragma once + +#include <array> +#include <unordered_map> + +namespace std +{ +    template<typename T, size_t N> +    struct hash<array<T, N> > +    { +        typedef array<T, N> argument_type; +        typedef size_t result_type; + +        result_type operator()(const argument_type& a) const +        { +            hash<T> hasher; +            result_type h = 0; +            for (result_type i = 0; i < N; ++i) +            { +                h = h * 31 + hasher(a[i]); +            } +            return h; +        } +    }; +} + diff --git a/lib/include/graph.hpp b/lib/include/graph.hpp index c1ad4f0..ea08214 100644 --- a/lib/include/graph.hpp +++ b/lib/include/graph.hpp @@ -9,6 +9,7 @@  #include <list>  #include <exception> +#include "array_hash.hpp"  class graph {    public: @@ -25,6 +26,7 @@ class graph {      typedef struct edge {        std::array<unsigned int, 2> v;        coordinate r; +      std::array<bool, 2> crossings;      } edge;      coordinate L; diff --git a/lib/include/network.hpp b/lib/include/network.hpp index d955e43..70173e6 100644 --- a/lib/include/network.hpp +++ b/lib/include/network.hpp @@ -12,6 +12,7 @@  #include "graph.hpp"  #include "hooks.hpp"  #include "current_info.hpp" +#include "array_hash.hpp"  #ifdef FRACTURE_LONGINT  | 
