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.

<if !private>
virtual int AddHandler (c4_Handler*);
  Add the specified data handler to this sequence

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

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

  <if !private>

virtual void SetSize (int size_);

  <if !private>

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

  <if !private>

const char* UseTempBuffer (const char*);

  <if !private>

c4_Dependencies* _dependencies;

  <if !private>

int _propertyLimit;

  <if !private>

short* _propertyMap;
  see c4_HandlerSeq::Reset()

  <if !private>

int _refCount;

  <if !private>

c4_Bytes* _tempBuf;

  <if !private>

c4_Sequence ();
  Abstract constructor

  <if !private>

c4_Sequence (const c4_Sequence&);
  not implemented

  <if !private>

void operator= (const c4_Sequence&);
  not implemented

  <if !private>

virtual ~c4_Sequence ();

class c4_Sequence