// Monitored array interface. // In addition to the normal array operations, index and store, // maintain a count of memory faults in a private member. // // This version maintains an LRU stack of page numbers // and puts out a vector of stack depths (one element for each memory fault). // sdb July 2003 #include #include #if !defined ARRAY_H #define ARRAY_H struct Node // linked list for LRU "stack" { int pageNum; Node * next; Node (int page); // constructor ~Node (); // destructor }; /* const int TRUE = 1; const int FALSE = 0; extern int p; */ class MArray { public: MArray (int size); // constructor ~MArray (); // destructor void reset(); // initialize this MArray for reuse int& operator[] (int i); // return an lvalue for assignment void testFault(int i); // test for a page fault void setName (char * fileName); long getFault(); void setFault(long f); // set value of fault to f. long getRefs(); // total number of refs. void setRefs (long r); // set value of refs to r. int getSize(); void setSize (int s); // set value of sz to s. void dump(); // dump array to stdout void setPrev (int n); // set initial page value void closeFile(); // close the output file private: int sz; // number of elements int * ptr; long fault; // count faults long refs; // count total refs int prevPage; // previous array ref Node * top; // top of "stack" of LRU page numbers // it's really a linked list. void lru (int i); // modify LRU stack if necessary, put out depth ofstream out; char * name; // file name for output }; #endif