Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor modeler code #2616

Merged
merged 10 commits into from
Feb 6, 2025
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -264,15 +264,18 @@ OMESSAGE("") # empty line

# Sub Directories
add_subdirectory(api)
add_subdirectory(io)
add_subdirectory(libs) #antares-core fswalker

if(BUILD_UI)
add_subdirectory(ui) #all antares ui libs + antares simulator
endif()

add_subdirectory(study) #antares study model
add_subdirectory(solver) #antares solver and all associated libs
add_subdirectory(analyzer) #antares analyser
add_subdirectory(expressions) #modeler expressions (AST)
add_subdirectory(optimisation) #optimisation APIs
add_subdirectory(study) #antares study model
add_subdirectory(solver) #antares solver and all associated libs
add_subdirectory(analyzer) #antares analyser

# Tools
if (BUILD_TOOLS)
Expand Down
100 changes: 100 additions & 0 deletions src/expressions/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
project(Expressions)

add_subdirectory(antlr-interface)
set(SRC_Expressions
nodes/PortFieldNode.cpp
nodes/PortFieldSumNode.cpp
nodes/ComponentNode.cpp
nodes/BinaryNode.cpp
nodes/UnaryNode.cpp
nodes/SumNode.cpp

visitors/CloneVisitor.cpp
visitors/CompareVisitor.cpp
visitors/EvalVisitor.cpp
visitors/EvaluationContext.cpp
visitors/LinearityVisitor.cpp
visitors/TimeIndexVisitor.cpp
visitors/PrintVisitor.cpp
visitors/SubstitutionVisitor.cpp
visitors/PortFieldSubstitutionVisitor.cpp
visitors/PortFieldSumSubstitutionVisitor.cpp
visitors/AstDOTStyleVisitor.cpp
visitors/InvalidNode.cpp
visitors/NodeVisitor.cpp

hashable.cpp

NodeRegistry.cpp
include/antares/expressions/NodeRegistry.h
include/antares/expressions/nodes/SumNode.h
include/antares/expressions/nodes/BinaryNode.h
include/antares/expressions/nodes/ComparisonNode.h
include/antares/expressions/nodes/ComponentNode.h
include/antares/expressions/nodes/DivisionNode.h
include/antares/expressions/nodes/EqualNode.h
include/antares/expressions/nodes/ExpressionsNodes.h
include/antares/expressions/nodes/GreaterThanOrEqualNode.h
include/antares/expressions/nodes/Leaf.h
include/antares/expressions/nodes/LessThanOrEqualNode.h
include/antares/expressions/nodes/LiteralNode.h
include/antares/expressions/nodes/MultiplicationNode.h
include/antares/expressions/nodes/NegationNode.h
include/antares/expressions/nodes/Node.h
include/antares/expressions/nodes/NodesForwardDeclaration.h
include/antares/expressions/nodes/ParameterNode.h
include/antares/expressions/nodes/PortFieldNode.h
include/antares/expressions/nodes/PortFieldSumNode.h
include/antares/expressions/nodes/SubtractionNode.h
include/antares/expressions/nodes/UnaryNode.h
include/antares/expressions/nodes/VariableNode.h

include/antares/expressions/visitors/CloneVisitor.h
include/antares/expressions/visitors/CompareVisitor.h
include/antares/expressions/visitors/EvalVisitor.h
include/antares/expressions/visitors/EvaluationContext.h
include/antares/expressions/visitors/LinearStatus.h
include/antares/expressions/visitors/LinearityVisitor.h
include/antares/expressions/visitors/NodeVisitor.h
include/antares/expressions/visitors/PrintVisitor.h
include/antares/expressions/visitors/TimeIndexVisitor.h
include/antares/expressions/visitors/TimeIndex.h
include/antares/expressions/visitors/SubstitutionVisitor.h
include/antares/expressions/visitors/PortFieldSubstitutionVisitor.h
include/antares/expressions/visitors/PortFieldSumSubstitutionVisitor.h
include/antares/expressions/visitors/AstDOTStyleVisitor.h
include/antares/expressions/visitors/InvalidNode.h

include/antares/expressions/Registry.hxx
include/antares/expressions/IName.h
include/antares/expressions/hashable.h
include/antares/expressions/expression.h
)

