Antares Simulator
Power System Simulator
Loading...
Searching...
No Matches
SumNode.h
1/*
2** Copyright 2007-2024, 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 <vector>
24
25#include "antares/expressions/nodes/Node.h"
26
27namespace Antares::Expressions::Nodes
28{
29
30template<typename T>
31concept NodePtr = std::same_as<T, Node*>;
32
33template<typename T, typename... Args>
34requires(std::convertible_to<Args, T> && ...)
35std::vector<T> createVector(T first, Args... args)
36{
37 return std::vector<T>{first, args...};
38}
39
40class SumNode: public Node
41{
42public:
43 template<typename... NodePtr>
44 explicit SumNode(NodePtr... operands)
45 {
46 if constexpr (sizeof...(NodePtr))
47 {
48 operands_ = createVector(static_cast<Node*>(operands)...);
49 }
50 }
51
57 explicit SumNode(const std::vector<Node*>& operands);
58
64 explicit SumNode(std::vector<Node*>&& operands):
65 operands_(std::move(operands))
66 {
67 }
68
74 const std::vector<Node*>& getOperands() const;
75
76 Node* operator[](std::size_t idx) const;
77
78 size_t size() const;
79
80 std::string name() const override
81 {
82 return "SumNode";
83 }
84
85private:
86 std::vector<Node*> operands_ = {};
87};
88} // namespace Antares::Expressions::Nodes
Base class for nodes in a syntax tree.
Definition Node.h:30
SumNode(std::vector< Node * > &&operands)
Constructs a sum node with the specified operands. Vector is moved.
Definition SumNode.h:64
const std::vector< Node * > & getOperands() const
Retrieves the operands of the sum.
Definition SumNode.cpp:31