You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2007/01/21 02:51:32 UTC
svn commit: r498233 - in
/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/marshal:
PrimitiveMapMarshaller.cpp PrimitiveMapMarshaller.h
Author: tabish
Date: Sat Jan 20 17:51:31 2007
New Revision: 498233
URL: http://svn.apache.org/viewvc?view=rev&rev=498233
Log:
http://issues.apache.org/activemq/browse/AMQCPP-30
Modified:
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/marshal/PrimitiveMapMarshaller.cpp
incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/marshal/PrimitiveMapMarshaller.h
Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/marshal/PrimitiveMapMarshaller.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/marshal/PrimitiveMapMarshaller.cpp?view=diff&rev=498233&r1=498232&r2=498233
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/marshal/PrimitiveMapMarshaller.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/marshal/PrimitiveMapMarshaller.cpp Sat Jan 20 17:51:31 2007
@@ -21,7 +21,7 @@
#include <activemq/io/ByteArrayOutputStream.h>
#include <activemq/io/DataInputStream.h>
#include <activemq/io/DataOutputStream.h>
-#include <activemq/util/Config.h>
+#include <activemq/connector/openwire/utils/OpenwireStringSupport.h>
using namespace activemq;
using namespace activemq::io;
@@ -29,6 +29,7 @@
using namespace activemq::exceptions;
using namespace activemq::connector;
using namespace activemq::connector::openwire;
+using namespace activemq::connector::openwire::utils;
using namespace activemq::connector::openwire::marshal;
///////////////////////////////////////////////////////////////////////////////
@@ -56,7 +57,7 @@
dataOut.writeChars( *iter );
PrimitiveMap::ValueNode value = map->getValue( *iter );
- marshalPrimitive( &dataOut, value );
+ marshalPrimitive( dataOut, value );
}
}
}
@@ -83,7 +84,7 @@
for( int i=0; i < size; i++ )
{
std::string key = dataIn.readString();
- unmarshalPrimitive( &dataIn, key, *map );
+ unmarshalPrimitive( dataIn, key, *map );
}
return map;
@@ -97,72 +98,74 @@
}
///////////////////////////////////////////////////////////////////////////////
-void PrimitiveMapMarshaller::marshalPrimitive( io::DataOutputStream* dataOut ACTIVEMQ_ATTRIBUTE_UNUSED,
- util::PrimitiveMap::ValueNode& value ACTIVEMQ_ATTRIBUTE_UNUSED)
+void PrimitiveMapMarshaller::marshalPrimitive( io::DataOutputStream& dataOut,
+ util::PrimitiveMap::ValueNode& value )
throw ( cms::CMSException ) {
try {
-// if( value is bool )
-// {
-// dataOut.writeByte( BOOLEAN_TYPE );
-// dataOut.writeBoolean( value );
-// }
-// else if( value is byte )
-// {
-// dataOut.writeByte( BYTE_TYPE );
-// dataOut.writeByte( value );
-// }
-// else if( value is char )
-// {
-// dataOut.writeByte( CHAR_TYPE );
-// dataOut.writeChar( value );
-// }
-// else if( value is short )
-// {
-// dataOut.writeByte( SHORT_TYPE );
-// dataOut.writeShort( value );
-// }
-// else if( value is int )
-// {
-// dataOut.writeByte( INTEGER_TYPE );
-// dataOut.writeInt( value );
-// }
-// else if( value is long )
-// {
-// dataOut.writeByte( LONG_TYPE );
-// dataOut.writeLong( value );
-// }
-// else if( value is float )
-// {
-// dataOut.writeByte( FLOAT_TYPE );
-// dataOut.writeFloat( value );
-// }
-// else if( value is double )
-// {
-// dataOut.writeByte( DOUBLE_TYPE );
-// dataOut.writeDouble( value );
-// }
-// else if( value is byte[] )
-// {
-// dataOut.writeByte( BYTE_ARRAY_TYPE );
-// dataOut.writeInt( value.byeArrayValue.size() );
-// dataOut.write( value.byeArrayValue );
-// }
-// else if( value is string )
-// {
-// // is the string big??
-// if( value.stringValue.size() > 8191 )
-// {
-// dataOut.writeByte( BIG_STRING_TYPE );
-// dataOut.writeChars( value.stringValue );
-// }
-// else
-// {
-// dataOut.writeByte( STRING_TYPE );
-// dataOut.writeChars( value.stringValue );
-// }
-// }
+ if( value.getValueType() == PrimitiveMap::BOOLEAN_TYPE )
+ {
+ dataOut.writeByte( PrimitiveMap::BOOLEAN_TYPE );
+ dataOut.writeBoolean( value.getBool() );
+ }
+ else if( value.getValueType() == PrimitiveMap::BYTE_TYPE )
+ {
+ dataOut.writeByte( PrimitiveMap::BYTE_TYPE );
+ dataOut.writeByte( value.getByte() );
+ }
+ else if( value.getValueType() == PrimitiveMap::CHAR_TYPE )
+ {
+ dataOut.writeByte( PrimitiveMap::CHAR_TYPE );
+ dataOut.writeChar( value.getChar() );
+ }
+ else if( value.getValueType() == PrimitiveMap::SHORT_TYPE )
+ {
+ dataOut.writeByte( PrimitiveMap::SHORT_TYPE );
+ dataOut.writeShort( value.getShort() );
+ }
+ else if( value.getValueType() == PrimitiveMap::INTEGER_TYPE )
+ {
+ dataOut.writeByte( PrimitiveMap::INTEGER_TYPE );
+ dataOut.writeInt( value.getInt() );
+ }
+ else if( value.getValueType() == PrimitiveMap::LONG_TYPE )
+ {
+ dataOut.writeByte( PrimitiveMap::LONG_TYPE );
+ dataOut.writeLong( value.getLong() );
+ }
+ else if( value.getValueType() == PrimitiveMap::FLOAT_TYPE )
+ {
+ dataOut.writeByte( PrimitiveMap::FLOAT_TYPE );
+ dataOut.writeFloat( value.getFloat() );
+ }
+ else if( value.getValueType() == PrimitiveMap::DOUBLE_TYPE )
+ {
+ dataOut.writeByte( PrimitiveMap::DOUBLE_TYPE );
+ dataOut.writeDouble( value.getDouble() );
+ }
+ else if( value.getValueType() == PrimitiveMap::BYTE_ARRAY_TYPE )
+ {
+ dataOut.writeByte( PrimitiveMap::BYTE_ARRAY_TYPE );
+
+ std::vector<unsigned char> data = value.getByteArray();
+
+ dataOut.writeInt( data.size() );
+ dataOut.write( data );
+ }
+ else if( value.getValueType() == PrimitiveMap::STRING_TYPE )
+ {
+ std::string data = value.getString();
+
+ // is the string big??
+ if( data.size() > 8191 ) {
+ dataOut.writeByte( PrimitiveMap::BIG_STRING_TYPE );
+ } else {
+ dataOut.writeByte( PrimitiveMap::STRING_TYPE );
+ }
+
+ OpenwireStringSupport::writeString( dataOut, &data );
+ }
// else if( value is IDictionary )
// {
// dataOut.Write( MAP_TYPE );
@@ -173,25 +176,82 @@
// dataOut.Write( LIST_TYPE );
// MarshalPrimitiveList((IList) value, dataOut);
// }
-// else
-// {
-// throw IOException(
-// __FILE__,
-// __LINE__,
-// "Object is not a primitive: ");
-// }
+ else
+ {
+ throw IOException(
+ __FILE__,
+ __LINE__,
+ "Object is not a primitive: ");
+ }
}
AMQ_CATCH_RETHROW( ActiveMQException )
AMQ_CATCHALL_THROW( ActiveMQException )
}
///////////////////////////////////////////////////////////////////////////////
-void PrimitiveMapMarshaller::unmarshalPrimitive( io::DataInputStream* dataIn ACTIVEMQ_ATTRIBUTE_UNUSED,
- const std::string& key ACTIVEMQ_ATTRIBUTE_UNUSED,
- util::PrimitiveMap& map ACTIVEMQ_ATTRIBUTE_UNUSED)
+void PrimitiveMapMarshaller::unmarshalPrimitive( io::DataInputStream& dataIn,
+ const std::string& key,
+ util::PrimitiveMap& map )
throw ( cms::CMSException ) {
try {
+
+ unsigned char type = dataIn.readByte();
+
+ switch( type )
+ {
+ case PrimitiveMap::BYTE_TYPE:
+ map.setByte( key, dataIn.readByte() );
+ break;
+ case PrimitiveMap::BOOLEAN_TYPE:
+ map.setBool( key, dataIn.readBoolean() );
+ break;
+ case PrimitiveMap::CHAR_TYPE:
+ map.setChar( key, dataIn.readChar() );
+ break;
+ case PrimitiveMap::SHORT_TYPE:
+ map.setShort( key, dataIn.readShort() );
+ break;
+ case PrimitiveMap::INTEGER_TYPE:
+ map.setInt( key, dataIn.readInt() );
+ break;
+ case PrimitiveMap::LONG_TYPE:
+ map.setLong( key, dataIn.readLong() );
+ break;
+ case PrimitiveMap::FLOAT_TYPE:
+ map.setFloat( key, dataIn.readFloat() );
+ break;
+ case PrimitiveMap::DOUBLE_TYPE:
+ map.setDouble( key, dataIn.readDouble() );
+ break;
+ case PrimitiveMap::BYTE_ARRAY_TYPE:
+ {
+ int size = dataIn.readInt();
+ std::vector<unsigned char> data;
+ data.resize( size );
+ dataIn.readFully( data );
+ map.setByteArray( key, data );
+ break;
+ }
+ case PrimitiveMap::STRING_TYPE:
+ case PrimitiveMap::BIG_STRING_TYPE:
+ map.setString(
+ key,
+ OpenwireStringSupport::readString( dataIn ) );
+ break;
+// case PrimitiveMap::MAP_TYPE:
+// value = UnmarshalPrimitiveMap(dataIn);
+// break;
+// case PrimitiveMap::LIST_TYPE:
+// value = UnmarshalPrimitiveList(dataIn);
+// break;
+ default:
+ throw IOException(
+ __FILE__,
+ __LINE__,
+ "PrimitiveMapMarshaller::unmarshalPrimitive - "
+ "Unsupported data type: ");
+ }
}
AMQ_CATCH_RETHROW( ActiveMQException )
AMQ_CATCHALL_THROW( ActiveMQException )
@@ -217,147 +277,6 @@
}
return answer;
}
-
-
- public static void MarshalPrimitive(BinaryWriter dataOut, Object value)
- {
- if (value == null)
- {
- dataOut.Write(NULL);
- }
- else if (value is bool)
- {
- dataOut.Write(BOOLEAN_TYPE);
- dataOut.Write((bool) value);
- }
- else if (value is byte)
- {
- dataOut.Write(BYTE_TYPE);
- dataOut.Write(((byte)value));
- }
- else if (value is char)
- {
- dataOut.Write(CHAR_TYPE);
- dataOut.Write((char) value);
- }
- else if (value is short)
- {
- dataOut.Write(SHORT_TYPE);
- dataOut.Write((short) value);
- }
- else if (value is int)
- {
- dataOut.Write(INTEGER_TYPE);
- dataOut.Write((int) value);
- }
- else if (value is long)
- {
- dataOut.Write(LONG_TYPE);
- dataOut.Write((long) value);
- }
- else if (value is float)
- {
- dataOut.Write(FLOAT_TYPE);
- dataOut.Write((float) value);
- }
- else if (value is double)
- {
- dataOut.Write(DOUBLE_TYPE);
- dataOut.Write((double) value);
- }
- else if (value is byte[])
- {
- byte[] data = (byte[]) value;
- dataOut.Write(BYTE_ARRAY_TYPE);
- dataOut.Write(data.Length);
- dataOut.Write(data);
- }
- else if (value is string)
- {
- string s = (string) value;
- // is the string big??
- if (s.Length > 8191)
- {
- dataOut.Write(BIG_STRING_TYPE);
- dataOut.Write(s);
- }
- else
- {
- dataOut.Write(STRING_TYPE);
- dataOut.Write(s);
- }
- }
- else if (value is IDictionary)
- {
- dataOut.Write(MAP_TYPE);
- MarshalPrimitiveMap((IDictionary) value, dataOut);
- }
- else if (value is IList)
- {
- dataOut.Write(LIST_TYPE);
- MarshalPrimitiveList((IList) value, dataOut);
- }
- else
- {
- throw new IOException("Object is not a primitive: " + value);
- }
- }
- public static Object UnmarshalPrimitive(BinaryReader dataIn)
- {
- Object value=null;
- byte type = dataIn.ReadByte();
- switch (type)
- {
- case BYTE_TYPE:
- value = dataIn.ReadByte();
- break;
- case BOOLEAN_TYPE:
- value = dataIn.ReadBoolean();
- break;
- case CHAR_TYPE:
- value = dataIn.ReadChar();
- break;
- case SHORT_TYPE:
- value = dataIn.ReadInt16();
- break;
- case INTEGER_TYPE:
- value = dataIn.ReadInt32();
- break;
- case LONG_TYPE:
- value = dataIn.ReadInt64();
- break;
- case FLOAT_TYPE:
- value = dataIn.ReadSingle();
- break;
- case DOUBLE_TYPE:
- value = dataIn.ReadDouble();
- break;
- case BYTE_ARRAY_TYPE:
- int size = dataIn.ReadInt32();
- byte[] data = new byte[size];
- dataIn.Read(data, 0, size);
- value = data;
- break;
- case STRING_TYPE:
- value = dataIn.ReadString();
- break;
- case BIG_STRING_TYPE:
- value = dataIn.ReadString();
- break;
- case MAP_TYPE:
- value = UnmarshalPrimitiveMap(dataIn);
- break;
-
- case LIST_TYPE:
- value = UnmarshalPrimitiveList(dataIn);
- break;
-
- default:
- throw new Exception("Unsupported data type: " + type);
- }
- return value;
- }
-
*/
Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/marshal/PrimitiveMapMarshaller.h
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/marshal/PrimitiveMapMarshaller.h?view=diff&rev=498233&r1=498232&r2=498233
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/marshal/PrimitiveMapMarshaller.h (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/connector/openwire/marshal/PrimitiveMapMarshaller.h Sat Jan 20 17:51:31 2007
@@ -66,7 +66,7 @@
* @param value - the ValueNode to write.
* @throws CMSException
*/
- static void marshalPrimitive( io::DataOutputStream* dataOut,
+ static void marshalPrimitive( io::DataOutputStream& dataOut,
util::PrimitiveMap::ValueNode& value )
throw ( cms::CMSException );
@@ -78,7 +78,7 @@
* @param map - Map to insert data into.
* @throws CMSException
*/
- static void unmarshalPrimitive( io::DataInputStream* dataIn,
+ static void unmarshalPrimitive( io::DataInputStream& dataIn,
const std::string& key,
util::PrimitiveMap& map )
throw ( cms::CMSException );