aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorgatecat <gatecat@ds0.me>2021-06-02 10:01:36 +0100
committergatecat <gatecat@ds0.me>2021-06-02 15:05:19 +0100
commitecc19c2c083f7e3ed7da95557731ded803d2cb1d (patch)
tree864780d38cb9a49b6846a0045ac93e1b4dfcc88d /common
parentf4fed62c05a9595e22a8ec54add5531225911741 (diff)
downloadnextpnr-ecc19c2c083f7e3ed7da95557731ded803d2cb1d.tar.gz
nextpnr-ecc19c2c083f7e3ed7da95557731ded803d2cb1d.tar.bz2
nextpnr-ecc19c2c083f7e3ed7da95557731ded803d2cb1d.zip
Using hashlib in arches
Signed-off-by: gatecat <gatecat@ds0.me>
Diffstat (limited to 'common')
-rw-r--r--common/base_arch.h12
-rw-r--r--common/hashlib.h9
2 files changed, 15 insertions, 6 deletions
diff --git a/common/base_arch.h b/common/base_arch.h
index fbafee99..c7d9f380 100644
--- a/common/base_arch.h
+++ b/common/base_arch.h
@@ -441,23 +441,23 @@ template <typename R> struct BaseArch : ArchAPI<R>
// --------------------------------------------------------------
// These structures are used to provide default implementations of bel/wire/pip binding. Arches might want to
- // replace them with their own, for example to use faster access structures than unordered_map. Arches might also
+ // replace them with their own, for example to use faster access structures than dict. Arches might also
// want to add extra checks around these functions
- std::unordered_map<BelId, CellInfo *> base_bel2cell;
- std::unordered_map<WireId, NetInfo *> base_wire2net;
- std::unordered_map<PipId, NetInfo *> base_pip2net;
+ dict<BelId, CellInfo *> base_bel2cell;
+ dict<WireId, NetInfo *> base_wire2net;
+ dict<PipId, NetInfo *> base_pip2net;
// For the default cell/bel bucket implementations
std::vector<IdString> cell_types;
std::vector<BelBucketId> bel_buckets;
- std::unordered_map<BelBucketId, std::vector<BelId>> bucket_bels;
+ dict<BelBucketId, std::vector<BelId>> bucket_bels;
// Arches that want to use the default cell types and bel buckets *must* call these functions in their constructor
bool cell_types_initialised = false;
bool bel_buckets_initialised = false;
void init_cell_types()
{
- std::unordered_set<IdString> bel_types;
+ pool<IdString> bel_types;
for (auto bel : this->getBels())
bel_types.insert(this->getBelType(bel));
std::copy(bel_types.begin(), bel_types.end(), std::back_inserter(cell_types));
diff --git a/common/hashlib.h b/common/hashlib.h
index 30fefc65..063df78f 100644
--- a/common/hashlib.h
+++ b/common/hashlib.h
@@ -74,6 +74,15 @@ template <> struct hash_ops<int64_t> : hash_int_ops
static inline unsigned int hash(int64_t a) { return mkhash((unsigned int)(a), (unsigned int)(a >> 32)); }
};
+template <> struct hash_ops<uint32_t> : hash_int_ops
+{
+ static inline unsigned int hash(uint32_t a) { return a; }
+};
+template <> struct hash_ops<uint64_t> : hash_int_ops
+{
+ static inline unsigned int hash(uint64_t a) { return mkhash((unsigned int)(a), (unsigned int)(a >> 32)); }
+};
+
template <> struct hash_ops<std::string>
{
static inline bool cmp(const std::string &a, const std::string &b) { return a == b; }