MCPcopy Create free account
hub / github.com/WolfireGames/overgrowth / InsertFileRange

Function InsertFileRange

Source/Scripting/scriptfile.cpp:240–284  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

238}
239
240static void InsertFileRange(FileRangeList& ranges,
241 unsigned start,
242 unsigned length,
243 const Path& path) {
244 FileRangeList::iterator parent_iter = GetFileRange(ranges, start);
245
246 // Split parent in half
247 IncludeFileRange& parent = (*parent_iter);
248 unsigned local_cut = start - parent.start;
249
250 if (parent.length - local_cut > 0) {
251 FileRangeList::iterator after_parent_iter = parent_iter;
252 after_parent_iter++;
253 ranges.insert(after_parent_iter,
254 IncludeFileRange(parent.start + local_cut,
255 parent.length - local_cut,
256 parent.offset,
257 parent.file_path));
258 parent.length = local_cut;
259 }
260
261 // Shift all elements to the right of the cut
262 {
263 FileRangeList::iterator shift_iter = parent_iter;
264 shift_iter++;
265 for (; shift_iter != ranges.end(); ++shift_iter) {
266 IncludeFileRange& range = (*shift_iter);
267 range.start += length;
268 range.offset += length - 1;
269 }
270 }
271
272 // Add new range in between parent halves
273 {
274 FileRangeList::iterator after_parent_iter = parent_iter;
275 after_parent_iter++;
276 ranges.insert(after_parent_iter,
277 IncludeFileRange(start, length, start - 1, path));
278 }
279
280 // Delete original parent half if length is now zero
281 if (parent.length == 0) {
282 ranges.erase(parent_iter);
283 }
284}
285
286void ScriptFile::ExpandIncludePaths() {
287 std::string& script = contents;

Callers 1

ExpandIncludePathsMethod · 0.85

Calls 5

GetFileRangeFunction · 0.85
IncludeFileRangeClass · 0.85
insertMethod · 0.45
endMethod · 0.45
eraseMethod · 0.45

Tested by

no test coverage detected