void DaoxDataColumn_SetCell( DaoxDataColumn *self, daoint i, DaoValue *value ) { if( value == NULL ){ complex16 zero = {0.0,0.0}; switch( self->type->tid ){ default : GC_DecRC( self->cells->data.values[i] ); self->cells->data.values[i] = value; break; case DAO_INTEGER : self->cells->data.daoints[i] = 0; break; case DAO_FLOAT : self->cells->data.floats[i] = 0.0; break; case DAO_DOUBLE : self->cells->data.doubles[i] = 0.0; break; case DAO_COMPLEX : self->cells->data.complexes[i] = zero; break; case DAO_STRING : DString_Reset( & self->cells->data.strings[i], 0 ); break; } return; } switch( self->type->tid ){ default : GC_ShiftRC( value, self->cells->data.values[i] ); self->cells->data.values[i] = value; break; case DAO_INTEGER : self->cells->data.daoints[i] = DaoValue_GetInteger( value ); break; case DAO_FLOAT : self->cells->data.floats[i] = DaoValue_GetFloat( value ); break; case DAO_DOUBLE : self->cells->data.doubles[i] = DaoValue_GetDouble( value ); break; case DAO_COMPLEX : self->cells->data.complexes[i] = DaoValue_GetComplex( value ); break; case DAO_STRING : DaoValue_GetString( value, & self->cells->data.strings[i] ); break; } }
static void DaoArray_Serialize( DaoArray *self, DString *serial, DString *buf ) { DaoInteger intmp = {DAO_INTEGER,0,0,0,0,0}; DaoValue *value = (DaoValue*) & intmp; int i; DString_AppendChar( serial, '[' ); for(i=0; i<self->ndim; i++){ value->xInteger.value = self->dims[i]; if( i ) DString_AppendChar( serial, ',' ); DaoValue_GetString( value, buf ); DString_Append( serial, buf ); } DString_AppendChar( serial, ']' ); for(i=0; i<self->size; i++){ if( i ) DString_AppendChar( serial, ',' ); switch( self->etype ){ case DAO_INTEGER : DaoSerializeInteger( self->data.i[i], serial ); break; case DAO_FLOAT : DaoSerializeDouble( self->data.f[i], serial ); break; case DAO_DOUBLE : DaoSerializeDouble( self->data.d[i], serial ); break; case DAO_COMPLEX : DaoSerializeComplex( self->data.c[i], serial ); break; } } }