bool Db_Base::Copy_Fields (Db_Base &input, bool nest_flag) { Field_Ptr in_fld, out_fld; bool nested = input.Nested (); int lvalue; double dvalue; string svalue; Dtime tvalue; if (Dbase_Format () == DEFAULT_FORMAT) { Dbase_Format (DEFAULT_FORMAT); } int num = input.Num_Fields (); for (int i=0; i < num; i++) { in_fld = input.Field (i); if (in_fld != 0) { if (nest_flag && input.Nest_Flag ()) { if (input.Nested ()) { if (in_fld->Nest () != input.Nest ()) continue; } else { if (in_fld->Nest () == input.Nest ()) continue; } } out_fld = Field (in_fld->Name ()); if (out_fld != 0) { switch (in_fld->Type ()) { case DB_INTEGER: case DB_UNSIGNED: input.Read_Field (in_fld, (void *) &lvalue, DB_INTEGER); if (!Write_Field (out_fld, (void *) &lvalue, DB_INTEGER)) return (false); break; case DB_DOUBLE: case DB_FIXED: input.Read_Field (in_fld, (void *) &dvalue, DB_DOUBLE); if (!Write_Field (out_fld, (void *) &dvalue, DB_DOUBLE)) return (false); break; case DB_STRING: case DB_CHAR: input.Read_Field (in_fld, (void *) &svalue, DB_STRING); if (!Write_Field (out_fld, (void *) &svalue, DB_STRING)) return (false); break; case DB_TIME: input.Read_Field (in_fld, (void *) &tvalue, DB_TIME); if (!Write_Field (out_fld, (void *) &tvalue, DB_TIME)) return (false); break; } } } } input.Nested (nested); return (true); }
void LocationData::Set_Files (void) { int i, nfld, key; bool binary; Db_Field *fld; Db_Base *file; Db_Sort_Array *data; Data_Itr data_itr; Polygon_Itr poly_itr; //---- create the program data structure ---- data_rec.push_back (input_file); data_rec.push_back (output_file); //---- convert each data file to binary ---- for (data_itr = data_group.begin (); data_itr != data_group.end (); data_itr++) { file = data_itr->file; data = data_itr->data_db; data_rec.push_back ((Db_Base *) data); data->File_ID (file->File_ID ()); data->File_Type (file->File_Type ()); nfld = file->Num_Fields (); key = data_itr->join_field; binary = (file->Record_Format () == BINARY); fld = file->Field (key); data->Add_Field (fld->Name (), DB_INTEGER, 10); data->Add_Field ("AL_COUNT", DB_INTEGER, 10); for (i=0; i < nfld; i++) { if (i == key) continue; fld = file->Field (i); if (fld != 0) { data->Add_Field (fld->Name (), fld->Type (), fld->Size (), fld->Units (), binary); } } } //---- read the arcview boundary file ---- for (poly_itr = polygons.begin (); poly_itr != polygons.end (); poly_itr++) { file = poly_itr->file; data = poly_itr->data_db; data_rec.push_back ((Db_Base *) data); data->File_ID (file->File_ID ()); data->File_Type (file->File_Type ()); nfld = file->Num_Fields (); binary = (file->Record_Format () == BINARY); data->Add_Field ("INDEX", DB_INTEGER, 10); for (i=0; i < nfld; i++) { fld = file->Field (i); if (fld != 0) { data->Add_Field (fld->Name (), fld->Type (), fld->Size (), fld->Units (), binary); } } } Write (1, "Compiling Conversion Script"); if (Report_Flag (PRINT_SCRIPT)) { Header_Number (PRINT_SCRIPT); if (!Break_Check (10)) { Print (1); Page_Header (); } } program.Initialize (data_rec, random.Seed () + 1); if (!program.Compile (program_file, Report_Flag (PRINT_SCRIPT))) { Error ("Compiling Conversion Script"); } if (Report_Flag (PRINT_STACK)) { Header_Number (PRINT_STACK); program.Print_Commands (false); } Header_Number (0); }