<if !private>
virtual void DataCommit (t4_i32 newSize_);
  Flush and truncate file

  <if !private>

void DataLoad (void* buffer_, int length_);
  Read an exact number of bytes

  <if !private>

virtual int DataRead (void* buffer_, int length_);
  Read a number of bytes

  <if !private>

virtual void DataSeek (t4_i32 position_);
  Set file position

  <if !private>

virtual bool DataWrite (const void* buffer_, int length_);
  Write a number of bytes, return true if successful

  <if !private>

virtual bool IsValid () const;
  True if we can do I/O with this object

  <if !private>

virtual void ResetFileMapping ();
  Override to support memory-mapped files

  <if !private>

bool _bytesFlipped;
  True if the storage format is not native (default is false)

  <if !private>

int _failure;
  Error code of last failed I/O operation, zero if I/O was ok

  <if !private>

bool _keepAfterCommit;
  Keep data in memory after each commit (default is false)

  <if !private>

const t4_byte* _mapLimit;
  Past last byte in file mapping, zero if not active

  <if !private>

const t4_byte* _mapStart;
  First byte in file mapping, zero if not active

  <if !private>

c4_Strategy ();

  <if !private>

virtual ~c4_Strategy ();

class c4_Strategy