bool Skim_File::Set_Table (int num_org, int num_des, int periods) { Clear_Table (); if (num_org < 1 || num_des < 1 || periods < 1) return (false); Num_Org (0); Num_Des (0); if (table_flag) { ttime = new Dtime ** [num_org]; if (ttime == 0) return (false); for (int org=0; org < num_org; org++) { ttime [org] = new Dtime * [num_des]; if (ttime [org] == 0) return (false); for (int des=0; des < num_des; des++) { ttime [org] [des] = new Dtime [periods]; if (ttime [org] [des] == 0) return (false); memset (ttime [org] [des], '\0', periods * sizeof (Dtime)); } } } else { table = new Skim_Data ** [num_org]; if (table == 0) return (false); for (int org=0; org < num_org; org++) { table [org] = new Skim_Data * [num_des]; if (table [org] == 0) return (false); for (int des=0; des < num_des; des++) { table [org] [des] = new Skim_Data [periods]; if (table [org] [des] == 0) return (false); memset (table [org] [des], '\0', periods * sizeof (Skim_Data)); } } } Num_Org (num_org); Num_Des (num_des); return (true); }
void Skim_File::Clear_Table (void) { if (table != 0) { for (int org=0; org < Num_Org (); org++) { for (int des=0; des < Num_Des (); des++) { delete [] table [org] [des]; } delete [] table [org]; } delete [] table; table = 0; } if (ttime != 0) { for (int org=0; org < Num_Org (); org++) { for (int des=0; des < Num_Des (); des++) { delete [] ttime [org] [des]; } delete [] ttime [org]; } delete [] ttime; ttime = 0; } }
bool TransCAD_Matrix::Read_Row (void *data, int org, int table, int period) { period = 0; MATRIX_SetCore (fh, (short) table); org = Org_Index (org); if (org < 0) { if (org < -1) return (false); int size; switch (Type ()) { default: case DB_DOUBLE: size = sizeof (double); break; case DB_FLOAT: size = sizeof (float); break; case DB_INTEGER: size = sizeof (int); break; case DB_SHORT: size = sizeof (short); break; } size *= Num_Des (); memset (data, '\0', size); return (true); } switch (Type ()) { default: case DB_DOUBLE: MATRIX_GetBaseVector (fh, org, MATRIX_ROW, DOUBLE_TYPE, data); break; case DB_FLOAT: MATRIX_GetBaseVector (fh, org, MATRIX_ROW, FLOAT_TYPE, data); break; case DB_INTEGER: MATRIX_GetBaseVector (fh, org, MATRIX_ROW, LONG_TYPE, data); break; case DB_SHORT: MATRIX_GetBaseVector (fh, org, MATRIX_ROW, SHORT_TYPE, data); break; } return (tc_status == TC_OKAY); }
bool Set_Table (void) { return (Set_Table (Num_Org (), Num_Des (), Num_Periods ())); }
int Table_Size (void) { return (Num_Org () * Num_Des () * Num_Periods ()); }
bool TransCAD_Matrix::Db_Open (string filename) { int i; DATA_TYPE data_type; if (!Load_DLL ()) return (Status (NO_TRANSCAD)); Set_Field_Numbers (); if (File_Access () == CREATE) { int len; char **core_names; Db_Field *fld_ptr; if (Num_Des () == 0 || Tables () == 0) return (false); if (Type () == DB_DOUBLE) { data_type = DOUBLE_TYPE; } else if (Type () == DB_FLOAT) { data_type = FLOAT_TYPE; } else if (Type () == DB_SHORT) { data_type = SHORT_TYPE; } else { data_type = LONG_TYPE; } core_names = new char * [Tables ()]; for (i=0; i < Tables (); i++) { fld_ptr = Table_Field (i); len = (int) fld_ptr->Name ().length () + 1; core_names [i] = new char [len]; strcpy_s (core_names [i], len, fld_ptr->Name ().c_str ()); } if ((int) Org_Map ()->size () != Num_Org () || (int) Des_Map ()->size () != Num_Des ()) { for (i=1; i <= Num_Org (); i++) { Add_Org (i); } for (i=1; i <= Num_Des (); i++) { Add_Des (i); } fh = MATRIX_New ((char *) filename.c_str (), (char *) File_Type ().c_str (), Num_Org (), 0, Num_Des (), 0, Tables (), core_names, data_type, 1); } else { int i; Integers row_ids, col_ids; Int_Map_Itr map_itr; row_ids.assign (Num_Org (), 0); for (i=0, map_itr = Org_Map ()->begin (); map_itr != Org_Map ()->end (); map_itr++, i++) { row_ids [i] = map_itr->first; } col_ids.assign (Num_Des (), 0); for (i=0, map_itr = Des_Map ()->begin (); map_itr != Des_Map ()->end (); map_itr++, i++) { col_ids [i] = map_itr->first; } fh = MATRIX_New ((char *) filename.c_str (), (char *) File_Type ().c_str (), Num_Org (), (long *) &row_ids [0], Num_Des (), (long *) &col_ids [0], Tables (), core_names, data_type, 1); } for (i=0; i < Tables (); i++) { delete [] core_names [i]; } delete [] core_names; } else { fh = MATRIX_LoadFromFile ((char *) filename.c_str (), CONTROL_AUTOMATIC); if (tc_status != TC_OKAY || fh == 0) return (false); Num_Org (MATRIX_GetNRows (fh)); Num_Des (MATRIX_GetNCols (fh)); data_type = MATRIX_GetDataType (fh); if (data_type == DOUBLE_TYPE) { Type (DB_DOUBLE); } else if (data_type == FLOAT_TYPE) { Type (DB_FLOAT); } else if (data_type == SHORT_TYPE) { Type (DB_SHORT); } else { Type (DB_INTEGER); } Tables (MATRIX_GetNCores (fh)); Integers ids; ids.assign (Num_Org (), 0); MATRIX_GetIDs(fh, MATRIX_ROW, (long *) &(ids [0])); for (i=0; i < Num_Org (); i++) { Add_Org (ids [i]); } ids.assign (Num_Des (), 0); MATRIX_GetIDs(fh, MATRIX_COL, (long *) &(ids [0])); for (i=0; i < Num_Des (); i++) { Add_Des (ids [i]); } } return (true); }
bool TPPlus_Matrix::Db_Open (string filename) { int i, type; char *license = 0; if (!Load_DLL ()) return (Status (NO_TPPLUS)); Set_Field_Numbers (); if (File_Access () == CREATE) { int len; unsigned char *header; Db_Field *fld_ptr; if (Num_Des () == 0 || Tables () == 0) return (false); if (Dbase_Format () == TRANPLAN) { type = TPLAN; } else { type = TPP; } TppMatMatSet (&fh, type, (char *) filename.c_str (), Num_Des (), Tables ()); header = fh->Mnames; for (i=0; i < Tables (); i++) { fld_ptr = Table_Field (i); if (fld_ptr->Decimal () == 0) { fh->Mspecs [i] = 'D'; } else { fh->Mspecs [i] = (unsigned char) fld_ptr->Decimal (); } len = (int) fld_ptr->Name ().length () + 1; memcpy (header, fld_ptr->Name ().c_str (), len); header += len; } if ((i = TppMatOpenOP (fh, (char *) File_ID ().c_str (), (char *) exe->Program (), 0, license, CUBE)) <= 0) { if (i < -1) { return (Status (TPPLUS_LICENSE)); } else { return (false); } } TppMatMatResize (&fh); } else { if (FileInquire ((char *) filename.c_str (), &fh) <= 0) return (false); if ((i = TppMatOpenIP (fh, license, CUBE)) <= 0) { if (i < -1) { return (Status (TPPLUS_LICENSE)); } else { return (false); } } Num_Org (fh->zones); Num_Des (fh->zones); Tables (fh->mats); } for (i=1; i <= Num_Des (); i++) { Add_Org (i); Add_Des (i); } fh->buffer = (void *) new char [fh->bufReq]; return (true); }