Antares Simulator
Power System Simulator
portType.h
1 /*
2 ** Copyright 2007-2025, RTE (https://www.rte-france.com)
3 ** See AUTHORS.txt
4 ** SPDX-License-Identifier: MPL-2.0
5 ** This file is part of Antares-Simulator,
6 ** Adequacy and Performance assessment for interconnected energy networks.
7 **
8 ** Antares_Simulator is free software: you can redistribute it and/or modify
9 ** it under the terms of the Mozilla Public Licence 2.0 as published by
10 ** the Mozilla Foundation, either version 2 of the License, or
11 ** (at your option) any later version.
12 **
13 ** Antares_Simulator is distributed in the hope that it will be useful,
14 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 ** Mozilla Public Licence 2.0 for more details.
17 **
18 ** You should have received a copy of the Mozilla Public Licence 2.0
19 ** along with Antares_Simulator. If not, see <https://opensource.org/license/mpl-2-0/>.
20 */
21 #pragma once
22 
23 #include <algorithm>
24 #include <optional>
25 #include <ranges>
26 #include <string>
27 #include <vector>
28 
29 #include "portField.h"
30 
31 namespace Antares::ModelerStudy::SystemModel
32 {
33 
34 class PortType final
35 {
36 public:
37  PortType(const std::string& id,
38  std::vector<PortField>&& fields,
39  const std::string& areaConnectionFieldId = ""):
40  id_(id),
41  fields_(std::move(fields))
42  {
43  if (!areaConnectionFieldId.empty())
44  {
45  if (!std::ranges::any_of(fields_,
46  [areaConnectionFieldId](const auto& field)
47  { return field.Id() == areaConnectionFieldId; }))
48  {
49  throw std::invalid_argument(
50  "Field \"" + areaConnectionFieldId
51  + "\" selected for area connections was not defined in PortType \"" + id_
52  + "\".");
53  }
54  areaConnectionFieldId_ = areaConnectionFieldId;
55  }
56  }
57 
58  const std::string& Id() const
59  {
60  return id_;
61  }
62 
63  const std::vector<PortField>& Fields() const
64  {
65  return fields_;
66  }
67 
68  const std::optional<std::string>& AreaConnectionFieldId() const
69  {
70  return areaConnectionFieldId_;
71  }
72 
73  bool operator==(const PortType& other) const = default;
74 
75 private:
76  std::string id_;
77 
78  std::vector<PortField> fields_;
79 
80  std::optional<std::string> areaConnectionFieldId_;
81 };
82 
83 } // namespace Antares::ModelerStudy::SystemModel