Beispiel #1
0
/**
 * Delete the element at the begin of stack.
 */
void stack_pop(cstl_stack_t* psk_stack)
{
    assert(psk_stack != NULL);

#if defined (CSTL_STACK_VECTOR_SEQUENCE)
    vector_pop_back(&psk_stack->_t_sequence);
#elif defined (CSTL_STACK_LIST_SEQUENCE)
    list_pop_back(&psk_stack->_t_sequence);
#else
    deque_pop_back(&psk_stack->_t_sequence);
#endif
}
Beispiel #2
0
void pop_back_check_counting_reverse(size_t item_size, deque_t* d, int num)
{
  int i;
  int j;
  ssize_t sz = deque_size(item_size, d);
  assert(item_size == 4);
  assert(sz >= num);
  for( i = num - 1; i >= 0; i-- ) {
    assert(deque_size(item_size, d) > 0);
    j = 0;
    deque_it_get_cur(4, deque_last(item_size, d), &j);
    assert( j == i );
    deque_pop_back(4, d);
  }
}
Beispiel #3
0
void pop_back_check_constant(size_t item_size, deque_t* d, int num, int val)
{
  int i;
  int j;
  ssize_t sz = deque_size(item_size, d);
  assert(item_size == 4);
  assert(sz >= num);
  for( i = 0; i < num; i++ ) {
    assert(deque_size(item_size, d) > 0);
    j = 0;
    deque_it_get_cur(4, deque_last(item_size, d), &j);
    assert( j == val );
    deque_pop_back(4, d);
  }
}
Beispiel #4
0
void pop_back_check_counting(size_t item_size, deque_t* d, int num)
{
  int i;
  int j;
  ssize_t sz = deque_size(item_size, d);
  assert(item_size == 4);
  assert(sz >= num);
  for( i = 0; i < num; i++ ) {
    assert(deque_size(item_size, d) > 0);
    j = 0;
    deque_it_get_cur(4, deque_last(item_size, d), &j);
    //printf("Got %i\n", j);
    assert( j == i );
    deque_pop_back(4, d);
  }
}
Beispiel #5
0
qioerr qbuffer_pop_back(qbuffer_t* buf)
{
  qbytes_t* bytes;
  int64_t skip;
  int64_t len;
  qbuffer_iter_t chunk;

  if ( qbuffer_num_parts(buf) == 0 ) QIO_RETURN_CONSTANT_ERROR(EINVAL, "cannot pop from empty buffer");
  
  chunk = qbuffer_end(buf);
  qbuffer_iter_prev_part(buf, &chunk);

  qbuffer_iter_get(chunk, qbuffer_end(buf), &bytes, &skip, &len);

  deque_pop_back(sizeof(qbuffer_part_t), &buf->deque);

  buf->offset_end -= len;

  return 0;
}
err_t qbuffer_pop_back(qbuffer_t* buf)
{
  qbytes_t* bytes;
  int64_t skip;
  int64_t len;
  qbuffer_iter_t chunk;

  if ( qbuffer_num_parts(buf) == 0 ) return EINVAL;
  
  chunk = qbuffer_end(buf);
  qbuffer_iter_prev_part(buf, &chunk);

  qbuffer_iter_get(chunk, qbuffer_end(buf), &bytes, &skip, &len);

  deque_pop_back(sizeof(qbuffer_part_t), &buf->deque);

  buf->offset_end -= len;

  return 0;
}
Beispiel #7
0
int main()
{
    const char *output[] = {"EsaY", "YasE", "aYsE", "asYE"};
    const char *input = "EasY";
    const char *pinput; /* point to input */
    const char *poutput; /* point to output */
    size_t i;

    for (i = 0; i < SIZE(output); i++) {
        pinput = input;
        poutput = output[i];
        printf("for pattern %s:\n", poutput);

        for (; *poutput != '\0';) {
            if (!deque_empty() && deque_front() == *poutput) {
                printf("+\t%c\n", deque_pop_front());
                poutput++;
            } else if (!deque_empty() && deque_back() == *poutput) {
                printf("*\t%c\n", deque_pop_back());
                poutput++;
            } else { /* the deque is empty or not the first or last */
                if (islower(*pinput)) {
                    deque_push_back(*pinput++);
                } else if (isupper(*pinput)) {
                    deque_push_front(*pinput++);
                } else if (*pinput == '\0') {
                    printf("unable to generate such pattern\n");
                    break;
                }
            }
        }

        putchar('\n');
    }

    return 0;
}
Beispiel #8
0
void simple_test( void){
  deque dq;
  double a;
  int i, status;

  fprintf( stdout, "Testing deque_allocate: " );
  dq = deque_alloc();
  if( dq != NULL ){
    fprintf( stdout, "success!\n");
  }else{
    fprintf( stdout, "failed!\n");
  }
  fprintf( stdout, "Testing deque_empty: ");
  if( deque_empty( dq) ){
    fprintf( stdout, "success!\n");
  }else{
    fprintf( stdout, "failed!\n");
  }

  a = 2.5;
  fprintf( stdout, "Testing deque_push_back, value=%1.2g: ", a);
  if( deque_push_back( dq, a ) == DEQUE_SUCCESS ){
    fprintf( stdout, "success!\n");
  }else{
    fprintf( stdout, "failed!\n");
  }
  a = 3.14159;
  fprintf( stdout, "Testing deque_peek_back: ");
  if( deque_peek_back( dq, &a) == DEQUE_SUCCESS ){
    fprintf( stdout, "success!, value=%1.2g\n", a);
  }else{
    fprintf( stdout, "failed, value=%1.2g\n", a);
  }
  fprintf( stdout, "Testing deque_size: ");
  fprintf( stdout, "size=%d\n", deque_size( dq));
  fprintf( stdout, "Testing deque_pop_back: ");
  a = 3.14159;
  if( deque_pop_back( dq, &a) == DEQUE_SUCCESS ){
    fprintf( stdout, "success!, value=%1.2g\n", a);
  }else{
    fprintf( stdout, "failed!, value=%1.2g\n", a);
  }
  a = 3.14159;
  fprintf( stdout, "Testing deque_pop_back on empty deque: ");
  if( deque_pop_back( dq, &a) != DEQUE_EMPTY ){
    fprintf( stdout, "failed!, value=%1.2g\n", a);
  }else{
    fprintf( stdout, "success!,\n");
    fprintf( stdout, "  caught empty deque, value=%1.2g\n", a);
  }

  a = 2.5;
  fprintf( stdout, "Testing deque_push_front, value=%1.2g: ", a);
  if( deque_push_front( dq, a ) == DEQUE_SUCCESS ){
    fprintf( stdout, "success!\n");
  }else{
    fprintf( stdout, "failed!\n");
  }
  a = 3.14159;
  fprintf( stdout, "Testing deque_peek_front: ");
  if( deque_peek_front( dq, &a) == DEQUE_SUCCESS ){
    fprintf( stdout, "success!, value=%1.2g\n", a);
  }else{
    fprintf( stdout, "failed, value=%1.2g\n", a);
  }
  fprintf( stdout, "Testing deque_size: ");
  fprintf( stdout, "size=%d\n", deque_size( dq));
  fprintf( stdout, "Testing deque_pop_front: ");
  a = 3.14159;
  if( deque_pop_front( dq, &a) == DEQUE_SUCCESS ){
    fprintf( stdout, "success!, value=%1.2g\n", a);
  }else{
    fprintf( stdout, "failed!, value=%1.2g\n", a);
  }
  a = 3.14159;
  fprintf( stdout, "Testing deque_pop_front on empty deque: ");
  if( deque_pop_front( dq, &a) != DEQUE_EMPTY ){
    fprintf( stdout, "failed!, value=%1.2g\n", a);
  }else{
    fprintf( stdout, "success!,\n");
    fprintf( stdout, "  caught empty deque, value=%1.2g\n", a);
  }

  fprintf( stdout, "Testing deque_get_item: ");
  for( i=0; i<5; i++ ){
    a = (double) i + 0.545;
    if( deque_push_back( dq, a) != DEQUE_SUCCESS ){
      fprintf( stderr, "deque push back failed!\n" );
      deque_free( dq);
      return;
    }
    a = (-1. - (double) i) + 0.545;
    if( deque_push_front( dq, a) != DEQUE_SUCCESS ){
      fprintf( stderr, "deque push front failed!\n" );
      deque_free( dq);
      return;
    }
  }
  for( i=0; i<10; i++){
    status = deque_get_item( dq, i, &a);
    if( status != DEQUE_SUCCESS || a != (-5. + (double) i) + 0.545 ){
      fprintf( stderr, "deque get_item failed!\n" );
      deque_free( dq);
      return;
    }
  }
  a = 3.14159;
  status = deque_get_item( dq, 11, &a);
  if( status != DEQUE_OUT_OF_BOUNDS || a != 3.14159 ){
    fprintf( stderr, "deque get_item out of bounds failed!\n");
    deque_free( dq);
  }
  fprintf( stdout, "success!\n");

  deque_free( dq);
}
Beispiel #9
0
void big_test( int num){
  int center, front, back, i, sw, status, fsize;
  double *vals, *pvals, tmp;
  clock_t start, stop, diff;
  int msecs;
  deque dq;

  dq = deque_alloc();
  vals = (double *) malloc( 2*num*sizeof(double));
  pvals = (double *) malloc( 2*num*sizeof(double));

  for( i=0; i<2*num; i++){
    vals[i] = (double) rand() / (double) RAND_MAX;
  }
 
  front = 0;
  back = 0;
  center = num;
  fprintf( stdout, "Testing deque_push_back and front %d times\n", num/2);
  start = clock();
  for( i=0; i<num/2; i++){
    if( rand() % 2 == 0 ){
      deque_push_back( dq, vals[center+back] );
      back++;
    }else{
      front--;
      deque_push_front( dq, vals[center+front] );
    }
  }
  stop = clock();
  diff = stop-start;
  msecs = (int) diff * 1000 / CLOCKS_PER_SEC;
  fprintf( stdout, " succeeded in %u ms\n", msecs);
  
  fprintf( stdout, 
	   "Testing deque_push(pop)_back(front) %d times\n", num);
  start = clock();
  for( i=0; i<num; i++){
    sw = rand() % 4;
    switch( sw ){
    case 0:
      status = deque_push_back( dq, vals[center+back]);
      back++;
      break;
    case 1:
      front--;
      status = deque_push_front( dq, vals[center+front]);
      break;
    case 2:
      back--;
      status = deque_pop_back( dq, &tmp);
      break;
    case 3:
      status = deque_pop_front( dq, &tmp);
      front++;
      break;
    default:
      status = 1;
      tmp = 1;
    }
    if( status != DEQUE_SUCCESS ){
      fprintf( stderr, " error at op i=%d\n", i);
      free( pvals);
      free( vals);
      deque_free( dq);
      return;
    }
  }
  stop = clock();
  diff = stop-start;
  msecs = (int) diff * 1000 / CLOCKS_PER_SEC;
  fprintf( stdout, " succeeded in %u ms\n", msecs);

  fsize = deque_size( dq);
  fprintf( stdout, 
	   "Testing deque_get_item %d times\n", fsize);
  start = clock();
  for( i=0; i<fsize; i++){
    deque_get_item( dq, i, &(pvals[i]));
  }
  stop = clock();
  for( i=0; i<fsize; i++){
    if( pvals[i] != vals[center+front+i] ){
      fprintf( stderr, " obtained value error! at item %d\n", i);
      free( pvals);
      free( vals);
      deque_free( dq);
      return;
    }
  }
  diff = stop-start;
  msecs = (int) diff * 1000 / CLOCKS_PER_SEC;
  fprintf( stdout, " succeeded in %u ms\n", msecs);

  fprintf( stdout, 
	   "Testing deque_pop_front %d times\n", fsize);
  start = clock();
  for( i=0; i<fsize; i++){
    deque_pop_front( dq, &(pvals[i]));
  }
  stop = clock();
  for( i=0; i<fsize; i++){
    if( pvals[i] != vals[center+front+i] ){
      fprintf( stderr, " obtained value error! at item %d\n", i);
      free( pvals);
      free( vals);
      deque_free( dq);
      return;
    }
  }
  diff = stop-start;
  msecs = (int) diff * 1000 / CLOCKS_PER_SEC;
  fprintf( stdout, " succeeded in %u ms\n", msecs);
  
  free( pvals);
  free( vals);
  deque_free( dq);
}