/** * 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; }
/** * 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; }
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++; }