static double USGSDEMReadDoubleFromBuffer( Buffer* psBuffer, int nCharCount, int *pbSuccess = nullptr) { if (psBuffer->cur_index + nCharCount > psBuffer->buffer_size) { USGSDEMRefillBuffer(psBuffer); if (psBuffer->cur_index + nCharCount > psBuffer->buffer_size) { if( pbSuccess ) *pbSuccess = FALSE; return 0; } } char* szPtr = psBuffer->buffer + psBuffer->cur_index; char backupC = szPtr[nCharCount]; szPtr[nCharCount] = 0; for( int i = 0; i < nCharCount; i++ ) { if( szPtr[i] == 'D' ) szPtr[i] = 'E'; } double dfVal = CPLAtof(szPtr); szPtr[nCharCount] = backupC; psBuffer->cur_index += nCharCount; if( pbSuccess ) *pbSuccess = TRUE; return dfVal; }
static int USGSDEMReadIntFromBuffer( Buffer* psBuffer, int* pbSuccess = nullptr ) { char c; while (true) { if (psBuffer->cur_index >= psBuffer->buffer_size) { USGSDEMRefillBuffer(psBuffer); if (psBuffer->cur_index >= psBuffer->buffer_size) { if( pbSuccess ) *pbSuccess = FALSE; return 0; } } c = psBuffer->buffer[psBuffer->cur_index]; psBuffer->cur_index ++; if ( !isspace( static_cast<int>(c) ) ) break; } GIntBig nVal = 0; int nSign = 1; if (c == '-') nSign = -1; else if (c == '+') nSign = 1; else if (c >= '0' && c <= '9') nVal = c - '0'; else { if( pbSuccess ) *pbSuccess = FALSE; return 0; } while (true) { if (psBuffer->cur_index >= psBuffer->buffer_size) { USGSDEMRefillBuffer(psBuffer); if (psBuffer->cur_index >= psBuffer->buffer_size) { if( pbSuccess ) *pbSuccess = TRUE; return static_cast<int>(nSign * nVal); } } c = psBuffer->buffer[psBuffer->cur_index]; if (c >= '0' && c <= '9') { psBuffer->cur_index ++; if( nVal * nSign < INT_MAX && nVal * nSign > INT_MIN ) { nVal = nVal * 10 + (c - '0'); if( nVal * nSign > INT_MAX ) { nVal = INT_MAX; nSign = 1; } else if( nVal * nSign < INT_MIN ) { nVal = INT_MIN; nSign = 1; } } } else { if( pbSuccess ) *pbSuccess = TRUE; return static_cast<int>(nSign * nVal); } } }
static int USGSDEMReadIntFromBuffer( Buffer* psBuffer, int* pbSuccess = NULL ) { int nVal = 0; char c; while (TRUE) { if (psBuffer->cur_index >= psBuffer->buffer_size) { USGSDEMRefillBuffer(psBuffer); if (psBuffer->cur_index >= psBuffer->buffer_size) { if( pbSuccess ) *pbSuccess = FALSE; return 0; } } c = psBuffer->buffer[psBuffer->cur_index]; psBuffer->cur_index ++; if (!isspace((int)c)) break; } int nSign = 1; if (c == '-') nSign = -1; else if (c == '+') nSign = 1; else if (c >= '0' && c <= '9') nVal = c - '0'; else { if( pbSuccess ) *pbSuccess = FALSE; return 0; } while (TRUE) { if (psBuffer->cur_index >= psBuffer->buffer_size) { USGSDEMRefillBuffer(psBuffer); if (psBuffer->cur_index >= psBuffer->buffer_size) { if( pbSuccess ) *pbSuccess = TRUE; return nSign * nVal; } } c = psBuffer->buffer[psBuffer->cur_index]; if (c >= '0' && c <= '9') { psBuffer->cur_index ++; nVal = nVal * 10 + (c - '0'); } else { if( pbSuccess ) *pbSuccess = TRUE; return nSign * nVal; } } }