1 // =================================
 2 // Copyright (c) 2021 Seppo Laakko
 3 // Distributed under the MIT license
 4 // =================================
 5 
 6 #ifndef CMAJOR_SYMBOLS_RESOURCE_TABLE_INCLUDED
 7 #define CMAJOR_SYMBOLS_RESOURCE_TABLE_INCLUDED
 8 #include <cmajor/symbols/SymbolsApi.hpp>
 9 #include <soulng/util/BinaryReader.hpp>
10 #include <soulng/util/BinaryWriter.hpp>
11 #include <soulng/util/CodeFormatter.hpp>
12 #include <vector>
13 #include <set>
14 
15 namespace cmajor { namespace symbols {
16 
17 using soulng::util::BinaryReader;
18 using soulng::util::BinaryWriter;
19 using soulng::util::CodeFormatter;
20 
21 struct Resource 
22 {
23     enum class Type : int 
24     {
25         cursor=  0icon=  1bitmap=  2
26     };
27     Resource();
28     Resource(const std::u32string& name_Type type_const std::string& filePath_);
29     void Write(BinaryWriter& writerconst std::string& cmajorRootDir);
30     void Read(BinaryReader& readerconst std::string& cmajorRootDir);
31     void Dump(CodeFormatter& formatterint index);
32     std::u32string name;
33     Type type;
34     std::string filePath;
35 };
36 
37 std::string ResourceTypeStr(Resource::Type resourceType);
38 
39 class ResourceTable 
40 {
41 public:
42     bool Contains(const std::u32string& resourceName) const;
43     void AddResource(const Resource& resource);
44     const std::std::vector<Resource>&Resources() const{returnresources;}
45     void Write(BinaryWriter& writer);
46     void Read(BinaryReader& reader);
47     void Dump(CodeFormatter& formatter);
48 private:
49     std::vector<Resource> resources;
50     std::set<std::u32string> resourceNameSet;
51 };
52 
53 } } // namespace cmajor::symbols
54 
55 #endif // CMAJOR_SYMBOLS_RESOURCE_TABLE_INCLUDED