Show
Ignore:
Timestamp:
08/24/07 12:16:31 (2 years ago)
Author:
kraftche
Message:

o Add new FILE I/O API - not all features implemented yet
o Record a name for each known file format
o Implement specification of output file type by format name
o Add "-f <format>" flag to mbconvert

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • MOAB/trunk/MBReaderWriterSet.cpp

    r752 r1251  
    4747{ 
    4848#ifdef HDF5_FILE 
    49   const char* hdf5_list[] = { "h5m", "mhdf", NULL }; 
    50   register_factory(  ReadHDF5::factory, WriteHDF5::factory, "MOAB native (HDF5)", hdf5_list ); 
     49  const char* hdf5_sufxs[] = { "h5m", "mhdf", NULL }; 
     50  register_factory(  ReadHDF5::factory, WriteHDF5::factory, "MOAB native (HDF5)", hdf5_sufxs, "MOAB" ); 
    5151#endif 
    5252 
    5353#ifdef NETCDF_FILE 
    54   const char* exo_list[] = { "exo", "exoII", "exo2", "g", "gen", NULL }; 
    55   register_factory( ReadNCDF::factory, WriteNCDF::factory, "Exodus II", exo_list ); 
    56 #endif 
    57    
    58   const char* vtk_list[] = { "vtk", NULL }; 
    59   register_factory( ReadVtk::factory, WriteVtk::factory, "Kitware VTK", vtk_list ); 
    60    
    61   const char* cub_list[] = { "cub", NULL }; 
    62   register_factory( Tqdcfr::factory, NULL, "Cubit", cub_list ); 
     54  const char* exo_sufxs[] = { "exo", "exoII", "exo2", "g", "gen", NULL }; 
     55  register_factory( ReadNCDF::factory, WriteNCDF::factory, "Exodus II", exo_sufxs, "EXODUS" ); 
     56#endif 
     57   
     58  register_factory( ReadVtk::factory, WriteVtk::factory, "Kitware VTK", "vtk", "VTK" ); 
     59   
     60  register_factory( Tqdcfr::factory, NULL, "Cubit", "cub", "CUBIT" ); 
    6361 
    6462#ifdef NETCDF_FILE   
    65   const char* slac_list[] = { "slac", NULL }; 
    66   register_factory( NULL, WriteSLAC::factory, "SLAC", slac_list ); 
    67 #endif 
    68  
    69   const char* gmv_list[] = { "gmv", NULL }; 
    70   register_factory( NULL, WriteGMV::factory, "GMV", gmv_list ); 
    71    
    72   const char* ans_list[] = { "ans", NULL }; 
    73   register_factory( NULL, WriteAns::factory, "Ansys", ans_list ); 
    74    
    75   const char* gmsh_list[] = { "msh", "gmsh", NULL }; 
    76   register_factory( ReadGmsh::factory, WriteGmsh::factory, "Gmsh mesh file", gmsh_list ); 
    77    
    78   const char* stl_list[] = { "stl", NULL }; 
    79   register_factory( ReadSTL::ascii_instance, WriteSTL::ascii_instance, "Stereo Lithography File (STL)", stl_list ); 
    80    
    81   const char* stlb_list[] = { "stlb", NULL }; 
    82   register_factory( ReadSTL::binary_instance, WriteSTL::binary_instance, "Binary Stereo Lithography (STL)", stlb_list ); 
     63  register_factory( NULL, WriteSLAC::factory, "SLAC", "slac", "SLAC" ); 
     64#endif 
     65 
     66  register_factory( NULL, WriteGMV::factory, "GMV", "gmv", "GMV" ); 
     67   
     68  register_factory( NULL, WriteAns::factory, "Ansys", "ans", "ANSYS" ); 
     69   
     70  const char* gmsh_sufxs[] = { "msh", "gmsh", NULL }; 
     71  register_factory( ReadGmsh::factory, WriteGmsh::factory, "Gmsh mesh file", gmsh_sufxs, "GMSH" ); 
     72   
     73  register_factory( ReadSTL::ascii_instance, WriteSTL::ascii_instance, "Stereo Lithography File (STL)", "stl", "STL" ); 
    8374} 
    8475 
     
    9182                                                 writer_factory_t writer, 
    9283                                                 const char* description, 
    93                                                  const char** extensions ) 
     84                                                 const char* const* extensions, 
     85                                                 const char* name ) 
    9486{ 
    9587  if (!reader && !writer) 
     
    9789   
    9890    // count extensions and check for duplicates 
    99   const char** iter; 
     91  const char* const* iter; 
    10092  for (iter = extensions; *iter; ++iter) 
    10193  { 
    102     iter_type h = handler_from_extension( *iter ); 
     94    iterator h = handler_from_extension( *iter ); 
    10395    if (h != end()) 
    10496    { 
     
    113105    } 
    114106  } 
    115   handlerList.push_back( Handler(reader, writer, description, extensions, iter - extensions) ); 
     107  handlerList.push_back( Handler(reader, writer, name, description, extensions, iter - extensions) ); 
    116108  return MB_SUCCESS; 
    117109}     
     110 
     111MBErrorCode MBReaderWriterSet::register_factory( reader_factory_t reader, 
     112                                                 writer_factory_t writer, 
     113                                                 const char* description, 
     114                                                 const char* extension, 
     115                                                 const char* name ) 
     116{ 
     117  const char* extensions[2] = {extension, NULL}; 
     118  return register_factory( reader, writer, description, extensions, name ); 
     119} 
     120 
    118121   
    119122MBReaderIface* MBReaderWriterSet::get_file_extension_reader(  
     
    121124{ 
    122125  std::string ext = extension_from_filename( filename ); 
    123   iter_type handler = handler_from_extension( ext, true, false ); 
     126  iterator handler = handler_from_extension( ext, true, false ); 
    124127  return handler == end() ? NULL : handler->make_reader(mbCore); 
    125128} 
     
    129132{ 
    130133  std::string ext = extension_from_filename( filename ); 
    131   iter_type handler = handler_from_extension( ext, false, true ); 
     134  iterator handler = handler_from_extension( ext, false, true ); 
    132135  return handler == end() ? NULL : handler->make_writer(mbCore); 
    133136} 
     
    145148MBReaderWriterSet::Handler::Handler( reader_factory_t read_f,  
    146149                                     writer_factory_t write_f, 
     150                                     const char* name, 
    147151                                     const char* desc,  
    148                                      const char** ext,  
     152                                     const char* const* ext,  
    149153                                     int num_ext ) 
    150  : mReader(read_f), mWriter(write_f), mDescription(desc), mExtensions(num_ext) 
     154 : mReader(read_f), mWriter(write_f), mName(name), mDescription(desc), mExtensions(num_ext) 
    151155{ 
    152156  for (int i = 0; i < num_ext; ++i) 
     
    158162#endif 
    159163 
    160 MBReaderWriterSet::iter_type  
     164MBReaderWriterSet::iterator  
    161165MBReaderWriterSet::handler_from_extension( const std::string& ext, 
    162166                                           bool with_reader, 
    163167                                           bool with_writer ) const 
    164168{ 
    165   iter_type iter; 
     169  iterator iter; 
    166170  std::vector<std::string>::const_iterator siter; 
    167171   
     
    192196  return end(); 
    193197} 
    194                                         
     198 
     199MBReaderWriterSet::iterator 
     200MBReaderWriterSet::handler_by_name( const char* name ) const 
     201
     202  return std::find( begin(), end(), name ); 
     203
     204 
     205bool MBReaderWriterSet::Handler::operator==( const char* name ) const 
     206
     207    // do case-insensitive comparison 
     208  std::string::const_iterator siter = mName.begin(); 
     209  for (; *name; ++name, ++siter) 
     210    if (siter == mName.end() || tolower(*name) != tolower(*siter)) 
     211      return false; 
     212  return *name == '\0'; 
     213
     214 
     215