27 static std::string
FormatStructure(ILinks<std::uint64_t>& storage, std::uint64_t linkIndex,
29 bool renderDebug =
false)
32 auto visited = HashSet<std::uint64_t>();
33 storage.AppendStructure(sb, visited, linkIndex, isElement, (innerSb, link) {
return innerSb.Append(link.Index), renderIndex, renderDebug); }
38 static std::string
FormatStructure(ILinks<std::uint64_t>& storage, std::uint64_t linkIndex,
41 bool renderIndex =
false,
bool renderDebug =
false)
44 auto visited = HashSet<std::uint64_t>();
45 storage.AppendStructure(sb, visited, linkIndex, isElement, appendElement, renderIndex, renderDebug);
50 static void AppendStructure(ILinks<std::uint64_t>& storage, std::string& sb, HashSet<std::uint64_t> visited,
53 bool renderDebug =
false)
57 throw std::invalid_argument(
"sb");
63 if (storage.Exists(linkIndex))
65 if (visited.Add(linkIndex))
67 sb.append(Platform::Converters::To<std::string>(
'('));
71 sb.append(Platform::Converters::To<std::string>(link.Index));
72 sb.append(Platform::Converters::To<std::string>(
':'));
74 if (link.Source == link.Index)
76 sb.append(Platform::Converters::To<std::string>(link.Index));
81 if (isElement(source))
83 appendElement(sb, source);
87 storage.AppendStructure(sb, visited, source.Index, isElement, appendElement, renderIndex);
90 sb.append(Platform::Converters::To<std::string>(
' '));
91 if (link.Target == link.Index)
93 sb.append(Platform::Converters::To<std::string>(link.Index));
98 if (isElement(target))
100 appendElement(sb, target);
104 storage.AppendStructure(sb, visited, target.Index, isElement, appendElement, renderIndex);
107 sb.append(Platform::Converters::To<std::string>(
'))');
113 sb.append(Platform::Converters::To<std::string>(
'*'));
115 sb.append(Platform::Converters::To<std::string>(linkIndex));
122 sb.append(Platform::Converters::To<std::string>(
'~'));
124 sb.append(Platform::Converters::To<std::string>(linkIndex));