source_group("expressions" FILES ${SRC_Expressions})
add_library(expressions
${SRC_Expressions})
add_library(Antares::expressions ALIAS expressions)

target_include_directories(expressions
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
target_link_libraries(expressions
PUBLIC
Boost::headers
Antares::logs
)


add_library(expressions-iterators
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This remark follows this one.
About expressions-iterators target : as it mainly defines class AST, and AST is central to expressions, these files should be part of expressions target.

iterators/pre-order.cpp
include/antares/expressions/iterators/pre-order.h
)

target_link_libraries(expressions-iterators PRIVATE expressions)

install(DIRECTORY include/antares
DESTINATION "include"
)

14 changes: 14 additions & 0 deletions src/expressions/NodeRegistry.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#include <antares/expressions/NodeRegistry.h>
#include <antares/expressions/nodes/ExpressionsNodes.h>
#include <antares/expressions/visitors/CloneVisitor.h>

namespace Antares::Expressions
{
NodeRegistry::NodeRegistry(Antares::Expressions::Nodes::Node* node,
Antares::Expressions::Registry<Antares::Expressions::Nodes::Node> registry):
node(node),
registry(std::move(registry))
{
}

} // namespace Antares::Expressions
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

set(PROJ antlr-interface)
set(HEADERS
ExprBaseVisitor.h
Expand All @@ -7,23 +6,23 @@ set(HEADERS
ExprVisitor.h
)

Set(SRCS
ExprBaseVisitor.cpp
ExprLexer.cpp
ExprParser.cpp
ExprVisitor.cpp
Set(SRCS
ExprBaseVisitor.cpp
ExprLexer.cpp
ExprParser.cpp
ExprVisitor.cpp
)

add_library(${PROJ} ${SRCS})
add_library(${PROJ} ${SRCS})
add_library(Antares::${PROJ} ALIAS ${PROJ})

if(MSVC)
if (MSVC)
target_link_libraries(${PROJ} PUBLIC antlr4_shared) # vcpkg triplet x64-windows provides shared lib
else()
else ()
target_link_libraries(${PROJ} PUBLIC antlr4_static) # vcpkg triplet x64-linux provides static lib
endif()
endif ()

target_include_directories(${PROJ}
target_include_directories(${PROJ}
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
${ANTLR4_INCLUDE_DIR})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
*/
#include <boost/functional/hash.hpp>

#include <antares/solver/expressions/hashable.h>
#include <antares/expressions/hashable.h>

namespace Antares::Solver
namespace Antares::Expressions
{

Hashable::Hashable(const std::string& s1, const std::string& s2):
Expand All @@ -46,4 +46,4 @@ std::size_t PortFieldHash::operator()(const Hashable& n) const
return seed;
}

} // namespace Antares::Solver
} // namespace Antares::Expressions
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#pragma once
#include <string>

namespace Antares::Solver
namespace Antares::Expressions
{
class IName
{
Expand All @@ -30,4 +30,4 @@ class IName
virtual std::string name() const = 0;
bool operator==(const IName& other) const = default;
};
} // namespace Antares::Solver
} // namespace Antares::Expressions
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#pragma once

#include <antares/solver/expressions/Registry.hxx>
#include <antares/solver/expressions/nodes/Node.h>
#include <antares/expressions/Registry.hxx>
#include <antares/expressions/nodes/Node.h>

namespace Antares::Solver
namespace Antares::Expressions
{
class NodeRegistry
{
Expand All @@ -18,4 +18,4 @@ class NodeRegistry
Nodes::Node* node;
Registry<Nodes::Node> registry;
};
} // namespace Antares::Solver
} // namespace Antares::Expressions
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
#include <mutex>
#include <vector>

namespace Antares::Solver
namespace Antares::Expressions
{
// Template class to manage the memory allocation and registry for a base class
template<class Base>
Expand All @@ -51,4 +51,4 @@ private:
std::vector<std::unique_ptr<Base>>
registry_; // Registry to manage dynamically allocated objects
};
} // namespace Antares::Solver
} // namespace Antares::Expressions
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@

