MCPcopy Create free account
hub / github.com/nodejs/nan / Encode

Function Encode

nan_string_bytes.h:224–299  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

222
223
224static Local<Value> Encode(const char* buf,
225 size_t buflen,
226 enum Encoding encoding) {
227 assert(buflen <= node::Buffer::kMaxLength);
228 if (!buflen && encoding != BUFFER)
229 return New("").ToLocalChecked();
230
231 Local<String> val;
232 switch (encoding) {
233 case BUFFER:
234 return CopyBuffer(buf, buflen).ToLocalChecked();
235
236 case ASCII:
237 if (contains_non_ascii(buf, buflen)) {
238 char* out = new char[buflen];
239 force_ascii(buf, out, buflen);
240 val = New<String>(out, buflen).ToLocalChecked();
241 delete[] out;
242 } else {
243 val = New<String>(buf, buflen).ToLocalChecked();
244 }
245 break;
246
247 case UTF8:
248 val = New<String>(buf, buflen).ToLocalChecked();
249 break;
250
251 case BINARY: {
252 // TODO(isaacs) use ExternalTwoByteString?
253 const unsigned char *cbuf = reinterpret_cast<const unsigned char*>(buf);
254 uint16_t * twobytebuf = new uint16_t[buflen];
255 for (size_t i = 0; i < buflen; i++) {
256 // XXX is the following line platform independent?
257 twobytebuf[i] = cbuf[i];
258 }
259 val = New<String>(twobytebuf, buflen).ToLocalChecked();
260 delete[] twobytebuf;
261 break;
262 }
263
264 case BASE64: {
265 size_t dlen = base64_encoded_size(buflen);
266 char* dst = new char[dlen];
267
268 size_t written = base64_encode(buf, buflen, dst, dlen);
269 assert(written == dlen);
270
271 val = New<String>(dst, dlen).ToLocalChecked();
272 delete[] dst;
273 break;
274 }
275
276 case UCS2: {
277 const uint16_t* data = reinterpret_cast<const uint16_t*>(buf);
278 val = New<String>(data, buflen / 2).ToLocalChecked();
279 break;
280 }
281

Callers

nothing calls this directly

Calls 7

CopyBufferFunction · 0.85
contains_non_asciiFunction · 0.85
force_asciiFunction · 0.85
base64_encodeFunction · 0.85
hex_encodeFunction · 0.85
ToLocalCheckedMethod · 0.80
NewFunction · 0.70

Tested by

no test coverage detected