IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 16631


Ignore:
Timestamp:
Feb 23, 2008, 11:29:20 AM (18 years ago)
Author:
eugene
Message:

adding book shuffle function

Location:
trunk/Ohana/src/opihi
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/cmd.data/book.c

    r16434 r16631  
    77int book_getbook (int argc, char **argv);
    88int book_listbook (int argc, char **argv);
     9int book_shuffle (int argc, char **argv);
    910int book_npages (int argc, char **argv);
    1011int book_newpage (int argc, char **argv);
     
    2223  {1, "getbook",  book_getbook,  "get book name by location"},
    2324  {1, "listbook", book_listbook, "list pages in a book"},
     25  {1, "shuffle",  book_shuffle,  "shuffle pages in a book"},
    2426  {1, "npages",   book_npages,   "return number of pages in a book"},
    2527  {1, "newpage",  book_newpage,  "create a new page in a book"},
     
    4345    gprint (GP_ERR, "    book getbook  (where) [-var var]           : get book name\n");
    4446    gprint (GP_ERR, "    book listbook (book)                       : list a book\n");
     47    gprint (GP_ERR, "    book shuffle  (book)                       : randomize pages in a book\n");
    4548    gprint (GP_ERR, "    book npages   (book) [-var var] [-key key] : return number of pages in a book\n");
    4649    gprint (GP_ERR, "    book newpage  (book) (page)                : create a new page in a book\n");
  • trunk/Ohana/src/opihi/cmd.data/book_commands.c

    r16139 r16631  
    378378}
    379379
     380int book_shuffle (int argc, char **argv) {
     381
     382  int where, N;
     383  char *varName, *keyName, *keyValue;
     384  Book *book;
     385  Page *page;
     386
     387  if (argc != 2) {
     388    gprint (GP_ERR, "USAGE: book shuffle (book)\n");
     389    return FALSE;
     390  }
     391
     392  book = FindBook (argv[1]);
     393  if (book == NULL) {
     394    gprint (GP_ERR, "book %s not found\n", argv[1]);
     395    return FALSE;
     396  }
     397
     398  ShufflePages (book);
     399  return TRUE;
     400}
     401
    380402int book_setword (int argc, char **argv) {
    381403
  • trunk/Ohana/src/opihi/include/data.h

    r16119 r16631  
    2929  int Npages;
    3030  Page **pages;
    31   int *index;
     31  // int *index; (why did I define this?  is it not used?)
    3232  char **pageIDs;
    3333} Book;
     
    5252Page *GetPageRestricted (Book *book, int where, char *keyName, char *keyValue);
    5353Page *CreatePage (Book *book, char *name);
     54int ShufflePages (Book *book);
    5455int DeletePage (Book *book, Page *page);
    5556void ListPages (Book *book);
  • trunk/Ohana/src/opihi/lib.data/book.c

    r16466 r16631  
    2929    ALLOCATE (book[0].pages, Page *, book[0].NPAGES);
    3030    ALLOCATE (book[0].pageIDs, char *, book[0].NPAGES);
    31     ALLOCATE (book[0].index, int, book[0].NPAGES);
     31    // ALLOCATE (book[0].index, int, book[0].NPAGES);
    3232}
    3333
     
    4343    free (book[0].pages);
    4444    free (book[0].pageIDs);
    45     free (book[0].index);
     45    // free (book[0].index);
    4646    free (book);
    4747}
  • trunk/Ohana/src/opihi/lib.data/page.c

    r16459 r16631  
    106106    REALLOCATE (book[0].pages, Page *, book[0].NPAGES);
    107107    REALLOCATE (book[0].pageIDs, char *, book[0].NPAGES);
    108     REALLOCATE (book[0].index, int, book[0].NPAGES);
     108    // REALLOCATE (book[0].index, int, book[0].NPAGES);
    109109  }
    110110  ALLOCATE (page, Page, 1);
     
    112112  book[0].pages[N] = page;
    113113  book[0].pageIDs[N] = strcreate(name);
    114   book[0].index[N] = N;
     114  // book[0].index[N] = N;
    115115 
    116116  /* at this point, I should sort the index */
     117
     118  return (page);
     119}
     120
     121void sortpages (int *seq, Page **pages, char **pageIDs, int N) {
     122
     123# define SWAPFUNC(A,B){ Page *tmpPage; char *tmpID; \
     124  tmpPage = pages[A];   pages[A]   = pages[B];   pages[B] = tmpPage; \
     125  tmpID   = pageIDs[A]; pageIDs[A] = pageIDs[B]; pageIDs[B] = tmpID; \
     126}
     127# define COMPARE(A,B)(seq[A] < seq[B])
     128
     129  OHANA_SORT (N, COMPARE, SWAPFUNC);
     130
     131# undef SWAPFUNC
     132# undef COMPARE
     133}
     134
     135/* make a new named page */
     136int ShufflePages (Book *book) {
     137
     138  int i, N, *seq;
     139  Page *page;
     140
     141  N = book[0].Npages;
     142
     143  // generate a random index
     144  ALLOCATE (seq, int, N);
     145  for (i = 0; i < N; i++) {
     146    seq[i] = N * drand48();
     147  }
     148
     149  // sort the pages by the random index
     150  sortpages (seq, book[0].pages, book[0].pageIDs, N);
     151  free (seq);
    117152
    118153  return (page);
     
    140175    book[0].pages[i] = book[0].pages[i + 1];
    141176    book[0].pageIDs[i] = book[0].pageIDs[i + 1];
    142     book[0].index[i] = book[0].index[i + 1];
     177    // book[0].index[i] = book[0].index[i + 1];
    143178  }
    144179  book[0].Npages --;
     
    148183    REALLOCATE (book[0].pages, Page *, book[0].NPAGES);
    149184    REALLOCATE (book[0].pageIDs, char *, book[0].NPAGES);
    150     REALLOCATE (book[0].index, int, book[0].NPAGES);
     185    // REALLOCATE (book[0].index, int, book[0].NPAGES);
    151186  }
    152187
Note: See TracChangeset for help on using the changeset viewer.