Mana
ProgramImage.h
Go to the documentation of this file.
1 
8 #pragma once
9 #include "common/Setup.h"
10 
11 #include <cstddef>
12 
13 #include <memory>
14 #include <string>
15 #include <string_view>
16 #include <unordered_map>
17 #include <vector>
18 
19 namespace mana
20 {
22  {
23  public:
24  ProgramImage() = default;
25 
26  // Initializes this instance from raw program bytes.
27  // Returns true if successful; false if parsing/validation fails.
28  // Store a diagnostic message on failure.
29  bool LoadProgram(const std::shared_ptr<const void> programBytes, size_t programSizeBytes);
30 
31  bool IsLoaded() const noexcept;
32  const std::string& GetLastError() const noexcept;
33 
34  // Actors
35  std::vector<std::string_view> GetActorNames() const;
36  bool HasActor(std::string_view actorFullName) const;
37 
38  std::vector<std::string_view> GetActorActionNames(std::string_view actorFullName) const;
39  bool HasActorAction(std::string_view actorFullName, std::string_view actionName) const;
40 
41  // Phantoms
42  bool HasPhantom(std::string_view phantomFullName) const;
43  std::vector<std::string_view> GetPhantomActionNames(std::string_view phantomFullName) const;
44  bool HasPhantomAction(std::string_view phantomFullName, std::string_view actionName) const;
45 
46  private:
47  struct SymbolIndex
48  {
49  std::vector<std::string_view> mActionNames;
50  };
51 
52  void Clear();
53 
54  // Internal parse entry point (split by concern).
55  bool ParseAndBuildIndex(const std::byte* data, size_t size);
56 
57  private:
58  std::shared_ptr<const void> mProgram;
59  size_t mProgramSize = 0;
60  std::string mLastError;
61  bool mLoaded = false;
62 
63  std::unordered_map<std::string_view, SymbolIndex> mActors;
64  std::unordered_map<std::string_view, SymbolIndex> mPhantoms;
65  std::vector<std::string_view> mActorNames;
66  std::vector<std::string_view> mPhantomNames;
67  };
68 }
69 
70 
71 #include "ProgramImage.inl"
Definition: ProgramImage.h:22
bool HasActorAction(std::string_view actorFullName, std::string_view actionName) const
Definition: ProgramImage.inl:75
std::vector< std::string_view > GetActorNames() const
Definition: ProgramImage.inl:53
bool IsLoaded() const noexcept
Definition: ProgramImage.inl:43
ProgramImage()=default
bool HasActor(std::string_view actorFullName) const
Definition: ProgramImage.inl:58
bool LoadProgram(const std::shared_ptr< const void > programBytes, size_t programSizeBytes)
Definition: ProgramImage.inl:17
std::vector< std::string_view > GetActorActionNames(std::string_view actorFullName) const
Definition: ProgramImage.inl:65
const std::string & GetLastError() const noexcept
Definition: ProgramImage.inl:48
bool HasPhantom(std::string_view phantomFullName) const
Definition: ProgramImage.inl:86
std::vector< std::string_view > GetPhantomActionNames(std::string_view phantomFullName) const
Definition: ProgramImage.inl:93
bool HasPhantomAction(std::string_view phantomFullName, std::string_view actionName) const
Definition: ProgramImage.inl:103
Definition: CodeBuffer.cpp:12