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;
    }
Exemple #8
0
 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);
 }