-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathOperand.hxx
96 lines (84 loc) · 2.32 KB
/
Operand.hxx
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// Copyright Kabuki Starship� <kabukistarship.com>.
#include "Operand.h"
#if SEAM >= SCRIPT2_CRABS
#include "Op.hpp"
#if SEAM == SCRIPT2_CRABS
#include "_Debug.hxx"
#else
#include "_Release.hxx"
#endif
namespace _ {
const CHA* OperandName(Operand* operand) {
A_ASSERT(operand);
const Op* op = operand->Star('?', nullptr);
A_ASSERT(op);
return op->name;
}
IUW OperandCount(Operand* operand) {
A_ASSERT(operand);
const Op* op = operand->Star(0, nullptr);
return (op == nullptr) ? 0 : IUW(op->in);
}
CHC OperandIndex(Operand* operand, CHA* origin, CHA* stop) {
A_ASSERT(operand);
const Op* op = operand->Star('?', nullptr);
A_ASSERT(op);
CHC index = OpFirst(op),
last = OpLast (op);
A_ASSERT(index);
for (; index <= last; ++index) {
if (TSTREquals<CHA>(origin, stop, operand->Star(index, nullptr)->name)) {
return index;
}
}
return 0;
}
#if USING_SCRIPT2_TEXT
/*
UTF& Print (UTF& utf, const Operand* op) {
utf << "\n Op:\n" << op->name << "\nparams_in:"
<< BSeq (op->in)
<< "\nparams_out:" << op->out
<< "\npop:" << op->pop << " close:" << op->close
<< " default_op:" << op->default_op
<< "\nignore_chars :" << op->ignore_chars
<< "\nallowed_chars:" << op->allowed_chars
<< "\n description :\"" << op->description;
return utf;
}*/
UTF1& PrintOperand(UTF1& utf, Operand* operand) {
A_ASSERT(operand);
const Op* op = operand->Star('?', nullptr);
A_ASSERT(op);
IUW num_ops = IUW(op->in),
op_num = IUW(op->out), last_op = op_num + num_ops - 1;
if (num_ops > ParamsTotal) {
return utf << "\nError: Too many parameters!";
}
utf << "\nOperand :" << op->name << Line('-', 80);
for (; op_num <= last_op; ++op_num) {
op = operand->Star((CHC)op_num, nullptr);
utf << "\nOp \'" << op_num << "\':" << op_num << ' ' << op << Line('-', 80);
}
return utf;
}
Slot& OperandQuery(Operand* root, const CHA* address, Slot& slot) {
A_ASSERT(address);
A_ASSERT(root);
ISC index = *address++;
const Op* op = root->Star(index, nullptr);
CHA socket[1024];
D_COUT(op->name)
index = *address++;
while (index) {
op = root->Star(index, nullptr);
A_ASSERT(op);
D_COUT('.' << op->name)
index = *address++;
}
slot.Write(socket);
return slot;
}
#endif
} //< namespace _
#endif