namespace Core::Text::UTFCodec

namespace UTFCodec {

// typedefs

typedef int (*DecodeFunction)(
    uchar32 &c,
    const unsigned char *sourceBuffer,
    int sourceSize
    );

typedef int (*EncodeFunction)(
    uchar32 c,
    unsigned char *destBuffer,
    int destSize
    );

// global variables

static const int kBufferTooSmall = 0;
static const int kIllegalInput = -1;

// global functions

uchar32 get16Bit(const unsigned char* sourceBuffer, int byteOrder);
void write16Bit(uint16 w, unsigned char* destBuffer, int byteOrder);
int decodeUTF8(uchar32& c, const unsigned char* sourceBuffer, int sourceSize);
int encodeUTF8(uchar32 c, unsigned char* destBuffer, int destSize);
bool isHighSurrogateUTF16(uchar c);
bool isLowSurrogateUTF16(uchar c);
uchar32 makeSurrogatePairUTF16(uchar high, uchar low);

int decodeUTF16(
    uchar32& c,
    const unsigned char* sourceBuffer,
    int sourceSize,
    int byteOrder
);

int encodeUTF16(
    uchar32 c,
    unsigned char* destBuffer,
    int destSize,
    int byteOrder
);

int decodeUTF16(uchar32& c, const unsigned char* sourceBuffer, int sourceSize);
int encodeUTF16(uchar32 c, unsigned char* destBuffer, int destSize);

} // namespace UTFCodec