jones-ndb/impl/include/ndb/ndb_util/CharsetMap.hpp (25 lines of code) (raw):

/* Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* * CharsetMap.hpp */ #ifndef CharsetMap_hpp #define CharsetMap_hpp #include <stdint.h> /** * Handles encoding issues for character data * while keeping MySQL's CHARSET_INFO structure hidden. */ class CharsetMap { public: CharsetMap(); /* The compiler-generated destructor is OK. */ /* The compiler-generated copy constructor is OK. */ /* The compiler-generated assignment operator is OK. */ /** * Initializes any global CharsetMap resources. * Should be called exactly once before any other CharsetMap function * from a single thread. */ static void init(); /** * Releases all global CharsetMap resources. * Also not thread-safe */ static void unload(); /** * Returns a standard character set name. * * The cs_number argument in getName(), getMysqlName(), and recode() * can be obtained from NdbDictionary::Column::getCharsetNumber(). * * getName() returns a name that in most cases will be a preferred name * from http://www.iana.org/assignments/character-sets and will * be recognized and usable by Java (e.g. java.nio, java.io, and java.lang). * However it may return "binary" if a column is BLOB / BINARY / VARBINARY, * or it may return the name of an obscure MySQL character set such as * "keybcs2" or "dec8". */ const char * getName(int cs_number) const; /** * Returns just the internal mysql name of the charset. */ const char * getMysqlName(int cs_number) const; /** * Takes the mysql name (not the standardized name) and returns a * character set number. */ int getCharsetNumber(const char *mysql_name) const; /** * Convenience function for UTF-8. */ int getUTF8CharsetNumber() const; /** * Convenience function for UTF-16. */ int getUTF16CharsetNumber() const; /** * The return status of a buffer recode operation. */ enum RecodeStatus { RECODE_OK , RECODE_BAD_CHARSET , RECODE_BAD_SRC , RECODE_BUFF_TOO_SMALL }; /** * Returns true if this charset number refers to a multibyte charset; * otherwise false. */ const bool * isMultibyte(int cs_number) const; /** * Recodes the content of a source buffer into destination buffer. * * Takes five arguments: * lengths is an array of two ints: first the source * buffer length, then the destination buffer length. * From and To are character set numbers. * src and dest are buffers. * * On return, lengths[0] is set to the number of bytes consumed from src * and lengths[1] to the number of bytes written to dest. * * The string in src will be recoded from charset cs_from to charset cs_to. * If the conversion is successful we return RECODE_OK. * Other return values are noted above. */ RecodeStatus recode(int32_t *lengths /* IN/OUT */, int cs_from, int cs_to, const void *src, void *dest) const; }; #endif // CharsetMap_hpp