Exemple #1
0
 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;
 }
Exemple #2
0
void SeqDestroy(Seq *seq)
{
    if (seq && seq->length > 0)
    {
        DestroyRange(seq, 0, seq->length - 1);
    }
    SeqSoftDestroy(seq);
}
Exemple #3
0
 void Clean()
 {
   if(_data)
   {
     DestroyRange(0,_count);
     delete [] (_data-_empty);
   }
   _data=0;
   _size=0;
   _count=0;
   _empty=0;
 }
Exemple #4
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);
}
Exemple #5
0
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;
}