Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Co-routine

Name: Anonymous 2012-01-23 17:40

Is this iterator implementation well-defined?


#include <stdio.h>
#include <stdlib.h>

typedef struct it {
    int *start;
    int len;
    struct it *next;
} iterator_t;

static iterator_t *head = NULL;

static iterator_t *iterator(int array[], int length)
{
    static iterator_t *ptr = NULL;

    if (head == NULL) {
        head = malloc(sizeof(iterator_t));
        ptr = head;
    } else {
        ptr->next = malloc(sizeof(iterator_t));
        ptr = ptr->next;
    }

    ptr->start = array;
    ptr->len = length;
    ptr->next = NULL;

    return ptr;
}

static int iterate(iterator_t *it)
{
    static iterator_t *current = NULL;
    static int state = 0, *ptr;

    if (it != NULL) {
        /* Initialize */
        current = it;
        ptr = it->start;
        state = 0;
    } else {
        /* Co-routine */
        switch (state) {
            case 0: while (ptr != (current->start + current->len)) {
                        state = 1;
                        return *ptr;
                       
                        case 1: ++ptr;
                    }
        }
    }

    return -1;
}

int main(void)
{
    iterator_t *it, *ptr;
    int n, numbers[] = { 4, 5, 6, 0, 1, 9, 0, 0, 8 };

    it = iterator(numbers, sizeof(numbers)/sizeof(int));

    iterate(it);
    while ((n = iterate(NULL)) != -1) {
        printf("%d\n", n);
    }

    it = head;
    while (it) {
        ptr = it->next;
        free(it);
        it = ptr;
    }
    return 0;
}

Name: Anonymous 2012-01-23 19:58

