Property objects exist independently of view, row, and storage objects. They have a name and type, and can appear in any number of views. You will normally only use derived classes, to maintain strong typing.

static void CleanupInternalData ();
  Call this to get rid of som eonternal datastructues (on exit)

int GetId () const;
  A property object in fact merely represents an entry in a globally maintained symbol table. Each property is assigned a unique id, which remains valid as long as some reference to that property exists. In general, property id's remain unique as long as the application runs. Do not store id's on file, since they are not guaranteed to remain the same across program invocations. All properties with the same name are given the same id.

const char* Name () const;
  Return the name of this property

void Refs (int) const;
  This is part of the implementation and shouldn't normally be called.

char Type () const;
  Return the type of this property

short _id;

char _type;

c4_Property (char type_, const char* name_);
  Construct a new property with the give type and name

c4_Property (char type_, int id_);
  Construct a new property with the give type and id

c4_Property (const c4_Property& property_);
  Copy constructor

c4_Reference operator() (const c4_RowRef& row_) const;
  Get or set this untyped property in a row

c4_View operator, (const c4_Property& prop_) const;
  Return a view like the first, with a property appended to it

void operator= (const c4_Property& property_);
  Assignment

~c4_Property ();
  Destructor

class c4_Property