From 9bc49424898d08e3640f3d4109fa885aa72cc2ae Mon Sep 17 00:00:00 2001 From: q66 Date: Thu, 30 Jul 2020 04:11:45 +0200 Subject: [PATCH] move sauerlib encoding into its own header --- src/engine/command.cc | 2 ++ src/engine/console.cc | 2 ++ src/engine/main.cc | 2 ++ src/engine/rendermodel.cc | 2 ++ src/engine/shader.cc | 2 ++ src/engine/texture.cc | 2 ++ src/engine/worldio.cc | 2 ++ src/sauerlib/encoding.hh | 46 +++++++++++++++++++++++++++++++++++++++ src/sauerlib/tools.cc | 2 ++ src/sauerlib/tools.hh | 42 ----------------------------------- src/shared/stream.cc | 2 ++ 11 files changed, 64 insertions(+), 42 deletions(-) create mode 100644 src/sauerlib/encoding.hh diff --git a/src/engine/command.cc b/src/engine/command.cc index 0c07e40..8fd7099 100644 --- a/src/engine/command.cc +++ b/src/engine/command.cc @@ -3,6 +3,8 @@ #include "command.hh" +#include + #include #include "console.hh" diff --git a/src/engine/console.cc b/src/engine/console.cc index 7572fe7..667d6e5 100644 --- a/src/engine/console.cc +++ b/src/engine/console.cc @@ -2,6 +2,8 @@ #include "console.hh" +#include + #include #include diff --git a/src/engine/main.cc b/src/engine/main.cc index 503bd87..fc029ff 100644 --- a/src/engine/main.cc +++ b/src/engine/main.cc @@ -4,6 +4,8 @@ #include +#include + #include #include #include diff --git a/src/engine/rendermodel.cc b/src/engine/rendermodel.cc index b735a46..9d7f228 100644 --- a/src/engine/rendermodel.cc +++ b/src/engine/rendermodel.cc @@ -2,6 +2,8 @@ #include +#include + #include #include #include diff --git a/src/engine/shader.cc b/src/engine/shader.cc index db54cf6..13e9a72 100644 --- a/src/engine/shader.cc +++ b/src/engine/shader.cc @@ -2,6 +2,8 @@ #include "shader.hh" +#include + #include #include diff --git a/src/engine/texture.cc b/src/engine/texture.cc index c3cc60c..a04e210 100644 --- a/src/engine/texture.cc +++ b/src/engine/texture.cc @@ -4,6 +4,8 @@ #include +#include + #include #include diff --git a/src/engine/worldio.cc b/src/engine/worldio.cc index 849fe3b..8c62f13 100644 --- a/src/engine/worldio.cc +++ b/src/engine/worldio.cc @@ -4,6 +4,8 @@ #include +#include + #include #include diff --git a/src/sauerlib/encoding.hh b/src/sauerlib/encoding.hh new file mode 100644 index 0000000..e531d02 --- /dev/null +++ b/src/sauerlib/encoding.hh @@ -0,0 +1,46 @@ +#ifndef SAUERLIB_ENCODING_HH +#define SAUERLIB_ENCODING_HH + +enum +{ + CT_PRINT = 1<<0, + CT_SPACE = 1<<1, + CT_DIGIT = 1<<2, + CT_ALPHA = 1<<3, + CT_LOWER = 1<<4, + CT_UPPER = 1<<5, + CT_UNICODE = 1<<6 +}; +extern const unsigned char cubectype[256]; +static inline int iscubeprint(unsigned char c) { return cubectype[c]&CT_PRINT; } +static inline int iscubespace(unsigned char c) { return cubectype[c]&CT_SPACE; } +static inline int iscubealpha(unsigned char c) { return cubectype[c]&CT_ALPHA; } +static inline int iscubealnum(unsigned char c) { return cubectype[c]&(CT_ALPHA|CT_DIGIT); } +static inline int iscubelower(unsigned char c) { return cubectype[c]&CT_LOWER; } +static inline int iscubeupper(unsigned char c) { return cubectype[c]&CT_UPPER; } +static inline int iscubepunct(unsigned char c) { return cubectype[c] == CT_PRINT; } +static inline int cube2uni(unsigned char c) +{ + extern const int cube2unichars[256]; + return cube2unichars[c]; +} +static inline unsigned char uni2cube(int c) +{ + extern const int uni2cubeoffsets[8]; + extern const unsigned char uni2cubechars[]; + return static_cast(c) <= 0x7FF ? uni2cubechars[uni2cubeoffsets[c>>8] + (c&0xFF)] : 0; +} +static inline unsigned char cubelower(unsigned char c) +{ + extern const unsigned char cubelowerchars[256]; + return cubelowerchars[c]; +} +static inline unsigned char cubeupper(unsigned char c) +{ + extern const unsigned char cubeupperchars[256]; + return cubeupperchars[c]; +} +extern size_t decodeutf8(unsigned char *dst, size_t dstlen, const unsigned char *src, size_t srclen, size_t *carry = nullptr); +extern size_t encodeutf8(unsigned char *dstbuf, size_t dstlen, const unsigned char *srcbuf, size_t srclen, size_t *carry = nullptr); + +#endif diff --git a/src/sauerlib/tools.cc b/src/sauerlib/tools.cc index 8a52346..b51092a 100644 --- a/src/sauerlib/tools.cc +++ b/src/sauerlib/tools.cc @@ -2,6 +2,8 @@ #include "tools.hh" +#include "encoding.hh" + #include ////////////////////////// strings //////////////////////////////////////// diff --git a/src/sauerlib/tools.hh b/src/sauerlib/tools.hh index b4a643b..903325b 100644 --- a/src/sauerlib/tools.hh +++ b/src/sauerlib/tools.hh @@ -1231,48 +1231,6 @@ struct streambuf size_t length() { return s->size(); } }; -enum -{ - CT_PRINT = 1<<0, - CT_SPACE = 1<<1, - CT_DIGIT = 1<<2, - CT_ALPHA = 1<<3, - CT_LOWER = 1<<4, - CT_UPPER = 1<<5, - CT_UNICODE = 1<<6 -}; -extern const uchar cubectype[256]; -static inline int iscubeprint(uchar c) { return cubectype[c]&CT_PRINT; } -static inline int iscubespace(uchar c) { return cubectype[c]&CT_SPACE; } -static inline int iscubealpha(uchar c) { return cubectype[c]&CT_ALPHA; } -static inline int iscubealnum(uchar c) { return cubectype[c]&(CT_ALPHA|CT_DIGIT); } -static inline int iscubelower(uchar c) { return cubectype[c]&CT_LOWER; } -static inline int iscubeupper(uchar c) { return cubectype[c]&CT_UPPER; } -static inline int iscubepunct(uchar c) { return cubectype[c] == CT_PRINT; } -static inline int cube2uni(uchar c) -{ - extern const int cube2unichars[256]; - return cube2unichars[c]; -} -static inline uchar uni2cube(int c) -{ - extern const int uni2cubeoffsets[8]; - extern const uchar uni2cubechars[]; - return uint(c) <= 0x7FF ? uni2cubechars[uni2cubeoffsets[c>>8] + (c&0xFF)] : 0; -} -static inline uchar cubelower(uchar c) -{ - extern const uchar cubelowerchars[256]; - return cubelowerchars[c]; -} -static inline uchar cubeupper(uchar c) -{ - extern const uchar cubeupperchars[256]; - return cubeupperchars[c]; -} -extern size_t decodeutf8(uchar *dst, size_t dstlen, const uchar *src, size_t srclen, size_t *carry = nullptr); -extern size_t encodeutf8(uchar *dstbuf, size_t dstlen, const uchar *srcbuf, size_t srclen, size_t *carry = nullptr); - extern string homedir; extern char *makerelpath(const char *dir, const char *file, const char *prefix = nullptr, const char *cmd = nullptr); diff --git a/src/shared/stream.cc b/src/shared/stream.cc index af0fab7..fdea9b1 100644 --- a/src/shared/stream.cc +++ b/src/shared/stream.cc @@ -1,5 +1,7 @@ #include +#include + #include "command.hh" #include /* conoutf */