Go to the first, previous, next, last section, table of contents.


CNManager -- Object Management Frontend

SYNOPSIS

#include <CNCL/Manager.h>

TYPE

CN_MANAGER

BASE CLASSES

CNObject

DERIVED CLASSES

None

RELATED CLASSES

CNHashTable, CNHashDynamic, CNHashIterator, CNKey, CNKeyString, CNKeyInt

DESCRIPTION

CNManager is a class which provides facilities for storing and retrieving CNCL compatible objects in a filesystem-like manner. Objects of type CN_MANAGER can be compared with directories, whereas all other CNCL compatible objects play the role of the files. CNManager internally uses a dynamic hash table for managing the objects. Constructors:

CNManager(char *object_name = NIL);
CNManager(CNParam *param);
Initializes CNManager.

Destructor:

~CNManager();
Frees all internally allocated resources.

In addition to the member functions required by CNCL, CNManager provides:

CNObject *new_object(char *object_name, CNClassDesc desc, CNParam *param = NIL);
new_object() is used to create a tree of objects similar to a filesystem's tree of directories and files. The class descriptor desc determines whether a directory (CN_MANAGER) or a file (any other type) is to be created. The object_name may consist of a pathname and/or a basename. All directory-names and the basename must be separated by slashes ('/'). The pointer to the new created object is returned, if no error occurs, otherwise, if e. g. the specified pathname was incorrect, NIL is returned.
bool delete_object(char *object_name);
Removes the specified object from the internal hashtable. The memory allocated for the object via new_object() is deleted, too. As described under new_object() you may pass a filesystem-like path to delete_object(). If the object is deleted succesfully, TRUE is returned, FALSE otherwise. If the object to be deleted is a 'directory' and if the 'directory' still contains valid 'files', delete_object() fails. You must first delete all subentries before deleting the entry itself.
CNObject *get_object(char *object_name) const;
Returns the object associated to the given pathname. If the specified object does not exist, NIL is returned.
char *get_name();
Returns the basename of the respective object.
bool is_empty() const;
Returns TRUE if no object is stored in the storing facilities of this class, FALSE otherwise.

The following example shows how to use CNManager objects in order to store and retrieve CNCL compatible objects.

// this is the root of the example's object hierarchy
CNManager root;
// some 'directory' pointers 
CNManager *mobile, *base, *subbase;
// some 'file' pointers
CNHashDynamic *table1, *table2;

// create a 'directory' in the root 'directory'
mobile = (CNManager *)root.new_object("mobile", CN_MANAGER);
if (mobile == NIL)
    ...
// create another 'directory'
base = (CNManager *)root.new_object("base", CN_MANAGER);
if (base == NIL)
    ...

// now create a 'file' (CNCL compatible object) in the
// 'mobile' 'directory'
table1 = (CNHashDynamic *)mobile->new_object("table1", CN_HASHDYNAMIC);
if (table1 == NIL)
    ...

// now create a 'subdirectory' of 'base' using an absolute path
subbase = (CNManager *)root.new_object("/base/subbase", CN_MANAGER);
if (subbase == NIL)
    ...

// create a 'file' using a path relative to 'base'
table2 = (CNHashDynamic *)base->new_object("subbase/table2", CN_HASHDYNAMIC);
if (table2 == NIL);
    ...

// now try to get an object
if (base->get_object("subbase/table2") == table2)
    ...

// try to delete 'subbase'
if (!root.delete_object("/base/subbase"))	// error, dir not empty
    ...

// first delete all subentries
if (!root.delete_object("/base/subbase/table2"))
    ...

// now delete subbase
if (!base->delete_object("subbase"))	// okay
    ...

...


Go to the first, previous, next, last section, table of contents.