OdbDesignLib
OdbDesign ODB++ Parsing Library
DesignCache.h
1 #pragma once
2 
3 #include "../FileModel/Design/FileArchive.h"
4 #include "../ProductModel/Design.h"
5 #include "../odbdesign_export.h"
6 #include "StringVector.h"
7 #include <memory>
8 #include <vector>
9 #include <string>
10 
11 
12 namespace Odb::Lib::App
13 {
14  class ODBDESIGN_EXPORT DesignCache
15  {
16  public:
17  DesignCache(std::string directory);
18  ~DesignCache();
19 
20  std::shared_ptr<ProductModel::Design> GetDesign(const std::string& designName);
21  std::shared_ptr<FileModel::Design::FileArchive> GetFileArchive(const std::string& designName);
22 
23  void AddFileArchive(const std::string& designName, std::shared_ptr<FileModel::Design::FileArchive> fileArchive, bool save);
24 
25  bool SaveFileArchive(const std::string& designName);
26 
27  std::vector<std::string> getLoadedDesignNames(const std::string& filter = "") const;
28  std::vector<std::string> getLoadedFileArchiveNames(const std::string& filter = "") const;
29  std::vector<std::string> getUnloadedDesignNames(const std::string& filter = "") const;
30 
31  int loadAllFileArchives(bool stopOnError);
32  int loadAllDesigns(bool stopOnError);
33  int loadFileArchives(const Utils::StringVector& names);
34  int loadDesigns(const Utils::StringVector& names);
35 
36  void setDirectory(const std::string& directory);
37  const std::string& getDirectory() const;
38 
39  void Clear();
40 
41  private:
42  std::string m_directory;
43 
44  FileModel::Design::FileArchive::StringMap m_fileArchivesByName;
45  ProductModel::Design::StringMap m_designsByName;
46 
47  std::shared_ptr<ProductModel::Design> LoadDesign(const std::string& designName);
48  std::shared_ptr<FileModel::Design::FileArchive> LoadFileArchive(const std::string& designName);
49 
50  constexpr inline static const char* DESIGN_EXTENSIONS[] = { "zip", "tgz", "tar.gz", "tar", "gzip" , "gz" };
51 
52  };
53 }