OPAL (Object Oriented Parallel Accelerator Library) 2024.2
OPAL
MSLang.h
Go to the documentation of this file.
1#ifndef MSLANG_H
2#define MSLANG_H
3
6#include "Algorithms/Vektor.h"
7
8#include <string>
9#include <iostream>
10#include <fstream>
11#include <list>
12#include <memory>
13
14namespace mslang {
15 typedef std::string::iterator iterator;
16
17 inline
19 v[2] = 0.0;
20 return euclidean_norm(v);
21 }
22
23 struct Base;
24
25 struct Function {
26 virtual ~Function() {};
27
28 virtual void print(int indent) = 0;
29 virtual void apply(std::vector<std::shared_ptr<Base>> &bfuncs) = 0;
30
31 static bool parse(iterator &it, const iterator &end, Function* &fun);
32
33 static const std::string UDouble;
34 static const std::string Double;
35 static const std::string UInt;
36 static const std::string FCall;
37 };
38
39 struct Base: public Function {
42 std::vector<std::shared_ptr<Base> > divisor_m;
43
45 trafo_m()
46 { }
47
48 Base(const Base &right):
49 trafo_m(right.trafo_m),
50 bb_m(right.bb_m)
51 { }
52
53 virtual ~Base() {
54 // for (auto item: divisor_m) {
55 // item.reset();
56 // }
57 divisor_m.clear();
58 }
59
60 virtual std::shared_ptr<Base> clone() const = 0;
61 virtual void writeGnuplot(std::ofstream &out) const = 0;
62 virtual void computeBoundingBox() = 0;
63 virtual bool isInside(const Vector_t &R) const = 0;
64 virtual void divideBy(std::vector<std::shared_ptr<Base> > &divisors) {
65 for (auto item: divisors) {
66 if (bb_m.doesIntersect(item->bb_m)) {
67 divisor_m.emplace_back(item->clone());
68 }
69 }
70 }
71 };
72
73 bool parse(std::string str, Function* &fun);
74}
75
76#endif
PartBunchBase< T, Dim >::ConstIterator end(PartBunchBase< T, Dim > const &bunch)
T euclidean_norm(const Vector< T > &)
Euclidean norm.
Definition Vector.h:243
std::string::iterator iterator
Definition MSLang.h:15
bool parse(std::string str, Function *&fun)
Definition MSLang.cpp:37
double euclidean_norm2D(Vector_t v)
Definition MSLang.h:18
static const std::string FCall
Definition MSLang.h:36
virtual void apply(std::vector< std::shared_ptr< Base > > &bfuncs)=0
virtual ~Function()
Definition MSLang.h:26
static const std::string Double
Definition MSLang.h:34
static const std::string UDouble
Definition MSLang.h:33
static bool parse(iterator &it, const iterator &end, Function *&fun)
Definition MSLang.cpp:48
virtual void print(int indent)=0
static const std::string UInt
Definition MSLang.h:35
std::vector< std::shared_ptr< Base > > divisor_m
Definition MSLang.h:42
virtual ~Base()
Definition MSLang.h:53
virtual void computeBoundingBox()=0
Base(const Base &right)
Definition MSLang.h:48
AffineTransformation trafo_m
Definition MSLang.h:40
BoundingBox2D bb_m
Definition MSLang.h:41
virtual void divideBy(std::vector< std::shared_ptr< Base > > &divisors)
Definition MSLang.h:64
virtual bool isInside(const Vector_t &R) const =0
virtual std::shared_ptr< Base > clone() const =0
virtual void writeGnuplot(std::ofstream &out) const =0
Vektor< double, 3 > Vector_t