11#pragma once
22#include < Arduino.h>
33
4+ #include " ./convert/convert.h"
45#include " Text.h"
5- #include " convert/convert.h"
66
7- // автоматическое преобразование любых данных к строке Text
7+ // автоматическое преобразование любых численных данных к строке Text
88
99#ifndef SU_ANYVALUE_BUF_LEN
1010#define SU_ANYVALUE_BUF_LEN 21
@@ -18,78 +18,157 @@ class ValueT : public Text {
1818 public:
1919 using Text::Text;
2020
21- ValueT () : Text() {}
21+ ValueT () {
22+ _str = buf;
23+ _type = Type::value;
24+ }
2225
2326 ValueT (const Text& value) : Text(value) {}
2427
25- ValueT (const bool value) {
28+ ValueT (bool value) : ValueT( ) {
2629 buf[0 ] = value ? ' 1' : ' 0' ;
2730 buf[1 ] = 0 ;
2831 _len = 1 ;
29- _init ();
3032 }
3133
32- ValueT (const char value) {
34+ ValueT (char value) : ValueT( ) {
3335 buf[0 ] = value;
3436 buf[1 ] = 0 ;
3537 _len = 1 ;
36- _init ();
3738 }
38- ValueT (const unsigned char value, uint8_t base = DEC) {
39+ ValueT (unsigned char value, uint8_t base = DEC) : ValueT( ) {
3940 _len = intToStr (value, buf, base);
40- _init ();
4141 }
4242
43- ValueT (const short value, uint8_t base = DEC) {
43+ ValueT (short value, uint8_t base = DEC) : ValueT( ) {
4444 _len = intToStr (value, buf, base);
45- _init ();
4645 }
47- ValueT (const unsigned short value, uint8_t base = DEC) {
46+ ValueT (unsigned short value, uint8_t base = DEC) : ValueT( ) {
4847 _len = uintToStr (value, buf, base);
49- _init ();
5048 }
5149
52- ValueT (const int value, uint8_t base = DEC) {
50+ ValueT (int value, uint8_t base = DEC) : ValueT( ) {
5351 _len = intToStr (value, buf, base);
54- _init ();
5552 }
56- ValueT (const unsigned int value, uint8_t base = DEC) {
53+ ValueT (unsigned int value, uint8_t base = DEC) : ValueT( ) {
5754 _len = uintToStr (value, buf, base);
58- _init ();
5955 }
6056
61- ValueT (const long value, uint8_t base = DEC) {
57+ ValueT (long value, uint8_t base = DEC) : ValueT( ) {
6258 _len = intToStr (value, buf, base);
63- _init ();
6459 }
65- ValueT (const unsigned long value, uint8_t base = DEC) {
60+ ValueT (unsigned long value, uint8_t base = DEC) : ValueT( ) {
6661 _len = uintToStr (value, buf, base);
67- _init ();
6862 }
6963
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+ }
7570 }
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+ }
7976 }
8077
81- ValueT (const double value, uint8_t dec = 2 ) {
78+ ValueT (double value, uint8_t dec = 2 ) : ValueT( ) {
8279 _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 ;
84163 }
85164
86165 protected:
87166 char buf[bufsize] = {0 };
88167
89168 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 ;
93172 }
94173};
95174
0 commit comments