Esempio n. 1
0
double swap_code(Protein &p) {
	item<T> a = get_item(stack<T>(p));
	item<T> b = get_item(stack<T>(p));
	put_item(a, stack<T>(p));
	put_item(b, stack<T>(p));
	return a.container.size() + b.container.size();
}
Esempio n. 2
0
static WERROR put_data(struct multilist *list)
{
	const void *row;
	int ypos;
	unsigned col;
	const char *prefix, *item;
	char *tmp;

	for (ypos = 0, row = data_get_first_row(list);
	     row != NULL;
	     row = data_get_next_row(list, row), ++ypos) {
		wmove(list->pad, ypos, 0);
		for (col = 0; col < list->ncols; ++col) {
			prefix = data_get_item_prefix(list, row, col);
			SMB_ASSERT(prefix != NULL);
			item = data_get_item_label(list, row, col);
			SMB_ASSERT(item != NULL);
			tmp = talloc_asprintf(list, "%s%s", prefix, item);
			if (tmp == NULL) {
				return WERR_NOT_ENOUGH_MEMORY;
			}
			put_item(list, list->pad, col, tmp, 0);
			talloc_free(tmp);
		}
	}

	return WERR_OK;
}
Esempio n. 3
0
static protocol_binary_response_status add_handler(const void *cookie,
                                                   const void *key,
                                                   uint16_t keylen,
                                                   const void *data,
                                                   uint32_t datalen,
                                                   uint32_t flags,
                                                   uint32_t exptime,
                                                   uint64_t *cas)
{
  (void)cookie;
  protocol_binary_response_status rval= PROTOCOL_BINARY_RESPONSE_SUCCESS;
  struct item* item= get_item(key, keylen);
  if (item == NULL)
  {
    item= create_item(key, keylen, data, datalen, flags, (time_t)exptime);
    if (item == 0)
    {
      rval= PROTOCOL_BINARY_RESPONSE_ENOMEM;
    }
    else
    {
      put_item(item);
      *cas= item->cas;
      release_item(item);
    }
  }
  else
  {
    rval= PROTOCOL_BINARY_RESPONSE_KEY_EEXISTS;
  }

  return rval;
}
Esempio n. 4
0
void *producer(void *arg1)
{
  int i;

  for(i = 1; i <= SUMSIZE; i++) {
    /* adquirir derecho a una ranura */
    pthread_mutex_lock(&slot_lock);
    {
      while (nslots <= 0)
	pthread_cond_wait(&slots, &slot_lock);
      nslots--;
    }
    pthread_mutex_unlock(&slot_lock);

    put_item(i*i);

    /* renuncia derecho a un elemento */
    pthread_mutex_lock(&item_lock);
    {
      nitems++;
      pthread_cond_signal(&items);
    }
    pthread_mutex_unlock(&item_lock);
  }

  pthread_mutex_lock(&item_lock);
  {
    producer_done = 1;
    pthread_cond_broadcast(&items);
  }
  pthread_mutex_unlock(&item_lock);

  return NULL;
}
Esempio n. 5
0
void *producer(void *arg1)
{
  int i;

  for(i = 1; i <= SUMSIZE; i++)
    put_item(i*i);
  return NULL;
}
Esempio n. 6
0
int	printlist(t_mls *begin, void (*put_item)(t_mls *))
{
  t_mls	*cpy;

  if ((cpy = begin) == NULL)
    return (MERROR);
  while (cpy != NULL)
    {
      put_item(cpy);
      cpy = cpy->next;
    }
  return (MTRUE);
}
Esempio n. 7
0
File: pc2.c Progetto: huaguang/OS_CD
void *produce(void*args)
{
    int i;
    int item;
    for (i = 0; i < ITEM_COUNT; i++) {
        sema_wait(&empty_buffer1_sema);
        sema_wait(&buffer1_mutex_sema);
        item = i + 'a';
        put_item(item,&pIn,buffer1);
        sema_signal(&buffer1_mutex_sema);
        sema_signal(&full_buffer1_sema);
        printf("produce item: %c\n", item);
    }
}
static void * producer (void * arg1) {
  for (int i = 1 ; i < SUMSIZE ; i++) {
    sem_wait(&sem_slots);
    put_item(i);
    if (i == SUMSIZE) {
      // acccess shared area [producer_done]
      pthread_mutex_lock(&producer_done_lock);
      producer_done = 1;
      pthread_mutex_unlock(&producer_done_lock);
      // lock-operate-unlock
    }
    sem_post(&sem_items);
  }
    return NULL;
}
Esempio n. 9
0
double yank_code(Protein &p) {
	if(top<int>(p) < 0) return 0;
	int index = pop<int>(p);
	std::size_t count;
	try {
		item<T> i = get_nth_item(stack<T>(p), (unsigned)index, erase);
		put_item(i, stack<T>(p));
		count = i.container.size();
	}
	catch(const detail::stack_underflow&) {
		push<int>(p, index);
		return 0;
	}
	return count;
}
Esempio n. 10
0
static void put_header(struct multilist *list)
{
	unsigned col;
	const char *header;

	if (!list->cb->get_column_header) {
		return;
	}

	wmove(list->window, 0, 0);
	for (col = 0; col < list->ncols; ++col) {
		header = data_get_column_header(list, col);
		SMB_ASSERT(header != NULL);
		put_item(list, list->window, col, header,
			 A_BOLD | COLOR_PAIR(PAIR_YELLOW_BLUE));
	}
}
Esempio n. 11
0
static protocol_binary_response_status prepend_handler(const void *cookie,
                                                       const void *key,
                                                       uint16_t keylen,
                                                       const void* val,
                                                       uint32_t vallen,
                                                       uint64_t cas,
                                                       uint64_t *result_cas) {
  (void)cookie;
  protocol_binary_response_status rval= PROTOCOL_BINARY_RESPONSE_SUCCESS;

  struct item *item= get_item(key, keylen);
  struct item *nitem= NULL;

  if (item == NULL)
  {
    rval= PROTOCOL_BINARY_RESPONSE_KEY_ENOENT;
  }
  else if (cas != 0 && cas != item->cas)
  {
    rval= PROTOCOL_BINARY_RESPONSE_KEY_EEXISTS;
  }
  else if ((nitem= create_item(key, keylen, NULL, item->size + vallen,
                                 item->flags, item->exp)) == NULL)
  {
    rval= PROTOCOL_BINARY_RESPONSE_ENOMEM;
  }
  else
  {
    memcpy(nitem->data, val, vallen);
    memcpy(((char*)(nitem->data)) + vallen, item->data, item->size);
    release_item(item);
    item= NULL;
    delete_item(key, keylen);
    put_item(nitem);
    *result_cas= nitem->cas;
  }

  if (item)
    release_item(item);

  if (nitem)
    release_item(nitem);

  return rval;
}
Esempio n. 12
0
void *producer(void *arg1)
{
  int i;

  for(i = 1; i <= SUMSIZE; i++) {
    sem_wait(&slots);
    put_item(i*i);
    sem_post(&items);
  }

  pthread_mutex_lock(&my_lock);
  producer_done = 1;
  for(i = 0; i < MAXCONSUMERS; i++)
    sem_post(&items);
  pthread_mutex_unlock(&my_lock);

  return NULL;
}
Esempio n. 13
0
File: pc2.c Progetto: huaguang/OS_CD
void *calculate(void *arg)
{
    int i;
    int item;
    for (i = 0; i < ITEM_COUNT; i++) {
        sema_wait(&full_buffer1_sema);
        sema_wait(&buffer1_mutex_sema);
        item = get_item(&calOut,buffer1); 
        sema_signal(&buffer1_mutex_sema);
        sema_signal(&empty_buffer1_sema);
		item=item+'A'-'a';
        sema_wait(&empty_buffer2_sema);
        sema_wait(&buffer2_mutex_sema);
        put_item(item,&calIn,buffer2); 
        sema_signal(&buffer2_mutex_sema);
        sema_signal(&full_buffer2_sema);
        printf("    calculate item: %c\n", item);
    }
}
void produce()
{
    int i;
    int item;

    for (i = 0; i < ITEM_COUNT; i++) {
        pthread_mutex_lock(&mutex);
        while (buffer_is_full()) 
            pthread_cond_wait(&wait_empty_buffer, &mutex);

        item = i + 'a';
        printf("produce item: %c\n", item);
        put_item(item);
        sleep(1);

        pthread_cond_signal(&wait_full_buffer);
        pthread_mutex_unlock(&mutex);
    }
}
Esempio n. 15
0
static protocol_binary_response_status decrement_handler(const void *cookie,
                                                         const void *key,
                                                         uint16_t keylen,
                                                         uint64_t delta,
                                                         uint64_t initial,
                                                         uint32_t expiration,
                                                         uint64_t *result,
                                                         uint64_t *result_cas) {
    protocol_binary_response_status rval= PROTOCOL_BINARY_RESPONSE_SUCCESS;
    uint64_t val= initial;
    item_t *item;

    (void)cookie;
    mutex_lock(&storage_lock);

    item = get_item(key, keylen);

    if (item != NULL) {
        if (delta > *(uint64_t*)item->data)
            val= 0;
        else
            val= *(uint64_t*)item->data - delta;

        expiration= (uint32_t)item->exp;
        release_item(item);
        delete_item(key, keylen);
    }

    item= create_item(key, keylen, NULL, sizeof(initial), 0, (time_t)expiration);
    if (item == 0) {
        rval= PROTOCOL_BINARY_RESPONSE_ENOMEM;
    } else {
        memcpy(item->data, &val, sizeof(val));
        put_item(item);
        *result= val;
        *result_cas= item->cas;
        release_item(item);
    }

    mutex_unlock(&storage_lock);
    return rval;
}
Esempio n. 16
0
static protocol_binary_response_status increment_handler(const void *cookie,
                                                         const void *key,
                                                         uint16_t keylen,
                                                         uint64_t delta,
                                                         uint64_t initial,
                                                         uint32_t expiration,
                                                         uint64_t *result,
                                                         uint64_t *result_cas) {
    protocol_binary_response_status rval= PROTOCOL_BINARY_RESPONSE_SUCCESS;
    uint64_t val= initial;
    item_t *item;
    
    (void)cookie;
    mutex_lock(&storage_lock);

    item = get_item(key, keylen);

    if (item != NULL) {
        val= (*(uint64_t*)item->data) + delta;
        expiration= (uint32_t)item->exp;
        release_item(item);
        delete_item(key, keylen);
    }

    item= create_item(key, keylen, NULL, sizeof(initial), 0, (time_t)expiration);
    if (item == NULL) {
        rval= PROTOCOL_BINARY_RESPONSE_ENOMEM;
    } else {
        char buffer[1024] = {0}; // FIXME: does this need to be so big ~ajc
        memcpy(buffer, key, keylen);
        memcpy(item->data, &val, sizeof(val));
        put_item(item);
        *result= val;
        *result_cas= item->cas;
        release_item(item);
    }

    mutex_unlock(&storage_lock);

    return rval;
}
Esempio n. 17
0
static protocol_binary_response_status set_handler(const void *cookie,
                                                   const void *key,
                                                   uint16_t keylen,
                                                   const void* data,
                                                   uint32_t datalen,
                                                   uint32_t flags,
                                                   uint32_t exptime,
                                                   uint64_t cas,
                                                   uint64_t *result_cas) {
  (void)cookie;
  protocol_binary_response_status rval= PROTOCOL_BINARY_RESPONSE_SUCCESS;

  if (cas != 0)
  {
    struct item* item= get_item(key, keylen);
    if (item != NULL && cas != item->cas)
    {
      /* Invalid CAS value */
      release_item(item);
      return PROTOCOL_BINARY_RESPONSE_KEY_EEXISTS;
    }
  }

  delete_item(key, keylen);
  struct item* item= create_item(key, keylen, data, datalen, flags, (time_t)exptime);
  if (item == 0)
  {
    rval= PROTOCOL_BINARY_RESPONSE_ENOMEM;
  }
  else
  {
    put_item(item);
    *result_cas= item->cas;
    release_item(item);
  }

  return rval;
}
Esempio n. 18
0
static protocol_binary_response_status replace_handler(const void *cookie,
                                                       const void *key,
                                                       uint16_t keylen,
                                                       const void* data,
                                                       uint32_t datalen,
                                                       uint32_t flags,
                                                       uint32_t exptime,
                                                       uint64_t cas,
                                                       uint64_t *result_cas) {
    protocol_binary_response_status rval= PROTOCOL_BINARY_RESPONSE_SUCCESS;
    item_t* item; 

    mutex_lock(&storage_lock);
    (void)cookie;

    item= get_item(key, keylen);

    if (item == NULL) {
        rval= PROTOCOL_BINARY_RESPONSE_KEY_ENOENT;
    } else if (cas == 0 || cas == item->cas) {
        release_item(item);
        delete_item(key, keylen);
        item= create_item(key, keylen, data, datalen, flags, (time_t)exptime);
        if (item == 0) {
            rval= PROTOCOL_BINARY_RESPONSE_ENOMEM;
        } else {
            put_item(item);
            *result_cas= item->cas;
            release_item(item);
        }
    } else {
        rval= PROTOCOL_BINARY_RESPONSE_KEY_EEXISTS;
        release_item(item);
    }

    mutex_unlock(&storage_lock);
    return rval;
}
Esempio n. 19
0
static protocol_binary_response_status append_handler(const void *cookie,
                                                      const void *key,
                                                      uint16_t keylen,
                                                      const void* val,
                                                      uint32_t vallen,
                                                      uint64_t cas,
                                                      uint64_t *result_cas)
{
    protocol_binary_response_status rval= PROTOCOL_BINARY_RESPONSE_SUCCESS;
    item_t *item, *nitem;

    mutex_lock(&storage_lock);
    (void)cookie;

    item= get_item(key, keylen);

    if (item == NULL) {
        rval= PROTOCOL_BINARY_RESPONSE_KEY_ENOENT;
    } else if (cas != 0 && cas != item->cas) {
        rval= PROTOCOL_BINARY_RESPONSE_KEY_EEXISTS;
    } else if ((nitem= create_item(key, keylen, NULL, item->size + vallen,
                                   item->flags, item->exp)) == NULL) {
        release_item(item);
        rval= PROTOCOL_BINARY_RESPONSE_ENOMEM;
    } else {
        memcpy(nitem->data, item->data, item->size);
        memcpy(((char*)(nitem->data)) + item->size, val, vallen);
        release_item(item);
        delete_item(key, keylen);
        put_item(nitem);
        *result_cas= nitem->cas;
        release_item(nitem);
    }

    mutex_unlock(&storage_lock);
    return rval;
}
Esempio n. 20
0
/// insert a map struct.
// That is, it is 'derived' from the MAP_HEADER type.
PEntry map_put_struct(Map *m, void *data) {
    if (vtype(m)) return NULL;  // can't use this for pointer maps
    return put_item(m, NULL, data, 0);
}
Esempio n. 21
0
/// insert pointer data using a pointer key.
// String and pointer/integer keys are handled differently.
PEntry map_put(Map *m, void* key, void *data) {
    if (! vtype(m)) return NULL; // can't use this for struct maps
    return put_item(m, key, data, vtype(m));
}
Esempio n. 22
0
double dup_code(Protein& p) {
	item<T> i = get_item(stack<T>(p));
	put_item(i, stack<T>(p));
	put_item(i, stack<T>(p));
	return i.container.size() * 2;
}