int Delete(int index,int count=1) { if(index<0)index+=_count; if(index<0) { if (count==-1) { count=_count; index=0; }else { count-=index; index=0; } }else { if(count==-1)count=_count-index; } if(index>=_count)return 0; if(index+count>=_count) { DestroyRange(index,_count); _count=index; return _count-index; } DestroyRange(index,index+count); Copy(index+count,index,_count-(index+count)); _count-=count; return count; }
void SeqDestroy(Seq *seq) { if (seq && seq->length > 0) { DestroyRange(seq, 0, seq->length - 1); } SeqSoftDestroy(seq); }
void Clean() { if(_data) { DestroyRange(0,_count); delete [] (_data-_empty); } _data=0; _size=0; _count=0; _empty=0; }
void SequenceDestroy(Sequence *seq) { assert(seq && "Attempted to destroy a null sequence"); if (seq->length > 0) { DestroyRange(seq, 0, seq->length - 1); } free(seq->data); free(seq); }
void SeqRemoveRange(Seq *seq, size_t start, size_t end) { assert(seq); assert(start >= 0); assert(end < seq->length); assert(start <= end); DestroyRange(seq, start, end); size_t rest_len = seq->length - end - 1; if (rest_len > 0) { memmove(seq->data + start, seq->data + end + 1, sizeof(void *) * rest_len); } seq->length -= end - start + 1; }