51 for (
const auto& dataPtr : l->elements)
53 childrenNavigators.push_back(FromAronDTO(dataPtr, path.withIndex(i++)));
59 for (
const auto& dataPtr : n)
70 for (
const auto&
nav : childrenNavigators)
99 return *
this == *other;
109 ret->addElement(val->cloneAsVariant());
122 return std::make_shared<List>(
aron);
128 return navigator ? navigator->toAronListDTO() :
nullptr;
135 auto dict = std::make_shared<Dict>();
137 dict->addElement(
"data", copy_this);
150 if (i >
aron->elements.size())
154 "Cannot set a listelement at index " + std::to_string(i) +
155 " because this list has size " +
156 std::to_string(
aron->elements.size()));
159 if (i ==
aron->elements.size())
161 childrenNavigators.push_back(n);
164 aron->elements.push_back(n->toAronDTO());
168 aron->elements.push_back(
nullptr);
173 childrenNavigators[i] = n;
176 aron->elements[i] = (n->toAronDTO());
180 aron->elements[i] =
nullptr;
188 return i < childrenNavigators.size();
194 if (i >= childrenNavigators.size())
198 "The index is out of bounds (size = " +
199 std::to_string(childrenNavigators.size()) +
")",
203 return childrenNavigators[i];
206 std::vector<VariantPtr>
209 return childrenNavigators;
216 i = std::min((
unsigned int)childrenNavigators.size() - 1, i);
217 childrenNavigators.erase(childrenNavigators.begin() + i);
218 aron->elements.erase(
aron->elements.begin() + i);
224 childrenNavigators.clear();
225 aron->elements.clear();
244 return "armarx::aron::data::List";
268 for (
const auto&
nav : childrenNavigators)
270 auto childTypeNav = listTypeNav->getAcceptedType();
273 if (childTypeNav && childTypeNav->getMaybe() == type::Maybe::NONE)
279 if (!
nav->fullfillsType(childTypeNav))
291 for (
const auto& childTypeNav : tupleTypeNav->getAcceptedTypes())
301 if (childTypeNav && childTypeNav->getMaybe() == type::Maybe::NONE)
307 if (!childNav->fullfillsType(tupleTypeNav->getAcceptedType(i)))
322 auto firstChildTypeNav = pairTypeNav->getFirstAcceptedType();
323 if (!childrenNavigators[0])
325 if (firstChildTypeNav && firstChildTypeNav->getMaybe() == type::Maybe::NONE)
330 auto secondChildTypeNav = pairTypeNav->getSecondAcceptedType();
331 if (!childrenNavigators[1])
333 if (secondChildTypeNav && secondChildTypeNav->getMaybe() == type::Maybe::NONE)
338 return childrenNavigators[0]->fullfillsType(firstChildTypeNav) &&
339 childrenNavigators[1]->fullfillsType(secondChildTypeNav);
347 std::vector<VariantPtr>
350 return childrenNavigators;
356 return childrenNavigators.size();
362 if (!
path.hasElement())
366 "Could not navigate without a valid path. The path was empty.");
368 unsigned int i = std::stoi(
path.getFirstElement());
373 "Could not find an element of a path.",
378 if (
path.size() == 1)
380 return childrenNavigators.at(i);
384 Path next =
path.withDetachedFirstElement();
385 if (!childrenNavigators.at(i))
389 "Could not navigate into a NULL member. Seems like the "
390 "member is optional and not set.",
393 return childrenNavigators.at(i)->navigateAbsolute(next);
size_t childrenSize() const override
get the children size of a data variant
std::string getShortName() const override
get a short str representation of this variant
List(const Path &path=Path())
VariantPtr getElement(unsigned int) const
bool hasElement(unsigned int) const
std::vector< VariantPtr > getElements() const
void addElement(const VariantPtr &)
type::VariantPtr recalculateType() const override
recalculate the type of a data variant. Please not tha the mapping ist NOT bijective,...
std::string getFullName() const override
get the full str representation of this variant
void removeElement(unsigned int)
static PointerType FromAronListDTO(const data::dto::ListPtr &aron)
data::dto::ListPtr toAronListDTO() const
bool operator==(const List &) const override
void setElement(unsigned int, const VariantPtr &)
VariantPtr navigateAbsolute(const Path &path) const override
naviate absolute
bool fullfillsType(const type::VariantPtr &) const override
checks, if the current data variant fullfills the given type
static data::dto::ListPtr ToAronListDTO(const PointerType &navigator)
std::vector< VariantPtr > getChildren() const override
get the children of a data variant
DictPtr getAsDict() const
static VariantPtr FromAronDTO(const data::dto::GenericDataPtr &, const Path &=Path())
create a variant from a dto object
Path getPath() const
get the path
data::dto::GenericDataPtr toAronDTO() const override
std::optional< float > getImportance() const override
AronDataType::PointerType aron
virtual PointerType clone() const
A base class for aron exceptions.
The NotImplementedYetException class.
The ValueNotValidException class.
static std::shared_ptr< List > DynamicCastAndCheck(const VariantPtr &n)
A convenience header to include all aron files (full include, not forward declared)
std::shared_ptr< Dict > DictPtr
std::shared_ptr< List > ListPtr
std::shared_ptr< Variant > VariantPtr
A convenience header to include all aron files (full include, not forward declared)
std::shared_ptr< Variant > VariantPtr