Ejemplo n.º 1
0
static Generic fromGenericAttribute(const GenericAttribute * attr) {
	{
		auto boolAttr = dynamic_cast<const BoolAttribute *>(attr);
		if(boolAttr != nullptr) {
			return Generic(boolAttr->get());
		}
	}
	{
		auto numberAttr = dynamic_cast<const _NumberAttribute<float> *>(attr);
		if(numberAttr != nullptr) {
			return Generic(numberAttr->get());
		}
	}
	{
		auto stringAttr = dynamic_cast<const _StringAttribute<std::string> *>(attr);
		if(stringAttr != nullptr) {
			return Generic(stringAttr->get());
		}
	}
	{
		auto listAttr = dynamic_cast<const GenericAttributeList *>(attr);
		if(listAttr != nullptr) {
			GenericArray genericArray;
			genericArray.reserve(listAttr->size());
			for(const auto & element : *listAttr) {
				genericArray.emplace_back(fromGenericAttribute(element.get()));
			}
			return Generic(std::move(genericArray));
		}
	}
	{
		auto mapAttr = dynamic_cast<const GenericAttributeMap *>(attr);
		if(mapAttr != nullptr) {
			GenericMap genericMap;
			genericMap.reserve(mapAttr->size());
			for(const auto & element : *mapAttr) {
				genericMap.emplace(element.first, fromGenericAttribute(element.second.get()));
			}
			return Generic(std::move(genericMap));
		}
	}
	return Generic();
}