void AFormList::_bCopy(const AFormList &flSource) { ABaseElement::_bCopy(flSource); //a_Parent copy (do not call other list's _bCopy functions) AFormItem *pfiNew, *pfiX = CAST(AFormItem *, lGetHead()); while (pfiX) { pfiNew = new AFormItem(pfiX); //a_Copy constructor lAdd(pfiNew); pfiX = CAST(AFormItem *, pfiX->diGetNext()); } }
AFormItem *AFormList::flAddItem(const char *pccItem, int iReplace) { AFormItem *pafiNew = new AFormItem; if (pccItem && pafiNew->fiSetAndParse(pccItem)) { //a_Check if exact duplicate exists const char *pccS1 = plGetValueByName(pafiNew->piGetName()), *pccS2 = pafiNew->piGetValue(); if ((pccS1 && pccS2) && (0x0 == strcmp(pccS1, pccS2))) { //a_BOTH NAME and VALUE pair exists delete pafiNew; return NULL; } else { //a_Values are ok and no duplicates, so add to the list if (iReplace) { //a_Only one NAME = VALUE should exist AFormItem *pafiFound = CAST(AFormItem *, plGetItemByName(pafiNew->piGetName())); if (pafiFound) { //a_Found that NAME, replace value pafiFound->piSetValue(pafiNew->piGetValue()); } delete pafiNew; return pafiFound; } else { //a_OK to have one NAME = different VALUE ADataItem *padiLast = CAST(ADataItem *, lGetLast()); if (padiLast) padiLast->diSetNext(pafiNew); //a_Append to end of list else lAdd(pafiNew); //a_First item becomes the head } } }
static void draw_player(void *ptr, void *unused) { (void)unused; cpShape* shape = (cpShape*)ptr; chipmunk_data* p = (chipmunk_data*)shape->data; //chipmunk_lock_data(p); if(p == NULL || p->del) { /* We test if the player is marked for deletation. * If so, we add it to the array of players ready to be deleted, * which will be purged by another thread to prevent concurrence * problems. */ lock_w(&to_remove_array); lAdd(&to_remove_array, (void*)shape); lock_uw(&to_remove_array); } else { p->px = (mFloat)shape->body->p.x; p->py = (mFloat)shape->body->p.y; p->an = (mFloat)shape->body->a; p->vx = (mFloat)shape->body->v.x; p->vy = (mFloat)shape->body->v.y; p->av = (mFloat)shape->body->w; /*p->ax = (mFloat)shape->body->f.x * shape->body->m_inv; p->ay = (mFloat)shape->body->f.y * shape->body->m_inv; p->aa = (mFloat)shape->body->t;*/ /* Acceleration already defined in physics.c/update_keys */ } //chipmunk_unlock_data(p); }
void* new_chipmunk_data(char* received, int* okay) { chipmunk_data* c = (chipmunk_data*)mmalloc(sizeof(chipmunk_data)); model* m; char* remember; // pthread_mutex_init(&c->lock, NULL); c->del = 0; c->px = (mFloat)0.0; c->py = (mFloat)0.0; c->an = (mFloat)0.0; c->vx = (mFloat)0.0; c->vy = (mFloat)0.0; c->av = (mFloat)0.0; c->ax = (mFloat)0.0; c->ay = (mFloat)0.0; c->aa = (mFloat)0.0; #warning FIXME: Check for errors. sscanf(strtok_r(received, " ", &remember), "%d", &c->key_up ); sscanf(strtok_r(NULL , " ", &remember), "%d", &c->key_down ); sscanf(strtok_r(NULL , " ", &remember), "%d", &c->key_left ); sscanf(strtok_r(NULL , " ", &remember), "%d", &c->key_right); LOG("Client's up key: %d", c->key_up); LOG("Client's down key: %d", c->key_down); LOG("Client's left key: %d", c->key_left); LOG("Client's right key: %d", c->key_right); c->key_is_up = 0; c->key_is_down = 0; c->key_is_left = 0; c->key_is_right = 0; /* TODO: Read-write?? */ simple_lock(&physics_lock); /* Could not find file :( */ if((m = read_model(space, cpvzero, MODELS "square", NULL, NULL, (void*)c, CHARACTER)) == NULL) { // pthread_mutex_destroy(&c->lock); mfree(c); LOG("I'm an so sorry. File " MODELS "square" " was not found."); *okay = 0; simple_unlock(&physics_lock); return NULL; } lAdd(&chipmunk_data_array, (void*)c); simple_unlock(&physics_lock); c->mod = m; *okay = 1; return (void*)c; }