Analysis::Path::Ptr GetPluginsChain() const override { const Analysis::Path::Ptr parentPlugins = Parent->GetPluginsChain(); if (Subdata->GetOffset()) { return parentPlugins->Append(Subplugin); } return parentPlugins; }
Analysis::Path::Ptr GetPath() const override { const Analysis::Path::Ptr parentPath = Parent->GetPath(); if (std::size_t offset = Subdata->GetOffset()) { const String subPath = RawPath.Build(offset); return parentPath->Append(subPath); } return parentPath; }
Formats::Archived::File::Ptr FindFile(const Formats::Archived::Container& container, const Analysis::Path& path) const { Analysis::Path::Ptr resolved = Analysis::ParsePath(String(), Text::MODULE_SUBPATH_DELIMITER[0]); for (const Analysis::Path::Iterator::Ptr components = path.GetIterator(); components->IsValid(); components->Next()) { resolved = resolved->Append(components->Get()); const String filename = resolved->AsString(); Dbg("Trying '%1%'", filename); if (Formats::Archived::File::Ptr file = container.FindFile(filename)) { Dbg("Found"); return file; } if (!SupportDirectories) { break; } } return Formats::Archived::File::Ptr(); }