Skip to content

Commit 7b59fe7

Browse files
-replace getInterface with dynamic_cast
1 parent 4e80f8d commit 7b59fe7

19 files changed

+53
-196
lines changed

src/attribute_node.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
#pragma once
22
#include "iattribute.h"
33
#include "idocumentnode.h"
4+
#include <string>
45

56
namespace htcpp {
67

78
class StreamReader;
89

910
class AttributeNode : public IDocumentNode,
1011
public IAttribute {
11-
DOCUMENT_NODE_INTERFACE_ACCESS(IAttribute)
12-
1312
public:
1413
explicit AttributeNode(std::string name, StreamReader& stream);
1514
std::string_view name() const override;

src/codenode.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
#include "codenode.h"
2-
#include "streamreader.h"
32
#include "errors.h"
3+
#include "streamreader.h"
44
#include "utils.h"
5+
#include <gsl/assert>
56
#include <utility>
67

78
namespace htcpp{

src/codenode.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#pragma once
2-
#include "document_node_interface_access.h"
32
#include "idocumentnode.h"
43
#include "idocumentnoderenderer.h"
54
#include "nodeextension.h"
@@ -27,7 +26,6 @@ class CodeNode {
2726

2827
class ExpressionNode : public IDocumentNode,
2928
public IDocumentNodeRenderer {
30-
DOCUMENT_NODE_INTERFACE_ACCESS(IDocumentNodeRenderer)
3129
public:
3230
explicit ExpressionNode(StreamReader& stream);
3331
std::string renderingCode() const override;
@@ -38,8 +36,6 @@ class ExpressionNode : public IDocumentNode,
3836

3937
class StatementNode : public IDocumentNode,
4038
public IDocumentNodeRenderer {
41-
DOCUMENT_NODE_INTERFACE_ACCESS(IDocumentNodeRenderer)
42-
4339
public:
4440
explicit StatementNode(StreamReader& stream);
4541
std::string renderingCode() const override;
@@ -50,7 +46,6 @@ class StatementNode : public IDocumentNode,
5046

5147
class GlobalStatementNode : public IDocumentNode,
5248
public IDocumentNodeRenderer {
53-
DOCUMENT_NODE_INTERFACE_ACCESS(IDocumentNodeRenderer)
5449
public:
5550
explicit GlobalStatementNode(StreamReader& stream);
5651
std::string renderingCode() const override;

src/control_flow_statement_node.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
#pragma once
2-
#include "document_node_interface_access.h"
32
#include "idocumentnode.h"
43
#include "idocumentnoderenderer.h"
54
#include "nodeextension.h"
6-
#include <sfun/optional_ref.h>
7-
#include <gsl/assert>
85

96
namespace htcpp {
107

@@ -15,7 +12,6 @@ enum class ControlFlowStatementNodeType {
1512

1613
class ControlFlowStatementNode : public IDocumentNode,
1714
public IDocumentNodeRenderer {
18-
DOCUMENT_NODE_INTERFACE_ACCESS(IDocumentNodeRenderer)
1915

2016
public:
2117
ControlFlowStatementNode(ControlFlowStatementNodeType, NodeExtension nodeExtension);

src/document_node_interface_access.h

Lines changed: 0 additions & 26 deletions
This file was deleted.

src/iconvertible_to_procedure.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
#pragma once
22
#include <sfun/interface.h>
3+
#include <optional>
34
#include <string_view>
45

56
namespace htcpp{
67

78
class IConvertibleToProcedure : private sfun::interface<IConvertibleToProcedure> {
89
public:
9-
virtual std::string_view procedureName() const = 0;
10+
virtual std::optional<std::string_view> procedureName() const = 0;
1011
};
1112

1213
}

src/idocumentnode.h

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,18 @@
11
#pragma once
2-
#include "document_node_interface_access.h"
32
#include <sfun/interface.h>
4-
#include <sfun/optional_ref.h>
5-
#include <gsl/assert>
6-
#include <string>
73
#include <typeinfo>
8-
#include <memory>
9-
#include <vector>
104

115
namespace htcpp {
12-
class INodeCollection;
13-
class IDocumentNodeRenderer;
14-
class IRenderedAsStringPart;
15-
class IConvertibleToProcedure;
16-
class IAttribute;
17-
18-
template<typename TInterface>
19-
struct InterfaceGetterMapping;
206

217
class IDocumentNode : private sfun::interface<IDocumentNode>
228
{
239
public:
24-
template<typename TInterface>
25-
auto getInterface() const
26-
{
27-
return (this->*InterfaceGetterMapping<TInterface>::getterPtr())();
28-
}
29-
30-
template<typename TInterface>
31-
auto getInterface()
32-
{
33-
return (this->*InterfaceGetterMapping<TInterface>::getterPtr())();
34-
}
35-
3610
template<typename T>
3711
bool is()
3812
{
3913
return typeid(*this) == typeid(T);
4014
}
41-
42-
private:
43-
DOCUMENT_NODE_ADD_INTERFACE_GETTER(INodeCollection);
44-
DOCUMENT_NODE_ADD_INTERFACE_GETTER(IDocumentNodeRenderer);
45-
DOCUMENT_NODE_ADD_INTERFACE_GETTER(IRenderedAsStringPart);
46-
DOCUMENT_NODE_ADD_INTERFACE_GETTER(IConvertibleToProcedure);
47-
DOCUMENT_NODE_ADD_INTERFACE_GETTER(IAttribute);
48-
49-
template<typename TInterface>
50-
friend struct InterfaceGetterMapping;
5115
};
5216

53-
DOCUMENT_NODE_REGISTER_INTERFACE(INodeCollection);
54-
DOCUMENT_NODE_REGISTER_INTERFACE(IDocumentNodeRenderer);
55-
DOCUMENT_NODE_REGISTER_INTERFACE(IRenderedAsStringPart);
56-
DOCUMENT_NODE_REGISTER_INTERFACE(IConvertibleToProcedure);
57-
DOCUMENT_NODE_REGISTER_INTERFACE(IAttribute);
58-
5917

6018
} // namespace htcpp

src/node_utils.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ std::vector<std::unique_ptr<IDocumentNode>> flattenNodes(std::vector<std::unique
88
{
99
auto flattenNodes = std::vector<std::unique_ptr<IDocumentNode>>{};
1010
for (auto& node : nodes) {
11-
if (const auto nodeCollection = node->template getInterface<INodeCollection>())
11+
if (const auto nodeCollection = dynamic_cast<INodeCollection*>(node.get()))
1212
std::ranges::move(nodeCollection->flatten(), std::back_inserter(flattenNodes));
1313
else
1414
flattenNodes.emplace_back(std::move(node));
@@ -20,9 +20,10 @@ std::vector<std::unique_ptr<IDocumentNode>> optimizeNodes(std::vector<std::uniqu
2020
{
2121
auto processedNodes = std::vector<std::unique_ptr<IDocumentNode>>{};
2222
for (auto& node : nodes) {
23-
if (auto text = node->getInterface<IRenderedAsStringPart>()) {
24-
if (!processedNodes.empty() && processedNodes.back()->getInterface<IRenderedAsStringPart>()) {
25-
auto prevText = processedNodes.back()->getInterface<IRenderedAsStringPart>()->content();
23+
if (auto text = dynamic_cast<IRenderedAsStringPart*>(node.get())) {
24+
if (!processedNodes.empty() &&
25+
dynamic_cast<IRenderedAsStringPart*>(processedNodes.back().get()) != nullptr) {
26+
const auto prevText = dynamic_cast<IRenderedAsStringPart*>(processedNodes.back().get())->content();
2627
processedNodes.back() = std::make_unique<TextNode>(prevText + text->content());
2728
}
2829
else

src/procedurenode.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
#include "procedurenode.h"
22
#include "errors.h"
33
#include "idocumentnoderenderer.h"
4+
#include "node_utils.h"
45
#include "nodereader.h"
56
#include "streamreader.h"
67
#include "utils.h"
7-
#include "node_utils.h"
8+
#include <gsl/assert>
89

910
namespace htcpp{
1011

@@ -58,7 +59,7 @@ std::string ProcedureNode::renderingCode() const
5859
{
5960
auto result = std::string{};
6061
for (auto& node : contentNodes_)
61-
result += node->getInterface<IDocumentNodeRenderer>()->renderingCode();
62+
result += dynamic_cast<IDocumentNodeRenderer*>(node.get())->renderingCode();
6263
return result;
6364
}
6465

src/procedurenode.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#pragma once
2-
#include "document_node_interface_access.h"
32
#include "idocumentnode.h"
43
#include "idocumentnoderenderer.h"
54
#include <memory>
@@ -11,7 +10,6 @@ class StreamReader;
1110

1211
class ProcedureNode : public IDocumentNode,
1312
public IDocumentNodeRenderer {
14-
DOCUMENT_NODE_INTERFACE_ACCESS(IDocumentNodeRenderer)
1513

1614
public:
1715
ProcedureNode(std::string procedureName, StreamReader& stream);

0 commit comments

Comments
 (0)