21 Origin(Pos::Origin origin, uint32_t offset,
size_t size):
22 offset(offset), origin(origin), size(size)
26 const Pos::Origin origin;
29 uint32_t offsetOf(
PosIdx p)
const
31 return p.id - 1 - offset;
36 using Lines = std::vector<uint32_t>;
38 std::map<uint32_t, Origin> origins;
46 const auto idx = p.id - 1;
50 const auto pastOrigin = origins.upper_bound(idx);
51 return &std::prev(pastOrigin)->second;
55 Origin addOrigin(Pos::Origin origin,
size_t size)
58 if (
auto it = origins.rbegin(); it != origins.rend())
59 offset = it->first + it->second.size;
62 if (2 + offset + size < offset)
63 return Origin{origin, offset, 0};
64 return origins.emplace(offset, Origin{origin, offset, size}).first->second;
67 PosIdx add(
const Origin & origin,
size_t offset)
69 if (offset > origin.size)
71 return PosIdx(1 + origin.offset + offset);
74 Pos operator[](PosIdx p)
const;
76 Pos::Origin originOf(PosIdx p)
const
78 if (
auto o = resolve(p))
80 return std::monostate{};
Definition pos-table.hh:16
Definition pos-table.hh:13