Loading...
Searching...
No Matches
JavaScript.h
1/*
2 * JavaScript.h
3 *
4 * Created on: Jan 26, 2026
5 * Author: mpeura
6 */
7
8#ifndef DRAIN_UTIL_JAVASCRIPT_H_
9#define DRAIN_UTIL_JAVASCRIPT_H_
10
11#include <drain/Sprinter.h>
12#include <drain/util/EnumUtils.h>
13
14namespace drain {
15
16void super_test();
17
18class Outlet {
19
20public:
21
22 Outlet(std::ostream & ostr) : dst_ostr(ostr), dst_str(dummy_str){
23 }
24
25 Outlet(std::string & s) : dst_ostr(sstr), dst_str(s){
26 }
27
28 template <class T>
29 inline
30 std::ostream & operator<<(const T & x) const {
31 dst_ostr << x;
32 return dst_ostr;
33 }
34
35 ~Outlet(){
36 //if (&dst_ostr == &sstr){
37 if (&dst_str != &dummy_str){
38 dst_str.assign(sstr.str());
39 }
40 }
41
42 inline
43 std::ostream & getOStream() const {
44 return dst_ostr;
45 }
46
47protected:
48
49 std::ostream & dst_ostr;
50 std::string & dst_str;
51
52 mutable
53 std::string dummy_str;
54
55 mutable
56 std::stringstream sstr;
57
58};
59
60
62
63public:
64
65 enum NumType {
66 Int8,
67 Int16,
68 Int32,
69 Float16,
70 Float32,
71 Float64,
72 };
73
74 template <typename T>
75 static
76 void createArray(const Outlet & code, const std::string & variableName, NumType type, const T & sequence);
77
78protected:
79
80 static
81 void assign();
82
83};
84
85DRAIN_ENUM_DICT(JavaScript::NumType);
86DRAIN_ENUM_OSTREAM(JavaScript::NumType);
87
88
89template <typename T> // std::string & code // std::ostream & ostr
90void JavaScript::createArray(const Outlet & code, const std::string & variableName, NumType type, const T & sequence){
91 code << "const " << variableName << " = new " << type << "Array(";
92 Sprinter::toStream(code.getOStream(), sequence, Sprinter::jsLayout);
93 code << ");";
94}
95
96
97
98} // drain::
99
100#endif // SRC_DRAIN_UTIL_JAVASCRIPT_H_
Definition JavaScript.h:61
Definition JavaScript.h:18
static std::ostream & toStream(std::ostream &ostr, const std::initializer_list< T > &x, const SprinterLayout &layout=defaultLayout)
New (experimental)
Definition Sprinter.h:424
static const SprinterLayout jsLayout
JavaScript layout. Like JSON layout, but keys without hyphens.
Definition Sprinter.h:228
Definition DataSelector.cpp:1277