/[radius]/radius/lib/list.c
ViewVC logotype

Diff of /radius/lib/list.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.4 by gray, Wed Apr 30 20:11:38 2003 UTC revision 1.5 by gray, Sat May 3 10:33:04 2003 UTC
# Line 39  struct iterator { Line 39  struct iterator {
39          struct iterator *next;          struct iterator *next;
40          LIST *list;          LIST *list;
41          struct list_entry *cur;          struct list_entry *cur;
42            int advanced;
43  };  };
44    
45  struct list *  struct list *
# Line 89  iterator_create(LIST *list) Line 90  iterator_create(LIST *list)
90          itr->list = list;          itr->list = list;
91          itr->cur = NULL;          itr->cur = NULL;
92          itr->next = list->itr;          itr->next = list->itr;
93            itr->advanced = 0;
94          list->itr = itr;          list->itr = itr;
95          return itr;          return itr;
96  }  }
# Line 122  iterator_first(ITERATOR *ip) Line 124  iterator_first(ITERATOR *ip)
124          if (!ip)          if (!ip)
125                  return NULL;                  return NULL;
126          ip->cur = ip->list->head;          ip->cur = ip->list->head;
127            ip->advanced = 0;
128          return iterator_current(ip);          return iterator_current(ip);
129  }  }
130    
# Line 130  iterator_next(ITERATOR *ip) Line 133  iterator_next(ITERATOR *ip)
133  {  {
134          if (!ip || !ip->cur)          if (!ip || !ip->cur)
135                  return NULL;                  return NULL;
136          ip->cur = ip->cur->next;          if (!ip->advanced)
137                    ip->cur = ip->cur->next;
138            ip->advanced = 0;
139          return iterator_current(ip);          return iterator_current(ip);
140  }        }      
141    
142  static void  static void
143  _iterator_advance(ITERATOR *ip, struct list_entry *e)  _iterator_advance(ITERATOR *ip, struct list_entry *e)
144  {  {
145          for (; ip; ip = ip->next)          for (; ip; ip = ip->next) {
146                  if (ip->cur == e)                  if (ip->cur == e) {
147                          ip->cur = e->next;                          ip->cur = e->next;
148                            ip->advanced++;
149                    }
150            }
151  }  }
152    
153  void *  void *

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26