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:35

u jellin?


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

struct iterator {
    size_t len;
    size_t off;
    int *objs;
};

struct iterator *iterator_create(void *o,size_t l)
{
    struct iterator *it = malloc(sizeof(*it));
    if(!it) exit(EXIT_FAILURE);
    it->len = l;
    it->off = 0;
    it->objs = o;
    return it;
}

void iterator_destroy(struct iterator *it)
{
    free(it);
}

int iterator_next(struct iterator *it)
{
    return it->objs[it->off++];
}

int iterator_hasnext(struct iterator *it)
{
    return it->off < it->len ? 1 : 0;
}


int main(int argc,char *argv[])
{
    int anus[] = { 0,1,2,3,4,5,6,7,8,9,10 };
    struct iterator *it = iterator_create(anus,11);
    int i;
   
    while(iterator_hasnext(it)){
        printf("%d\n",iterator_next(it));
    }
    return 0;
}

Name: Anonymous 2012-01-23 19:42

>>19
>>20
>>21
>>22

                                               `osss/                                                                  
    `:oooooooo/-`                              dMMMMMs                                                                 
  -sNMMMMMMMMNMMNmhso+/-`                      +NMMMMh                                                                 
`yNMMMMMMMMMMMMMMMMMMMMMNmdo.```````````````````-dMMMh                                 `-:::::-.                       
-MMdNMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNMMMMNyy+//////:------------------:/symNNMMMMMNNd-                     
-MMdNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNMNMMMMMMMMMMMMMNh.                   
-MMMMMMMMMMMMMMNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMh`                  
-MMMMMMMMMMMMMMMMMMMMMMMMMMMyo/--::+ooyhyyooooooooosyyyyyyyyyymMMMMMMMMMNNNMMMMMMMMMNMMMMMMMMMMMMMMMs                  
`oNMMMMNMMMMMMMMMMMMMMMMMNs-`  `-//+:-.....-:-----::-..`.```.-::::::::::...-//sshmMMMMMMMMMMMMMMMMMMN-                 
  -hNMMMMMMMMMMMMMMMMMdhs-``.://-..:/:///:::..````..::/:::::::::::::::/::::/::+/..:sdNMMMMMMMMMMMMMMN:                 
   `-smMMMMMMMMMMMMMy:```.:/:---//:::/:://///////+/-`    `````````....-----.`````  ``-ohMMMMMMMMMMdo.                  
      .ohmMMMMMMMMd/``.::-../+:-///:..```       `/o-           -///::::....:+/:.       `/dMMNMNNh:`                    
        `.:+NMMNh+`  ./.`./+--+/-``               .s`          ``/:         `.-//       `-NN:--.`                      
          .hNh/.`     ``-+--+/.`` ...:::::::..`    o`           :+`            `o-       `NN:`                         
        `-yNh.          `` ..`.:ohdmmNMMNNdmdmhy+.`.            /:    `.......` .`       `sNh.`                        
     ``/ymms-.```       ``.`.omdhmMMMMMMMN+..:+ymdy:.          `---/sydmdddddds/.         .yNd+-`                      
    `/dNdhy//////--  `:ooo-`yNmhhmNNNNNNNNyyo/-`-+dNd.`     .-.`-ymNMMMMmddddNNNo`++-:----:-:sdmh:`                    
  `/hNhso--..:+++++//-..-/:`:oyy++:--/s+-:+ohmmhs+dNd.`    `sdmdNMMNdhyyyo+++++-.```.-...--+/--omm/`                   
