KSeExpr  4.0.4.0
ExprSpecType.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: 2011-2019 Disney Enterprises, Inc.
2 // SPDX-License-Identifier: LicenseRef-Apache-2.0
3 // SPDX-FileCopyrightText: 2020 L. E. Segovia <amy@amyspark.me>
4 // SPDX-License-Identifier: GPL-3.0-or-later
5 
6 #pragma once
7 
8 #include <KSeExpr/Curve.h>
9 #include <KSeExpr/Vec.h>
10 #include <cstdio>
11 #include <sstream>
12 #include <vector>
13 
15 struct ExprSpecNode {
16  int startPos;
17  int endPos;
18 
21  , endPos(endPos)
22  {
23  }
24 
25  virtual ~ExprSpecNode() = default;
26 
28  ExprSpecNode &operator=(const ExprSpecNode &) = default;
29  ExprSpecNode(const ExprSpecNode &) = default;
30  ExprSpecNode(ExprSpecNode &&) = default;
31 };
32 
34  double v;
35 
36  ExprSpecScalarNode(int startPos, int endPos, double scalar)
38  , v(scalar)
39  {
40  }
41 };
42 
47  {
48  v = KSeExpr::Vec3d(dynamic_cast<ExprSpecScalarNode *>(x)->v, dynamic_cast<ExprSpecScalarNode *>(y)->v, dynamic_cast<ExprSpecScalarNode *>(z)->v);
49  }
50 };
51 
52 struct ExprSpecListNode : public ExprSpecNode {
53  std::vector<ExprSpecNode *> nodes;
56  {
57  }
58 
59  void add(ExprSpecNode *node)
60  {
62  endPos = std::max(node->endPos, endPos);
63  nodes.push_back(node);
64  }
65 };
66 
68  std::string v;
69  ExprSpecStringNode(int startPos, int endPos, const char *s)
71  , v(s)
72  {
73  }
74 };
75 
80  , args(args)
81  {
82  }
83 };
84 
89  , args(args)
90  {
91  }
92 };
93 
98  , args(args)
99  {
100  }
101 };
double max(double x, double y)
Definition: ExprBuiltins.h:74
double min(double x, double y)
Definition: ExprBuiltins.h:78
Vec< double, 3, false > Vec3d
Definition: Vec.h:352
ExprSpecNode * args
Definition: ExprSpecType.h:86
ExprSpecCCurveNode(ExprSpecNode *args)
Definition: ExprSpecType.h:87
ExprSpecNode * args
Definition: ExprSpecType.h:95
ExprSpecColorSwatchNode(ExprSpecNode *args)
Definition: ExprSpecType.h:96
ExprSpecCurveNode(ExprSpecNode *args)
Definition: ExprSpecType.h:78
ExprSpecNode * args
Definition: ExprSpecType.h:77
void add(ExprSpecNode *node)
Definition: ExprSpecType.h:59
std::vector< ExprSpecNode * > nodes
Definition: ExprSpecType.h:53
ExprSpecListNode(int startPos, int endPos)
Definition: ExprSpecType.h:54
Mini parse tree node... Only represents literals, and lists of literals.
Definition: ExprSpecType.h:15
ExprSpecNode(ExprSpecNode &&)=default
ExprSpecNode(int startPos, int endPos)
Definition: ExprSpecType.h:19
ExprSpecNode & operator=(ExprSpecNode &&)=default
virtual ~ExprSpecNode()=default
ExprSpecNode & operator=(const ExprSpecNode &)=default
ExprSpecNode(const ExprSpecNode &)=default
ExprSpecScalarNode(int startPos, int endPos, double scalar)
Definition: ExprSpecType.h:36
ExprSpecStringNode(int startPos, int endPos, const char *s)
Definition: ExprSpecType.h:69
KSeExpr::Vec3d v
Definition: ExprSpecType.h:44
ExprSpecVectorNode(int startPos, int endPos, ExprSpecNode *x, ExprSpecNode *y, ExprSpecNode *z)
Definition: ExprSpecType.h:45