Пример #1
0
void vector::push_back(value_type item) {
    if (sz == __size) {
        __enlarge();
    }
    try {
        new((void *) (a + sz)) value_type(item);
        sz++;
    }catch(...){
        (a+sz)->~basic_string();
    }
}
Пример #2
0
void deque::push_back(value_type item) {
    if (sz == __size) {
        __enlarge();
    }
    try {
        new((void *) ((&*(tail + 1)))) value_type(item);
        sz++;
        tail++;
    } catch (...) {
        (&*(tail + 1))->~basic_string();
    }
}
Пример #3
0
int avltree_insert(avltree_t* me, void* k, void* v)
{
  int i;
  node_t* n;

  for (i = 0; i < me->size; ) {
    n = &me->nodes[i];

    /* found an empty slot */
    if (!n->key) {
      n->key = k;
      n->val = v;
      me->count += 1;

      return i;
    }

    long r = me->cmp(n->key, k);

    if (r == 0) {
      /*  we don't need to rebalance because we just overwrite this slot */
      n->val = v;
      return i;
    } else if (r < 0) {
      i = __child_l(i);
    } else if (r > 0) {
      i = __child_r(i);
    } else {
      assert(0);
    }
  }

  /* we're outside of the loop because we need to enlarge */
  __enlarge(me);
  n = &me->nodes[i];
  n->key = k;
  n->val = v;
  me->count += 1;
  return i;
}