// Copyright 2022 The Manifold Authors. // // 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 // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #pragma once #include <stdint.h> #include <atomic> #include "./utils.h" #include "./vec.h" namespace { Uint64; hash_fun_t; inline constexpr Uint64 kOpen = …; template <typename T> T AtomicCAS(T& target, T compare, T val) { … } template <typename T> void AtomicStore(T& target, T val) { … } template <typename T> T AtomicLoad(const T& target) { … } // https://stackoverflow.com/questions/664014/what-integer-hash-function-are-good-that-accepts-an-integer-hash-key inline Uint64 hash64bit(Uint64 x) { … } } // namespace namespace manifold { template <typename V, hash_fun_t H = hash64bit> class HashTableD { … }; template <typename V, hash_fun_t H = hash64bit> class HashTable { … }; } // namespace manifold