#include <string>

#include <antares/solver/expressions/NodeRegistry.h>
#include <antares/expressions/NodeRegistry.h>

namespace Antares::Solver::Nodes
namespace Antares::Expressions::Nodes
{
class Node;
}
Expand All @@ -38,7 +38,7 @@ class Expression
public:
Expression() = default;

explicit Expression(const std::string& value, Solver::NodeRegistry root):
explicit Expression(const std::string& value, Expressions::NodeRegistry root):
value_(value),
root_(std::move(root)),
empty_(false)
Expand All @@ -50,7 +50,7 @@ class Expression
return value_;
}

Solver::Nodes::Node* RootNode() const
Expressions::Nodes::Node* RootNode() const
{
return root_.node;
}
Expand All @@ -62,7 +62,7 @@ class Expression

private:
std::string value_;
Solver::NodeRegistry root_;
Expressions::NodeRegistry root_;
bool empty_ = true;
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#pragma once
#include <string>

namespace Antares::Solver
namespace Antares::Expressions
{
class Hashable
{
Expand All @@ -40,4 +40,4 @@ struct PortFieldHash
std::size_t operator()(const Hashable& n) const;
};

} // namespace Antares::Solver
} // namespace Antares::Expressions
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#include <stack>
#include <vector>

namespace Antares::Solver::Nodes
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this file named pre-order.h whereas it contains declaration of class AST ?
AST seems to be the main topic here, at least the feature we should highlight.
Class ASTPreOrderIterator is an implementation detail.
Rename into ast.h ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@a-zakir opinion ?

namespace Antares::Expressions::Nodes
{
// Forward-declaration is enough

Expand Down Expand Up @@ -55,4 +55,4 @@ class AST
// End iterator (indicating traversal is complete)
ASTPreOrderIterator end();
};
} // namespace Antares::Solver::Nodes
} // namespace Antares::Expressions::Nodes
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
*/
#pragma once

#include <antares/solver/expressions/nodes/Node.h>
#include <antares/expressions/nodes/Node.h>

namespace Antares::Solver::Nodes
namespace Antares::Expressions::Nodes
{
class BinaryNode: public Node
{
Expand Down Expand Up @@ -61,4 +61,4 @@ class BinaryNode: public Node
*/
Node* rightOperand_ = nullptr;
};
} // namespace Antares::Solver::Nodes
} // namespace Antares::Expressions::Nodes
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
*/
#pragma once

#include <antares/solver/expressions/nodes/BinaryNode.h>
#include <antares/expressions/nodes/BinaryNode.h>

namespace Antares::Solver::Nodes
namespace Antares::Expressions::Nodes
{
/**
* @brief Represents a comparison node in a syntax tree.
Expand All @@ -32,4 +32,4 @@ class ComparisonNode: public BinaryNode
public:
using BinaryNode::BinaryNode;
};
} // namespace Antares::Solver::Nodes
} // namespace Antares::Expressions::Nodes
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
#pragma once
#include <string>

#include <antares/solver/expressions/nodes/Node.h>
#include <antares/expressions/nodes/Node.h>

namespace Antares::Solver::Nodes
namespace Antares::Expressions::Nodes
{
/**
* @brief Represents a component node in a syntax tree.
Expand Down Expand Up @@ -86,4 +86,4 @@ class ComponentParameterNode: public ComponentNode
return "ComponentParameterNode";
}
};
} // namespace Antares::Solver::Nodes
} // namespace Antares::Expressions::Nodes
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
*/
#pragma once

#include <antares/solver/expressions/nodes/BinaryNode.h>
#include <antares/expressions/nodes/BinaryNode.h>

namespace Antares::Solver::Nodes
namespace Antares::Expressions::Nodes
{
/**
* @brief Represents a division node in a syntax tree.
Expand All @@ -37,4 +37,4 @@ class DivisionNode: public BinaryNode
return "DivisionNode";
}
};
} // namespace Antares::Solver::Nodes
} // namespace Antares::Expressions::Nodes
Loading
Loading