mirror of
https://github.com/nodejs/node.git
synced 2024-12-01 16:10:02 +01:00
180af17b52
Implement string decoder in C++. The perks are a decent speed boost (for decoding, whereas creation show some performance degradation), that this can now be used more easily to add native decoding support to C++ streams and (arguably) more readable variable names. PR-URL: https://github.com/nodejs/node/pull/18537 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
51 lines
1.5 KiB
C++
51 lines
1.5 KiB
C++
#ifndef SRC_STRING_DECODER_H_
|
|
#define SRC_STRING_DECODER_H_
|
|
|
|
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
|
|
#include "node.h"
|
|
|
|
namespace node {
|
|
|
|
class StringDecoder {
|
|
public:
|
|
StringDecoder() { state_[kEncodingField] = BUFFER; }
|
|
inline void SetEncoding(enum encoding encoding);
|
|
inline enum encoding Encoding() const;
|
|
|
|
inline char* IncompleteCharacterBuffer();
|
|
inline unsigned MissingBytes() const;
|
|
inline unsigned BufferedBytes() const;
|
|
|
|
// Decode a string from the specified encoding.
|
|
// The value pointed to by `nread` will be modified to reflect that
|
|
// less data may have been read because it ended on an incomplete character
|
|
// and more data may have been read because a previously incomplete character
|
|
// was finished.
|
|
v8::MaybeLocal<v8::String> DecodeData(v8::Isolate* isolate,
|
|
const char* data,
|
|
size_t* nread);
|
|
// Flush an incomplete character. For character encodings like UTF8 this
|
|
// means printing replacement characters, buf for e.g. Base64 the returned
|
|
// string contains more data.
|
|
v8::MaybeLocal<v8::String> FlushData(v8::Isolate* isolate);
|
|
|
|
enum Fields {
|
|
kIncompleteCharactersStart = 0,
|
|
kIncompleteCharactersEnd = 4,
|
|
kMissingBytes = 4,
|
|
kBufferedBytes = 5,
|
|
kEncodingField = 6,
|
|
kNumFields = 7
|
|
};
|
|
|
|
private:
|
|
uint8_t state_[kNumFields] = {};
|
|
};
|
|
|
|
} // namespace node
|
|
|
|
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
|
|
|
|
#endif // SRC_STRING_DECODER_H_
|