aboutsummaryrefslogtreecommitdiffstats
path: root/common/nextpnr.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/nextpnr.h')
-rw-r--r--common/nextpnr.h39
1 files changed, 37 insertions, 2 deletions
diff --git a/common/nextpnr.h b/common/nextpnr.h
index fc49300e..02201463 100644
--- a/common/nextpnr.h
+++ b/common/nextpnr.h
@@ -286,6 +286,41 @@ struct PipMap
PlaceStrength strength = STRENGTH_NONE;
};
+struct Property
+{
+ bool is_string;
+
+ std::string str;
+ int num;
+
+ std::string::iterator begin() { return str.begin(); }
+ std::string::iterator end() { return str.end(); }
+
+ bool isString() const { return is_string; }
+
+ void setNumber(int val) { is_string = false; num = val; str = std::to_string(val); }
+ void setString(std::string val) { is_string = true; str = val; }
+
+ const char * c_str() const { return str.c_str(); }
+ operator std::string () const { return str; }
+
+ bool operator==(const std::string other) const
+ {
+ return str == other;
+ }
+ bool operator!=(const std::string other) const
+ {
+ return str != other;
+ }
+
+ Property& operator=(std::string other)
+ {
+ is_string = true;
+ str = other;
+ return *this;
+ }
+};
+
struct ClockConstraint;
struct NetInfo : ArchNetInfo
@@ -295,7 +330,7 @@ struct NetInfo : ArchNetInfo
PortRef driver;
std::vector<PortRef> users;
- std::unordered_map<IdString, std::string> attrs;
+ std::unordered_map<IdString, Property> attrs;
// wire -> uphill_pip
std::unordered_map<WireId, PipMap> wires;
@@ -328,7 +363,7 @@ struct CellInfo : ArchCellInfo
int32_t udata;
std::unordered_map<IdString, PortInfo> ports;
- std::unordered_map<IdString, std::string> attrs, params;
+ std::unordered_map<IdString, Property> attrs, params;
BelId bel;
PlaceStrength belStrength = STRENGTH_NONE;