00001
00009 #include <stdlib.h>
00010 #include "iterator.h"
00011
00012
00013 Iterator newIt(int size)
00014 {
00015 Iterator it=(Iterator)malloc(sizeof(SIterator));
00016
00017 if(it)
00018 {
00019 it->capacity=size;
00020 it->size=0;
00021 it->pos=0;
00022 it->values=(void**)calloc(size,sizeof(void*));
00023
00024 if(it->values) return it;
00025 else
00026 {
00027 free(it);
00028 return NULL;
00029 }
00030 }
00031 else return NULL;
00032 }
00033
00034
00035
00036 void itDelete(Iterator it)
00037 {
00038 free(it->values);
00039 free(it);
00040 }
00041
00042
00043
00044 int itAdd(Iterator it,void* val)
00045 {
00046 if(it->capacity==it->size) return 1;
00047 else
00048 {
00049 it->values[it->size]=val;
00050 it->size++;
00051 return 0;
00052 }
00053 }
00054
00055
00056
00057 int itNext(Iterator it,void** val)
00058 {
00059 if(it->pos>=it->size)
00060 {
00061 *val=NULL;
00062 return 1;
00063 }
00064 else
00065 {
00066 *val=it->values[it->pos];
00067 it->pos++;
00068 return 0;
00069 }
00070 }
00071
00072
00073
00074 int itHasNext(Iterator it)
00075 {
00076 if((it->pos)<(it->size)) return 1;
00077 else return 0;
00078 }
00079
00080
00081
00082 int itPrev(Iterator it,void** val)
00083 {
00084 if(!it->pos)
00085 {
00086 *val=NULL;
00087 return 1;
00088 }
00089 else
00090 {
00091 it->pos--;
00092 *val=it->values[it->pos];
00093 return 0;
00094 }
00095 }
00096
00097
00098
00099 int itHasPrev(Iterator it)
00100 {
00101 if(!it->pos) return 0;
00102 else return 1;
00103 }
00104
00105
00106
00107 int itAt(Iterator it,int n,void** val)
00108 {
00109 if(n<0||n>=it->size)
00110 {
00111 *val=NULL;
00112 return 1;
00113 }
00114 else
00115 {
00116 *val=it->values[n];
00117 return 0;
00118 }
00119 }
00120
00121
00122
00123 int itSetPos(Iterator it,int n)
00124 {
00125 int tmp;
00126
00127 if(n<0||n>it->size) return(-1);
00128 else
00129 {
00130 tmp=it->pos;
00131 it->pos=n;
00132 return tmp;
00133 }
00134 }
00135
00136
00137
00138 int itGetPos(Iterator it)
00139 {
00140 return it->pos;
00141 }