Merge pull request #629 from litghost/move_hash_selection_to_header

Moving hash map/set type selection to header.
This commit is contained in:
gatecat 2021-03-18 08:14:16 +00:00 committed by GitHub
commit b8678e778e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 8 deletions

48
common/hash_table.h Normal file
View File

@ -0,0 +1,48 @@
/*
* nextpnr -- Next Generation Place and Route
*
* Copyright (C) 2021 Symbiflow Authors
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
*/
#ifndef HASH_TABLE_H
#define HASH_TABLE_H
#if defined(NPNR_DISABLE_THREADS)
#include <unordered_map>
#include <unordered_set>
#else
#include <absl/container/flat_hash_map.h>
#include <absl/container/flat_hash_set.h>
#endif
#include "nextpnr_namespaces.h"
NEXTPNR_NAMESPACE_BEGIN
namespace HashTables {
#if defined(NPNR_DISABLE_THREADS)
template <typename Key, typename Value> using HashMap = std::unordered_map<Key, Value>;
template <typename Value> using HashSet = std::unordered_set<Value>;
#else
template <typename Key, typename Value> using HashMap = absl::flat_hash_map<Key, Value>;
template <typename Value> using HashSet = absl::flat_hash_set<Value>;
#endif
}; // namespace HashTables
NEXTPNR_NAMESPACE_END
#endif /* HASH_TABLE_H */

View File

@ -27,15 +27,15 @@
*/ */
#include "router2.h" #include "router2.h"
#if !defined(NPNR_DISABLE_THREADS)
#include <absl/container/flat_hash_map.h>
#endif
#include <algorithm> #include <algorithm>
#include <boost/container/flat_map.hpp> #include <boost/container/flat_map.hpp>
#include <chrono> #include <chrono>
#include <deque> #include <deque>
#include <fstream> #include <fstream>
#include <queue> #include <queue>
#include "hash_table.h"
#include "log.h" #include "log.h"
#include "nextpnr.h" #include "nextpnr.h"
#include "router1.h" #include "router1.h"
@ -193,11 +193,7 @@ struct Router2
} }
} }
#if defined(NPNR_DISABLE_THREADS) HashTables::HashMap<WireId, int> wire_to_idx;
std::unordered_map<WireId, int> wire_to_idx;
#else
absl::flat_hash_map<WireId, int> wire_to_idx;
#endif
std::vector<PerWireData> flat_wires; std::vector<PerWireData> flat_wires;
PerWireData &wire_data(WireId w) { return flat_wires[wire_to_idx.at(w)]; } PerWireData &wire_data(WireId w) { return flat_wires[wire_to_idx.at(w)]; }