Skip to content

File coupling_fields.hpp

File List > common > src > coupling_fields.hpp

Go to the documentation of this file

#ifndef COUPLING_FIELDS_HPP
#define COUPLING_FIELDS_HPP

#include <map>
#include <sstream>
#include <string>

namespace emulator {

class CouplingFieldsBase {
public:
  virtual ~CouplingFieldsBase() = default;

  virtual void initialize(const std::string &export_fields,
                          const std::string &import_fields) {
    parse_field_list(export_fields, export_map, num_exports);
    parse_field_list(import_fields, import_map, num_imports);
  }

  int get_export_index(const std::string &name) const {
    auto it = export_map.find(name);
    return (it != export_map.end()) ? it->second : -1;
  }

  int get_import_index(const std::string &name) const {
    auto it = import_map.find(name);
    return (it != import_map.end()) ? it->second : -1;
  }

  int num_exports = 0; 
  int num_imports = 0; 

protected:
  std::map<std::string, int> export_map; 
  std::map<std::string, int> import_map; 

  void parse_field_list(const std::string &fields,
                        std::map<std::string, int> &field_map, int &count) {
    std::istringstream ss(fields);
    std::string field;
    int idx = 0;
    while (std::getline(ss, field, ':')) {
      if (!field.empty()) {
        field_map[field] = idx++;
      }
    }
    count = idx;
  }
};

} // namespace emulator

#endif // COUPLING_FIELDS_HPP