nextpnr/common/relptr.h
gatecat 23413a4d12 Fix compiler warnings introduced by -Wextra
Signed-off-by: gatecat <gatecat@ds0.me>
2021-02-25 15:15:25 +00:00

44 lines
1.2 KiB
C++

// This is intended to be included inside arch.h only.
template <typename T> struct RelPtr
{
int32_t offset;
const T *get() const { return reinterpret_cast<const T *>(reinterpret_cast<const char *>(this) + offset); }
const T &operator[](size_t index) const { return get()[index]; }
const T &operator*() const { return *(get()); }
const T *operator->() const { return get(); }
RelPtr(const RelPtr &) = delete;
RelPtr &operator=(const RelPtr &) = delete;
};
NPNR_PACKED_STRUCT(template <typename T> struct RelSlice {
int32_t offset;
uint32_t length;
const T *get() const { return reinterpret_cast<const T *>(reinterpret_cast<const char *>(this) + offset); }
const T &operator[](size_t index) const
{
NPNR_ASSERT(index < length);
return get()[index];
}
const T *begin() const { return get(); }
const T *end() const { return get() + length; }
size_t size() const { return length; }
ptrdiff_t ssize() const { return length; }
const T &operator*() const { return *(get()); }
const T *operator->() const { return get(); }
RelSlice(const RelSlice &) = delete;
RelSlice &operator=(const RelSlice &) = delete;
});