peiyongz    2004/10/27 13:38:52

  Modified:    c/src/xercesc/internal XSerializeEngine.hpp
                        XSerializeEngine.cpp
  Log:
  Optimized alignment for various data types
  
  Revision  Changes    Path
  1.20      +12 -34    xml-xerces/c/src/xercesc/internal/XSerializeEngine.hpp
  
  Index: XSerializeEngine.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XSerializeEngine.hpp,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- XSerializeEngine.hpp      26 Oct 2004 14:49:27 -0000      1.19
  +++ XSerializeEngine.hpp      27 Oct 2004 20:38:52 -0000      1.20
  @@ -16,6 +16,9 @@
   
   /*
    * $Log$
  + * Revision 1.20  2004/10/27 20:38:52  peiyongz
  + * Optimized alignment for various data types
  + *
    * Revision 1.19  2004/10/26 14:49:27  peiyongz
    * Reset buffer/Provide position info for debugging
    *
  @@ -613,7 +616,9 @@
       const unsigned long   getBufCurAccumulated()     const; 
   
       inline 
  -    const unsigned long   getBufCount()     const; 
  +    const unsigned long   getBufCount()    const; 
  +
  +    void                  trace(char*)     const;
   
   private:
       // -----------------------------------------------------------------------
  @@ -676,9 +681,12 @@
       inline void            Assert(bool  toEval
                                   , const XMLExcepts::Codes toThrow)  const;
   
  -    inline size_t          allignAdjust()                           const;
   
  -    inline void            allignBufCur();
  +    inline size_t          calBytesNeeded(size_t)  const;
  +
  +    inline size_t          alignAdjust(size_t)     const;
  +
  +    inline void            alignBufCur(size_t);
   
       // Make XTemplateSerializer friend of XSerializeEngine so that
       // we can call lookupStorePool and lookupLoadPool in the case of
  @@ -808,36 +816,6 @@
   
   }
   
  -// For the following built-in datatype, we assume
  -// the same allignment requirement
  -//
  -// short    unsigned short
  -// int      unsigned long
  -// long     unsigned long
  -// float
  -// double
  -//
  -// Based on the current position (fBufCur), calculated the needed size
  -// to read/write
  -//
  -inline size_t XSerializeEngine::allignAdjust() const
  -{
  -     #ifdef XML_PLATFORM_NEW_BLOCK_ALIGNMENT
  -             size_t alignment = XML_PLATFORM_NEW_BLOCK_ALIGNMENT;
  -     #else
  -             size_t alignment = (sizeof(void*) >= sizeof(double)) ? sizeof(void*) : 
sizeof(double);
  -     #endif
  -     
  -     size_t remainder = (size_t) fBufCur % alignment;        
  -     return (remainder == 0) ? 0 : (alignment - remainder);
  -}
  -
  -// Adjust the fBufCur
  -inline void XSerializeEngine::allignBufCur()
  -{
  -    fBufCur+=allignAdjust();
  -}
  -
   inline void XSerializeEngine::readString(XMLCh*&        toRead
                                          , int&           bufferLen)
   {
  @@ -881,7 +859,7 @@
   inline 
   const unsigned long XSerializeEngine::getBufCurAccumulated() const
   {
  -    return (fBufCount - isStoring() ? 0: 1)* fBufSize + (fBufCur-fBufStart);
  +    return (fBufCount - (isStoring() ? 0: 1)) * fBufSize + (fBufCur-fBufStart);
   }
   
   inline 
  
  
  
  1.21      +76 -35    xml-xerces/c/src/xercesc/internal/XSerializeEngine.cpp
  
  Index: XSerializeEngine.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/XSerializeEngine.cpp,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- XSerializeEngine.cpp      26 Oct 2004 14:49:27 -0000      1.20
  +++ XSerializeEngine.cpp      27 Oct 2004 20:38:52 -0000      1.21
  @@ -17,6 +17,9 @@
   /*
    * $Id$
    * $Log$
  + * Revision 1.21  2004/10/27 20:38:52  peiyongz
  + * Optimized alignment for various data types
  + *
    * Revision 1.20  2004/10/26 14:49:27  peiyongz
    * Reset buffer/Provide position info for debugging
    *
  @@ -94,6 +97,9 @@
   #include <xercesc/framework/BinOutputStream.hpp>
   #include <xercesc/util/BinInputStream.hpp>
   
  +#include <stdio.h>
  +#include <assert.h>
  +
   XERCES_CPP_NAMESPACE_BEGIN
   
   const bool XSerializeEngine::toWriteBufferLen = true;
  @@ -503,7 +509,6 @@
                     )
   
           ensurePointer(lookupLoadPool(classIndex));
  -
      }
   
        return true;
  @@ -658,8 +663,9 @@
   
   XSerializeEngine& XSerializeEngine::operator<<(XMLCh xch)
   { 
  -    checkAndFlushBuffer(sizeof(XMLCh));
  +    checkAndFlushBuffer(calBytesNeeded(sizeof(XMLCh)));
   
  +    alignBufCur(sizeof(XMLCh));
       *(XMLCh*)fBufCur = xch; 
       fBufCur += sizeof(XMLCh); 
       return *this; 
  @@ -667,8 +673,9 @@
   
   XSerializeEngine& XSerializeEngine::operator>>(XMLCh& xch)
   { 
  -    checkAndFillBuffer(sizeof(XMLCh));
  +    checkAndFillBuffer(calBytesNeeded(sizeof(XMLCh)));
   
  +    alignBufCur(sizeof(XMLCh));
       xch = *(XMLCh*)fBufCur; 
       fBufCur += sizeof(XMLCh); 
       return *this; 
  @@ -722,9 +729,9 @@
   
   XSerializeEngine& XSerializeEngine::operator<<(short sh)
   { 
  -    checkAndFlushBuffer(allignAdjust()+sizeof(short));
  +    checkAndFlushBuffer(calBytesNeeded(sizeof(short)));
   
  -    allignBufCur();
  +    alignBufCur(sizeof(short));
       *(short*)fBufCur = sh; 
       fBufCur += sizeof(short); 
       return *this; 
  @@ -732,9 +739,9 @@
   
   XSerializeEngine& XSerializeEngine::operator>>(short& sh)
   { 
  -    checkAndFillBuffer(allignAdjust()+sizeof(short));
  +    checkAndFillBuffer(calBytesNeeded(sizeof(short)));
   
  -    allignBufCur();
  +    alignBufCur(sizeof(short));
       sh = *(short*)fBufCur; 
       fBufCur += sizeof(short); 
       return *this; 
  @@ -742,9 +749,9 @@
   
   XSerializeEngine& XSerializeEngine::operator<<(int i)
   { 
  -    checkAndFlushBuffer(allignAdjust()+sizeof(int));
  +    checkAndFlushBuffer(calBytesNeeded(sizeof(int)));
   
  -    allignBufCur();
  +    alignBufCur(sizeof(int));
       *(int*)fBufCur = i; 
       fBufCur += sizeof(int); 
       return *this;     
  @@ -752,9 +759,9 @@
   
   XSerializeEngine& XSerializeEngine::operator>>(int& i)
   { 
  -    checkAndFillBuffer(allignAdjust()+sizeof(int));
  +    checkAndFillBuffer(calBytesNeeded(sizeof(int)));
   
  -    allignBufCur();
  +    alignBufCur(sizeof(int));
       i = *(int*)fBufCur; 
       fBufCur += sizeof(int); 
       return *this; 
  @@ -762,9 +769,10 @@
   
   XSerializeEngine& XSerializeEngine::operator<<(unsigned int ui)
   { 
  -    checkAndFlushBuffer(allignAdjust()+sizeof(unsigned int));
   
  -    allignBufCur();
  +    checkAndFlushBuffer(calBytesNeeded(sizeof(unsigned int)));
  +
  +    alignBufCur(sizeof(unsigned int));
       *(unsigned int*)fBufCur = ui; 
       fBufCur += sizeof(unsigned int); 
       return *this; 
  @@ -772,9 +780,10 @@
   
   XSerializeEngine& XSerializeEngine::operator>>(unsigned int& ui)
   { 
  -    checkAndFillBuffer(allignAdjust()+sizeof(unsigned int));
   
  -    allignBufCur();
  +    checkAndFillBuffer(calBytesNeeded(sizeof(unsigned int)));
  +
  +    alignBufCur(sizeof(unsigned int));
       ui = *(unsigned int*)fBufCur; 
       fBufCur += sizeof(unsigned int); 
       return *this; 
  @@ -782,9 +791,9 @@
   
   XSerializeEngine& XSerializeEngine::operator<<(long l)
   { 
  -    checkAndFlushBuffer(allignAdjust()+sizeof(long));
  +    checkAndFlushBuffer(calBytesNeeded(sizeof(long)));
   
  -    allignBufCur();
  +    alignBufCur(sizeof(long));
       *(long*)fBufCur = l; 
       fBufCur += sizeof(long); 
       return *this; 
  @@ -792,9 +801,9 @@
   
   XSerializeEngine& XSerializeEngine::operator>>(long& l)
   { 
  -    checkAndFillBuffer(allignAdjust()+sizeof(long));
  +    checkAndFillBuffer(calBytesNeeded(sizeof(long)));
   
  -    allignBufCur();
  +    alignBufCur(sizeof(long));
       l = *(long*)fBufCur; 
       fBufCur += sizeof(long); 
       return *this; 
  @@ -802,9 +811,9 @@
   
   XSerializeEngine& XSerializeEngine::operator<<(unsigned long ul)
   { 
  -    checkAndFlushBuffer(allignAdjust()+sizeof(unsigned long));
  +    checkAndFlushBuffer(calBytesNeeded(sizeof(unsigned long)));
   
  -    allignBufCur();
  +    alignBufCur(sizeof(unsigned long));
       *(unsigned long*)fBufCur = ul; 
       fBufCur += sizeof(unsigned long); 
       return *this; 
  @@ -812,9 +821,9 @@
   
   XSerializeEngine& XSerializeEngine::operator>>(unsigned long& ul)
   { 
  -    checkAndFillBuffer(allignAdjust()+sizeof(unsigned long));
  +    checkAndFillBuffer(calBytesNeeded(sizeof(unsigned long)));
   
  -    allignBufCur();
  +    alignBufCur(sizeof(unsigned long));
       ul = *(unsigned long*)fBufCur; 
       fBufCur += sizeof(unsigned long); 
       return *this; 
  @@ -822,9 +831,9 @@
   
   XSerializeEngine& XSerializeEngine::operator<<(float f)
   { 
  -    checkAndFlushBuffer(allignAdjust()+sizeof(float));
  +    checkAndFlushBuffer(calBytesNeeded(sizeof(float)));
   
  -    allignBufCur();
  +    alignBufCur(sizeof(float));
       *(float*)fBufCur = *(float*)&f; 
       fBufCur += sizeof(float); 
       return *this;
  @@ -832,9 +841,9 @@
   
   XSerializeEngine& XSerializeEngine::operator>>(float& f)
   { 
  -    checkAndFillBuffer(allignAdjust()+sizeof(float));
  +    checkAndFillBuffer(calBytesNeeded(sizeof(float)));
   
  -    allignBufCur();
  +    alignBufCur(sizeof(float));
       *(float*)&f = *(float*)fBufCur; 
       fBufCur += sizeof(float); 
       return *this; 
  @@ -842,9 +851,9 @@
   
   XSerializeEngine& XSerializeEngine::operator<<(double d)
   { 
  -    checkAndFlushBuffer(allignAdjust()+sizeof(double));
  +    checkAndFlushBuffer(calBytesNeeded(sizeof(double)));
   
  -    allignBufCur();
  +    alignBufCur(sizeof(double));
       *(double*)fBufCur = *(double*)&d; 
       fBufCur += sizeof(double); 
       return *this; 
  @@ -852,9 +861,9 @@
   
   XSerializeEngine& XSerializeEngine::operator>>(double& d)
   { 
  -    checkAndFillBuffer(allignAdjust()+sizeof(double));
  +    checkAndFillBuffer(calBytesNeeded(sizeof(double)));
   
  -    allignBufCur();
  +    alignBufCur(sizeof(double));
       *(double*)&d = *(double*)fBufCur; 
       fBufCur += sizeof(double); 
       return *this; 
  @@ -884,7 +893,7 @@
       /***
         *  an object tag read from the binary refering to
         *  an object beyond the upper most boundary of the load pool
  -      ***/    
  +      ***/
       TEST_THROW_ARG2( (objectTag > fLoadPool->size())
                 , objectTag
                 , fLoadPool->size()
  @@ -921,7 +930,7 @@
                  , fObjectCount
                  , fgMaxObjectCount
                  , XMLExcepts::XSer_ObjCount_UppBnd_Exceed
  -              )
  +               )
   
       fObjectCount++;
   
  @@ -983,7 +992,7 @@
       ensureStoring();
       ensureStoreBuffer();
   
  -    fOutputStream->writeBytes(fBufStart, fBufSize);
  +    fOutputStream->writeBytes(fBufStart, fBufSize);   
       fBufCur = fBufStart;
   
       resetBuffer();
  @@ -1000,7 +1009,7 @@
                      )
   
       // fBufStart ... fBufCur ...fBufEnd
  -    if ((fBufCur + bytesNeedToWrite) >= fBufEnd) 
  +    if ((fBufCur + bytesNeedToWrite) > fBufEnd) 
           flushBuffer();
   }
   
  @@ -1156,6 +1165,38 @@
   {
       //todo: changed to return fGrammarPool->getMemoryManager()
       return fGrammarPool ? fGrammarPool->getMemoryManager() : 
XMLPlatformUtils::fgMemoryManager;
  +}
  +
  +//
  +// Based on the current position (fBufCur), calculated the needed size
  +// to read/write
  +//
  +inline size_t XSerializeEngine::alignAdjust(size_t size) const
  +{
  +    size_t remainder = (size_t) fBufCur % size;
  +    return (remainder == 0) ? 0 : (size - remainder);
  +}
  +
  +// Adjust the fBufCur
  +inline void XSerializeEngine::alignBufCur(size_t size)
  +{
  +    fBufCur+=alignAdjust(size);
  +    assert(((size_t) fBufCur % size)==0);
  +}
  +
  +inline size_t XSerializeEngine::calBytesNeeded(size_t size) const
  +{
  +    return (alignAdjust(size) + size);
  +}
  +
  +void XSerializeEngine::trace(char* funcName) const
  +{
  +    return;
  +
  +    if (isStoring())
  +        printf("\n funcName=<%s>, storing, count=<%d>, postion=<%d>\n", funcName, 
fBufCount, getBufCurAccumulated());
  +    else
  +        printf("\n funcName=<%s>, loading, count=<%d>, postion=<%d>\n", funcName, 
fBufCount, getBufCurAccumulated());
   }
   
   XERCES_CPP_NAMESPACE_END
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to