---------------------------------------------------------------------
  CLASS: CmrDiff     --trp
  PUBLIC METHODS:
    beginDir() 
       Is called by the driver representation to define a new dir.
    endDir() 
       Is called by the driver representation to end current dir.
    file() 
       Is called by the driver representation to define a new file.
    symlink() 
       Is called by the driver representation to define a new symlink.
 
  USAGE NOTES:
   For validation, "driver" directory entries are compared to "rider" entries.
   At the time of this programming, an n-ary tree representation 
   is used for comparision.  However in order to provide for flexible class
   use, two function pointers to application functions provide access to the
   "rider" directory tree representation.
   
   CmrDiff receives a begin directory function call from the reader, and
   constructs a new ValDirectory object for that directory.  To avoid storing
   all information for that directory and child directories in a recursive
   data structure, it is assumed that the "rider" has ad hoc access, and thus
   all entries for that directory are stored into the rider entries list 
   immediately.  "driver" entries for this directory will be accrued throughout
   subsequent cmr reader returns.  
 ----------------------------------------------------------------------

---------------------------------------------------------------------
  METHOD: CmrDiff::beginDir  --trp
 
   Sets up difference work for a new directory.  In the case of root,
   the name & attributes are immediately checked.
 
  ARGS:
   void*       parent  IN      driver dir parent, or NULL for root
   char*       dirName IN      driver dir name, or "/" for root
   Attributes& attr    IN      driver dir attributes
 
  RETURNS:
   void data pointer to application domain directory node.
 
  PRE-CONDITIONS:
   the member is called for root on the first instance only
   parent is non null for non-root
   dirName is "/" for root, and root only
   
  POST-CONDITIONS:
   if root, root is validated against the rider root node
   if not root, the directory is inserted into the top dirStack_
       ValDirectory riderEntries_ sorted list
   all rider child entries are inserted into a new ValDirectory
       riderEntries_ sorted list
   the new ValDirectory object is pushed into the member dirStack_ 
 
  ERRORS:
 
  NOTES:
 
 ----------------------------------------------------------------------
void*
CmrDiff::beginDir(void *parent, char *dirName, Attributes& attr)


---------------------------------------------------------------------
  METHOD: CmrDiff::endDir  --trp
 
   Performs difference work on the current completed directory.
 
  ARGS:
   void*       parent  IN      driver dir parent, or NULL for root
   char*       dirName IN      driver dir name, or "/" for root
   Attributes& attr    IN      driver dir attributes
 
  RETURNS:
   void data pointer to application domain directory node.
 
  PRE-CONDITIONS:
   the member is called for root on the first instance only
   parent is non null for non-root
   dirName is "/" for root, and root only
   
  POST-CONDITIONS:
   if root, root is validated against the rider root node
   if not root, the directory is inserted into the top dirStack_
       ValDirectory riderEntries_ sorted list
   all rider child entries are inserted into a new ValDirectory
       riderEntries_ sorted list
   the new ValDirectory object is pushed into the member dirStack_ 
 
  ERRORS:
  NOTES:
 ----------------------------------------------------------------------
void
CmrDiff::endDir(void *closingDir)


---------------------------------------------------------------------
  METHOD: CmrDiff::file  --trp
 
   Collect file information for difference checking.  
 
  ARGS:
   char*       fileName IN     file name, from the reader
   Attributes& attr     IN     file attributes, from the reader
   ExtentList& elist    IN     file extent list, from the reader
 
  RETURNS:
   void
  PRE-CONDITIONS:
   
  POST-CONDITIONS:
   The current file is insert into the directory stack top ValDirectory
   object sorted driverEntries list.
 
  ERRORS:
 
  NOTES:
   The actual difference check is performed in endDir.
 
 ----------------------------------------------------------------------
void
CmrDiff::file(char *fileName, Attributes& attr, ExtentList& elist)


---------------------------------------------------------------------
  METHOD: CmrDiff::symlink  --trp
 
   Collect difference checking information for a symlink.
 
  ARGS:
   char*               symlinkName     name of symlink, from reader
   Attributes&         attr            symlink attributes, from reader
   PathElementList&    plist           symlink plist, from reader
 
  RETURNS:
   void
 
  PRE-CONDITIONS:
   
  POST-CONDITIONS:
   The current symlink is insert into the directory stack top ValDirectory
   object sorted driverEntries list.
 
  ERRORS:
 
  NOTES:
 
 ----------------------------------------------------------------------
void
CmrDiff::symlink(char *symlinkName, Attributes& attr,
                      PathElementList& plist)