コード例 #1
0
ファイル: a_flist.cpp プロジェクト: achacha/freeCGI
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());
  }
}
コード例 #2
0
ファイル: a_flist.cpp プロジェクト: achacha/freeCGI
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
      }
    }
  }
コード例 #3
0
	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);
	}
コード例 #4
0
	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;
	}