Concept for encoding of Unicode characters.
concept Encoding {
typename Ch;
in unicode's definition.
enum { supportUnicode = 1 }; // or 0 if not supporting unicode
inclusively. template<typename OutputStream> static void Encode(OutputStream&
os, unsigned codepoint);
template <typename InputStream>
static bool Decode(InputStream& is, unsigned* codepoint);
actually decode it. template <typename InputStream, typename OutputStream>
static bool Validate(InputStream& is, OutputStream& os);
// The following functions are deal with byte streams.
template <typename InputByteStream>
static CharType TakeBOM(InputByteStream& is);
template <typename InputByteStream>
static Ch Take(InputByteStream& is);
template <typename OutputByteStream>
static void PutBOM(OutputByteStream& os);
template <typename OutputByteStream>
static void Put(OutputByteStream& os, Ch c);
};