OSS_INLINE INT32 _utilCommObjBuff::nextObj( BSONObj &obj )
 {
    INT32 rc = SDB_OK ;
    if ( eof() )
    {
       rc = SDB_DMS_EOC ;
       goto error ;
    }
    try
    {
       BSONObj objTemp( &_buff[_readPos] ) ;
       obj = objTemp ;
       _readPos += ossAlign4( (UINT32)obj.objsize() ) ;
    }
    catch ( std::exception &e )
    {
       PD_LOG( PDERROR, "Failed to create bson object: %s", e.what() ) ;
       rc = SDB_SYS ;
       goto error ;
       return SDB_SYS ;
    }
 done:
    return rc ;
 error:
    goto done ;
 }
Beispiel #2
0
   INT32 _rtnObjBuff::truncate( UINT32 num )
   {
      INT32 rc          = SDB_OK ;
      INT32 offset      = 0 ;
      INT32 recordNum   = 0 ;

      if ( num >= (UINT32)_recordNum )
      {
         goto done ;
      }

      while( ossAlign4( (UINT32)offset ) < (UINT32)_buffSize &&
             (UINT32)recordNum < num )
      {
         offset = ossAlign4( (UINT32)offset ) ;
         try
         {
            BSONObj objTemp( &_pBuff[_curOffset] ) ;
            offset += objTemp.objsize() ;
            ++recordNum ;
         }
         catch( std::exception &e )
         {
            PD_LOG( PDERROR, "Failed to create bson object: %s", e.what() ) ;
            rc = SDB_SYS ;
            goto error ;
         }
      }

      if ( offset < _buffSize )
      {
         _buffSize = offset ;
      }
      if ( recordNum < _recordNum )
      {
         _recordNum = recordNum ;
      }

   done:
      return rc ;
   error:
      goto done ;
   }