Example #1
0
/**
 * Insert a segment into buckets
 * @param b			Bucket to insert
 * @param seg		Segment to write
 * @return			Bucket for subsequent insertion
 */
static Bucket * BucketInsert(Bucket * b, Segment * seg) {
	if (b == NULL) {
		b = NewBucket(seg->id);
	}
	if (b->size + seg->clen >= BUCKET_SIZE) {
		SaveBucket(b);
		b = NewBucket(seg->id);
	}

	seg->pos = b->size;
	GetIndexService()->putSegment(seg, b->id);
	assert(write(b->fd, seg->cdata, seg->clen) == seg->clen);
	//Fix bucket->segs
	if(seg->id < b->sid) {
		b->segs = b->sid + b->segs - seg->id;
		b->sid = seg->id;
	}
	if(seg->id >= (b->sid + b->segs)) {
		b->segs = seg->id - b->sid + 1;
	}
	//b->segs++;
	b->size += seg->clen;

	return b;
}
Example #2
0
/**
 * Insert a segment into buckets
 * @param b			Bucket to insert
 * @param seg		Segment to write
 * @return			Bucket for subsequent insertion
 */
static Bucket * BucketInsert(Bucket * b, Segment * seg) {
	if (b == NULL) {
		b = NewBucket(seg->id);
	}
	if (b->size + seg->clen > BUCKET_SIZE) {
		SaveBucket(b);
		b = NewBucket(seg->id);
	}

	seg->pos = b->size;
	GetIndexService()->putSegment(seg, b->id);
	assert(write(b->fd, seg->cdata, seg->clen) == seg->clen);
	b->segs++;
	b->size += seg->clen;

	return b;
}
Example #3
0
void 
_XmAddHashEntry(XmHashTable table, XmHashKey key, XtPointer value)
{
  int hash;
  XmHashValue index;
  XmHashBucket entry;

  hash = table -> hasher(key);
  index = hash % table -> size;

  entry = NewBucket();
  entry -> hashed_key = hash;
  entry -> hash_key = key;
  entry -> value = value;
  entry -> next = table -> buckets[index];
  table -> buckets[index] = entry;
  table -> count++;
}