MiKTeX 26.5-next
A scalable TeX distribution
Loading...
Searching...
No Matches
PackageDataStore.h
Go to the documentation of this file.
1
13
14#pragma once
15
16#include <ctime>
17
18#include <memory>
19#include <string>
20#include <tuple>
21#include <unordered_map>
22
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>
28
29#include <miktex/PackageManager/PackageManager>
30
31#include "ComboCfg.h"
32
33MPM_INTERNAL_BEGIN_NAMESPACE;
34
43class PackageDataStore
44{
45 typedef std::unordered_map<std::string, MiKTeX::Packages::PackageInfo, MiKTeX::Core::hash_icase, MiKTeX::Core::equal_icase> PackageDefinitionTable;
46
47public:
48
49 PackageDataStore();
50
54 void Clear();
55
60 void DeclareObsolete(const std::string& packageId);
61
67 unsigned long DecrementFileRefCount(const MiKTeX::Util::PathName& path);
68
73 void DefinePackage(const MiKTeX::Packages::PackageInfo& packageinfo);
74
81 std::size_t GetNumberOfInstalledPackages(bool userScope);
82
88 unsigned long GetFileRefCount(const MiKTeX::Util::PathName& path);
89
96 MiKTeX::Packages::PackageInfo GetPackage(const std::string& packageId)
97 {
98 return (*this)[packageId];
99 }
100
105 void IncrementFileRefCounts(const std::string& packageId);
106
119 void LoadAllPackageManifests(const MiKTeX::Util::PathName& path, bool mustBeSigned);
120
121 PackageDataStore& Load();
122
123 bool LoadedAllPackageManifests() const
124 {
125 return loadedAllPackageManifests;
126 }
127
135 void NeedPackageManifestsIni();
136
141 void SaveVarData();
142
148 {
149 (*this)[packageInfo.id] = packageInfo;
150 }
151
157 void SetReleaseState(const std::string& packageId, MiKTeX::Packages::RepositoryReleaseState releaseState);
158
168 void SetTimeInstalled(const std::string& packageId, std::time_t timeInstalled);
169
176 std::tuple<bool, MiKTeX::Packages::PackageInfo> TryGetPackage(const std::string& packageId);
177
178 class iterator
179 {
180 public:
181 iterator(PackageDefinitionTable::iterator it) :
182 it(it)
183 {
184 }
186 {
187 return it->second;
188 }
189 iterator& operator++()
190 {
191 it++;
192 return *this;
193 }
194 bool operator==(const iterator& rhs)
195 {
196 return it == rhs.it;
197 }
198 bool operator!=(const iterator& rhs)
199 {
200 return it != rhs.it;
201 }
202 private:
203 PackageDefinitionTable::iterator it;
204 };
205
211 iterator begin();
212
218 iterator end();
219
220private:
221
222 struct InstalledFileInfo
223 {
224 unsigned long refCount = 0;
225 };
226
227 typedef std::unordered_map<std::string, InstalledFileInfo, hash_path, equal_path> InstalledFileInfoTable;
228
229 MiKTeX::Packages::PackageInfo& operator[](const std::string& packageId);
230 MiKTeX::Packages::RepositoryReleaseState GetReleaseState(const std::string& packageId);
231 bool IsObsolete(const std::string& packageId);
232 bool IsRemovable(const std::string& packageId);
233 std::time_t GetTimeInstalled(const std::string& packageId);
234 std::time_t GetTimeInstalled(const std::string& packageId, MiKTeX::Core::ConfigurationScope scope);
235 void IncrementFileRefCounts(const std::vector<std::string>& files);
236 void Load(MiKTeX::Core::Cfg& cfg);
237 void LoadVarData();
238
239 ComboCfg comboCfg;
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;
246};
247
248MPM_INTERNAL_END_NAMESPACE;
INI container.
Definition Cfg.h:60
Definition ComboCfg.h:36
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