From 0daae5af37b94a1af9d860d36de33b7d5cfaa847 Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Tue, 7 Nov 2023 18:47:57 +0100 Subject: [PATCH] Update submodules Signed-off-by: Simon Rozman --- MSI/MSICA | 2 +- lib/WinStd | 2 +- lib/libZRCola/include/zrcola/character.h | 310 +++++++------- lib/libZRCola/include/zrcola/common.h | 386 ++++++++--------- lib/libZRCola/include/zrcola/highlight.h | 130 +++--- lib/libZRCola/include/zrcola/language.h | 286 ++++++------- lib/libZRCola/include/zrcola/tag.h | 294 ++++++------- lib/libZRCola/include/zrcola/translate.h | 425 ++++++++++--------- lib/libZRColaUI/include/zrcolaui/chargroup.h | 131 +++--- lib/libZRColaUI/include/zrcolaui/keyboard.h | 147 +++---- lib/oatpp | 2 +- lib/stdex | 2 +- 12 files changed, 1064 insertions(+), 1053 deletions(-) diff --git a/MSI/MSICA b/MSI/MSICA index c224008..d2069d7 160000 --- a/MSI/MSICA +++ b/MSI/MSICA @@ -1 +1 @@ -Subproject commit c224008d6c2318632583f0229268a477ad43ec0e +Subproject commit d2069d779960d7760ed75d36eb144f0cc3bab6ce diff --git a/lib/WinStd b/lib/WinStd index 0addbd8..8e323ef 160000 --- a/lib/WinStd +++ b/lib/WinStd @@ -1 +1 @@ -Subproject commit 0addbd825ae89bc3211404f7d43a1f5cafcf4c53 +Subproject commit 8e323efef9b1305cddc41137bd0483f0a390e2ec diff --git a/lib/libZRCola/include/zrcola/character.h b/lib/libZRCola/include/zrcola/character.h index 3092cff..3886f1a 100644 --- a/lib/libZRCola/include/zrcola/character.h +++ b/lib/libZRCola/include/zrcola/character.h @@ -328,6 +328,88 @@ namespace ZRCola { indexChr::size_type start; return idxChr.find(*c, start) ? idxChr[start].cat : chrcatid_t::blank; } + + + /// + /// Writes character database to a stream + /// + /// \param[in] stream Output stream + /// \param[in] db Character database + /// + /// \returns The stream \p stream + /// + friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const character_db &db) + { + // Write character index. + if (stream.fail()) return stream; + stream << db.idxChr; + + // Write description index. + if (!stream.good()) return stream; + stream << db.idxDsc; + + // Write sub-term description index. + if (!stream.good()) return stream; + stream << db.idxDscSub; + + // Write data count. + auto data_count = db.data.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (data_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + uint32_t count = (uint32_t)data_count; + stream.write((const char*)&count, sizeof(count)); + + // Write data. + if (stream.fail()) return stream; + stream.write((const char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); + + return stream; + } + + + /// + /// Reads character database from a stream + /// + /// \param[in ] stream Input stream + /// \param[out] db Character database + /// + /// \returns The stream \p stream + /// + friend std::istream& operator >>(_In_ std::istream& stream, _Out_ character_db& db) + { + // Read character index. + stream >> db.idxChr; + if (!stream.good()) return stream; + + // Read description index. + stream >> db.idxDsc; + if (!stream.good()) return stream; + + // Read sub-term description index. + stream >> db.idxDscSub; + if (!stream.good()) return stream; + + // Read data count. + uint32_t count; + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) return stream; + + if (count) { + // Read data. + db.data.resize(count); + stream.read((char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + } + else + db.data.clear(); + + return stream; + } }; @@ -486,161 +568,81 @@ namespace ZRCola { idxRank .clear(); data .clear(); } + + + /// + /// Writes character category database to a stream + /// + /// \param[in] stream Output stream + /// \param[in] db Character category database + /// + /// \returns The stream \p stream + /// + friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const chrcat_db& db) + { + // Write character category index. + if (stream.fail()) return stream; + stream << db.idxChrCat; + + // Write rank index. + if (stream.fail()) return stream; + stream << db.idxRank; + + // Write data count. + auto data_count = db.data.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (data_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + uint32_t count = (uint32_t)data_count; + stream.write((const char*)&count, sizeof(count)); + + // Write data. + if (stream.fail()) return stream; + stream.write((const char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + + return stream; + } + + + /// + /// Reads character category database from a stream + /// + /// \param[in ] stream Input stream + /// \param[out] db Character category database + /// + /// \returns The stream \p stream + /// + friend std::istream& operator >>(_In_ std::istream& stream, _Out_ chrcat_db& db) + { + // Read character category index. + stream >> db.idxChrCat; + if (!stream.good()) return stream; + + // Read rank index. + stream >> db.idxRank; + if (!stream.good()) return stream; + + // Read data count. + uint32_t count; + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) return stream; + + if (count) { + // Read data. + db.data.resize(count); + stream.read((char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + } + else + db.data.clear(); + + return stream; + } }; }; - -/// -/// Reads character database from a stream -/// -/// \param[in ] stream Input stream -/// \param[out] db Character database -/// -/// \returns The stream \p stream -/// -inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::character_db &db) -{ - // Read character index. - stream >> db.idxChr; - if (!stream.good()) return stream; - - // Read description index. - stream >> db.idxDsc; - if (!stream.good()) return stream; - - // Read sub-term description index. - stream >> db.idxDscSub; - if (!stream.good()) return stream; - - // Read data count. - uint32_t count; - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) return stream; - - if (count) { - // Read data. - db.data.resize(count); - stream.read((char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - } else - db.data.clear(); - - return stream; -} - - -/// -/// Writes character database to a stream -/// -/// \param[in] stream Output stream -/// \param[in] db Character database -/// -/// \returns The stream \p stream -/// -inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::character_db &db) -{ - // Write character index. - if (stream.fail()) return stream; - stream << db.idxChr; - - // Write description index. - if (!stream.good()) return stream; - stream << db.idxDsc; - - // Write sub-term description index. - if (!stream.good()) return stream; - stream << db.idxDscSub; - - // Write data count. - auto data_count = db.data.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (data_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - uint32_t count = (uint32_t)data_count; - stream.write((const char*)&count, sizeof(count)); - - // Write data. - if (stream.fail()) return stream; - stream.write((const char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - - return stream; -} - - -/// -/// Writes character category database to a stream -/// -/// \param[in] stream Output stream -/// \param[in] db Character category database -/// -/// \returns The stream \p stream -/// -inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::chrcat_db &db) -{ - // Write character category index. - if (stream.fail()) return stream; - stream << db.idxChrCat; - - // Write rank index. - if (stream.fail()) return stream; - stream << db.idxRank; - - // Write data count. - auto data_count = db.data.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (data_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - uint32_t count = (uint32_t)data_count; - stream.write((const char*)&count, sizeof(count)); - - // Write data. - if (stream.fail()) return stream; - stream.write((const char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - - return stream; -} - - -/// -/// Reads character category database from a stream -/// -/// \param[in ] stream Input stream -/// \param[out] db Character category database -/// -/// \returns The stream \p stream -/// -inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::chrcat_db &db) -{ - // Read character category index. - stream >> db.idxChrCat; - if (!stream.good()) return stream; - - // Read rank index. - stream >> db.idxRank; - if (!stream.good()) return stream; - - // Read data count. - uint32_t count; - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) return stream; - - if (count) { - // Read data. - db.data.resize(count); - stream.read((char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - } else - db.data.clear(); - - return stream; -} - #pragma warning(pop) diff --git a/lib/libZRCola/include/zrcola/common.h b/lib/libZRCola/include/zrcola/common.h index cde0939..19e53e6 100644 --- a/lib/libZRCola/include/zrcola/common.h +++ b/lib/libZRCola/include/zrcola/common.h @@ -9,7 +9,7 @@ #define _WINSOCKAPI_ // Prevent inclusion of winsock.h in windows.h. #include #endif -#include +#include #include #include #include @@ -428,6 +428,68 @@ namespace ZRCola { return false; } + + /// + /// Writes index to a stream + /// + /// \param[in] stream Output stream + /// \param[in] idx Index + /// + /// \returns The stream \p stream + /// + friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const index& idx) + { + // Write index count. + auto idx_count = idx.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (idx_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + uint32_t count = (uint32_t)idx_count; + stream.write((const char*)&count, sizeof(count)); + + // Write index data. + if (stream.fail()) return stream; + stream.write((const char*)idx.data(), sizeof(T_idx) * static_cast(count)); + + return stream; + } + + + /// + /// Reads index from a stream + /// + /// \param[in] stream Input stream + /// \param[out] idx Index + /// + /// \returns The stream \p stream + /// + friend std::istream& operator >>(_In_ std::istream& stream, _Out_ index& idx) + { + uint32_t count; + + // Read index count. + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) { + idx.clear(); + return stream; + } + + if (count) { + // Read index data. + idx.resize(count); + stream.read((char*)idx.data(), sizeof(T_idx) * static_cast(count)); + } + else + idx.clear(); + + return stream; + } + private: static int __cdecl compare_s(void *p, const void *a, const void *b) { @@ -502,6 +564,136 @@ namespace ZRCola { return false; } + + /// + /// Writes text index to a stream + /// + /// \param[in] stream Output stream + /// \param[in] idx Text index + /// + /// \returns The stream \p stream + /// + friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const textindex& idx) + { + uint32_t count; + + // Write index count. + auto idx_count = idx.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (idx_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + count = (uint32_t)idx_count; + stream.write((const char*)&count, sizeof(count)); + + // Write index data. + if (stream.fail()) return stream; + auto idx_data = idx.data(); + stream.write((const char*)idx_data, sizeof(*idx_data) * static_cast(count)); + + // Write key count. + auto key_count = idx.keys.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (idx_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + count = (uint32_t)key_count; + stream.write((const char*)&count, sizeof(count)); + + // Write key data. + if (stream.fail()) return stream; + auto idx_keys_data = idx.keys.data(); + stream.write((const char*)idx_keys_data, sizeof(*idx_keys_data) * static_cast(count)); + + // Write value count. + auto value_count = idx.values.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (idx_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + count = (uint32_t)value_count; + stream.write((const char*)&count, sizeof(count)); + + // Write value data. + if (stream.fail()) return stream; + auto idx_values_data = idx.values.data(); + stream.write((const char*)idx_values_data, sizeof(*idx_values_data) * static_cast(count)); + + return stream; + } + + + /// + /// Reads text index from a stream + /// + /// \param[in] stream Input stream + /// \param[out] idx Text index + /// + /// \returns The stream \p stream + /// + friend std::istream& operator >>(_In_ std::istream& stream, _Out_ textindex& idx) + { + uint32_t count; + + // Read text index count. + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) { + idx.clear(); + return stream; + } + + if (count) { + // Read text index. + idx.resize(count); + auto p = idx.data(); + stream.read((char*)p, sizeof(*p) * static_cast(count)); + if (!stream.good()) return stream; + } + else + idx.clear(); + + // Read keys count. + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) return stream; + + if (count) { + // Read keys. + idx.keys.resize(count); + auto p = idx.keys.data(); + stream.read((char*)p, sizeof(*p) * static_cast(count)); + if (!stream.good()) return stream; + } + else + idx.keys.clear(); + + // Read value count. + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) return stream; + + if (count) { + // Read values. + idx.values.resize(count); + auto p = idx.values.data(); + stream.read((char*)p, sizeof(*p) * static_cast(count)); + } + else + idx.values.clear(); + + return stream; + } + protected: inline int compare(_In_count_(key_len) const T_key *key, _In_ size_t key_len, size_type pos) const { @@ -618,196 +810,4 @@ namespace ZRCola { #endif }; - -/// -/// Writes index to a stream -/// -/// \param[in] stream Output stream -/// \param[in] idx Index -/// -/// \returns The stream \p stream -/// -template -inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::index &idx) -{ - // Write index count. - auto idx_count = idx.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (idx_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - uint32_t count = (uint32_t)idx_count; - stream.write((const char*)&count, sizeof(count)); - - // Write index data. - if (stream.fail()) return stream; - stream.write((const char*)idx.data(), sizeof(T_idx)*static_cast(count)); - - return stream; -} - - -/// -/// Reads index from a stream -/// -/// \param[in] stream Input stream -/// \param[out] idx Index -/// -/// \returns The stream \p stream -/// -template -inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::index &idx) -{ - uint32_t count; - - // Read index count. - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) { - idx.clear(); - return stream; - } - - if (count) { - // Read index data. - idx.resize(count); - stream.read((char*)idx.data(), sizeof(T_idx)*static_cast(count)); - } else - idx.clear(); - - return stream; -} - - -/// -/// Writes text index to a stream -/// -/// \param[in] stream Output stream -/// \param[in] idx Text index -/// -/// \returns The stream \p stream -/// -template -inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::textindex &idx) -{ - uint32_t count; - - // Write index count. - auto idx_count = idx.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (idx_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - count = (uint32_t)idx_count; - stream.write((const char*)&count, sizeof(count)); - - // Write index data. - if (stream.fail()) return stream; - auto idx_data = idx.data(); - stream.write((const char*)idx_data, sizeof(*idx_data)*static_cast(count)); - - // Write key count. - auto key_count = idx.keys.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (idx_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - count = (uint32_t)key_count; - stream.write((const char*)&count, sizeof(count)); - - // Write key data. - if (stream.fail()) return stream; - auto idx_keys_data = idx.keys.data(); - stream.write((const char*)idx_keys_data, sizeof(*idx_keys_data)*static_cast(count)); - - // Write value count. - auto value_count = idx.values.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (idx_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - count = (uint32_t)value_count; - stream.write((const char*)&count, sizeof(count)); - - // Write value data. - if (stream.fail()) return stream; - auto idx_values_data = idx.values.data(); - stream.write((const char*)idx_values_data, sizeof(*idx_values_data)*static_cast(count)); - - return stream; -} - - -/// -/// Reads text index from a stream -/// -/// \param[in] stream Input stream -/// \param[out] idx Text index -/// -/// \returns The stream \p stream -/// -template -inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::textindex &idx) -{ - uint32_t count; - - // Read text index count. - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) { - idx.clear(); - return stream; - } - - if (count) { - // Read text index. - idx.resize(count); - auto p = idx.data(); - stream.read((char*)p, sizeof(*p)*static_cast(count)); - if (!stream.good()) return stream; - } else - idx.clear(); - - // Read keys count. - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) return stream; - - if (count) { - // Read keys. - idx.keys.resize(count); - auto p = idx.keys.data(); - stream.read((char*)p, sizeof(*p)*static_cast(count)); - if (!stream.good()) return stream; - } else - idx.keys.clear(); - - // Read value count. - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) return stream; - - if (count) { - // Read values. - idx.values.resize(count); - auto p = idx.values.data(); - stream.read((char*)p, sizeof(*p)*static_cast(count)); - } else - idx.values.clear(); - - return stream; -} - #pragma warning(pop) diff --git a/lib/libZRCola/include/zrcola/highlight.h b/lib/libZRCola/include/zrcola/highlight.h index e968921..be015d8 100644 --- a/lib/libZRCola/include/zrcola/highlight.h +++ b/lib/libZRCola/include/zrcola/highlight.h @@ -161,72 +161,72 @@ namespace ZRCola { /// \param[in] callback Function to be called on highlight switch /// void Highlight(_In_z_count_(inputMax) const char_t* input, _In_ size_t inputMax, _In_ std::function callback) const; + + /// + /// Writes highlight database to a stream + /// + /// \param[in] stream Output stream + /// \param[in] db Highlight database + /// + /// \returns The stream \p stream + /// + friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const highlight_db& db) + { + // Write highlight index. + if (stream.fail()) return stream; + stream << db.idxChr; + + // Write data count. + auto data_count = db.data.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (data_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + uint32_t count = (uint32_t)data_count; + stream.write((const char*)&count, sizeof(count)); + + // Write data. + if (stream.fail()) return stream; + stream.write((const char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + + return stream; + } + + + /// + /// Reads highlight database from a stream + /// + /// \param[in ] stream Input stream + /// \param[out] db Highlight database + /// + /// \returns The stream \p stream + /// + friend std::istream& operator >>(_In_ std::istream& stream, _Out_ highlight_db& db) + { + // Read highlight index. + stream >> db.idxChr; + if (!stream.good()) return stream; + + // Read data count. + uint32_t count; + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) return stream; + + if (count) { + // Read data. + db.data.resize(count); + stream.read((char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + } + else + db.data.clear(); + + return stream; + } }; }; - -/// -/// Writes highlight database to a stream -/// -/// \param[in] stream Output stream -/// \param[in] db Highlight database -/// -/// \returns The stream \p stream -/// -inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::highlight_db &db) -{ - // Write highlight index. - if (stream.fail()) return stream; - stream << db.idxChr; - - // Write data count. - auto data_count = db.data.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (data_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - uint32_t count = (uint32_t)data_count; - stream.write((const char*)&count, sizeof(count)); - - // Write data. - if (stream.fail()) return stream; - stream.write((const char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - - return stream; -} - - -/// -/// Reads highlight database from a stream -/// -/// \param[in ] stream Input stream -/// \param[out] db Highlight database -/// -/// \returns The stream \p stream -/// -inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::highlight_db &db) -{ - // Read highlight index. - stream >> db.idxChr; - if (!stream.good()) return stream; - - // Read data count. - uint32_t count; - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) return stream; - - if (count) { - // Read data. - db.data.resize(count); - stream.read((char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - } else - db.data.clear(); - - return stream; -} - #pragma warning(pop) diff --git a/lib/libZRCola/include/zrcola/language.h b/lib/libZRCola/include/zrcola/language.h index 168efd7..1857780 100644 --- a/lib/libZRCola/include/zrcola/language.h +++ b/lib/libZRCola/include/zrcola/language.h @@ -177,6 +177,84 @@ namespace ZRCola { /// - \c true when character is used in language /// - \c false otherwise bool IsLocalCharacter(_In_ const char_t *chr, _In_ const char_t *chr_end, _In_ langid_t lang) const; + + + /// + /// Writes language character database to a stream + /// + /// \param[in] stream Output stream + /// \param[in] db Language character database + /// + /// \returns The stream \p stream + /// + friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const langchar_db& db) + { + // Write character index. + if (stream.fail()) return stream; + stream << db.idxChr; + +#ifdef ZRCOLA_LANGCHAR_LANG_IDX + // Write language index. + if (stream.fail()) return stream; + stream << db.idxLang; +#endif + + // Write data count. + auto data_count = db.data.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (data_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + uint32_t count = (uint32_t)data_count; + stream.write((const char*)&count, sizeof(count)); + + // Write data. + if (stream.fail()) return stream; + stream.write((const char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + + return stream; + } + + + /// + /// Reads language character database from a stream + /// + /// \param[in ] stream Input stream + /// \param[out] db Language character database + /// + /// \returns The stream \p stream + /// + friend std::istream& operator >>(_In_ std::istream& stream, _Out_ langchar_db& db) + { + // Read character index. + stream >> db.idxChr; + if (!stream.good()) return stream; + +#ifdef ZRCOLA_LANGCHAR_LANG_IDX + // Read language index. + stream >> db.idxLang; + if (!stream.good()) return stream; +#endif + + // Read data count. + uint32_t count; + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) return stream; + + if (count) { + // Read data. + db.data.resize(count); + stream.read((char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + } + else + db.data.clear(); + + return stream; + } }; @@ -277,149 +355,73 @@ namespace ZRCola { idxLang.clear(); data .clear(); } + + + /// + /// Writes language database to a stream + /// + /// \param[in] stream Output stream + /// \param[in] db Language database + /// + /// \returns The stream \p stream + /// + friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const language_db& db) + { + // Write language index. + if (stream.fail()) return stream; + stream << db.idxLang; + + // Write data count. + auto data_count = db.data.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (data_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + uint32_t count = (uint32_t)data_count; + stream.write((const char*)&count, sizeof(count)); + + // Write data. + if (stream.fail()) return stream; + stream.write((const char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + + return stream; + } + + + /// + /// Reads language database from a stream + /// + /// \param[in ] stream Input stream + /// \param[out] db Language database + /// + /// \returns The stream \p stream + /// + friend std::istream& operator >>(_In_ std::istream& stream, _Out_ language_db& db) + { + // Read language index. + stream >> db.idxLang; + if (!stream.good()) return stream; + + // Read data count. + uint32_t count; + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) return stream; + + if (count) { + // Read data. + db.data.resize(count); + stream.read((char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + } + else + db.data.clear(); + + return stream; + } }; }; - -/// -/// Writes language character database to a stream -/// -/// \param[in] stream Output stream -/// \param[in] db Language character database -/// -/// \returns The stream \p stream -/// -inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::langchar_db &db) -{ - // Write character index. - if (stream.fail()) return stream; - stream << db.idxChr; - -#ifdef ZRCOLA_LANGCHAR_LANG_IDX - // Write language index. - if (stream.fail()) return stream; - stream << db.idxLang; -#endif - - // Write data count. - auto data_count = db.data.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (data_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - uint32_t count = (uint32_t)data_count; - stream.write((const char*)&count, sizeof(count)); - - // Write data. - if (stream.fail()) return stream; - stream.write((const char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - - return stream; -} - - -/// -/// Reads language character database from a stream -/// -/// \param[in ] stream Input stream -/// \param[out] db Language character database -/// -/// \returns The stream \p stream -/// -inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::langchar_db &db) -{ - // Read character index. - stream >> db.idxChr; - if (!stream.good()) return stream; - -#ifdef ZRCOLA_LANGCHAR_LANG_IDX - // Read language index. - stream >> db.idxLang; - if (!stream.good()) return stream; -#endif - - // Read data count. - uint32_t count; - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) return stream; - - if (count) { - // Read data. - db.data.resize(count); - stream.read((char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - } else - db.data.clear(); - - return stream; -} - - -/// -/// Writes language database to a stream -/// -/// \param[in] stream Output stream -/// \param[in] db Language database -/// -/// \returns The stream \p stream -/// -inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::language_db &db) -{ - // Write language index. - if (stream.fail()) return stream; - stream << db.idxLang; - - // Write data count. - auto data_count = db.data.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (data_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - uint32_t count = (uint32_t)data_count; - stream.write((const char*)&count, sizeof(count)); - - // Write data. - if (stream.fail()) return stream; - stream.write((const char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - - return stream; -} - - -/// -/// Reads language database from a stream -/// -/// \param[in ] stream Input stream -/// \param[out] db Language database -/// -/// \returns The stream \p stream -/// -inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::language_db &db) -{ - // Read language index. - stream >> db.idxLang; - if (!stream.good()) return stream; - - // Read data count. - uint32_t count; - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) return stream; - - if (count) { - // Read data. - db.data.resize(count); - stream.read((char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - } else - db.data.clear(); - - return stream; -} - #pragma warning(pop) diff --git a/lib/libZRCola/include/zrcola/tag.h b/lib/libZRCola/include/zrcola/tag.h index 4f39800..f4ce357 100644 --- a/lib/libZRCola/include/zrcola/tag.h +++ b/lib/libZRCola/include/zrcola/tag.h @@ -210,6 +210,80 @@ namespace ZRCola { /// \param[in ] cookie Cookie for \p fn_abort call /// bool Search(_In_ const std::map &tags, _In_ const character_db &ch_db, _In_ const std::set &cats, _Inout_ std::map &hits, _In_opt_ bool (__cdecl *fn_abort)(void *cookie) = NULL, _In_opt_ void *cookie = NULL) const; + + + /// + /// Writes character tag database to a stream + /// + /// \param[in] stream Output stream + /// \param[in] db Character tag database + /// + /// \returns The stream \p stream + /// + friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const chrtag_db& db) + { + // Write character index. + if (stream.fail()) return stream; + stream << db.idxChr; + + // Write tag index. + if (stream.fail()) return stream; + stream << db.idxTag; + + // Write data count. + auto data_count = db.data.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (data_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + uint32_t count = (uint32_t)data_count; + stream.write((const char*)&count, sizeof(count)); + + // Write data. + if (stream.fail()) return stream; + stream.write((const char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + + return stream; + } + + + /// + /// Reads character tag database from a stream + /// + /// \param[in ] stream Input stream + /// \param[out] db Character tag database + /// + /// \returns The stream \p stream + /// + friend std::istream& operator >>(_In_ std::istream& stream, _Out_ chrtag_db& db) + { + // Read character index. + stream >> db.idxChr; + if (!stream.good()) return stream; + + // Read tag index. + stream >> db.idxTag; + if (!stream.good()) return stream; + + // Read data count. + uint32_t count; + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) return stream; + + if (count) { + // Read data. + db.data.resize(count); + stream.read((char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + } + else + db.data.clear(); + + return stream; + } }; @@ -432,153 +506,81 @@ namespace ZRCola { /// \param[in ] cookie Cookie for \p fn_abort call /// bool Search(_In_z_ const char_t *str, _In_ uint32_t locale, _Inout_ std::map &hits, _In_opt_ bool (__cdecl *fn_abort)(void *cookie) = NULL, _In_opt_ void *cookie = NULL) const; + + + /// + /// Writes tag database to a stream + /// + /// \param[in] stream Output stream + /// \param[in] db Tag database + /// + /// \returns The stream \p stream + /// + friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const tagname_db& db) + { + // Write name index. + if (stream.fail()) return stream; + stream << db.idxName; + + // Write tag index. + if (stream.fail()) return stream; + stream << db.idxTag; + + // Write data count. + auto data_count = db.data.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (data_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + uint32_t count = (uint32_t)data_count; + stream.write((const char*)&count, sizeof(count)); + + // Write data. + if (stream.fail()) return stream; + stream.write((const char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + + return stream; + } + + + /// + /// Reads tag database from a stream + /// + /// \param[in ] stream Input stream + /// \param[out] db Tag database + /// + /// \returns The stream \p stream + /// + friend std::istream& operator >>(_In_ std::istream& stream, _Out_ tagname_db& db) + { + // Read name index. + stream >> db.idxName; + if (!stream.good()) return stream; + + // Read tag index. + stream >> db.idxTag; + if (!stream.good()) return stream; + + // Read data count. + uint32_t count; + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) return stream; + + if (count) { + // Read data. + db.data.resize(count); + stream.read((char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + } + else + db.data.clear(); + + return stream; + } }; }; - -/// -/// Writes character tag database to a stream -/// -/// \param[in] stream Output stream -/// \param[in] db Character tag database -/// -/// \returns The stream \p stream -/// -inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::chrtag_db &db) -{ - // Write character index. - if (stream.fail()) return stream; - stream << db.idxChr; - - // Write tag index. - if (stream.fail()) return stream; - stream << db.idxTag; - - // Write data count. - auto data_count = db.data.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (data_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - uint32_t count = (uint32_t)data_count; - stream.write((const char*)&count, sizeof(count)); - - // Write data. - if (stream.fail()) return stream; - stream.write((const char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - - return stream; -} - - -/// -/// Reads character tag database from a stream -/// -/// \param[in ] stream Input stream -/// \param[out] db Character tag database -/// -/// \returns The stream \p stream -/// -inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::chrtag_db &db) -{ - // Read character index. - stream >> db.idxChr; - if (!stream.good()) return stream; - - // Read tag index. - stream >> db.idxTag; - if (!stream.good()) return stream; - - // Read data count. - uint32_t count; - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) return stream; - - if (count) { - // Read data. - db.data.resize(count); - stream.read((char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - } else - db.data.clear(); - - return stream; -} - - -/// -/// Writes tag database to a stream -/// -/// \param[in] stream Output stream -/// \param[in] db Tag database -/// -/// \returns The stream \p stream -/// -inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::tagname_db &db) -{ - // Write name index. - if (stream.fail()) return stream; - stream << db.idxName; - - // Write tag index. - if (stream.fail()) return stream; - stream << db.idxTag; - - // Write data count. - auto data_count = db.data.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (data_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - uint32_t count = (uint32_t)data_count; - stream.write((const char*)&count, sizeof(count)); - - // Write data. - if (stream.fail()) return stream; - stream.write((const char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - - return stream; -} - - -/// -/// Reads tag database from a stream -/// -/// \param[in ] stream Input stream -/// \param[out] db Tag database -/// -/// \returns The stream \p stream -/// -inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::tagname_db &db) -{ - // Read name index. - stream >> db.idxName; - if (!stream.good()) return stream; - - // Read tag index. - stream >> db.idxTag; - if (!stream.good()) return stream; - - // Read data count. - uint32_t count; - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) return stream; - - if (count) { - // Read data. - db.data.resize(count); - stream.read((char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - } else - db.data.clear(); - - return stream; -} - #pragma warning(pop) diff --git a/lib/libZRCola/include/zrcola/translate.h b/lib/libZRCola/include/zrcola/translate.h index a05d670..97d48a3 100644 --- a/lib/libZRCola/include/zrcola/translate.h +++ b/lib/libZRCola/include/zrcola/translate.h @@ -330,6 +330,80 @@ namespace ZRCola { /// \param[out] map The vector of source to destination index mappings (optional) /// void TranslateInv(_In_ transetid_t set, _In_z_count_(inputMax) const char_t* input, _In_ size_t inputMax, _In_opt_ const langchar_db *lc_db, _In_opt_ langid_t lang, _Out_ string_t &output, _Out_opt_ std::vector* map = NULL) const; + + + /// + /// Writes translation database to a stream + /// + /// \param[in] stream Output stream + /// \param[in] db Translation database + /// + /// \returns The stream \p stream + /// + friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::translation_db& db) + { + // Write translation index. + if (stream.fail()) return stream; + stream << db.idxSrc; + + // Write inverse translation index. + if (stream.fail()) return stream; + stream << db.idxDst; + + // Write data count. + auto data_count = db.data.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (data_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + uint32_t count = (uint32_t)data_count; + stream.write((const char*)&count, sizeof(count)); + + // Write data. + if (stream.fail()) return stream; + stream.write((const char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + + return stream; + } + + + /// + /// Reads translation database from a stream + /// + /// \param[in ] stream Input stream + /// \param[out] db Translation database + /// + /// \returns The stream \p stream + /// + friend std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::translation_db& db) + { + // Read translation index. + stream >> db.idxSrc; + if (!stream.good()) return stream; + + // Read inverse translation index. + stream >> db.idxDst; + if (!stream.good()) return stream; + + // Read data count. + uint32_t count; + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) return stream; + + if (count) { + // Read data. + db.data.resize(count); + stream.read((char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + } + else + db.data.clear(); + + return stream; + } }; @@ -443,6 +517,72 @@ namespace ZRCola { idxTranSet.clear(); data .clear(); } + + + /// + /// Writes translation set database to a stream + /// + /// \param[in] stream Output stream + /// \param[in] db Translation set database + /// + /// \returns The stream \p stream + /// + friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::transet_db& db) + { + // Write translation set index. + if (stream.fail()) return stream; + stream << db.idxTranSet; + + // Write data count. + auto data_count = db.data.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (data_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + uint32_t count = (uint32_t)data_count; + stream.write((const char*)&count, sizeof(count)); + + // Write data. + if (stream.fail()) return stream; + stream.write((const char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + + return stream; + } + + + /// + /// Reads translation set database from a stream + /// + /// \param[in ] stream Input stream + /// \param[out] db Translation set database + /// + /// \returns The stream \p stream + /// + friend std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::transet_db& db) + { + // Read translation set index. + stream >> db.idxTranSet; + if (!stream.good()) return stream; + + // Read data count. + uint32_t count; + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) return stream; + + if (count) { + // Read data. + db.data.resize(count); + stream.read((char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + } + else + db.data.clear(); + + return stream; + } }; @@ -614,218 +754,81 @@ namespace ZRCola { idxRank .clear(); data .clear(); } + + + /// + /// Writes translation sequence database to a stream + /// + /// \param[in] stream Output stream + /// \param[in] db Translation sequence database + /// + /// \returns The stream \p stream + /// + friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::transeq_db& db) + { + // Write translation sequence index. + if (stream.fail()) return stream; + stream << db.idxTranSeq; + + // Write rank index. + if (stream.fail()) return stream; + stream << db.idxRank; + + // Write data count. + auto data_count = db.data.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (data_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + uint32_t count = (uint32_t)data_count; + stream.write((const char*)&count, sizeof(count)); + + // Write data. + if (stream.fail()) return stream; + stream.write((const char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + + return stream; + } + + + /// + /// Reads translation sequence database from a stream + /// + /// \param[in ] stream Input stream + /// \param[out] db Translation sequence database + /// + /// \returns The stream \p stream + /// + friend std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::transeq_db& db) + { + // Read translation sequence index. + stream >> db.idxTranSeq; + if (!stream.good()) return stream; + + // Read rank index. + stream >> db.idxRank; + if (!stream.good()) return stream; + + // Read data count. + uint32_t count; + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) return stream; + + if (count) { + // Read data. + db.data.resize(count); + stream.read((char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + } + else + db.data.clear(); + + return stream; + } }; }; - -/// -/// Writes translation database to a stream -/// -/// \param[in] stream Output stream -/// \param[in] db Translation database -/// -/// \returns The stream \p stream -/// -inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::translation_db &db) -{ - // Write translation index. - if (stream.fail()) return stream; - stream << db.idxSrc; - - // Write inverse translation index. - if (stream.fail()) return stream; - stream << db.idxDst; - - // Write data count. - auto data_count = db.data.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (data_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - uint32_t count = (uint32_t)data_count; - stream.write((const char*)&count, sizeof(count)); - - // Write data. - if (stream.fail()) return stream; - stream.write((const char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - - return stream; -} - - -/// -/// Reads translation database from a stream -/// -/// \param[in ] stream Input stream -/// \param[out] db Translation database -/// -/// \returns The stream \p stream -/// -inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::translation_db &db) -{ - // Read translation index. - stream >> db.idxSrc; - if (!stream.good()) return stream; - - // Read inverse translation index. - stream >> db.idxDst; - if (!stream.good()) return stream; - - // Read data count. - uint32_t count; - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) return stream; - - if (count) { - // Read data. - db.data.resize(count); - stream.read((char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - } else - db.data.clear(); - - return stream; -} - - -/// -/// Writes translation set database to a stream -/// -/// \param[in] stream Output stream -/// \param[in] db Translation set database -/// -/// \returns The stream \p stream -/// -inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::transet_db &db) -{ - // Write translation set index. - if (stream.fail()) return stream; - stream << db.idxTranSet; - - // Write data count. - auto data_count = db.data.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (data_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - uint32_t count = (uint32_t)data_count; - stream.write((const char*)&count, sizeof(count)); - - // Write data. - if (stream.fail()) return stream; - stream.write((const char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - - return stream; -} - - -/// -/// Reads translation set database from a stream -/// -/// \param[in ] stream Input stream -/// \param[out] db Translation set database -/// -/// \returns The stream \p stream -/// -inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::transet_db &db) -{ - // Read translation set index. - stream >> db.idxTranSet; - if (!stream.good()) return stream; - - // Read data count. - uint32_t count; - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) return stream; - - if (count) { - // Read data. - db.data.resize(count); - stream.read((char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - } else - db.data.clear(); - - return stream; -} - - -/// -/// Writes translation sequence database to a stream -/// -/// \param[in] stream Output stream -/// \param[in] db Translation sequence database -/// -/// \returns The stream \p stream -/// -inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::transeq_db &db) -{ - // Write translation sequence index. - if (stream.fail()) return stream; - stream << db.idxTranSeq; - - // Write rank index. - if (stream.fail()) return stream; - stream << db.idxRank; - - // Write data count. - auto data_count = db.data.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (data_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - uint32_t count = (uint32_t)data_count; - stream.write((const char*)&count, sizeof(count)); - - // Write data. - if (stream.fail()) return stream; - stream.write((const char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - - return stream; -} - - -/// -/// Reads translation sequence database from a stream -/// -/// \param[in ] stream Input stream -/// \param[out] db Translation sequence database -/// -/// \returns The stream \p stream -/// -inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::transeq_db &db) -{ - // Read translation sequence index. - stream >> db.idxTranSeq; - if (!stream.good()) return stream; - - // Read rank index. - stream >> db.idxRank; - if (!stream.good()) return stream; - - // Read data count. - uint32_t count; - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) return stream; - - if (count) { - // Read data. - db.data.resize(count); - stream.read((char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - } else - db.data.clear(); - - return stream; -} - #pragma warning(pop) diff --git a/lib/libZRColaUI/include/zrcolaui/chargroup.h b/lib/libZRColaUI/include/zrcolaui/chargroup.h index c41016c..1516a0a 100644 --- a/lib/libZRColaUI/include/zrcolaui/chargroup.h +++ b/lib/libZRColaUI/include/zrcolaui/chargroup.h @@ -160,75 +160,76 @@ namespace ZRCola { /// Constructs the database /// inline chrgrp_db() : idxRank(data) {} + + + /// + /// Writes character group database to a stream + /// + /// \param[in] stream Output stream + /// \param[in] db Character group database + /// + /// \returns The stream \p stream + /// + friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const chrgrp_db& db) + { + // Write rank index. + if (stream.fail()) return stream; + stream << db.idxRank; + + // Write data count. + auto data_count = db.data.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (data_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + uint32_t count = (uint32_t)data_count; + stream.write((const char*)&count, sizeof(count)); + + // Write data. + if (stream.fail()) return stream; + stream.write((const char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + + return stream; + } + + + /// + /// Reads character group database from a stream + /// + /// \param[in ] stream Input stream + /// \param[out] db Character group database + /// + /// \returns The stream \p stream + /// + friend std::istream& operator >>(_In_ std::istream& stream, _Out_ chrgrp_db& db) + { + // Read rank index. + stream >> db.idxRank; + if (!stream.good()) return stream; + + // Read data count. + uint32_t count; + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) return stream; + + if (count) { + // Read data. + db.data.resize(count); + stream.read((char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + } + else + db.data.clear(); + + return stream; + } }; typedef stdex::idrec::record chrgrp_rec; }; - -/// -/// Writes character group database to a stream -/// -/// \param[in] stream Output stream -/// \param[in] db Character group database -/// -/// \returns The stream \p stream -/// -inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::chrgrp_db &db) -{ - // Write rank index. - if (stream.fail()) return stream; - stream << db.idxRank; - - // Write data count. - auto data_count = db.data.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (data_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - uint32_t count = (uint32_t)data_count; - stream.write((const char*)&count, sizeof(count)); - - // Write data. - if (stream.fail()) return stream; - stream.write((const char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - - return stream; -} - - -/// -/// Reads character group database from a stream -/// -/// \param[in ] stream Input stream -/// \param[out] db Character group database -/// -/// \returns The stream \p stream -/// -inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::chrgrp_db &db) -{ - // Read rank index. - stream >> db.idxRank; - if (!stream.good()) return stream; - - // Read data count. - uint32_t count; - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) return stream; - - if (count) { - // Read data. - db.data.resize(count); - stream.read((char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - } else - db.data.clear(); - - return stream; -} - #pragma warning(pop) diff --git a/lib/libZRColaUI/include/zrcolaui/keyboard.h b/lib/libZRColaUI/include/zrcolaui/keyboard.h index 81cd62d..b7b0818 100644 --- a/lib/libZRColaUI/include/zrcolaui/keyboard.h +++ b/lib/libZRColaUI/include/zrcolaui/keyboard.h @@ -270,83 +270,84 @@ namespace ZRCola { wxString str; return GetSequenceAsText(seq, seq_len, str) ? str : wxEmptyString; } + + + /// + /// Writes key sequence database to a stream + /// + /// \param[in] stream Output stream + /// \param[in] db Key sequence database + /// + /// \returns The stream \p stream + /// + friend std::ostream& operator <<(_In_ std::ostream& stream, _In_ const keyseq_db& db) + { + // Write character index. + if (stream.fail()) return stream; + stream << db.idxChr; + + // Write key index. + if (stream.fail()) return stream; + stream << db.idxKey; + + // Write data count. + auto data_count = db.data.size(); +#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) + // 4G check + if (data_count > 0xffffffff) { + stream.setstate(std::ios_base::failbit); + return stream; + } +#endif + if (stream.fail()) return stream; + uint32_t count = (uint32_t)data_count; + stream.write((const char*)&count, sizeof(count)); + + // Write data. + if (stream.fail()) return stream; + stream.write((const char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + + return stream; + } + + + /// + /// Reads key sequence database from a stream + /// + /// \param[in] stream Input stream + /// \param[out] db Key sequence database + /// + /// \returns The stream \p stream + /// + friend std::istream& operator >>(_In_ std::istream& stream, _Out_ keyseq_db& db) + { + // Read character index. + stream >> db.idxChr; + if (!stream.good()) return stream; + + // Read key index. + stream >> db.idxKey; + if (!stream.good()) return stream; + + // Read data count. + uint32_t count; + stream.read((char*)&count, sizeof(count)); + if (!stream.good()) return stream; + + if (count) { + // Read data. + db.data.resize(count); + stream.read((char*)db.data.data(), sizeof(uint16_t) * static_cast(count)); + } + else + db.data.clear(); + + return stream; + } }; typedef stdex::idrec::record keyseq_rec; }; - -/// -/// Writes key sequence database to a stream -/// -/// \param[in] stream Output stream -/// \param[in] db Key sequence database -/// -/// \returns The stream \p stream -/// -inline std::ostream& operator <<(_In_ std::ostream& stream, _In_ const ZRCola::keyseq_db &db) -{ - // Write character index. - if (stream.fail()) return stream; - stream << db.idxChr; - - // Write key index. - if (stream.fail()) return stream; - stream << db.idxKey; - - // Write data count. - auto data_count = db.data.size(); -#if defined(_WIN64) || defined(__x86_64__) || defined(__ppc64__) - // 4G check - if (data_count > 0xffffffff) { - stream.setstate(std::ios_base::failbit); - return stream; - } -#endif - if (stream.fail()) return stream; - uint32_t count = (uint32_t)data_count; - stream.write((const char*)&count, sizeof(count)); - - // Write data. - if (stream.fail()) return stream; - stream.write((const char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - - return stream; -} - - -/// -/// Reads key sequence database from a stream -/// -/// \param[in] stream Input stream -/// \param[out] db Key sequence database -/// -/// \returns The stream \p stream -/// -inline std::istream& operator >>(_In_ std::istream& stream, _Out_ ZRCola::keyseq_db &db) -{ - // Read character index. - stream >> db.idxChr; - if (!stream.good()) return stream; - - // Read key index. - stream >> db.idxKey; - if (!stream.good()) return stream; - - // Read data count. - uint32_t count; - stream.read((char*)&count, sizeof(count)); - if (!stream.good()) return stream; - - if (count) { - // Read data. - db.data.resize(count); - stream.read((char*)db.data.data(), sizeof(uint16_t)*static_cast(count)); - } else - db.data.clear(); - - return stream; -} - #pragma warning(pop) diff --git a/lib/oatpp b/lib/oatpp index 110e71f..1e5b0c4 160000 --- a/lib/oatpp +++ b/lib/oatpp @@ -1 +1 @@ -Subproject commit 110e71f4f29049a7cc32cb542de283bf8c620e5e +Subproject commit 1e5b0c49179c75508498c91660ae12a7866edebf diff --git a/lib/stdex b/lib/stdex index 753da36..fedeef0 160000 --- a/lib/stdex +++ b/lib/stdex @@ -1 +1 @@ -Subproject commit 753da366725dc551f344ddc7fed2400605cadeac +Subproject commit fedeef0beaaf9206c38026a110f56645da964803