Sequences represent arrays of rows (or indexed collections / tables). Insertion and removal of entries is allowed, but could take linear time. A reference count is maintained to decide when the object should go away.

virtual int AddHandler (c4_Handler*);
  Add the specified data handler to this sequence

void Attach (c4_Sequence* child_);
  Register a sequence to receive change notifications

c4_Bytes& Buffer ();
  Gives access to a general purpose temporary buffer

void ClearCache ();
  ! for c4_Table::Sequence setup

virtual int Compare (int, c4_Cursor) const;
  Compare the specified row with another one

virtual c4_Handler* CreateHandler (const c4_Property&);
  Create a handler of the appropriate type

void DecRef ();
  Decrement the reference count, delete objects when last

const char* Describe ();
  Return a descriptions of the current data structure

void Detach (c4_Sequence* child_);
  Unregister a sequence which received change notifications

virtual bool Get (int, int, c4_Bytes&);
  Retrieve one data item from this sequence

c4_Dependencies* GetDependencies () const;
  Return a pointer to the dependencies, or null

virtual const c4_Sequence* HandlerContext (int) const;
  Return the context of the N-th handler in this sequence

void IncRef ();
  Increment the reference count of this sequence

virtual void InsertAt (int, c4_Cursor, int =1);
  Insert one or more rows into this sequence

virtual int ItemSize (int index_, int propId_);
  Return width of specified data item

virtual void Move (int, int);
  Move a row to another position

virtual c4_Handler& NthHandler (int) const;
  Return a reference to the N-th handler in this sequence

int NthPropId (int) const;
  Return the id of the N-th property

virtual int NumHandlers () const;
  Return the number of data handlers in this sequence

int NumRefs () const;
  Return the current number of references to this sequence

virtual void PostChange (c4_Notifier& nf_);
  Called after changes have been made to the sequence

virtual c4_Notifier* PreChange (c4_Notifier& nf_);
  Called just before a change is made to the sequence

int PropIndex (const c4_Property&);
  Find the index of a property, or create a new entry

int PropIndex (int);
  Find the index of a property by its id

virtual int RemapIndex (int, const c4_Sequence*) const;
  Remap the index to an underlying view

virtual void RemoveAt (int, int =1);
  Remove one or more rows from this sequence

void Resize (int, int =-1);
  Change number of rows, either by inserting or removing them

virtual void Set (int, const c4_Property&, const c4_Bytes&);
  Store a data item into this sequence

void SetAt (int, c4_Cursor);
  Replace the contents of a specified row

virtual void SetSize (int size_);

virtual int Size () const;
  Return the current number of rows

const char* UseTempBuffer (const char*);

c4_Dependencies* _dependencies;

int _propertyLimit;

short* _propertyMap;
  see c4_HandlerSeq::Reset()

int _refCount;

c4_Bytes* _tempBuf;

c4_Sequence ();
  Abstract constructor

c4_Sequence (const c4_Sequence&);
  not implemented

void operator= (const c4_Sequence&);
  not implemented

virtual ~c4_Sequence ();

class c4_Sequence