24 Origin(Pos::Origin origin, uint32_t offset,
size_t size):
25 offset(offset), origin(origin), size(size)
29 const Pos::Origin origin;
32 uint32_t offsetOf(
PosIdx p)
const
34 return p.id - 1 - offset;
39 using Lines = std::vector<uint32_t>;
41 std::map<uint32_t, Origin> origins;
49 const auto idx = p.id - 1;
53 const auto pastOrigin = origins.upper_bound(idx);
54 return &std::prev(pastOrigin)->second;
58 Origin addOrigin(Pos::Origin origin,
size_t size)
61 if (
auto it = origins.rbegin(); it != origins.rend())
62 offset = it->first + it->second.size;
65 if (2 + offset + size < offset)
66 return Origin{origin, offset, 0};
67 return origins.emplace(offset, Origin{origin, offset, size}).first->second;
70 PosIdx add(
const Origin & origin,
size_t offset)
72 if (offset > origin.size)
74 return PosIdx(1 + origin.offset + offset);
77 Pos operator[](PosIdx p)
const;
79 Pos::Origin originOf(PosIdx p)
const
81 if (
auto o = resolve(p))
83 return std::monostate{};
Definition pos-table.hh:19
Definition pos-table.hh:16