GDevelop Core
Core library for developing platforms and tools compatible with GDevelop.
VariablesContainersList.h
1 #pragma once
2 #include <functional>
3 #include <vector>
4 
5 namespace gd {
6 class String;
7 class Project;
8 class Layout;
9 class VariablesContainer;
10 class Variable;
11 class EventsFunctionsExtension;
12 class EventsBasedBehavior;
13 class EventsBasedObject;
14 class EventsFunction;
15 } // namespace gd
16 
17 namespace gd {
18 
29 class GD_CORE_API VariablesContainersList {
30 public:
31  virtual ~VariablesContainersList(){};
32 
34  MakeNewVariablesContainersListForProjectAndLayout(const gd::Project &project,
35  const gd::Layout &layout);
36 
38  MakeNewVariablesContainersListForProject(const gd::Project &project);
39 
41  MakeNewVariablesContainersListForEventsFunctionsExtension(
42  const gd::EventsFunctionsExtension &extension);
43 
45  MakeNewVariablesContainersListForFreeEventsFunction(
46  const gd::EventsFunctionsExtension &extension,
47  const gd::EventsFunction &eventsFunction,
48  gd::VariablesContainer &parameterVariablesContainer);
49 
51  MakeNewVariablesContainersListForBehaviorEventsFunction(
52  const gd::EventsFunctionsExtension &extension,
53  const gd::EventsBasedBehavior &eventsBasedBehavior,
54  const gd::EventsFunction &eventsFunction,
55  gd::VariablesContainer &parameterVariablesContainer,
56  gd::VariablesContainer &propertyVariablesContainer);
57 
59  MakeNewVariablesContainersListForObjectEventsFunction(
60  const gd::EventsFunctionsExtension &extension,
61  const gd::EventsBasedObject &eventsBasedObject,
62  const gd::EventsFunction &eventsFunction,
63  gd::VariablesContainer &parameterVariablesContainer,
64  gd::VariablesContainer &propertyVariablesContainer);
65 
66  static VariablesContainersList MakeNewVariablesContainersListPushing(
67  const VariablesContainersList &variablesContainersList,
68  const gd::VariablesContainer &variablesContainer);
69 
73  static VariablesContainersList MakeNewEmptyVariablesContainersList();
74 
78  bool Has(const gd::String &name) const;
79 
83  const Variable &Get(const gd::String &name) const;
84 
88  bool
89  HasVariablesContainer(const gd::VariablesContainer &variablesContainer) const;
90 
91  // TODO: Rename GetTopMostVariablesContainer and
92  // GetBottomMostVariablesContainer to give a clearer access to segments of the
93  // container list. For instance, a project tree segment and an event tree
94  // segment.
95 
101  if (variablesContainers.empty())
102  return nullptr;
103  return variablesContainers.front();
104  };
105 
112  if (variablesContainers.empty())
113  return nullptr;
114  return variablesContainers.at(firstLocalVariableContainerIndex - 1);
115  }
116 
120  const VariablesContainer &
121  GetVariablesContainerFromVariableOrPropertyOrParameterName(const gd::String &variableName) const;
122 
126  const VariablesContainer &
127  GetVariablesContainerFromVariableOrPropertyName(const gd::String &variableName) const;
128 
132  const VariablesContainer &
133  GetVariablesContainerFromVariableNameOnly(const gd::String &variableName) const;
134 
138  std::size_t GetVariablesContainerPositionFromVariableName(
139  const gd::String &variableName) const;
140 
144  std::size_t GetLocalVariablesContainerPosition(
145  const gd::VariablesContainer &localVariableContainer) const;
146 
153  const gd::VariablesContainer &GetVariablesContainer(std::size_t index) const {
154  return *variablesContainers.at(index);
155  }
156 
160  std::size_t GetVariablesContainersCount() const {
161  return variablesContainers.size();
162  }
163 
168  void ForEachVariableMatchingSearch(
169  const gd::String &search,
170  std::function<void(const gd::String &name, const gd::Variable &variable)>
171  fn) const;
172 
176  void Push(const gd::VariablesContainer &variablesContainer) {
177  variablesContainers.push_back(&variablesContainer);
178  };
179 
183  void Pop() { variablesContainers.pop_back(); };
184 
187  VariablesContainersList() : firstLocalVariableContainerIndex(0){};
188 
189 private:
190  std::vector<const gd::VariablesContainer *> variablesContainers;
191  std::size_t firstLocalVariableContainerIndex;
192  static Variable badVariable;
193  static VariablesContainer badVariablesContainer;
194 };
195 
196 } // namespace gd
Represents a behavior that is implemented with events.
Definition: EventsBasedBehavior.h:31
Represents an object that is implemented with events.
Definition: EventsBasedObject.h:30
Events that can be generated as a stand-alone function, and used as a condition, action or expression...
Definition: EventsFunction.h:38
Hold a list of Events Functions (gd::EventsFunction) and Events Based Behaviors.
Definition: EventsFunctionsExtension.h:39
Represent a layout ( also called a scene ) of a project.
Definition: Layout.h:40
Base class representing a project (game), including all resources, scenes, objects,...
Definition: Project.h:50
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
A list of variables containers, useful for accessing variables in a scoped way.
Definition: VariablesContainersList.h:29
const VariablesContainer * GetTopMostVariablesContainer() const
Avoid using apart when a scope must be forced.
Definition: VariablesContainersList.h:100
VariablesContainersList()
Definition: VariablesContainersList.h:187
std::size_t GetVariablesContainersCount() const
Return the number variable containers.
Definition: VariablesContainersList.h:160
const gd::VariablesContainer & GetVariablesContainer(std::size_t index) const
Get the variable container at the specified index in the list.
Definition: VariablesContainersList.h:153
const VariablesContainer * GetBottomMostVariablesContainer() const
Avoid using apart when a scope must be forced.
Definition: VariablesContainersList.h:111
void Push(const gd::VariablesContainer &variablesContainer)
Push a new variables container to the context.
Definition: VariablesContainersList.h:176
void Pop()
Pop a variables container from the context.
Definition: VariablesContainersList.h:183
Definition: CommonTools.h:24