GDevelop Core
Core library for developing platforms and tools compatible with GDevelop.
VariablesContainer.h
1 /*
2  * GDevelop Core
3  * Copyright 2008-2016 Florian Rival ([email protected]). All rights
4  * reserved. This project is released under the MIT License.
5  */
6 
7 #pragma once
8 #include <memory>
9 #include <vector>
10 #include "GDCore/Project/Variable.h"
11 #include "GDCore/String.h"
12 namespace gd {
13 class SerializerElement;
14 }
15 
16 namespace gd {
17 
28 class GD_CORE_API VariablesContainer {
29  public:
30  enum SourceType {
31  Unknown,
32  Global,
33  Scene,
34  Object,
35  Local,
36  ExtensionGlobal,
37  ExtensionScene,
38  Parameters,
39  Properties,
40  };
41 
43  VariablesContainer(const SourceType sourceType);
45  virtual ~VariablesContainer(){};
46 
47  VariablesContainer& operator=(const VariablesContainer& rhs);
48 
49  SourceType GetSourceType() const { return sourceType; }
50 
55 
59  bool Has(const gd::String& name) const;
60 
64  Variable& Get(const gd::String& name);
65 
69  const Variable& Get(const gd::String& name) const;
70 
75  Variable& Get(std::size_t index);
76 
81  const Variable& Get(std::size_t index) const;
82 
91  Variable& Insert(const gd::String& name,
92  const Variable& variable,
93  std::size_t position);
94 
98  std::size_t Count() const { return variables.size(); };
99 
103  const gd::String& GetNameAt(std::size_t index) const;
104 
109  std::size_t GetPosition(const gd::String& name) const;
110 
118  Variable& InsertNew(const gd::String& name, std::size_t position = -1);
119 
124  void Remove(const gd::String& name);
125 
129  void RemoveRecursively(const gd::Variable& variable);
130 
135  bool Rename(const gd::String& oldName, const gd::String& newName);
136 
140  void Swap(std::size_t firstVariableIndex, std::size_t secondVariableIndex);
141 
145  void Move(std::size_t oldIndex, std::size_t newIndex);
146 
150  inline void Clear() { variables.clear(); }
151 
155  void ForEachVariableMatchingSearch(const gd::String& search, std::function<void(const gd::String& name, const gd::Variable& variable)> fn) const;
157 
162 
165  void SerializeTo(SerializerElement& element) const;
166 
170  void UnserializeFrom(const SerializerElement& element);
171 
176  VariablesContainer& ResetPersistentUuid();
177 
182  VariablesContainer& ClearPersistentUuid();
183 
188  const gd::String& GetPersistentUuid() const { return persistentUuid; };
190 
191  private:
192  SourceType sourceType = Unknown;
193  std::vector<std::pair<gd::String, std::shared_ptr<gd::Variable>>> variables;
194  mutable gd::String persistentUuid;
196  static gd::Variable badVariable;
197  static gd::String badName;
198 
203  void Init(const VariablesContainer& other);
204 };
205 
206 } // namespace gd
Represent a layout ( also called a scene ) of a project.
Definition: Layout.h:40
Represent an object of a platform.
Definition: Object.h:37
A generic container that can represent a value ( containing a string, double, bool or int),...
Definition: SerializerElement.h:37
String represents an UTF8 encoded string.
Definition: String.h:33
Defines a variable which can be used by an object, a layout or a project.
Definition: Variable.h:29
Class defining a container for gd::Variable.
Definition: VariablesContainer.h:28
const gd::String & GetPersistentUuid() const
Get the persistent UUID used to recognize the same variables between serialization.
Definition: VariablesContainer.h:188
void Clear()
Clear all variables of the container.
Definition: VariablesContainer.h:150
std::size_t Count() const
Return the number of variables.
Definition: VariablesContainer.h:98
Definition: CommonTools.h:24