| Index: core/src/fxcodec/codec/fx_codec.cpp
|
| diff --git a/core/src/fxcodec/codec/fx_codec.cpp b/core/src/fxcodec/codec/fx_codec.cpp
|
| index d7c7c4eeb473bf6434aaf3bdc261ca08792bb497..6998114f83164aefee106af353295620c52f3998 100644
|
| --- a/core/src/fxcodec/codec/fx_codec.cpp
|
| +++ b/core/src/fxcodec/codec/fx_codec.cpp
|
| @@ -142,6 +142,121 @@ void CCodec_ScanlineDecoder::DownScale(int dest_width, int dest_height) {
|
| m_pDataCache = nonstd::move(cache);
|
| }
|
|
|
| +FX_BOOL CCodec_BasicModule::RunLengthEncode(const uint8_t* src_buf,
|
| + FX_DWORD src_size,
|
| + uint8_t*& dest_buf,
|
| + FX_DWORD& dest_size) {
|
| + return FALSE;
|
| +}
|
| +
|
| +#define EXPONENT_DETECT(ptr) \
|
| + for (;; ptr++) { \
|
| + if (!std::isdigit(*ptr)) { \
|
| + if (endptr) \
|
| + *endptr = (char*)ptr; \
|
| + break; \
|
| + } else { \
|
| + exp_ret *= 10; \
|
| + exp_ret += FXSYS_toDecimalDigit(*ptr); \
|
| + continue; \
|
| + } \
|
| + }
|
| +
|
| +extern "C" double FXstrtod(const char* nptr, char** endptr) {
|
| + double ret = 0.0;
|
| + const char* ptr = nptr;
|
| + const char* exp_ptr = NULL;
|
| + int e_number = 0, e_signal = 0, e_point = 0, is_negative = 0;
|
| + int exp_ret = 0, exp_sig = 1, fra_ret = 0, fra_count = 0, fra_base = 1;
|
| + if (!nptr) {
|
| + return 0.0;
|
| + }
|
| + for (;; ptr++) {
|
| + if (!e_number && !e_point && (*ptr == '\t' || *ptr == ' '))
|
| + continue;
|
| +
|
| + if (std::isdigit(*ptr)) {
|
| + if (!e_number)
|
| + e_number = 1;
|
| +
|
| + if (!e_point) {
|
| + ret *= 10;
|
| + ret += FXSYS_toDecimalDigit(*ptr);
|
| + } else {
|
| + fra_count++;
|
| + fra_ret *= 10;
|
| + fra_ret += FXSYS_toDecimalDigit(*ptr);
|
| + }
|
| + continue;
|
| + }
|
| + if (!e_point && *ptr == '.') {
|
| + e_point = 1;
|
| + continue;
|
| + }
|
| + if (!e_number && !e_point && !e_signal) {
|
| + switch (*ptr) {
|
| + case '-':
|
| + is_negative = 1;
|
| + case '+':
|
| + e_signal = 1;
|
| + continue;
|
| + }
|
| + }
|
| + if (e_number && (*ptr == 'e' || *ptr == 'E')) {
|
| + exp_ptr = ptr++;
|
| + if (*ptr == '+' || *ptr == '-') {
|
| + exp_sig = (*ptr++ == '+') ? 1 : -1;
|
| + if (!std::isdigit(*ptr)) {
|
| + if (endptr) {
|
| + *endptr = (char*)exp_ptr;
|
| + }
|
| + break;
|
| + }
|
| + EXPONENT_DETECT(ptr);
|
| + } else if (std::isdigit(*ptr)) {
|
| + EXPONENT_DETECT(ptr);
|
| + } else {
|
| + if (endptr) {
|
| + *endptr = (char*)exp_ptr;
|
| + }
|
| + break;
|
| + }
|
| + break;
|
| + }
|
| + if (ptr != nptr && !e_number) {
|
| + if (endptr) {
|
| + *endptr = (char*)nptr;
|
| + }
|
| + break;
|
| + }
|
| + if (endptr) {
|
| + *endptr = (char*)ptr;
|
| + }
|
| + break;
|
| + }
|
| + while (fra_count--) {
|
| + fra_base *= 10;
|
| + }
|
| + ret += (double)fra_ret / (double)fra_base;
|
| + if (exp_sig == 1) {
|
| + while (exp_ret--) {
|
| + ret *= 10.0;
|
| + }
|
| + } else {
|
| + while (exp_ret--) {
|
| + ret /= 10.0;
|
| + }
|
| + }
|
| + return is_negative ? -ret : ret;
|
| +}
|
| +#undef EXPONENT_DETECT
|
| +
|
| +FX_BOOL CCodec_BasicModule::A85Encode(const uint8_t* src_buf,
|
| + FX_DWORD src_size,
|
| + uint8_t*& dest_buf,
|
| + FX_DWORD& dest_size) {
|
| + return FALSE;
|
| +}
|
| class CCodec_RLScanlineDecoder : public CCodec_ScanlineDecoder {
|
| public:
|
| CCodec_RLScanlineDecoder();
|
|
|