1
1
#pragma once
2
2
#include < Arduino.h>
3
3
4
+ #include " ./convert/convert.h"
4
5
#include " Text.h"
5
- #include " convert/convert.h"
6
6
7
- // автоматическое преобразование любых данных к строке Text
7
+ // автоматическое преобразование любых численных данных к строке Text
8
8
9
9
#ifndef SU_ANYVALUE_BUF_LEN
10
10
#define SU_ANYVALUE_BUF_LEN 21
@@ -18,78 +18,157 @@ class ValueT : public Text {
18
18
public:
19
19
using Text::Text;
20
20
21
- ValueT () : Text() {}
21
+ ValueT () {
22
+ _str = buf;
23
+ _type = Type::value;
24
+ }
22
25
23
26
ValueT (const Text& value) : Text(value) {}
24
27
25
- ValueT (const bool value) {
28
+ ValueT (bool value) : ValueT( ) {
26
29
buf[0 ] = value ? ' 1' : ' 0' ;
27
30
buf[1 ] = 0 ;
28
31
_len = 1 ;
29
- _init ();
30
32
}
31
33
32
- ValueT (const char value) {
34
+ ValueT (char value) : ValueT( ) {
33
35
buf[0 ] = value;
34
36
buf[1 ] = 0 ;
35
37
_len = 1 ;
36
- _init ();
37
38
}
38
- ValueT (const unsigned char value, uint8_t base = DEC) {
39
+ ValueT (unsigned char value, uint8_t base = DEC) : ValueT( ) {
39
40
_len = intToStr (value, buf, base);
40
- _init ();
41
41
}
42
42
43
- ValueT (const short value, uint8_t base = DEC) {
43
+ ValueT (short value, uint8_t base = DEC) : ValueT( ) {
44
44
_len = intToStr (value, buf, base);
45
- _init ();
46
45
}
47
- ValueT (const unsigned short value, uint8_t base = DEC) {
46
+ ValueT (unsigned short value, uint8_t base = DEC) : ValueT( ) {
48
47
_len = uintToStr (value, buf, base);
49
- _init ();
50
48
}
51
49
52
- ValueT (const int value, uint8_t base = DEC) {
50
+ ValueT (int value, uint8_t base = DEC) : ValueT( ) {
53
51
_len = intToStr (value, buf, base);
54
- _init ();
55
52
}
56
- ValueT (const unsigned int value, uint8_t base = DEC) {
53
+ ValueT (unsigned int value, uint8_t base = DEC) : ValueT( ) {
57
54
_len = uintToStr (value, buf, base);
58
- _init ();
59
55
}
60
56
61
- ValueT (const long value, uint8_t base = DEC) {
57
+ ValueT (long value, uint8_t base = DEC) : ValueT( ) {
62
58
_len = intToStr (value, buf, base);
63
- _init ();
64
59
}
65
- ValueT (const unsigned long value, uint8_t base = DEC) {
60
+ ValueT (unsigned long value, uint8_t base = DEC) : ValueT( ) {
66
61
_len = uintToStr (value, buf, base);
67
- _init ();
68
62
}
69
63
70
- ValueT (const long long value, uint8_t base = DEC) {
71
- if (value >= 0 && value < UINT32_MAX) _len = uintToStr (value, buf, base);
72
- else if (value < 0 && value > -INT32_MAX) _len = intToStr (value, buf, base);
73
- else _len = int64ToStr (value, buf, base);
74
- _init ();
64
+ ValueT (long long value, uint8_t base = DEC) : ValueT() {
65
+ switch (value) {
66
+ case INT32_MIN ...(-1 ): _len = intToStr (value, buf, base); break ;
67
+ case 0 ... UINT32_MAX: _len = uintToStr (value, buf, base); break ;
68
+ default : _len = int64ToStr (value, buf, base); break ;
69
+ }
75
70
}
76
- ValueT (const unsigned long long value, uint8_t base = DEC) {
77
- _len = (value <= UINT32_MAX) ? uintToStr (value, buf, base) : uint64ToStr (value, buf, base);
78
- _init ();
71
+ ValueT (unsigned long long value, uint8_t base = DEC) : ValueT() {
72
+ switch (value) {
73
+ case 0 ... UINT32_MAX: _len = uintToStr (value, buf, base); break ;
74
+ default : _len = uint64ToStr (value, buf, base); break ;
75
+ }
79
76
}
80
77
81
- ValueT (const double value, uint8_t dec = 2 ) {
78
+ ValueT (double value, uint8_t dec = 2 ) : ValueT( ) {
82
79
_len = floatToStr (value, buf, dec);
83
- _init ();
80
+ }
81
+
82
+ // assign
83
+ ValueT& operator =(bool value) {
84
+ buf[0 ] = value ? ' 1' : ' 0' ;
85
+ buf[1 ] = 0 ;
86
+ _len = 1 ;
87
+ return *this ;
88
+ }
89
+
90
+ ValueT& operator =(char value) {
91
+ buf[0 ] = value;
92
+ buf[1 ] = 0 ;
93
+ _len = 1 ;
94
+ return *this ;
95
+ }
96
+ ValueT& operator =(unsigned char value) {
97
+ _len = intToStr (value, buf, DEC);
98
+ return *this ;
99
+ }
100
+
101
+ ValueT& operator =(short value) {
102
+ _len = intToStr (value, buf, DEC);
103
+ return *this ;
104
+ }
105
+ ValueT& operator =(unsigned short value) {
106
+ _len = uintToStr (value, buf, DEC);
107
+ return *this ;
108
+ }
109
+
110
+ ValueT& operator =(int value) {
111
+ _len = intToStr (value, buf, DEC);
112
+ return *this ;
113
+ }
114
+ ValueT& operator =(unsigned int value) {
115
+ _len = uintToStr (value, buf, DEC);
116
+ return *this ;
117
+ }
118
+
119
+ ValueT& operator =(long value) {
120
+ _len = intToStr (value, buf, DEC);
121
+ return *this ;
122
+ }
123
+ ValueT& operator =(unsigned long value) {
124
+ _len = uintToStr (value, buf, DEC);
125
+ return *this ;
126
+ }
127
+
128
+ ValueT& operator =(long long value) {
129
+ switch (value) {
130
+ case INT32_MIN ...(-1 ): _len = intToStr (value, buf, DEC); break ;
131
+ case 0 ... UINT32_MAX: _len = uintToStr (value, buf, DEC); break ;
132
+ default : _len = int64ToStr (value, buf, DEC); break ;
133
+ }
134
+ return *this ;
135
+ }
136
+ ValueT& operator =(unsigned long long value) {
137
+ switch (value) {
138
+ case 0 ... UINT32_MAX: _len = uintToStr (value, buf, DEC); break ;
139
+ default : _len = uint64ToStr (value, buf, DEC); break ;
140
+ }
141
+ return *this ;
142
+ }
143
+
144
+ ValueT& operator =(double value) {
145
+ _len = floatToStr (value, buf, 2 );
146
+ return *this ;
147
+ }
148
+
149
+ // copy
150
+ ValueT (const ValueT& v) : ValueT() {
151
+ _copy (v);
152
+ }
153
+ ValueT (ValueT&& v) : ValueT() {
154
+ _copy (v);
155
+ }
156
+ ValueT& operator =(const ValueT& v) {
157
+ _copy (v);
158
+ return *this ;
159
+ }
160
+ ValueT& operator =(ValueT&& v) {
161
+ _copy (v);
162
+ return *this ;
84
163
}
85
164
86
165
protected:
87
166
char buf[bufsize] = {0 };
88
167
89
168
private:
90
- void _init ( ) {
91
- _str = buf;
92
- _type = Type::value ;
169
+ void _copy ( const ValueT& v ) {
170
+ memcpy (buf, v. buf , v. _len ) ;
171
+ _len = v. _len ;
93
172
}
94
173
};
95
174
0 commit comments