Lab 12: class list_t

Objectives:

To implement and exercise the templated list_t object iterators

Assignment

  1. Following lab8, and object notes,
  2. Use the same data_t object definition as in an earlier lab.
  3. Your code should be such that the following main() routine works unaltered:
    int main(int argc, const char *argv[])
    {
            NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
            NSString *str;
    
            int     num;
            char    nam[NAME_LEN];
            list_t *list = [(list_t *)[list_t alloc] init];
            litr_t *litr = nil;
            data_t *data = nil;
    
      NSLog(@"main start");
    
      while(scanf("%s %d",nam,&num) == 2) {
      //fprintf(stderr,"%s %d\n",nam,num);
      //str = [[NSString alloc] initWithCString: nam]; // deprecated, do not use
        str = [[NSString alloc] initWithUTF8String: nam];
        // cast sender to proper class type eliminates warning about amgiguous init
      //[list insert: [list end]: [(data_t *)[data_t alloc] init: str: num]];
        [list push_back: [(data_t *)[data_t alloc] init: str: num]];
      }
    
      NSLog(@"printing list");
      litr = [list begin];
      while(![litr equiv: [list end]]) {
        [[litr data] print: stderr];
        [litr next];
      }
    
      NSLog(@"printing list");
      for(litr = [list begin]; ![litr equiv: [list end]]; [litr next])
        [[litr data] print: stderr];
    
      NSLog(@"popping list");
      [[list front] print: stderr];
      [list pop_front];
    
      NSLog(@"printing list");
      for(litr = [list begin]; ![litr equiv: [list end]]; [litr next])
        [[litr data] print: stderr];
    
      NSLog(@"deleting list");
      while(![list empty]) [list pop_front];
    
      NSLog(@"printing list");
      for(litr = [list begin]; ![litr equiv: [list end]]; [litr next])
        [[litr data] print: stderr];
    
      NSLog(@"deleting list again");
      while(![list empty]) [list pop_front];
    
      NSLog(@"printing list again");
      for(litr = [list begin]; ![litr equiv: [list end]]; [litr next])
        [[litr data] print: stderr];
    
      [pool drain];
    
      return 0;
    }
    	
  4. Sample input (entered by user):
    Mike    1234
    Bill    3212
    Sarah   1321 
    John    1021
    Carol   3223
    Debbie  4231
    Gary    9321
    Ann     1231
    Dale    7231
    Lynn    8133
    Patty   9999
    	
  5. Sample output (note that the timestamps will differ):
    2013-01-22 14:33:57.347 main[87921:903] main start
    2013-01-22 14:33:57.364 main[87921:903] printing list
    Mike 1234
    Bill 3212
    Sarah 1321
    John 1021
    Carol 3223
    Debbie 4231
    Gary 9321
    Ann 1231
    Dale 7231
    Lynn 8133
    Patty 9999
    2013-01-22 14:33:57.364 main[87921:903] printing list
    Mike 1234
    Bill 3212
    Sarah 1321
    John 1021
    Carol 3223
    Debbie 4231
    Gary 9321
    Ann 1231
    Dale 7231
    Lynn 8133
    Patty 9999
    2013-01-22 14:33:57.364 main[87921:903] popping list
    Mike 1234
    2013-01-22 14:33:57.365 main[87921:903] printing list
    Bill 3212
    Sarah 1321
    John 1021
    Carol 3223
    Debbie 4231
    Gary 9321
    Ann 1231
    Dale 7231
    Lynn 8133
    Patty 9999
    2013-01-22 14:33:57.365 main[87921:903] deleting list
    2013-01-22 14:33:57.366 main[87921:903] printing list
    2013-01-22 14:33:57.366 main[87921:903] deleting list again
    2013-01-22 14:33:57.367 main[87921:903] printing list again
    	

Turn in

Turn in all of your code, in one tar.gz archive of your lab12/ directory, including:
  1. A README file containing
    1. Course id--section no
    2. Name
    3. Lab description
    4. Brief solution description (e.g., program design, description of algorithm, etc., however appropriate).
    5. Lessons learned, identified interesting features of your program
    6. Any special usage instructions
  2. Makefile
  3. source code (.h headers and .c source)
  4. object code (do a make clean before tar)

How to hand in

See submit notes.