void ReadWriteXMLBinary::WriteValue(XMLWritingMachine& writer, const TreeValue* value) const
	{ 
		// binary object
		const TreeBinary* binary = static_cast<const TreeBinary*>( value );

		// binary data
		writer.OS() << "\n";

		if (binary->SizeBytes())
		{
			// init library
			base64_encodestate state;
			base64_init_encodestate(&state);

			// text buffer
			std::string encoded_data(2*binary->SizeBytes(), ' ');

			// convert
			int numchars = base64_encode_block((const char*)binary->Data(), binary->SizeBytes(), &encoded_data[0], &state);
			numchars += base64_encode_blockend(&encoded_data[0] + numchars, &state);

			// shrink to fit
			encoded_data.resize(numchars);

			// write
			writer.OS() << encoded_data;
		}
	}
	void ReadWriteXMLCompound::WriteValue(XMLWritingMachine& writer, const TreeValue* value) const
	{ 
		const TreeCompound* compoundobject = static_cast<const TreeCompound*>( value );
		for (size_t index = 0; index < compoundobject->NumElements(); index++)
		{
			const TreeCompoundNode* node = compoundobject->Node(index);
			writer.WriteValue(node->Name(), node->Value());
		}
	}
예제 #3
0
	void ReadWriteXMLList::WriteValue(XMLWritingMachine& writer, const TreeValue* value) const
	{ 
		const TreeList* listobject = static_cast<const TreeList*>( value );
		const std::vector<TreeValue*>& value_list = listobject->ElementArray();
		for (std::vector<TreeValue*>::const_iterator value_iter( value_list.begin() ); value_iter != value_list.end(); value_iter++)
		{
			writer.WriteValue(listobject->ElementName(), *value_iter);
		}
	}
예제 #4
0
	void ReadWriteXMLBool::WriteValue(XMLWritingMachine& writer, const TreeValue* value) const
	{  writer.OS() << (static_cast<const TreeBool*>( value )->Value() ? "1" : "0");	}
예제 #5
0
	void ReadWriteXMLInt32::WriteValue(XMLWritingMachine& writer, const TreeValue* value) const
		{ writer.OS() << static_cast<const TreeInt32*>( value )->Value();	}