-
Notifications
You must be signed in to change notification settings - Fork 0
/
print.cpp
76 lines (61 loc) · 3.12 KB
/
print.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include "print.hpp"
#include "../../definitions/typeNum.hpp"
#include "../../print/pdbg.hpp"
#include "../../print/print.hpp" // for debug
//-----------------------------------------------------------------------------------------------------------------------------------------------
// define internal functjions
void _print_terp_str(const sstd::terp::var& rhs);
void _print_terp_list_internal(const sstd::terp::var& rhs);
void _print_terp_list(const sstd::terp::var& rhs);
void _print_terp_hash(const sstd::terp::var& rhs);
//-----------------------------------------------------------------------------------------------------------------------------------------------
void _print_terp_str(const sstd::terp::var& rhs){
printf("\"%s\"", rhs.to<std::string>().c_str());
}
void _print_terp_list_internal(const sstd::terp::var& rhs){
switch(rhs.typeNum()){
case sstd::num_str : { _print_terp_str (rhs); } break;
case sstd::num_vec_terp_var : { _print_terp_list(rhs); } break;
case sstd::num_hash_terp_var: { _print_terp_hash(rhs); } break;
case sstd::num_null: {} break;
default: { sstd::pdbg("ERROR"); } break;
}
}
void _print_terp_list(const sstd::terp::var& rhs){
printf("[");
if(rhs.size()>=1){
for(uint i=0; i<rhs.size()-1; ++i){ _print_terp_list_internal(rhs[i]); printf(" "); }
_print_terp_list_internal( rhs[rhs.size()-1] );
}
printf("]");
}
void _print_terp_hash(const sstd::terp::var& rhs){
printf("{");
for(auto itr=rhs.begin(); itr!=rhs.end(); ++itr){
if(itr!=rhs.begin()){ printf(", "); }
printf("\"%s\": ", itr.first_to<std::string>().c_str()); // _print_terp_list_internal(itr.first());
_print_terp_list_internal(itr.second());
}
printf("}");
}
#define sstd_print_terp_var_base(rhs) \
switch(rhs.typeNum()){ \
case sstd::num_str : { _print_terp_str (rhs); } break; \
case sstd::num_vec_terp_var : { _print_terp_list(rhs); } break; \
case sstd::num_hash_terp_var: { _print_terp_hash(rhs); } break; \
case sstd::num_null: {} break; \
default: { sstd::pdbg("ERROR"); } break; \
}
//-----------------------------------------------------------------------------------------------------------------------------------------------
void sstd::print(const sstd::terp::var& rhs){
sstd_print_terp_var_base(rhs);
printf("\n");
}
//-----------------------------------------------------------------------------------------------------------------------------------------------
void sstd::for_printn(const sstd::terp::var& rhs){ printf(" = "); sstd::print(rhs); }
//-----------------------------------------------------------------------------------------------------------------------------------------------
void sstd::print_for_vT(const sstd::terp::var& rhs){
sstd_print_terp_var_base(rhs);
}
//-----------------------------------------------------------------------------------------------------------------------------------------------
#undef sstd_print_terp_var_base