#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 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 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_