Saturday, November 30, 2013

New Information Dictionary – Implementation

The information dictionary class was changed to a normal class derived from the dictionary class. The constructor is given a pointer to the information class instance created outside of the dictionary.  This pointer is saved in a pointer defined as an abstract information pointer, which can hold any information class pointer derived from the abstract class.

The add routine first adds the dictionary entry by calling the base dictionary class add routine with the token and case sensitivity option along with a pointer to the new entry flag so that it knows if a new entry was added, a removed entry was reused or an entry already exists.  If a new entry was added, an element is added to the additional information by calling the add element interface function of the information instance.  If the entry did not exist, the addition information is set from the token by calling the set element interface function of the information instance.  The index is returned.

The remove routine first removes the reference to the dictionary entry by calling the base dictionary class remove routine for the index specified.  If the entry was removed because it is no longer used, then the additional information for the element is cleared by calling the clear element interface function of the information instance.  The base dictionary class remove routine was modified to return whether  the entry was removed (made available to reused) or not.

The abstract information class defines the interface to the additional information.  The functions are defined as virtual functions with no default functionality so that derived information classes do not implement a function that it does not need.  The constant number and string information classes were changed from holding just a single element to being derived from the abstract class.

The constant number information class contains two vectors for the double and integer values.  The add element function just extends the two vectors by one element.  The set element function copies the token double and integer values into the respective vectors for the element specified.  No clear element function was needed since there is nothing to clear.  Two array access functions were implemented to access the data in the two vectors, which will be used at run-time.

The constant string information class contains a vector of string instance pointers.  The add element function appends a pointer to a newly created string instance to the vector.  The set element function copies the token string into the element specified.  The clear element function clears the string for the element specified.  Once the string instances are created, they will be reused if dictionary entries are removed.  A destructor was implemented to delete all of the string instances.   An array access function was implemented to access the data in the vector, which will be used at run-time.

Information instance pointers were added to the program model class.  These instances are created in the constructor and passed to their associated information dictionaries.  Both the constant number and string dictionaries are now information dictionaries.  The information instances are deleted in the destructor.  There are no longer any known memory issues.

[commit b9772d4149]

No comments:

Post a Comment

All comments and feedback welcomed, whether positive or negative.
(Anonymous comments are allowed, but comments with URL links or unrelated comments will be removed.)