/***************************************************************

This is a data accumulator for the CES system. I'd have used a 
 regular array, but I thought this would be more expandable
 should I make ANOTHER structure change later.
 
 Dec 28 2002. Dan, 
 Jul 05 2002. dan, overhauled 
 Aug 02 2002. dan, variable type overhaul.
 Nov 24 2002. Dan, added SerialNumber

***************************************************************/

#include "cestypes.h"

#ifndef _ACCUMULATOR

#define _ACCUMULATOR


#define BLOCK     512
#define AOffset_t long
#define ASerial_t long  

class Accumulator {

 public:

  Accumulator();
  ~Accumulator();
  
  inline AOffset_t   GetSize   ( void ){ return contentSize; };
  AOffset_t   ReadN     ( AOffset_t position, char * buffer, AOffset_t size );
  AOffset_t   SetN      ( AOffset_t destStart, AOffset_t destSize, char * src, AOffset_t srcSize );  
  ASerial_t   GetSerialNumber ( void ); 
 
 private:
 
  CESError_t reSize        ( int64_t newBlockSize );
  CESError_t shift         ( AOffset_t offset , AOffset_t delta );
  char *     contents;
  long       contentSize;
  long       blockCount;
  ASerial_t  SerialNumber;
};

#endif
