Added string conversion and expected library.
All checks were successful
CI / build-and-test (push) Successful in 1m9s
All checks were successful
CI / build-and-test (push) Successful in 1m9s
This commit is contained in:
parent
9bfa99272b
commit
842171ee31
2037
src/external/include/tl/expected.hpp
vendored
Normal file
2037
src/external/include/tl/expected.hpp
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
faust_core_header = files('application.h', 'core.h', 'string.h', 'vector.h')
|
||||
faust_core_src = files('application.cpp')
|
||||
faust_core_header = files('application.h', 'core.h', 'string.h', 'vector.h', 'stringConvert.h')
|
||||
faust_core_src = files('application.cpp', 'stringConvert.cpp')
|
||||
|
||||
core_lib = static_library(
|
||||
'faust-core',
|
||||
|
||||
46
src/faust-lib/common/stringConvert.cpp
Normal file
46
src/faust-lib/common/stringConvert.cpp
Normal file
@ -0,0 +1,46 @@
|
||||
#include "faust-lib/common/stringConvert.h"
|
||||
|
||||
tl::expected<faust::u64, faust::convert::eConversionError> faust::convert::hexToNum(const faust::String &str) {
|
||||
faust::u64 result = 0;
|
||||
for (faust::u64 i = 0; i < static_cast<faust::u64>(str.length()); ++i) {
|
||||
result *= 16;
|
||||
if (str[i] >= u'0' && str[i] <= u'9') {
|
||||
result += str[i] - u'0';
|
||||
} else if (str[i] >= u'A' && str[i] <= u'F') {
|
||||
result += str[i] - u'A' + 10;
|
||||
} else if (str[i] >= u'a' && str[i] <= u'f') {
|
||||
result += str[i] - u'a' + 10;
|
||||
} else {
|
||||
return tl::unexpected(eConversionError::INVALID_CHARACTER);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
tl::expected<faust::u64, faust::convert::eConversionError> faust::convert::decToNum(const faust::String &str) {
|
||||
faust::u64 result = 0;
|
||||
for (faust::u64 i = 0; i < static_cast<faust::u64>(str.length()); ++i) {
|
||||
result *= 10;
|
||||
if (str[i] >= u'0' && str[i] <= u'9') {
|
||||
result += str[i] - u'0';
|
||||
} else {
|
||||
return tl::unexpected(eConversionError::INVALID_CHARACTER);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
tl::expected<faust::u64, faust::convert::eConversionError> faust::convert::binToNum(const faust::String &str) {
|
||||
faust::u64 result = 0;
|
||||
for (faust::u64 i = 0; i < static_cast<faust::u64>(str.length()); ++i) {
|
||||
result *= 2;
|
||||
if (str[i] == u'0') {
|
||||
result += 0;
|
||||
} else if (str[i] == u'1') {
|
||||
result += 1;
|
||||
} else {
|
||||
return tl::unexpected(eConversionError::INVALID_CHARACTER);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
22
src/faust-lib/common/stringConvert.h
Normal file
22
src/faust-lib/common/stringConvert.h
Normal file
@ -0,0 +1,22 @@
|
||||
#pragma once
|
||||
|
||||
#include "faust-lib/common/core.h"
|
||||
#include "faust-lib/common/string.h"
|
||||
|
||||
#include "external/include/tl/expected.hpp"
|
||||
|
||||
namespace faust {
|
||||
|
||||
namespace convert {
|
||||
|
||||
enum class eConversionError : u32 { INVALID_CHARACTER };
|
||||
|
||||
tl::expected<u64, eConversionError> hexToNum(const String &str);
|
||||
|
||||
tl::expected<u64, eConversionError> decToNum(const String &str);
|
||||
|
||||
tl::expected<u64, eConversionError> binToNum(const String &str);
|
||||
|
||||
} // namespace convert
|
||||
|
||||
} // namespace faust
|
||||
Loading…
x
Reference in New Issue
Block a user