`.sNd++/``.+hmmhhhhhdmhso/-`     `.:ommo`   `.:ohdy:.       `./yNd+-.`            `.....-////:/:/NN-                   
-hNy.s-``-dNy:.` .+:./shhmmhyooooydmdo-`        ``             /Mh`       `:.```:odmhdddms+.s.`o:dM:                   
yNy``y `-dNs`   `/Nd-.```-ohdyssss/-`                          /Nm:.``   `/mdhohNNs:--.-+yy`+- `odM:                   
dN:``y  sMy` ``.:mNmmdo+-/mmNmssso/.``     `:`.:+++/`          `/dmdy:`   `:/sssso..dy`` ```.s`:+dM:                   
dN+` y  sMs`+yhdmNd.-+ydmdhosdmNMMMmdhssssssh/dmdyys.            .-+NNds-`     `` `-Mm-`  `:+:`o/mN:                   
+Nd``o:`:NN::++//mN+` `.:+ymmddyyshhmNMMMMMMNsMh` /sssss/-`       `/mNmNy/-.:sydy``oMMm/``::../ohNy`                   
-dNs-.s.`omd.  ``oMN+-``   .sNmhmmmhyhhyydmNm+mmy.sdsoohho```.` `.smmsoh++dNNMNm+-oNNmMh`.:/::/yNh`                    
`.sNm:-+/-::`    :sNMNds/-``+Ny`..:+oydmdmdhs+/+o.`.`       :myoymmhsNMMMMMNmho+smmmNyNN:-.` .dNy.                     
  `ommo:-/:/`     `oNNdhmmdssNNy-` `` `../+dNNmddyy++:--..``.+sss/-dmmNNNmhsyhmmNN+/NNmM+`  `hNy`                      
   `.smNh+-`       `:dNs::ohmMMMNy++:.`   `mN+--/+sshdmmmddddhyyyyyyyhmddNmNdo:.oNh`yMMM+  `:Nm.                       
     `-smmo.        `-hNh:``/NMhmNMMNmds/:+NN.       ``-NN:-:+++sNmo++/---+Nd. `/Nd.+MMM+   +My`                       
       `-yNh.         `+mN+..mM-.:ohdNNMMMMMds//:.`````.NN``````.dM:````..-dNo:/mMNNMMMM+   +My`                       
         `hNy`         `-sNddNy.    `-+oomMNNNNMMNdhhhhhMMhhhhhhhNMdhhhhmNNNMNMMMMMMMMMM+   +My`                       
          -dNs`          `-yNmo-`       `sNs:/ohNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNMN/   +My`                       
          `-dNy-`          `-sdmh+.`    :dN+    ..:/oyNNmNNMMMMMMMMMMMMMMMMMMMMMNmMNdyNd`   +My                        
            `+NNo-``          `/ymNy+.`-mN/`         -Mm`.-////+mMdyyyyhNNys+dNm:yNdoNN:    +My                        
             `:smNs.``:`` `:-.````/yNNddNh.``        -Mm`      :Nm-`  .hNy``sNm--ddsNN/`    +My                        
                `omNy/-/++-`-//+:.```:ohmNmdss/-`````+Nm`     `oNh`  `yNd.`/NNooshmmy:`    `+Ny                        
                 `sMMNds:`:+++-`./++-` ```:oohdNNNNdhdNdyooooooNMhoosdNNmhNNNMmhoo/.`       /Nm.                       
                `hMm+-odNNh/.`:++:-.-/++/-`   ````.::::+osooooossooooo:::::`````   --`  `   `mN+                       
              -hmMm-   `./hmNds-.`./+//-.-:///:.``     -::::::::::::::::.       `-o/`   s`  `+My                       
             -mMNMMdo/-`   `:odmNmy+/..:/+//:/:///+::/----------`````````  `-::++:`  ``-y`   +My                       
            /NMmNNmNNNNNh+.  ```-/shmNds/.```.-:://///+/:-------/::::::::::/--```  `:++:`    +My                       
          `sNMNmNMMMMNNmmNNh+.    ```:ohmNds/.`` ``````--:///::::::/:::::::::::::///-``     `hMd:`                     
         -mMdhNMNNNMMMMMMNNmNNy/:.     ``:ohmNho/.`          ``````````````````````       `.yNmmNms:`                  
        :mMh``-omMNmmNMMMMMMNmNNNNmdy+:`   ``:ohmmhyyhs+:.````                          `./dNs.`:smNm+`                
       .mMy`    `+dMNmNNMMMMMMMNNNmNNNNNdo/-`  `.:+sssydmNmdyy+/--``                ``-/ymmy:`    `/dMms.              
       yMm`       `-sNMMmNNNMMMMMMMMMNNmNNNNNmhso//////+ooyhhNNNNNmmhys+++++++++++sydmNNNho+////////+yNMm-             
      :NMNo          ./shNNNNNmNMNNNMMMMNMNNNmNNNNNNNNNNNNNmmNNNNNNNNNmmmmmNNNNNNmmNNNNNNNNNNNNNNNNNNNNdMN:            
     .mMNMN/            `./MMMMmmNNNmNNNNNMMMMMNNMMMMMMMMMMNNNNNmmNNNNmmdNmNNMMMMNNNNNNNMMMMMMMMMMMMMMNNdMN+           
     hMNdmNNy-            `:+yMMMd+yydmNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNmmMN/          
    oMNmMMmNNNy:            `yMN:`   `..-+yhdmNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNmMMMMMMMNNNNmNNNNmMm`         
   /NMdMMMMNmmMNs.         `sMN:           ```.-:/+ossssssssssssssssssssssssssssssssssyNMNNNNNNNNNNNmdh+-.-NMs         
  .NMMmmMMMMMNmmMd/`      .hMMh-                                                       /smMMhsoooo/-.`     sMN-        
  sMNmMNmNMMMMMNmNNdyo+///yMNNNNh/.                                                      -yNNy-          -omMMd`       
 `mMy.yNNNmmNNNMMNmmNNNNNMMNmNNmNNmdyo/-.                                                  -yNNy.  `.-+ydNNNmNMo       
 `NMs `-ohdmNNNmNNNMMNNmNMmNMMMMNNmNNNNNmho//:.`                                             -dMmdhdmNNNNmNNMdMN+      
 `NMs     `.:ohmNNNmNNNmMmmNMMMMMMMMMNNNmmNNNNmdho/--.`                                       .hMMdNNNNNMMNNNNMNNo`    
 `NMs          ./+ymNNNMMNNNNmNMMMMMMMMMMMNNNNNNNNNNNmdyo+/::--............................:ohdmMMdMMMMNNNNNNh+/NMo    
 `NMs              .-:yMM+:smNNNNNNMMMMMMMMMMMMMMNNNNNNNNNNNNNmmmmmmmmmmmmmmmmmmmmmmmmmmmmmNNNNNmMNmNNmNNmy+-`  /NMo   
 .NMs                :NMy`  .:+ymNNNNNNNNMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMMmmMNNmdy:`       +NNo` 
 yMMh-`             `dMm`       .:/sdmNNNMNNmNMNMMNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMmMm-.`       `:+sNMMs 
 :mMMNdso+++++++++++sMMo``           .-/ooydmmNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNmNmmMd        `:hMNNNNMm`
  -mMMdNNNNNNNNNNNNNNMMNmdyo:.`             `--:/osyhhhdddddddddddddddddddddddddddddddddddddddmmmNMm-----+ohdNNmNNNmMm`
   -mMmNNNMMMMMMMMMMmmMNmmdNNmdhys/-..``                                                      `..hMMNNNNNNNNNNNMMMmNMo 
    -dmddmNNNNNNNNNNmhmmmmhhmmdmddmmmdhyo/-``                                                    ymdmmmmmmmmNNNNNddmy` 
     ````````````````````````````````````````                                                    ````````````````````  
                                                                                                                       
                      `......`               `.:/      .:/`    .:                        .::-`                         
                      .+Mm-:hNo              `:Md     `-NN`  `/s/                       .y/+Nd`                        
                       -Mm``oNs.:+-++ .///o:` `Md-+s/`  dN` `/+/s+`.:+::oo-.+s/  `.//o: `` :mh`                        
                       -Mm./+: .hMo::.mh` +Ms `Md-.oMh  dN` yM.`sN/`oMy.:Mm-.hM: oN-`sN/  +y:                          
                       -Mm      yM-  /My  .Mh `Mh  `Ny  mN` dM+://. +Mo `Nm  oM: dM/:+o-  +`                           
                      `+NN-`   .dN+. `hm-`om: `Md.`/o``-mN: :dh/-:`.sNy.:Nm- sN+`/my.`.` -Nh`                          
                      `....`   `...`   .::.   `--:-    ....   `..  `...`...` `..` `-::.   -.                           
                                                                                                                                        

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