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 ; }
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 ; }