File: phmap_fwd_decl.h

package info (click to toggle)
spades 3.15.5%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 96,896 kB
  • sloc: cpp: 850,748; ansic: 156,813; python: 23,134; perl: 4,547; sh: 2,352; makefile: 1,273; java: 890; pascal: 875; xml: 19
file content (122 lines) | stat: -rw-r--r-- 5,362 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#if !defined(phmap_fwd_decl_h_guard_)
#define phmap_fwd_decl_h_guard_

// ---------------------------------------------------------------------------
// Copyright (c) 2019, Gregory Popovitch - greg7mdp@gmail.com
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      https://www.apache.org/licenses/LICENSE-2.0
// ---------------------------------------------------------------------------

#include <memory>
#include <utility>

namespace phmap {

    template <class T> struct Hash;
    template <class T> struct EqualTo;
    template <class T> using Allocator      = typename std::allocator<T>;
    template<class T1, class T2> using Pair = typename std::pair<T1, T2>;

    class NullMutex;

    namespace container_internal {

        // The hash of an object of type T is computed by using phmap::Hash.
        template <class T, class E = void>
        struct HashEq 
        {
#if defined(PHMAP_USE_ABSL_HASHEQ)
            using Hash = absl::Hash<T>;
            using Eq   = phmap::EqualTo<T>;
#else
            using Hash = phmap::Hash<T>;
            using Eq   = phmap::EqualTo<T>;
#endif
        };

        template <class T>
        using hash_default_hash = typename container_internal::HashEq<T>::Hash;

        template <class T>
        using hash_default_eq = typename container_internal::HashEq<T>::Eq;

        // type alias for std::allocator so we can forward declare without including other headers
        template <class T>  
        using Allocator = typename phmap::Allocator<T>;

        // type alias for std::pair so we can forward declare without including other headers
        template<class T1, class T2> 
        using Pair = typename phmap::Pair<T1, T2>;

    }  // namespace container_internal

    template <class T, 
              class Hash  = phmap::container_internal::hash_default_hash<T>,
              class Eq    = phmap::container_internal::hash_default_eq<T>,
              class Alloc = phmap::container_internal::Allocator<T>>  // alias for std::allocator
        class flat_hash_set;

    template <class K, class V,
              class Hash  = phmap::container_internal::hash_default_hash<K>,
              class Eq    = phmap::container_internal::hash_default_eq<K>,
              class Alloc = phmap::container_internal::Allocator<
                            phmap::container_internal::Pair<const K, V>>> // alias for std::allocator
        class flat_hash_map;
    
    template <class T, 
              class Hash  = phmap::container_internal::hash_default_hash<T>,
              class Eq    = phmap::container_internal::hash_default_eq<T>,
              class Alloc = phmap::container_internal::Allocator<T>> // alias for std::allocator
        class node_hash_set;

    template <class Key, class Value,
              class Hash  = phmap::container_internal::hash_default_hash<Key>,
              class Eq    = phmap::container_internal::hash_default_eq<Key>,
              class Alloc = phmap::container_internal::Allocator<
                            phmap::container_internal::Pair<const Key, Value>>> // alias for std::allocator
        class node_hash_map;

    template <class T,
              class Hash  = phmap::container_internal::hash_default_hash<T>,
              class Eq    = phmap::container_internal::hash_default_eq<T>,
              class Alloc = phmap::container_internal::Allocator<T>, // alias for std::allocator
              size_t N    = 4,                  // 2**N submaps
              class Mutex = phmap::NullMutex>   // use std::mutex to enable internal locks
        class parallel_flat_hash_set;

    template <class K, class V,
              class Hash  = phmap::container_internal::hash_default_hash<K>,
              class Eq    = phmap::container_internal::hash_default_eq<K>,
              class Alloc = phmap::container_internal::Allocator<
                            phmap::container_internal::Pair<const K, V>>, // alias for std::allocator
              size_t N    = 4,                  // 2**N submaps
              class Mutex = phmap::NullMutex>   // use std::mutex to enable internal locks
        class parallel_flat_hash_map;

    template <class T, 
              class Hash  = phmap::container_internal::hash_default_hash<T>,
              class Eq    = phmap::container_internal::hash_default_eq<T>,
              class Alloc = phmap::container_internal::Allocator<T>, // alias for std::allocator
              size_t N    = 4,                  // 2**N submaps
              class Mutex = phmap::NullMutex>   // use std::mutex to enable internal locks
        class parallel_node_hash_set;

    template <class Key, class Value,
              class Hash  = phmap::container_internal::hash_default_hash<Key>,
              class Eq    = phmap::container_internal::hash_default_eq<Key>,
              class Alloc = phmap::container_internal::Allocator<
                            phmap::container_internal::Pair<const Key, Value>>, // alias for std::allocator
              size_t N    = 4,                  // 2**N submaps
              class Mutex = phmap::NullMutex>   // use std::mutex to enable internal locks
        class parallel_node_hash_map;



}  // namespace phmap


#endif // phmap_fwd_decl_h_guard_