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 ReadWriteXMLBool::WriteValue(XMLWritingMachine& writer, const TreeValue* value) const
	{  writer.OS() << (static_cast<const TreeBool*>( value )->Value() ? "1" : "0");	}
	void ReadWriteXMLInt32::WriteValue(XMLWritingMachine& writer, const TreeValue* value) const
		{ writer.OS() << static_cast<const TreeInt32*>( value )->Value();	}