void CD_KillWorkersAvoid (CDWorkers* self, size_t number, CDWorker* worker) { assert(self); assert(worker); if (number >= self->length) { number = self->length - 1; } for (size_t i = self->length - 1; (self->length - i) < self->length; i--) { if (self->item[i] == worker) { worker = self->item[0]; self->item[0] = self->item[i]; self->item[i] = worker; } CD_StopWorker(self->item[i]); } pthread_mutex_lock(&self->lock.mutex); pthread_cond_broadcast(&self->lock.condition); pthread_mutex_unlock(&self->lock.mutex); for (size_t i = self->length - 1; (self->length - i) < self->length; i--) { CD_DestroyWorker(self->item[i]); } self->length -= number; self->item = CD_realloc(self->item, self->length * sizeof(CDWorker*)); }
CDWorkers* CD_AppendWorker (CDWorkers* self, CDWorker* worker) { self->item = CD_realloc(self->item, sizeof(CDWorker*) * ++self->length); self->item[self->length - 1] = worker; return self; }
MCMetadata* MC_AppendData (MCMetadata* metadata, MCData* data) { metadata->item = CD_realloc(metadata->item, sizeof(MCData*) * ++metadata->length); metadata->item[metadata->length - 1] = data; return metadata; }
SVMetadata* SV_AppendData (SVMetadata* metadata, SVData* data) { metadata->item = CD_realloc(metadata->item, sizeof(SVData*) * ++metadata->length); metadata->item[metadata->length - 1] = data; return metadata; }