19#include <unordered_map>
25#if defined(_WIN32) && !defined(__MINGW32__)
27#define strcasecmp _stricmp
28#define strncasecmp _strnicmp
40 using ErrorHandler = std::function<void(
const std::ostringstream &)>;
45 static constexpr unsigned INVALID_ID = std::numeric_limits<unsigned>::max();
51 std::vector<DataType>
data{};
64 EntityGroup(
const std::string &type,
const std::string &namePrefix,
65 const std::vector<std::string> &invalidNamePrefixes)
64 EntityGroup(
const std::string &type,
const std::string &namePrefix, {
…}
76 GroupData *
add_group_data(
const std::string &name,
const std::vector<DataType> &data)
79 groupData.
data = data;
84 groupData.name = name;
85 groupData.hasInputName =
true;
76 GroupData *
add_group_data(
const std::string &name,
const std::vector<DataType> &data) {
…}
100 std::ostringstream errmsg;
101 errmsg <<
"Error populating " <<
m_type <<
" map";
142 unsigned nextPartId = 1;
150 if (!groupData.has_name()) {
151 std::ostringstream errmsg;
152 errmsg <<
m_type <<
" has no name";
156 if (!groupData.has_valid_id()) {
157 std::ostringstream errmsg;
158 errmsg <<
m_type <<
" named " << groupData.name <<
" has invalid id";
163 std::ostringstream errmsg;
164 errmsg <<
"Multiple declarations of " <<
m_type <<
": " << groupData.name;
177 m_ids[groupData.name] = groupData.id;
178 m_parts[groupData.id] = groupData.name;
186 if (groupData.has_name()) {
187 std::pair<unsigned, bool> result =
191 groupData.id = result.first;
202 if (!groupData.has_name()) {
205 std::ostringstream oss;
208 std::string name = oss.str();
211 groupData.name = name;
221 if (groupData.has_name()) {
222 std::pair<unsigned, bool> result =
225 if (!result.second) {
238 const unsigned prefixLength = invalidPrefix.length();
239 const std::string namePrefix = name.substr(0, prefixLength);
241 if (strcasecmp(namePrefix.c_str(), invalidPrefix.c_str()) == 0) {
242 std::ostringstream errmsg;
243 errmsg <<
"Invalid name '" << name <<
"' for a " <<
m_type <<
" part";
250 mutable std::unordered_map<std::string, unsigned>
m_ids;
251 mutable std::unordered_map<unsigned, std::string>
m_parts;
void verify_name(const std::string &name)
Definition Iotm_TextMeshEntityGroup.h:235
std::vector< AssemblyData > m_groupDataVec
Definition Iotm_TextMeshEntityGroup.h:258
const std::string & get_group_type() const
Definition Iotm_TextMeshEntityGroup.h:113
const std::vector< std::string > & get_part_names() const
Definition Iotm_TextMeshEntityGroup.h:111
void assign_id_for_non_default_exodus_name()
Definition Iotm_TextMeshEntityGroup.h:217
const GroupData * get_group_data(std::string name) const
Definition Iotm_TextMeshEntityGroup.h:125
unsigned get_unassigned_id() const
Definition Iotm_TextMeshEntityGroup.h:140
std::vector< std::string > m_invalidPrefixes
Definition Iotm_TextMeshEntityGroup.h:257
typename AssemblyData::DataType DataType
Definition Iotm_TextMeshEntityGroup.h:61
std::unordered_map< unsigned, std::string > m_parts
Definition Iotm_TextMeshEntityGroup.h:251
void finalize_parse()
Definition Iotm_TextMeshEntityGroup.h:93
void assign_id_from_default_exodus_name()
Definition Iotm_TextMeshEntityGroup.h:182
void validate_group_meta_data(const GroupData &groupData)
Definition Iotm_TextMeshEntityGroup.h:148
void assign(size_t index)
Definition Iotm_TextMeshEntityGroup.h:169
std::unordered_map< std::string, size_t > m_groupDataMap
Definition Iotm_TextMeshEntityGroup.h:253
ErrorHandler m_errorHandler
Definition Iotm_TextMeshEntityGroup.h:260
const GroupData * get_group_data(unsigned id) const
Definition Iotm_TextMeshEntityGroup.h:115
std::vector< std::string > m_partNames
Definition Iotm_TextMeshEntityGroup.h:249
bool is_assigned(unsigned id) const
Definition Iotm_TextMeshEntityGroup.h:233
virtual ~EntityGroup()
Definition Iotm_TextMeshEntityGroup.h:72
GroupData * add_group_data(const std::string &name, const std::vector< DataType > &data)
Definition Iotm_TextMeshEntityGroup.h:76
virtual void set_error_handler(ErrorHandler errorHandler)
Definition Iotm_TextMeshEntityGroup.h:74
bool m_idsAssigned
Definition Iotm_TextMeshEntityGroup.h:252
bool is_registered(const std::string &name) const
Definition Iotm_TextMeshEntityGroup.h:135
std::string m_type
Definition Iotm_TextMeshEntityGroup.h:255
const std::vector< GroupData > & get_group_data() const
Definition Iotm_TextMeshEntityGroup.h:109
size_t size() const
Definition Iotm_TextMeshEntityGroup.h:107
std::unordered_map< std::string, unsigned > m_ids
Definition Iotm_TextMeshEntityGroup.h:250
std::string m_exodusPrefix
Definition Iotm_TextMeshEntityGroup.h:256
void assign_id_and_name_for_empty_name()
Definition Iotm_TextMeshEntityGroup.h:198
EntityGroup(const std::string &type, const std::string &namePrefix, const std::vector< std::string > &invalidNamePrefixes)
Definition Iotm_TextMeshEntityGroup.h:64
Definition Iotm_TextMeshAdjacencyGraph.h:39
void convert_to_uppercase(std::string &str)
Definition Iotm_TextMeshFuncs.h:96
std::function< void(const std::ostringstream &)> ErrorHandler
Definition Iotm_TextMeshAdjacencyGraph.h:41
void default_error_handler(const std::ostringstream &message)
Definition Iotm_TextMeshFuncs.h:40
std::pair< unsigned, bool > get_id_from_part_name(const std::string &name, const std::string &prefix)
Definition Iotm_TextMeshFuncs.h:126
A namespace for the textmesh database format.
Definition Iotm_DatabaseIO.C:95
Definition Iotm_TextMeshEntityGroup.h:43
T DataType
Definition Iotm_TextMeshEntityGroup.h:44
bool hasInputName
Definition Iotm_TextMeshEntityGroup.h:47
std::string name
Definition Iotm_TextMeshEntityGroup.h:49
static constexpr unsigned INVALID_ID
Definition Iotm_TextMeshEntityGroup.h:45
std::string type
Definition Iotm_TextMeshEntityGroup.h:50
std::vector< DataType > data
Definition Iotm_TextMeshEntityGroup.h:51
bool has_valid_id() const
Definition Iotm_TextMeshEntityGroup.h:53
bool has_name() const
Definition Iotm_TextMeshEntityGroup.h:54