int BinaryNode::preallocate(qore_size_t size) { //printd(5, "BinaryNode::preallocate("QLLD") this: %p ptr: %p len: "QLLD"\n", size, this, ptr, len); ptr = q_realloc(ptr, size); if (ptr) { len = size; return 0; } len = 0; return -1; }
int q_put( dyn_queue_t *q, void *e ) { *q->put_pos = e; // fprintf( stderr, "Put element %d to queue %d\n", e, q ); if( ++q->put_pos == q->stop ) q->put_pos = q->start; if( q->put_pos == q->get_pos ) return q_realloc( q ); return 1; }
void BinaryNode::splice(qore_offset_t offset, qore_offset_t length, const void* data, qore_size_t data_len, BinaryNode* extract) { //printd(5, "BinaryNode::splice() before offset: %lld length: %lld (len: %lld data_len: %lld)\n", offset, length, len, data_len); checkOffset(offset, length); if (offset == (qore_offset_t)len) { if (!data_len) return; length = 0; } //printd(5, "BinaryNode::splice(offset="QSD", length="QSD", priv->len="QSD")\n", offset, length, len); qore_size_t end; if (length > (qore_offset_t)(len - offset)) { end = len; length = len - offset; } else end = offset + length; // add to extract string if any if (extract && length) extract->append((char*)ptr + offset, length); // get number of entries to insert if ((qore_offset_t)data_len > length) { // make bigger qore_size_t ol = len; // resize buffer ptr = q_realloc(ptr, len - length + data_len); // move trailing entries forward if necessary if (end != ol) memmove((char*)ptr + (end - length + data_len), (char*)ptr + end, ol - end); } else if (length > (qore_offset_t)data_len) // make smaller memmove((char*)ptr + offset + data_len, (char*)ptr + offset + length, len - offset - data_len); memcpy((char*)ptr + offset, data, data_len); // calculate new length len = len - length + data_len; }