inline void decodeTypedElements( BinaryPortable *, T *, DataPtr &data, T *t, int nCount) { if (data.length() != sizeof(T)*nCount) { RCF_THROW(RCF::Exception(RCF::SfError_DataFormat))(data.length())(nCount)(typeid(T).name()); } T *buffer = reinterpret_cast<T *>(data.get()); RCF::networkToMachineOrder(buffer, sizeof(T), nCount); memcpy(t, buffer, nCount*sizeof(T)); }
void EncodingBinaryPortable_toObjectImpl( DataPtr & data, T * t, int nCount) { if (data.length() != sizeof(T)*nCount) { RCF::Exception e(RCF::_SfError_DataFormat()); RCF_THROW(e)(data.length())(nCount)(typeid(T).name()); } T *buffer = reinterpret_cast<T *>(data.get()); RCF::networkToMachineOrder(buffer, sizeof(T), nCount); memcpy(t, buffer, nCount*sizeof(T)); }
inline void decodeTypedElements( Text *, T *, DataPtr &data, T *t, int nCount) { if (data.length() == 0) { RCF_THROW(RCF::Exception(RCF::SfError_DataFormat)); } std::string strData(reinterpret_cast<char *>(data.get()), data.length()); std::istringstream istr(strData); istr >> t[0]; for (int i=1; i<nCount; i++) { char ch; istr.get(ch); RCF_ASSERT( ch == chSeparator ); istr >> t[i]; } }
void EncodingBinaryNative_toObjectImpl( DataPtr & data, T * t, int nCount) { RCF_ASSERT_EQ( data.length() , sizeof(T)*nCount); memcpy(t, data.get(), sizeof(T)*nCount); }
void EncodingText_toObjectImpl( DataPtr & data, T * t, int nCount) { if (data.length() == 0) { RCF::Exception e(RCF::_SfError_DataFormat()); RCF_THROW(e); } RCF::MemIstream istr(data.get(), data.length()); istr >> t[0]; for (int i=1; i<nCount; i++) { char ch; istr.get(ch); RCF_ASSERT_EQ( ch , chSeparator ); istr >> t[i]; } }
inline UInt32 countTypedElements( Text *, T *, DataPtr &data) { // Count number of internally occurring separators in the data, and then add 1 UInt32 count = 0; for (UInt32 i=1; i<data.length()-1; i++) { if (data.get()[i] == Byte8(chSeparator)) { count++; } } return count+1; }
UInt32 EncodingText_getCountImpl(DataPtr & data, T *) { // Return 1 + number of separator characters. UInt32 count = 0; for (UInt32 i=1; i<data.length()-1; i++) { if (data.get()[i] == Byte8(chSeparator)) { count++; } } return count+1; }
void OStream::put(const DataPtr &value) { write_byte( (Byte8) Data ); write(value.get(), value.length()); }
inline UInt32 countTypedElements( Text *, unsigned char *, DataPtr &data) { return data.length(); }
inline UInt32 countTypedElements( BinaryPortable *, T *, DataPtr &data) { RCF_ASSERT(data.length() % sizeof(T) == 0); return data.length() / sizeof(T); }
inline void decodeTypedElements( BinaryNative *, T *, DataPtr &data, T *t, int nCount) { RCF_ASSERT( data.length() == sizeof(T)*nCount); memcpy(t, data.get(), sizeof(T)*nCount); }
UInt32 EncodingText_getCountImpl(DataPtr &data, unsigned char *) { return data.length(); }
UInt32 EncodingBinaryPortable_getCountImpl(DataPtr & data, T *) { RCF_ASSERT(data.length() % sizeof(T) == 0); return data.length() / sizeof(T); }