diff options
author | Mike Buland <mbuland@penny-arcade.com> | 2019-04-18 19:09:04 -0700 |
---|---|---|
committer | Mike Buland <mbuland@penny-arcade.com> | 2019-04-18 19:09:04 -0700 |
commit | 62753c815b5ec34ebfae37a3c89187a01cc17160 (patch) | |
tree | d6f85d4af7d54c88a7486a3207c33a168ae09bd8 | |
parent | d81e824732c33e2d5ce31fbc58571561a8d9b21f (diff) | |
download | libbu++-62753c815b5ec34ebfae37a3c89187a01cc17160.tar.gz libbu++-62753c815b5ec34ebfae37a3c89187a01cc17160.tar.bz2 libbu++-62753c815b5ec34ebfae37a3c89187a01cc17160.tar.xz libbu++-62753c815b5ec34ebfae37a3c89187a01cc17160.zip |
Minor quality of life additions to string and variant.
More coming to string. I need to figure some things out in variant.
-rw-r--r-- | src/stable/string.cpp | 19 | ||||
-rw-r--r-- | src/stable/string.h | 4 | ||||
-rw-r--r-- | src/stable/variant.h | 21 |
3 files changed, 44 insertions, 0 deletions
diff --git a/src/stable/string.cpp b/src/stable/string.cpp index ce679fe..3029584 100644 --- a/src/stable/string.cpp +++ b/src/stable/string.cpp | |||
@@ -964,6 +964,25 @@ Bu::String Bu::String::toUpper() const | |||
964 | return sRet; | 964 | return sRet; |
965 | } | 965 | } |
966 | 966 | ||
967 | int16_t Bu::String::toInt16( int iRadix ) const | ||
968 | { | ||
969 | flatten(); | ||
970 | return strtol( core->pFirst->pData, NULL, iRadix ); | ||
971 | } | ||
972 | |||
973 | int32_t Bu::String::toInt32( int iRadix ) const | ||
974 | { | ||
975 | flatten(); | ||
976 | return strtol( core->pFirst->pData, NULL, iRadix ); | ||
977 | } | ||
978 | |||
979 | int64_t Bu::String::toInt64( int iRadix ) const | ||
980 | { | ||
981 | flatten(); | ||
982 | return strtoll( core->pFirst->pData, NULL, iRadix ); | ||
983 | } | ||
984 | |||
985 | |||
967 | Bu::String::const_iterator Bu::String::find( const char cChar, | 986 | Bu::String::const_iterator Bu::String::find( const char cChar, |
968 | Bu::String::const_iterator iStart ) const | 987 | Bu::String::const_iterator iStart ) const |
969 | { | 988 | { |
diff --git a/src/stable/string.h b/src/stable/string.h index 131f621..af147a7 100644 --- a/src/stable/string.h +++ b/src/stable/string.h | |||
@@ -879,6 +879,10 @@ namespace Bu | |||
879 | */ | 879 | */ |
880 | String toUpper() const; | 880 | String toUpper() const; |
881 | 881 | ||
882 | int16_t toInt16( int iRadix=10 ) const; | ||
883 | int32_t toInt32( int iRadix=10 ) const; | ||
884 | int64_t toInt64( int iRadix=10 ) const; | ||
885 | |||
882 | const_iterator find( const char cChar, | 886 | const_iterator find( const char cChar, |
883 | const_iterator iStart=const_iterator() ) const; | 887 | const_iterator iStart=const_iterator() ) const; |
884 | 888 | ||
diff --git a/src/stable/variant.h b/src/stable/variant.h index af06815..7189d7a 100644 --- a/src/stable/variant.h +++ b/src/stable/variant.h | |||
@@ -35,6 +35,7 @@ namespace Bu | |||
35 | virtual const std::type_info &getType() const=0; | 35 | virtual const std::type_info &getType() const=0; |
36 | virtual VariantTypeRoot *clone() const=0; | 36 | virtual VariantTypeRoot *clone() const=0; |
37 | virtual void format( Bu::Formatter &f ) const=0; | 37 | virtual void format( Bu::Formatter &f ) const=0; |
38 | virtual const void *rawData() const=0; | ||
38 | }; | 39 | }; |
39 | 40 | ||
40 | template<class t> | 41 | template<class t> |
@@ -75,6 +76,11 @@ namespace Bu | |||
75 | { | 76 | { |
76 | f << data; | 77 | f << data; |
77 | } | 78 | } |
79 | |||
80 | virtual const void *rawData() const | ||
81 | { | ||
82 | return &data; | ||
83 | } | ||
78 | 84 | ||
79 | virtual const std::type_info &getType() const | 85 | virtual const std::type_info &getType() const |
80 | { | 86 | { |
@@ -173,6 +179,21 @@ namespace Bu | |||
173 | } | 179 | } |
174 | return dynamic_cast<VariantType<t> *>(pCore)->getData(); | 180 | return dynamic_cast<VariantType<t> *>(pCore)->getData(); |
175 | } | 181 | } |
182 | |||
183 | template<class t> | ||
184 | t &cast() const | ||
185 | { | ||
186 | if( !pCore ) | ||
187 | { | ||
188 | throw Bu::ExceptionBase("No data!"); | ||
189 | } | ||
190 | |||
191 | t *p = dynamic_cast<t *>(pCore->rawData()); | ||
192 | if( p == NULL ) | ||
193 | throw Bu::ExceptionBase("Invalid type conversion."); | ||
194 | |||
195 | return *p; | ||
196 | } | ||
176 | 197 | ||
177 | template<class t> | 198 | template<class t> |
178 | void set( const t &val ) | 199 | void set( const t &val ) |