summaryrefslogtreecommitdiff
path: root/utf/inc/utf16.hh
blob: 344b1a27703125559566424c88a5e6fd1491a0c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#ifndef UTF_UTF16_HH
#define UTF_UTF16_HH

#include "macros.hh"

#include <cstdint>
#include <string_view>

namespace utf {

/* Read one unicode codepoint from UTF-16 BigEndian encoded data if possible.
 * If successfull offset is incremented to point to next codepoint.
 * Will fail:
 * - not enough data is left in data given offset, returns NEED_MORE.
 * - data is not valid UTF-16, ie. invalid or incomplete surrogate pairs,
 *   returns INVALID.
 */
uint32_t HIDDEN read16be(std::string_view data, std::size_t& offset);

/* Read one unicode codepoint from UTF-16 LittleEndian encoded data if possible.
 * If successfull offset is incremented to point to next codepoint.
 * Will fail:
 * - not enough data is left in data given offset, returns NEED_MORE.
 * - data is not valid UTF-16, ie. invalid or incomplete surrogate pairs,
 *   returns INVALID.
 */
uint32_t HIDDEN read16le(std::string_view data, std::size_t& offset);

}  // namespace utf

#endif  // UTF_UTF16_HH