Return TypeFunction nameArguments
hzEcodehdbBinRepos::Update(unsigned int&,const hzChain&,)

Declared in file: hzDatabase.h
Defined in file : hdbBinRepos.cpp

Function Logic:

0:START 1:m_nInitState<1 2:Return E_NOINIT 3:m_nInitState<2 4:Return E_NOTOPEN 5:datumId==0 6:Return E_NOTOPEN 7:datumId>m_nSeqId 8:Return E_NOTFOUND 9:!datum.Size() 10:Return E_NODATA 11:hzXDate::SysDateTime hzChain::Size hdr hdr hzLockS::Lock hdr datumId hzChain::Size m_nSize ofstream::write ofstream::fail 12:m_WrI.fail() 13:hzChain::Printf rc 14:hzLockS::Unlock hzLockS::Lock 15:rc==E_OK 16:items ofstream::fail 17:m_WrD.fail() 18:hzChain::Printf rc 19:hzLockS::Unlock 20:rc==E_OK 21:ofstream::flush ofstream::flush 22:Return rc

Function body:

hzEcode hdbBinRepos::Update (unsigned int& datumId, const hzChain& datum)
{
   _hzfunc("hdbBinRepos::Update") ;
   _datum_hd   hdr ;
   hzEcode     rc = E_OK ;
   if (m_nInitState < 1)
       return E_NOINIT ;
   if (m_nInitState < 2)
       return E_NOTOPEN ;
   if (datumId == 0)
       return E_NOTOPEN ;
   if (datumId > m_nSeqId)
       return E_NOTFOUND ;
   if (!datum.Size())
       return E_NODATA ;
   hdr.m_DTStamp.SysDateTime() ;
   hdr.m_Size = datum.Size() ;
   hdr.m_Prev = datumId ;
   m_LockIwr.Lock() ;
       hdr.m_Addr = m_nSize ;
       datumId = ++m_nSeqId ;
       m_nSize += datum.Size() ;
       m_WrI.write((char*) &hdr, sizeof(_datum_hd)) ;
       if (m_WrI.fail())
           { m_Error.Printf("Could not update index delta for datum %d\n", datumId) ; rc = E_WRITEFAIL ; }
   m_LockIwr.Unlock() ;
   m_LockDwr.Lock() ;
       if (rc == E_OK)
       {
           m_WrD << datum ;
           if (m_WrD.fail())
               { m_Error.Printf("Could not update data file for datum %d\n", datumId) ; rc = E_WRITEFAIL ; }
       }
   m_LockDwr.Unlock() ;
   if (rc == E_OK)
   {
       m_WrI.flush() ;
       m_WrD.flush() ;
   }
   return rc ;
}