diff options
author | Clifford Wolf <clifford@clifford.at> | 2018-06-16 19:25:37 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2018-06-16 19:25:37 +0200 |
commit | 69e5bc5030f43d24683c677d93b8fc1e27b48972 (patch) | |
tree | 7972a603886abbdbe5b86c408c29180fb947ddc4 /ice40/chip.h | |
parent | ee06db3293738e308cb21ac10cae6265e9de4998 (diff) | |
download | nextpnr-69e5bc5030f43d24683c677d93b8fc1e27b48972.tar.gz nextpnr-69e5bc5030f43d24683c677d93b8fc1e27b48972.tar.bz2 nextpnr-69e5bc5030f43d24683c677d93b8fc1e27b48972.zip |
Progress with chipdb refactoring
Signed-off-by: Clifford Wolf <clifford@clifford.at>
Diffstat (limited to 'ice40/chip.h')
-rw-r--r-- | ice40/chip.h | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/ice40/chip.h b/ice40/chip.h index fc8b4419..f57f9983 100644 --- a/ice40/chip.h +++ b/ice40/chip.h @@ -76,19 +76,23 @@ template <typename T> struct RelPtr { int offset; - // RelPtr(T *ptr) : offset(reinterpret_cast<const char*>(ptr) - - // reinterpret_cast<const char*>(this)) {} + // RelPtr(const T *ptr) : offset(reinterpret_cast<const char*>(ptr) - + // reinterpret_cast<const char*>(this)) {} - T&operator*() { - return *reinterpret_cast<T*>(reinterpret_cast<char*>(this) + offset); + const T&operator[](size_t index) const { + return reinterpret_cast<const T*>(reinterpret_cast<const char*>(this) + offset)[index]; } - T*operator->() { - return reinterpret_cast<T*>(reinterpret_cast<char*>(this) + offset); + const T&operator*() const { + return *reinterpret_cast<const T*>(reinterpret_cast<const char*>(this) + offset); } - T*ptr() { - return reinterpret_cast<T*>(reinterpret_cast<char*>(this) + offset); + const T*operator->() const { + return reinterpret_cast<const T*>(reinterpret_cast<const char*>(this) + offset); + } + + const T*ptr() const { + return reinterpret_cast<const T*>(reinterpret_cast<const char*>(this) + offset); } }; @@ -165,9 +169,9 @@ struct ConfigBitPOD struct ConfigEntryPOD { - const char *name; - int num_bits; - ConfigBitPOD *bits; + RelPtr<char> name; + int32_t num_bits; + RelPtr<ConfigBitPOD> bits; } __attribute__((packed)); struct TileInfoPOD |