| 66 | enum Encoding { LATIN1, UTF16, UTF8 }; |
| 67 | |
| 68 | uint32_t writeUCS2(v8::Isolate *isolate, uint8_t *buf, Local<String> str, |
| 69 | int flags) { |
| 70 | uint16_t *const dst = reinterpret_cast<uint16_t *>(buf); |
| 71 | |
| 72 | uint16_t *const aligned_dst = AlignUp(dst, sizeof(*dst)); |
| 73 | size_t nchars; |
| 74 | if (aligned_dst == dst) { |
| 75 | nchars = str->Write(isolate, dst, 0, -1, flags); |
| 76 | return nchars * sizeof(*dst); |
| 77 | } |
| 78 | |
| 79 | nchars = str->Write(isolate, aligned_dst, 0, str->Length() - 1, flags); |
| 80 | |
| 81 | memmove(dst, aligned_dst, nchars * sizeof(*dst)); |
| 82 | |
| 83 | uint16_t last; |
| 84 | str->Write(isolate, &last, nchars, 1, flags); |
| 85 | memcpy(buf + nchars * sizeof(*dst), &last, sizeof(last)); |
| 86 | nchars++; |
| 87 | |
| 88 | return nchars * sizeof(*dst); |
| 89 | } |
| 90 | |
| 91 | static void serializeString(const v8::FunctionCallbackInfo<v8::Value> &args) { |
| 92 | auto isolate = args.GetIsolate(); |
no test coverage detected