LibRCG  3.1.1
iterator.c
Go to the documentation of this file.
1 
9 #include <stdlib.h>
10 #include "iterator.h"
11 
12 Iterator newIt(int size)
13 {
14  Iterator it=NULL;
15  if(size>0)
16  {
17  it=malloc(sizeof(SIterator));
18  if(it)
19  {
20  it->capacity=size;
21  it->size=0;
22  it->pos=0;
23  it->values=calloc(size,sizeof(void*));
24  if(!it->values)
25  {
26  free(it);
27  it=NULL;
28  }
29  }
30  }
31  return it;
32 }
33 
34 //==============================================================================
35 
37 {
38  free(it->values);
39  free(it);
40 }
41 
42 //==============================================================================
43 
44 int itAdd(Iterator it,void* val)
45 {
46  int result=0;
47  if(it->capacity==it->size) result=1;
48  else
49  {
50  it->values[it->size]=val;
51  it->size++;
52  }
53  return result;
54 }
55 
56 //==============================================================================
57 
58 int itNext(Iterator it,void** val)
59 {
60  int result=0;
61  if(it->pos>=it->size)
62  {
63  *val=NULL;
64  result=1;
65  }
66  else
67  {
68  *val=it->values[it->pos];
69  it->pos++;
70  }
71  return result;
72 }
73 
74 //==============================================================================
75 
77 {
78  if((it->pos)<(it->size)) return 1;
79  else return 0;
80 }
81 
82 //==============================================================================
83 
84 int itPrev(Iterator it,void** val)
85 {
86  int result=0;
87  if(!it->pos)
88  {
89  *val=NULL;
90  result=1;
91  }
92  else
93  {
94  it->pos--;
95  *val=it->values[it->pos];
96  }
97  return result;
98 }
99 
100 //==============================================================================
101 
103 {
104  if(!it->pos) return 0;
105  else return 1;
106 }
107 
108 //==============================================================================
109 
110 int itAt(Iterator it,int n,void** val)
111 {
112  int result=0;
113  if(n<0||n>=it->size)
114  {
115  *val=NULL;
116  result=1;
117  }
118  else *val=it->values[n];
119  return result;
120 }
121 
122 //==============================================================================
123 
124 int itSetPos(Iterator it,int n)
125 {
126  int result=-1;
127  if(!(n<0)&&!(n>it->size))
128  {
129  result=it->pos;
130  it->pos=n;
131  }
132  return result;
133 }
134 
135 //==============================================================================
136 
138 {
139  return it->pos;
140 }
int itPrev(Iterator it, void **val)
Provides the previous element of an iterator.
Definition: iterator.c:84
int itHasNext(Iterator it)
Checks if there is "next".
Definition: iterator.c:76
void ** values
Elements of this iterator.
Definition: iterator.h:26
int size
Number of elements of this iterator.
Definition: iterator.h:22
Iterator structure.
Definition: iterator.h:17
int itAt(Iterator it, int n, void **val)
Provides the element at the specified position of an iterator.
Definition: iterator.c:110
int itNext(Iterator it, void **val)
Provides the next element of an iterator.
Definition: iterator.c:58
int itGetPos(Iterator it)
Provides the current position of an iterator.
Definition: iterator.c:137
void itDelete(Iterator it)
Deletes an iterator.
Definition: iterator.c:36
int itSetPos(Iterator it, int n)
Sets the current position of an iterator.
Definition: iterator.c:124
int itAdd(Iterator it, void *val)
Adds an element to an iterator.
Definition: iterator.c:44
int capacity
Capacity of this iterator..
Definition: iterator.h:20
int itHasPrev(Iterator it)
Checks if there is "previous".
Definition: iterator.c:102
int pos
Current position of this iterator.
Definition: iterator.h:24
Implementation of an iterator.
Iterator newIt(int size)
Creates an iterator.
Definition: iterator.c:12

LibRCG © 2004-2015   Rui Carlos Gonçalves