diff options
author | sereglond <sereglond@yandex-team.ru> | 2022-02-10 16:47:47 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:47:47 +0300 |
commit | 73bb02f2495181e0719a800f979df508924f4b71 (patch) | |
tree | c0748b5dcbade83af788c0abfa89c0383d6b779c /library/cpp/charset/recyr.hh | |
parent | eb3d925534734c808602b31b38b953677f0a279f (diff) | |
download | ydb-73bb02f2495181e0719a800f979df508924f4b71.tar.gz |
Restoring authorship annotation for <sereglond@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/charset/recyr.hh')
-rw-r--r-- | library/cpp/charset/recyr.hh | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/library/cpp/charset/recyr.hh b/library/cpp/charset/recyr.hh index 7362c8940a..5ec8734bcf 100644 --- a/library/cpp/charset/recyr.hh +++ b/library/cpp/charset/recyr.hh @@ -3,12 +3,12 @@ #include <cstdlib> #include <util/charset/recode_result.h> -#include <util/generic/ptr.h> +#include <util/generic/ptr.h> #include <util/generic/yexception.h> - -#include "codepage.h" -#include "doccodes.h" -#include "iconv.h" + +#include "codepage.h" +#include "doccodes.h" +#include "iconv.h" #include "recyr_int.hh" /////////////////////////////////////////////////////////////////////////////////////// @@ -37,15 +37,15 @@ inline RECODE_RESULT RecodeToUnicode(ECharset from, const char* in, TCharType* o size_t inRead = 0; size_t outWritten = 0; return RecodeToUnicode(from, in, out, inSize, outSize, inRead, outWritten); -} - +} + template <class TCharType> inline RECODE_RESULT RecodeFromUnicode(ECharset to, const TCharType* in, char* out, size_t inSize, size_t outSize) { size_t inRead = 0; size_t outWritten = 0; return RecodeFromUnicode(to, in, out, inSize, outSize, inRead, outWritten); -} - +} + inline RECODE_RESULT RecodeFromUnicode(ECharset theEncoding, const wchar16* chars, size_t length, char* bytes, size_t size, size_t* read = nullptr, size_t* written = nullptr) { size_t w = 0, r = 0; @@ -60,10 +60,10 @@ inline RECODE_RESULT RecodeFromUnicode(ECharset theEncoding, const wchar16* char inline RECODE_RESULT Recode(ECharset from, ECharset to, const char* in, char* out, size_t inSize, size_t outSize, size_t& inRead, size_t& outWritten) { inRead = 0; outWritten = 0; - + if (!ValidCodepage(to) || !ValidCodepage(from)) - return RECODE_ERROR; - + return RECODE_ERROR; + if (to == from) return NCodepagePrivate::_recodeCopy(in, out, inSize, outSize, inRead, outWritten); @@ -78,29 +78,29 @@ inline RECODE_RESULT Recode(ECharset from, ECharset to, const char* in, char* ou return NCodepagePrivate::_recodeToYandex(from, in, out, inSize, outSize, inRead, outWritten); } else if (NICONVPrivate::CanConvert(from, to)) { return NICONVPrivate::RecodeNoThrow(from, to, in, out, inSize, outSize, inRead, outWritten); - } + } size_t wideSize = inSize * 3; TArrayHolder<wchar16> wide(new wchar16[wideSize]); - - size_t wideRead = 0; - size_t wideWritten = 0; - + + size_t wideRead = 0; + size_t wideWritten = 0; + RECODE_RESULT res = RecodeToUnicode(from, in, wide.Get(), inSize, wideSize, inRead, wideWritten); - if (res != RECODE_OK) - return res; - + if (res != RECODE_OK) + return res; + res = RecodeFromUnicode(to, wide.Get(), out, wideWritten, outSize, wideRead, outWritten); - - return res; + + return res; } inline RECODE_RESULT Recode(ECharset from, ECharset to, const char* in, char* out, size_t inSize, size_t outSize) { size_t inRead = 0; size_t outWritten = 0; return Recode(from, to, in, out, inSize, outSize, inRead, outWritten); -} - +} + /** * Recode from one charset to another; throw an exception if conversion failed * @param[in] from the source character set @@ -155,10 +155,10 @@ inline TString RecodeToHTMLEntities(ECharset from, const TString& in) { out.resize(in.length() * (4 + 8)); res = NCodepagePrivate::_recodeToHTMLEntities(from, in.c_str(), out.begin(), in.length(), out.length(), inRead, outWritten); } - if (res != RECODE_OK) { + if (res != RECODE_OK) { ythrow yexception() << "Recode to HTML entities failed"; - } - + } + out.resize(outWritten - 1); return out; } |