Exemple #1
0
Boolean heap::insert(voidPtr elm) 
{
   if ( buf_sz() < content_sz() + 2*sizeof(voidPtr) ) 
      buffer::expand_chunk(2*buf_sz()) ;

   long x = long(elm);
   buffer::put(x);

   v_updated = true;

   return true;
}
Exemple #2
0
int buffer::expand_chunk(const int newsz)
{
    if ( v_allocated == 0 )
        throw(stringException("expand a buffer with reference memory"));

    int cursz = buf_sz();

    if ( newsz <= cursz ) {
        v_bufsz = newsz;
        return 0;
    }

    int void_ptr_size = sizeof(voidPtr);

//MESSAGE(cerr, "real expand");

    //char* x = (char*)malloc(void_ptr_size+newsz);
    char* x = ::new char [void_ptr_size+newsz];

    int delta = int(void_ptr_size - long(x) % void_ptr_size);
    x += delta ;

    memcpy(x, v_base, cursz);

    memset(x+cursz, char(0), newsz - cursz);

    v_aptr -= long(v_base);
    v_eptr -= long(v_base);

    //free((char*)(v_base-v_align_offset));
    delete (char*)(v_base-v_align_offset);
    v_align_offset = delta;

    v_base = x;
    v_aptr += long(v_base);
    v_eptr += long(v_base);
    v_bufsz = newsz;

    return 0;
}
Exemple #3
0
void_ptr_array::void_ptr_array(int exp_sz) : 
buffer(exp_sz * sizeof(voidPtr)), v_elmts(0)
{
   memset(get_base(), (char)0, buf_sz());
}