---------------------------------------------------------------------
  CLASS: ExtentList     --JD
  PUBLIC METHODS:
   ExtentList(size) - Constructor (defaults to room for ten)
    error()           - returns the error state of the list (inline)
    clear()           - shrinks and deallocates the list (inline)
   append(ext)      - appends an entry to the list
    insertAt()        - inserts an entry at the specified location.
   operator[](i)    - accesses the ith entry in the list
    at()              - returns a pointer to the ith entry in the list
   remove(n)        - removes the nth entry in the list
    getCount()        - returns the number of entries in the list (inline)
    totalBytes()      - returns the sum of the entry lengths
 
  USAGE NOTES:
   Bounds are checked  on operator[], setting the state returned by
   error(). If an out of bounds location is accessed, an empty
   extent, with contents equal to the default Extent constructor) is
   returned.
 
   In general, extents with length > 2^30 should be avoided, because
   UDF/ISO disallows them.
 
 ----------------------------------------------------------------------

---------------------------------------------------------------------
  METHOD:  ExtentList::insertAt()                              --JKH
 
  Adds a copy of the argument item to the list at the specified index.
 
  ARGUMENTS:
 
  UINT32           index IN  Where to add item
  const Extent&    ext   IN  Item to add to the list
 
  RETURNS:  None.
 
  PRECONDITIONS:  None.
 
  POSTCONDITIONS:
 
  --A copy of the item will be added to the list.
 -----------------------------------------------------------------------------
void
NSR::ExtentList::insertAt(UINT32 index, const Extent& ext)


---------------------------------------------------------------------
  METHOD:  ExtentList::at()                                    --JKH
 
  Returns a pointer to the specified item given by the argument index
  (beginning at 0).
 
  ARGUMENTS:
 
  UINT32       index   IN  Index of desired list item.
 
  RETURNS:
 
  Returns a pointer to the desired item on success, NULL on error (such as
  an index out of range).
 
  PRECONDITIONS:
 
  --Index is in the range [0,# of items in list)
 
  POSTCONDITIONS:
 
  --See return values
 -----------------------------------------------------------------------------
NSR::Extent *
NSR::ExtentList::at(UINT32 index)
const NSR::Extent *
NSR::ExtentList::at(UINT32 index) const
NSR::FileSetInfo *
NSR::FileSetList::at(UINT32 index)
const NSR::FileSetInfo *
NSR::FileSetList::at(UINT32 index) const
NSR::VolumeInfo *
NSR::VolumeInfoList::at(UINT32 index)
const NSR::VolumeInfo *
NSR::VolumeInfoList::at(UINT32 index) const


---------------------------------------------------------------------
  METHOD:  ExtentList::totalBytes()                            --JKH
 
  Returns the number of bytes in the entire list.
 
  ARGUMENTS:  None.
 
  RETURNS:  See above.
 
  PRECONDITIONS:  None.
 
  POSTCONDITIONS:  See above.
 -----------------------------------------------------------------------------

NSR::UINT32 NSR::ExtentList::totalBytes() const {

    UINT32 total = 0;
    for (unsigned i = 0; i < entries(); i++) {
          check for overflow; ifso, return max UINT32
        if ( total + at(i)->len < total ) {
            total = 0xFFFFFFFF;
            break;
        }
        total += at(i)->len;
    }

    return total;

}

 ----------------------------------------------------------------------
  METHOD: ExtentList::numSectors  --DVM
       
   Returns the number of sectors held in the extent list.
 
 ----------------------------------------------------------------------
   Uses totalBytes() method.
 ----------------------------------------------------------------------

NSR::UINT32
NSR::ExtentList::numBlocks(UINT32 blockSize) const