/** * Creates the iterator containing one element. Does not support the remove * operation. */ Iterator * ITR_Singleton(IElementC element) { SingletonIterator * si = MEM_New(SingletonIterator); if (si) { ITR_Init(&si->itr, &singletonIterator); si->element = (IElement)element; si->hasNext = True; return &si->itr; } else { return NULL; } }
/** * Creates the read-only iterator which doesn't support remove operation */ Iterator * QUEUE_ConstIterator(const Queue * q) { if (QUEUE_IsEmpty(q)) { return ITR_Empty(); } else { QueueIterator * qi = MEM_New(QueueIterator); if (qi) { ITR_Init(&qi->itr, &queueConstIterator); qi->entry = NULL; qi->next = q->head.next; return &qi->itr; } else { return NULL; } } }
/** * Creates the iterator */ Iterator * QUEUE_Iterator(Queue * q) { if (QUEUE_IsEmpty(q)) { return ITR_Empty(); } else { QueueIterator * qi = MEM_New(QueueIterator); if (qi) { ITR_Init(&qi->itr, &queueIterator); qi->entry = NULL; qi->next = QUEUE_First(q); return &qi->itr; } else { return NULL; } } }
/** * Creates the iterator that allows to filter the value returned by the * iterator and substitute it with something else. NULL callback means * no filtering, i.e. the default behavior provided by the target iterator. */ Iterator * ITR_Filter(Iterator * target, ItrFilterNext fnext, ItrFilterRemove fremove, void * ctx) { ASSERT(target); if (target) { FilterIterator * fi = MEM_New(FilterIterator); if (fi) { ITR_Init(&fi->itr, &filterIterator); fi->target = target; fi->next = fnext; fi->remove = fremove; fi->ctx = ctx; return &fi->itr; } } return NULL; }
void main() { Lcd_Init(); //TFT Screen Init LCD_Clear(BLACK); //fill screed with black color BACK_COLOR=BLACK; POINT_COLOR=GREEN; DispStr(0,0,"Screen Initialized!"); DispStr(0,1,"MCU:12C5A60S2,Speed:1MIPS"); //Display MCU Information if(ReadTemp()!=0) { DispStr(0,2,"DS18B20 Ready!"); } else { DispStr(0,2,"Ds18b20 Error."); } UART_Init(); //UART Init DispStr(0,3,"UART Ready!"); ITR_Init(); //Interrupt Init DispStr(0,4,"Interrupt Onset."); DispStr(0,5,"Connecting"); AT_CMD(); //ESP8266 Init DispStr(0,6,"Connectted!"); DispStr(0,12,"Real:"); while(1) { TempVal=ReadTemp(); //Read Celsius DispTemp(TempVal); //Display Celsius Value if(Cnt>30) { Send_TempVal(TempVal); //Send Temprature to UART Cnt=0; } } }
/** * Initializer for the platform independent part of the directory iterator. * Assumes that the memory has been zeroed. */ void DIR_ItrInit(DirIterator * di, const Itr * type) { ITR_Init(&di->itr, type); STRBUF_Init(&di->dirName); STRBUF_Init(&di->fileName); }