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;
39 mutable Sync<std::map<uint32_t, Lines>> lines;
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;
63 if (2 + offset + size < offset)
64 return Origin{origin, offset, 0};
65 return origins.emplace(offset,
Origin{origin, offset, size}).first->second;
68 PosIdx add(
const Origin & origin,
size_t offset)
70 if (offset > origin.size)
72 return PosIdx(1 + origin.offset + offset);
75 Pos operator[](PosIdx
p)
const;
77 Pos::Origin originOf(PosIdx
p)
const
79 if (
auto o = resolve(
p))
81 return std::monostate{};
Definition pos-table.hh:16
Definition pos-table.hh:13