// File: studentitem.C // // operations needed for ListNode and List Classes. #include #include #include #include #include "studentitem.h" //====================================================================== // Local Functions static void copyitem(ListItem& x, int ss, const char *nm, const char* mj) ; // Copy from *ptr2 to *ptr1 // static void copyitem(ListItem& x, int ss, const char *nm, const char* mj) { x.ssn = ss ; // Copy name field if (nm == NULL) { x.name = NULL ; } else { x.name = strdup(nm) ; if (x.name == NULL) { fprintf(stderr, "could not clone student\n") ; exit(1) ; } } // Copy major field if (mj == NULL) { x.major = NULL ; } else { x.major = strdup(mj) ; if (x.major == NULL) { fprintf(stderr, "could not clone student\n") ; exit(1) ; } } } //====================================================================== // default constructor // ListItem::ListItem() { ssn = 0 ; name = NULL ; major = NULL ; } // alternate constructor // ListItem::ListItem(const ListItem& x) { copyitem(*this, x.ssn, x.name, x.major) ; } // Type conveter. The default values for nm and mj are NULL. // ListItem::ListItem(int ss, const char *nm, const char *mj) { copyitem(*this, ss, nm, mj) ; } // destructor // ListItem::~ListItem() { /* Debugging: printf("Student Item Destructor: this=%p\n", this) ; printf(" ssn=%09d, ", ssn) ; if (name != NULL) { printf("name=(%p,%s), ", name, name) ; } else { printf("name=(nil), ") ; } if (major != NULL) { printf("major=(%p,%s)\n", major, major) ; } else { printf("major=(nil)\n") ; } */ if (name != NULL) free(name) ; if (major != NULL) free(major) ; } // make a copy // ListItem *ListItem::copy() const { ListItem *newp ; newp = new ListItem ; copyitem(*newp, ssn, name, major) ; return newp ; } // Copy contents of host object into x // void ListItem::copyto(ListItem& x) const { copyitem(x, ssn, name, major) ; } // Compare data in host object with given data. // <0 is smaller, =0 is equal, >0 is bigger // int ListItem::compare(const ListItem& x) const { return ssn - x.ssn ; } // print to stdout // void ListItem::print() const { printf("%s (%09d), %s major\n", name, ssn, major) ; }