>>28
y r u so easy to troll kodak-kun?

                                                                                                                       
                                                                                                                       
                                   ````.................````                                                           
                         .+hmmmNNNNNNNNNNNNNNNNmmmmmmmmmmmmNNNNNmmddhyysoo+//:-.`                                      
                      `/hNNy+::::----...````.://:://////////::---://+oossyhdddmNNNmdhso/:-`                            
                     /mMd/`            .:/++/-``````````````..-::::::::---::::/so++osyhmNNms:`                         
                   -hMm/`          `://:.`.-:://////////////:-.`        ````...---..`.:/.:ohNNy/.                      
                  +NMs`        `-:/-`.://+/-............`  ````..----::::::::--.```   `/:  `.+hNNy:`                   
                `sMN/       `-::.`./+/-:oo++/:-.....---o+.             `.-::/:::-.`..`        `-sNNd/                  
               `yMN:      ./:```:+/:/:::.`             `++`            //-...```````./oo-        .sNM-                 
               yMN:       .. `/o:-so-`                   +-             :o`           `-y-         NM+                 
              oMN:           --`.o-    .-://+++/::-.`    :-             s`              `/         mMy                 
            -sMN:               `  ./sdmNMMMMMMMNmmmmho:`               s     ``......`            +MN+`               
          -yNMN/```           `  `omNdNMMMMMMMMN:.-:/sdNms-             :`-+shdmmmdmmmd+-           /mNh/`             
        :hNMNNmo+//:-.`   .oss/``hMMmymMMMMMMMMmss+-` `/NMN+       `.` .odNMMMMMMdhhmMMMm-`://:-...-..omNd+.           
      :hNNdm+-...-:///:--.`-:-/.`shdhyo/:::/o/+sydmNdyo+dMMy       smmdmMMMNmmdddhhyso+:-` ..-...`.-/+-./dMm/          
    `sNmo+o.  `/ydmmmddmmmho:.-`        `:ymm`   `.-/sdNmy/`       `:+hMMy/-.``                   :+::/+:.sMN`         
   `hMh-++   /dNd+-.``:--+hmNNdyo/----/sdNms-         `-.             `MM.         `     .+hhhhhhh+-./+ .s.MM.         
   sMh` o  `sMm/`    :Nd   `-/oyddmmmmmdo:`                           `MM/        -dy/-:smMdo///+hmm:`h  o:MM.         
  `MM-  o  :MM:      hMMy+-`      ``````          `   `..`            `hNNy/.     `sdmmNNNy``o:   .-` s  +-NM:         
  -MM`  s  :MN` `-/oyMNyhmmmho-.`         ```````.s.ohdmmd/             -+hNmy/.     `....` +Md      .o  s.MM:         
  .MM/  s` -MM:-dNmmmMN` `./smNmhs/.`    ./-----::-sMd/:::-..``            +MMMmo`          sMNo.  `+s. .hsMN`         
   hMm. :/  dMN...` .mMy`    `-+hNMNmho/-``        oMd- /dmmmmmh:         -dMNNNh/:/-`     `dMMMy  `..-/oNMM/          
   .dMm- o.`.sm:     sMMm+.`     hMhoydmNmdhs+:.```.hNN:-h+--:++:  `-```-sNNo`.`   `:/-  .omMMMMN``/+/.`oMN+           
    `yNN:`:++:.      .sNMMMds+-``hMd`  `.:/ohmNNmmdhso/.``         :NNhdNNs.         `.+hNMmMMMMM:     sMN:            
      :dNy+:.--`       -dMMddNMNhmMMd-`       `-:mMNNNNNmhys+/:-.```:++++.    ```.-/sdNNNMN-+MMMMo    oMN-             
       `+mMMy-          `hMN-`:oyNMMMMds/-``    .MM:`.-:/oshmNNMMNmdddhhhhhhhhdmmNMMNo:``dM+ sMMMs   `NM/              
         `oNMy-          `oNN/   oMMNNMMMMNmhs+-oMm           /Mm..-:/+/NMm///:.``/MM-   mMo.yMMMy   :MM.              
           .yMM/           :dMh- .MM-.:+ymMMMMMMMMd+/-`       /Mm       oMd       `mMm.-/MMMMMMMMy   +MM`              
             hMN.            +NMmdMy      ./ohdMMMMMMMMNmhyysyhMNyyyyyyyhMNyyyyhdmNMMMMMMMMMMMMMMo   +MN`              
             `dMm.            `oNMN-           dMyoyhNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM:   +MM`              
              `hMm:             `+dMms-       -NM:    `:+shdNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMMN`   /MM.              
                +NMs.              -sNMd+.   :NMs           oMy:/osyhhhmMMMNmmmMMMNNhmMMdoNMm/NMo    -MM-              
                 `sNNo.              `/yNNdyoNMo            sMy        hMd:`  `mMm```dMy`+MMoNMd`    `MM:              
                   .sNNs- -o+.  .-//.   `:sdNMMy+:.         yMy       `NM.    :MN: `dMN.`:NMMMh.      mM+              
                     .sNNh/../++:``-+o+-`  ``:+ydNNNdhso+/::NMh`      +MM`  .+NMy:+yMMNNNNmyo-        yMy              
                       .ymNNho:.-++/:.`-::--`   ``-/+syhddmmNNNNmmmmmNNMMmmmNMMNmddhyso/-.`           oMd              
                         `./ymNmy/.`-/+/:-`.:+++:.      `````....-----------...`````       ./    .    :MN              
                             `-odNNy/-.``-//:--.-/++/:.       -----::::::::::--`         .:+.    +.   .MM`             
                                `-shmmNmho:.``.-::--:////:-.`````...--------.......-..---``    `:o`   `NM.             
                                   ``.-+ydNNds/-  ```.-:::::----.```````````......`````     .:+/-`     NM:             
                                         `.:sdNNds/.       ````.--::::::------------------/+:.`       :NM:             
                                             `./ydNmh+-`                 ``````...........`          +NMy`             
                                                 `-+ydmmysso+/:-.`                                 .oNNo`              
                                                     `./osyhdmmNmdhs+:-.`                      `-+hmms.                
                                                            ``.-/oyhmmmmdhs+/:-....```...--:+shmNmy/.                  
                                                                    `.-/+shddmmmdddddddddmmmdyo/-`                     
                                                                            `...---------..`                           
                                                                                                                       
                                              ````         ````                                     `..``              
                                              oddd-        yddd`                                 `+hdmmmds-            
            ```` `..`    `````..`   `...``    yMMM:`..`    dMMM`    `...``    ```` `..`   `..`   yMMMyomMMN-           
            ymmdsdNNmy.  dmmhhNNo :ydNNNmds.  yMMMhmNNmy-  dMMM`  /ymmmmmds-  ymmdsdNNmh+hmNNd+  :/+/`:mMMN-           
            hMMMd+oNMMm` NMMMdoo`+MMMy//mMMN- yMMMd+oNMMN. dMMM` sMMMo::dMMN- hMMMdohMMMNsoNMMM.    :dMMms.            
            hMMM-  yMMM- NMMM.   mMMN`  +MMMo yMMM:  sMMM/ dMMM` NMMMhhhdNNNo hMMM- -MMMh  yMMM-    dNNd.              
            hMMMy:/mMMN. NMMN    sMMM+.-hMMN: yMMMh::mMMN. dMMM` yMMM+--+o+/. hMMM. -MMMy  yMMM-   `yyyo               
            hMMMmNMMNd:  mNNm     +dNNNNNNh-  yNNNhNNMNd:  hNNN` `omNNmmNNd+  yNNN. -NNNy  yNNN-   `NNNd               
            hMMM..--.    ....       `-:--`    `... .-:.    ....     .-::-.    ....   ....  ....     ....               
            hMMN.                                                                                                      
            ````                                                                                                       
                                                                                                                                                        

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List