OdbDesignLib
OdbDesign ODB++ Parsing Library
 
Loading...
Searching...
No Matches
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#include <shared_mutex>
11
12
13namespace Odb::Lib::App
14{
15 class ODBDESIGN_EXPORT DesignCache
16 {
17 public:
18 DesignCache(std::string directory);
20
21 std::shared_ptr<ProductModel::Design> GetDesign(const std::string& designName);
22 std::shared_ptr<FileModel::Design::FileArchive> GetFileArchive(const std::string& designName);
23
24 void AddFileArchive(const std::string& designName, std::shared_ptr<FileModel::Design::FileArchive> fileArchive, bool save);
25
26 bool SaveFileArchive(const std::string& designName);
27
28 std::vector<std::string> getLoadedDesignNames(const std::string& filter = "") const;
29 std::vector<std::string> getLoadedFileArchiveNames(const std::string& filter = "") const;
30 std::vector<std::string> getUnloadedDesignNames(const std::string& filter = "") const;
31
32 int loadAllFileArchives(bool stopOnError);
33 int loadAllDesigns(bool stopOnError);
34 int loadFileArchives(const Utils::StringVector& names);
35 int loadDesigns(const Utils::StringVector& names);
36
37 void setDirectory(const std::string& directory);
38 std::string getDirectory() const;
39
40 void Clear();
41
42 void ensureDirectoryExists() const;
43
44 private:
45 std::string m_directory;
46
47 FileModel::Design::FileArchive::StringMap m_fileArchivesByName;
48 ProductModel::Design::StringMap m_designsByName;
49
50 // Protects m_fileArchivesByName, m_designsByName, and m_directory
51 // Use shared_lock for reads, unique_lock for writes
52 mutable std::shared_mutex m_cacheMutex;
53
54 std::shared_ptr<ProductModel::Design> LoadDesign(const std::string& designName);
55 std::shared_ptr<FileModel::Design::FileArchive> LoadFileArchive(const std::string& designName);
56
57 constexpr inline static const char* DESIGN_EXTENSIONS[] = { "zip", "tgz", "tar.gz", "tar", "gzip" , "gz" };
58
59 };
60}