21#include <unordered_map>
23#include <miktex/Util/PathName>
24#include <miktex/Core/Session>
25#include <miktex/Core/equal_icase>
26#include <miktex/Core/hash_icase>
27#include <miktex/Core/less_icase_dos>
29#include <miktex/PackageManager/PackageManager>
33MPM_INTERNAL_BEGIN_NAMESPACE;
45 typedef std::unordered_map<std::string, MiKTeX::Packages::PackageInfo, MiKTeX::Core::hash_icase, MiKTeX::Core::equal_icase> PackageDefinitionTable;
98 return (*
this)[packageId];
121 PackageDataStore& Load();
123 bool LoadedAllPackageManifests()
const
125 return loadedAllPackageManifests;
135 void NeedPackageManifestsIni();
149 (*this)[packageInfo.
id] = packageInfo;
168 void SetTimeInstalled(
const std::string& packageId, std::time_t timeInstalled);
176 std::tuple<bool, MiKTeX::Packages::PackageInfo> TryGetPackage(
const std::string& packageId);
181 iterator(PackageDefinitionTable::iterator it) :
189 iterator& operator++()
194 bool operator==(
const iterator& rhs)
198 bool operator!=(
const iterator& rhs)
203 PackageDefinitionTable::iterator it;
222 struct InstalledFileInfo
224 unsigned long refCount = 0;
227 typedef std::unordered_map<std::string, InstalledFileInfo, hash_path, equal_path> InstalledFileInfoTable;
231 bool IsObsolete(
const std::string& packageId);
232 bool IsRemovable(
const std::string& packageId);
233 std::time_t GetTimeInstalled(
const std::string& packageId);
235 void IncrementFileRefCounts(
const std::vector<std::string>& files);
240 InstalledFileInfoTable installedFileInfoTable;
241 bool loadedAllPackageManifests =
false;
242 PackageDefinitionTable packageTable;
243 std::shared_ptr<MiKTeX::Core::Session> session = MIKTEX_SESSION();
244 std::unique_ptr<MiKTeX::Trace::TraceStream> trace_mpm;
245 std::unique_ptr<MiKTeX::Trace::TraceStream> trace_stopwatch;
248MPM_INTERNAL_END_NAMESPACE;
INI container.
Definition Cfg.h:60
Definition PackageDataStore.h:179
iterator end()
Gets an iterator referring to the past-the-end record.
Definition PackageDataStore.cpp:132
void LoadAllPackageManifests(const MiKTeX::Util::PathName &path, bool mustBeSigned)
Loads package records into the data store.
Definition PackageDataStore.cpp:56
void Clear()
Clears the contents of the data store.
Definition PackageDataStore.cpp:79
MiKTeX::Packages::PackageInfo GetPackage(const std::string &packageId)
Definition PackageDataStore.h:96
void DeclareObsolete(const std::string &packageId)
Definition PackageDataStore.cpp:114
void SetPackage(const MiKTeX::Packages::PackageInfo &packageInfo)
Definition PackageDataStore.h:147
unsigned long DecrementFileRefCount(const MiKTeX::Util::PathName &path)
Definition PackageDataStore.cpp:181
unsigned long GetFileRefCount(const MiKTeX::Util::PathName &path)
Definition PackageDataStore.cpp:170
std::size_t GetNumberOfInstalledPackages(bool userScope)
Definition PackageDataStore.cpp:509
void DefinePackage(const MiKTeX::Packages::PackageInfo &packageinfo)
Definition PackageDataStore.cpp:138
iterator begin()
Gets an iterator to the first record.
Definition PackageDataStore.cpp:126
void IncrementFileRefCounts(const std::string &packageId)
Instances of this class can be used to store path names.
Definition PathName.h:64
ConfigurationScope
MiKTeX configuration scope.
Definition Session.h:103
RepositoryReleaseState
Repository release state.
Definition RepositoryInfo.h:174
Package record.
Definition PackageInfo.h:34
std::string id
Package ID.
Definition PackageInfo.h:60