Source of ArrayList.cpp


  1: //  Created by Frank M. Carrano and Tim Henry.
  2: //  Copyright (c) 2013 __Pearson Education__. All rights reserved.

  4: /** Implementation file for the class ArrayList.
  5:  @file ArrayList.cpp */

  7: #include "ArrayList.h"  // Header file

  9: template<class ItemType>
 10: ArrayList<ItemType>::ArrayList() : itemCount(0), maxItems(DEFAULT_CAPACITY)
 11: {
 12: }  // end default constructor

 14: template<class ItemType>
 15: bool ArrayList<ItemType>::isEmpty() const
 16: {
 17:    return itemCount == 0;
 18: }  // end isEmpty

 20: template<class ItemType>
 21: int ArrayList<ItemType>::getLength() const
 22: {
 23:    return itemCount;
 24: }  // end getLength

 26: template<class ItemType>
 27: bool ArrayList<ItemType>::insert(int newPosition, const ItemType& newEntry)
 28: {
 29:    bool ableToInsert = (newPosition >= 1) && (newPosition <= itemCount + 1) &&             
 30:                        (itemCount < maxItems);
 31:    if (ableToInsert)
 32:    {
 33:       // Make room for new entry by shifting all entries at
 34:       // positions >= newPosition toward the end of the array
 35:       // (no shift if newPosition == itemCount + 1)
 36:       for (int pos = itemCount; pos >= newPosition; pos--)
 37:          items[pos] = items[pos - 1];
 38:          
 39:       // Insert new entry
 40:       items[newPosition - 1] = newEntry;
 41:       itemCount++;  // Increase count of entries
 42:    }  // end if
 43:    
 44:    return ableToInsert;
 45: }  // end insert

 47: template<class ItemType>
 48: bool ArrayList<ItemType>::remove(int position)
 49: {
 50:    bool ableToRemove = (position >= 1) && (position <= itemCount);
 51:    if (ableToRemove)
 52:    {
 53:       // Remove entry by shifting all entries after the one at
 54:       // position toward the beginning of the array
 55:       // (no shift if position == itemCount)
 56:       for (int fromIndex = position, toIndex = fromIndex - 1; fromIndex < itemCount;
 57:                 fromIndex++, toIndex++)
 58:          items[toIndex] = items[fromIndex];
 59:          
 60:       itemCount--;  // Decrease count of entries
 61:    }  // end if
 62:    
 63:    return ableToRemove;
 64: }  // end remove

 66: template<class ItemType>
 67: void ArrayList<ItemType>::clear()
 68: {
 69:    itemCount = 0;
 70: }  // end clear

 72: template<class ItemType>
 73: ItemType ArrayList<ItemType>::getEntry(int position) const throw(PrecondViolatedExcep)
 74: {
 75:    // Enforce precondition
 76:    bool ableToGet = (position >= 1) && (position <= itemCount);
 77:    if (ableToGet)
 78:       return items[position - 1];
 79:    else
 80:    {
 81:       string message = "getEntry() called with an empty list or "; 
 82:       message  = message + "invalid position.";
 83:       throw(PrecondViolatedExcep(message)); 
 84:    }  // end if
 85: }  // end getEntry

 87: template<class ItemType>
 88: void ArrayList<ItemType>::setEntry(int position, const ItemType& newEntry) throw(PrecondViolatedExcep)
 89: {
 90:    // Enforce precondition
 91:    bool ableToSet = (position >= 1) && (position <= itemCount);
 92:    if (ableToSet)
 93:       items[position - 1] = newEntry;
 94:    else
 95:    {
 96:       string message = "setEntry() called with an empty list or "; 
 97:       message  = message + "invalid position.";
 98:       throw(PrecondViolatedExcep(message)); 
 99:    }  // end if
100: }  // end setEntry

102: //  End of implementation file.