Changeset 4704
- Timestamp:
- Aug 3, 2005, 5:49:36 PM (21 years ago)
- Location:
- trunk/Ohana/src/opihi
- Files:
-
- 3 edited
-
include/data.h (modified) (1 diff)
-
include/shell.h (modified) (1 diff)
-
lib.data/queues.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/include/data.h
r4697 r4704 44 44 void PushQueueUnique (Queue *queue, char *line, int Key); 45 45 void PushQueueReplace (Queue *queue, char *line, int Key); 46 int InitQueue (Queue *queue); 47 int DeleteQueue (Queue *queue); 48 int PrintQueue (FILE *f, Queue *queue); 46 49 47 50 /* in sort.c */ -
trunk/Ohana/src/opihi/include/shell.h
r4689 r4704 114 114 115 115 char *memstr (char *m1, char *m2, int n); 116 int write_fmt (int fd, char *format, ...); 116 117 117 118 # endif -
trunk/Ohana/src/opihi/lib.data/queues.c
r4697 r4704 1 1 # include "data.h" 2 2 3 /* These functions are somewhat fragile: we cannot do multiple CreateQueue 4 invalidates the pointer from FindQueue. Do we need a 'delete queue' 5 function? 6 */ 7 8 Queue *queues; /* queue to store the list of all queues */ 9 int Nqueues; /* number of currently available queues */ 3 Queue **queues; /* queue to store the list of all queues */ 4 int Nqueues; /* number of currently defined queues */ 5 int NQUEUES; /* number of currently allocated queues */ 10 6 11 7 void InitQueues () { 12 8 Nqueues = 0; 13 ALLOCATE (queues, Queue, 1); 9 NQUEUES = 16; 10 ALLOCATE (queues, Queue *, NQUEUES); 14 11 } 15 12 … … 20 17 21 18 for (i = 0; i < Nqueues; i++) { 22 fprintf (stderr, "%-15s %3d\n", queues[i] .name, queues[i].Nlines);19 fprintf (stderr, "%-15s %3d\n", queues[i][0].name, queues[i][0].Nlines); 23 20 } 24 21 return; … … 31 28 32 29 for (i = 0; i < Nqueues; i++) { 33 if (!strcmp (queues[i] .name, name)) {34 return (&queues[i] );30 if (!strcmp (queues[i][0].name, name)) { 31 return (&queues[i][0]); 35 32 } 36 33 } 37 34 return (NULL); 35 } 36 37 /* make a new named queue */ 38 int InitQueue (Queue *queue) { 39 40 int i; 41 42 for (i = 0; i < queue[0].Nlines; i++) { 43 free (queue[0].lines[i]); 44 } 45 queue[0].Nlines = 0; 46 queue[0].NLINES = 16; 47 REALLOCATE (queue[0].lines, char *, queue[0].NLINES); 48 return (TRUE); 38 49 } 39 50 … … 41 52 Queue *CreateQueue (char *name) { 42 53 54 int N; 43 55 Queue *queue; 44 56 … … 46 58 if (queue != NULL) return (queue); 47 59 60 N = Nqueues; 48 61 Nqueues ++; 49 REALLOCATE (queues, Queue, Nqueues);50 queue = &queues[Nqueues - 1];62 CHECK_REALLOCATE (queues, Queue *, NQUEUES, Nqueues, 16); 63 ALLOCATE (queue, Queue, 1); 51 64 queue[0].Nlines = 0; 52 queue[0].NLINES = 1 0;65 queue[0].NLINES = 16; 53 66 queue[0].name = strcreate (name); 54 67 ALLOCATE (queue[0].lines, char *, queue[0].NLINES); 68 queues[N] = queue; 55 69 return (queue); 70 } 71 72 /* delete a queue */ 73 int DeleteQueue (Queue *queue) { 74 75 int i, N, NQUEUES_2; 76 77 /* find queue in queue list */ 78 N = -1; 79 for (i = 0; i < Nqueues; i++) { 80 if (queues[i] == queue) { 81 N = i; 82 break; 83 } 84 } 85 if (N == -1) return (FALSE); 86 87 for (i = N; i < Nqueues - 1; i++) { 88 queues[i] = queues[i + 1]; 89 } 90 Nqueues --; 91 NQUEUES_2 = MAX (16, NQUEUES / 2); 92 if (Nqueues < NQUEUES_2) { 93 NQUEUES = NQUEUES_2; 94 REALLOCATE (queues, Queue *, NQUEUES); 95 } 96 97 free (queue[0].name); 98 for (i = 0; i < queue[0].Nlines; i++) { 99 free (queue[0].lines[i]); 100 } 101 free (queue[0].lines); 102 free (queue); 103 return (TRUE); 56 104 } 57 105 … … 222 270 char *PopQueue (Queue *queue) { 223 271 224 int i ;272 int i, NLINES_2; 225 273 char *line; 226 274 … … 228 276 line = queue[0].lines[0]; 229 277 230 for (i = 1; i < queue[0].Nlines; i++) {231 queue[0].lines[i -1] = queue[0].lines[i];278 for (i = 0; i < queue[0].Nlines - 1; i++) { 279 queue[0].lines[i] = queue[0].lines[i+1]; 232 280 } 233 281 queue[0].Nlines --; 234 282 235 if (queue[0].Nlines < queue[0].NLINES - 20) {236 queue[0].NLINES -= 20;237 queue[0].NLINES = MAX (queue[0].NLINES, 10);283 NLINES_2 = MAX (16, queue[0].NLINES / 2); 284 if (queue[0].Nlines < NLINES_2) { 285 queue[0].NLINES = NLINES_2; 238 286 REALLOCATE (queue[0].lines, char *, queue[0].NLINES); 239 287 } … … 241 289 } 242 290 291 int PrintQueue (FILE *f, Queue *queue) { 292 293 int i; 294 295 if (queue[0].Nlines == 0) return (TRUE); 296 297 for (i = 0; i < queue[0].Nlines; i++) { 298 fprintf (f, "%s\n", queue[0].lines[i]); 299 } 300 return (TRUE); 301 } 302
Note:
See TracChangeset
for help on using the changeset viewer.
