Mesh Oriented datABase  (version 5.4.1)
Array-based unstructured mesh datastructure
ReaderIface.hpp
Go to the documentation of this file.
00001 /**
00002  * MOAB, a Mesh-Oriented datABase, is a software component for creating,
00003  * storing and accessing finite element mesh data.
00004  *
00005  * Copyright 2004 Sandia Corporation.  Under the terms of Contract
00006  * DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
00007  * retains certain rights in this software.
00008  *
00009  * This library is free software; you can redistribute it and/or
00010  * modify it under the terms of the GNU Lesser General Public
00011  * License as published by the Free Software Foundation; either
00012  * version 2.1 of the License, or (at your option) any later version.
00013  *
00014  */
00015 
00016 #ifndef MOAB_READER_IFACE_HPP
00017 #define MOAB_READER_IFACE_HPP
00018 
00019 #include "moab/Types.hpp"
00020 
00021 #include <vector>
00022 
00023 namespace moab
00024 {
00025 
00026 class FileOptions;
00027 
00028 /**
00029  *\brief Interface for mesh reader implementations.
00030  *\version 1.00
00031  *\date 2004-4-23
00032  *\author Jason Kraftcheck
00033  */
00034 class ReaderIface
00035 {
00036   public:
00037     virtual ~ReaderIface() {}
00038 
00039     /** Struct used to specify subset of file to read */
00040     struct IDTag
00041     {
00042         const char* tag_name;   //!< Name of tag containing integer IDs
00043         const int* tag_values;  //!< Array of integer ID values
00044         int num_tag_values;     //!< Length of tag_values array
00045     };
00046 
00047     struct SubsetList
00048     {
00049         /** An array of tag name and value sets specifying
00050          *  the subset of the file to read.  If multiple
00051          *  tags are specified, the sets that match all
00052          *  tags (intersection) should be read.
00053          */
00054         IDTag* tag_list;
00055         int tag_list_length;  //!< Length of tag_list array
00056         int num_parts;        //!< If non-zero, load 1/num_parts of the matching sets
00057         int part_number;      //!< If num_parts is non-zero, load part_number-th fraction of the sets
00058     };
00059 
00060     /**
00061      *\brief Load mesh from a file.
00062      *
00063      * Method all readers must provide to import a mesh.
00064      *
00065      *\param file_name      The file to read.
00066      *\param file_set       Optional pointer to entity set representing
00067      *                      file.  If this is not NULL, reader may optionally
00068      *                      tag the pointed-to set with format-specific
00069      *                      meta-data.
00070      *\param subset_list    An optional struct pointer specifying the tags identifying
00071      *                      entity sets to be read.
00072      *\param file_id_tag    If specified, reader should store for each entity
00073      *                      it reads, a unique integer ID for this tag.
00074      *\author Jason Kraftcheck
00075      */
00076     virtual ErrorCode load_file( const char* file_name,
00077                                  const EntityHandle* file_set,
00078                                  const FileOptions& opts,
00079                                  const SubsetList* subset_list = 0,
00080                                  const Tag* file_id_tag        = 0 ) = 0;
00081 
00082     /**
00083      *\brief Read tag values from a file.
00084      *
00085      * Read the list if all integer tag values from the file for
00086      * a tag that is a single integer value per entity.
00087      *
00088      *\param file_name      The file to read.
00089      *\param tag_name       The tag for which to read values
00090      *\param tag_values_out Output: The list of tag values.
00091      *\param subset_list    An array of tag name and value sets specifying
00092      *                      the subset of the file to read.  If multiple
00093      *                      tags are specified, the sets that match all
00094      *                      tags (intersection) should be read.
00095      *\param subset_list_length The length of the 'subset_list' array.
00096      */
00097     virtual ErrorCode read_tag_values( const char* file_name,
00098                                        const char* tag_name,
00099                                        const FileOptions& opts,
00100                                        std::vector< int >& tag_values_out,
00101                                        const SubsetList* subset_list = 0 ) = 0;
00102 };
00103 
00104 }  // namespace moab
00105 
00106 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines