예제 #1
0
void CTypeCollector::Collect( XmlSchemaSubitemGroup* group, Xsd2CppContext& ctx)
{
	if(group->Category() != EnumSubitemCategory::sequence)
	{
		throw std::exception("when as a schema for config, only sequence support!");
	}

	IEnumerator<XmlSchemaSubitem*>* pEnumItem = group->Subitems.Enum();
	if(pEnumItem)
	{
		while(pEnumItem->MoveNext())
		{
			if(pEnumItem->Current()->Category() == EnumSubitemCategory::element)
			{
				Collect(static_cast<XmlSchemaElement*>(pEnumItem->Current()), ctx);
			}
			else if(pEnumItem->Current()->Category() == EnumSubitemCategory::sequence)
			{
				Collect(static_cast<XmlSchemaSubitemGroup*>(pEnumItem->Current()), ctx);
			}
			else
			{
				throw std::exception("when as a schema for config, only sequence and element support!");
			}
		}
	}
}
예제 #2
0
tstring StringSplice(IEnumerator<tstring>& source, tstring connecter)
{
	tstring result;
	if(source.MoveNext())
	{
		result = source.Current();
		while(source.MoveNext())
		{
			result += connecter;
			result += source.Current();
		}
	}

	return result;
}
예제 #3
0
void CTypeCollector::Collect( CXmlSchema* schema, Xsd2CppContext& ctx)
{
	IEnumerator<XmlSchemaElement>* pEnumEle = schema->EnumGlobalElement();
	if(pEnumEle)
	{
		while(pEnumEle->MoveNext())
		{
			Collect(schema->GetElement(pEnumEle->Current().Name), ctx);
		}
	}
}
예제 #4
0
void CCppConfigGenerator::TypeCollect( XmlSchema* schema, TypeCollectContext& ctx)
{
	IEnumerator<XmlSchemaElement>* pEnumEle = schema->EnumGlobalElement();
	if(pEnumEle)
	{
		while(pEnumEle->MoveNext())
		{
			TypeCollect(pEnumEle->Current(), types);
		}
	}
}
예제 #5
0
void CTypeCollector::Collect( XmlSchemaComplexType* complexType, Xsd2CppContext& ctx)
{
	if(!ctx.TypeMask[complexType->SerialNO])
	{
		ctx.TypeMask[complexType->SerialNO] = true;

		if(complexType->BaseType != INVALIDXMLSCHEMATYPESN)
		{
			throw std::exception("when as a schema for config, type definition don't support inherit!");
		}

		Collect(&complexType->Subitems, ctx);	
		ctx.SortedComplexTypes.push_back(complexType);

		IEnumerator<XmlSchemaAttribute>* pEnumAttr = new_iterator_enumerator(complexType->Attributes.begin(), complexType->Attributes.end());
		if(pEnumAttr)
		{
			while(pEnumAttr->MoveNext())
			{
				Collect(const_cast<XmlSchemaAttribute*>(&pEnumAttr->Current()), ctx);				
			}
		}
	}
}
예제 #6
0
void CCppConfigGenerator::TypeCollect( XmlSchemaComplexType* complexType, TypeCollectContext& ctx)
{
	if(!ctx.TypeMask[complexType->SerialNO])
	{
		ctx.TypeMask[complexType->SerialNO] = true;

		if(complexType->BaseType != INVALIDXMLSCHEMATYPESN)
		{
			throw std::exception("when as a schema for config, type definition don't support inherit!")
		}

		TypeCollect(&complexType->Subitems, ctx);	
		ctx.SortedTypes.push_front(complexType);

		IEnumerator<XmlSchemaAttribute>* pEnumAttr = new_iterator_enumerator(complexType->Attributes.begin(), complexType->Attributes.end());
		if(pEnumAttr)
		{
			while(pEnumAttr->MoveNext())
			{
				XmlSchemaSimpleType* simpleType = static_cast<XmlSchemaSimpleType*>(ctx.Schema->GetType(pEnumAttr->Current().Type));
				TypeCollect(simpleType);				
			}
		}
	}