void* DVector_Pop( DVector *self ) { if( self->capacity > (2*self->size + 1) ) DVector_Reserve( self, self->size + 1 ); if( self->size == 0 ) return NULL; self->size -= 1; return self->data.chars + self->size * self->stride; }
void DaoxDataColumn_Reset( DaoxDataColumn *self, daoint size ) { daoint i, datatype = DaoType_GetDataType( self->type ); if( size < self->cells->size ){ for(i=size; i<self->cells->size; ++i){ if( datatype == DAO_STRING ){ DString_Clear( self->cells->data.strings + i ); }else if( datatype == 0 ){ GC_DecRC( self->cells->data.values[i] ); } } DVector_Reset( self->cells, size ); }else if( size > self->cells->size ){ DVector_Reserve( self->cells, size ); for(i=self->cells->size; i<size; ++i){ if( datatype == DAO_STRING ){ DString_Init( self->cells->data.strings + i, 0 ); DString *s = & self->cells->data.strings[i]; }else if( datatype == 0 ){ self->cells->data.values[i] = NULL; } } DVector_Reset( self->cells, size ); } }
void* DVector_Insert( DVector *self, daoint i, daoint n ) { char *data; if( i < 0 ) i += self->size; if( i < 0 || i > self->size ) return NULL; DVector_Reserve( self, self->size + n ); data = self->data.chars + i * self->stride; memmove( data + n*self->stride, data, (self->size - i) *self->stride ); self->size += n; return data; }
void* DVector_Push( DVector *self ) { DVector_Reserve( self, self->size + 1 ); self->size += 1; return self->data.chars + (self->size - 1) * self->stride; }