From 87c41451ab7da83f4695d23a56b8438a16257292 Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Thu, 6 Oct 2016 16:02:56 +0200 Subject: [PATCH] ATL replaced by WinStd --- ZRColaCompile/ZRColaCompile.props | 2 +- ZRColaCompile/ZRColaCompile.vcxproj | 5 +- ZRColaCompile/dbsource.cpp | 308 ++++++++++++++-------------- ZRColaCompile/dbsource.h | 105 ++++++---- ZRColaCompile/main.cpp | 23 ++- ZRColaCompile/stdafx.h | 6 +- ZRColaUtils.sln | 11 + lib/WinStd | 2 +- lib/stdex | 2 +- 9 files changed, 249 insertions(+), 215 deletions(-) diff --git a/ZRColaCompile/ZRColaCompile.props b/ZRColaCompile/ZRColaCompile.props index 06d76f6..1e9a373 100644 --- a/ZRColaCompile/ZRColaCompile.props +++ b/ZRColaCompile/ZRColaCompile.props @@ -7,7 +7,7 @@ - ..\lib\wxExtend\include;..\lib\stdex\include;..\lib\libZRCola\include;..\lib\libZRColaUI\include;%(AdditionalIncludeDirectories) + ..\lib\wxExtend\include;..\lib\WinStd\include;..\lib\stdex\include;..\lib\libZRCola\include;..\lib\libZRColaUI\include;%(AdditionalIncludeDirectories) _CONSOLE;%(PreprocessorDefinitions) diff --git a/ZRColaCompile/ZRColaCompile.vcxproj b/ZRColaCompile/ZRColaCompile.vcxproj index 530e56d..458e11a 100644 --- a/ZRColaCompile/ZRColaCompile.vcxproj +++ b/ZRColaCompile/ZRColaCompile.vcxproj @@ -19,14 +19,12 @@ Application true Unicode - Dynamic Application false true Unicode - Dynamic @@ -63,6 +61,9 @@ {3c61929e-7289-4101-8d0a-da22d6e1aea8} + + {47399d91-7eb9-41de-b521-514ba5db0c43} + {a3a36689-ac35-4026-93da-a3ba0c0e767c} diff --git a/ZRColaCompile/dbsource.cpp b/ZRColaCompile/dbsource.cpp index 01b947b..fde2a64 100644 --- a/ZRColaCompile/dbsource.cpp +++ b/ZRColaCompile/dbsource.cpp @@ -21,6 +21,7 @@ using namespace std; using namespace stdex; +using namespace winstd; ////////////////////////////////////////////////////////////////////////// @@ -71,21 +72,14 @@ void ZRCola::DBSource::character_bank::build_related() ZRCola::DBSource::character_bank::build_related_worker::build_related_worker(_In_ const character_bank *cb, _In_ size_type from, _In_ size_type to) : - thread_type((HANDLE)_beginthreadex(NULL, 0, process, this, CREATE_SUSPENDED, NULL)), + win_handle((HANDLE)_beginthreadex(NULL, 0, process, this, CREATE_SUSPENDED, NULL)), m_heap(HeapCreate(0, 0, 0)), m_cb(cb), m_from(from), m_to(to) { // Now that members of this class are surely initialized, proceed. - ResumeThread(get()); -} - - -ZRCola::DBSource::character_bank::build_related_worker::~build_related_worker() -{ - assert(m_heap); - HeapDestroy(m_heap); + ResumeThread(m_h); } @@ -261,11 +255,9 @@ ZRCola::DBSource::DBSource() ZRCola::DBSource::~DBSource() { - if (m_pCharacterGroup1) - m_pCharacterGroup1.Release(); - - if (m_comCharacterGroup) - m_comCharacterGroup.Release(); + // Manually release all COM objects related to the database before we close the database. + m_pCharacterGroup1.free(); + m_comCharacterGroup.free(); if (m_db) m_db->Close(); @@ -288,7 +280,7 @@ bool ZRCola::DBSource::Open(LPCTSTR filename) cn += L"Dbq="; cn += filename; cn += L";Uid=;Pwd=;"; - hr = m_db->Open(ATL::CComBSTR(cn.c_str())); + hr = m_db->Open(bstr(cn.c_str())); if (SUCCEEDED(hr)) { // Database open and ready. m_filename = filename; @@ -298,15 +290,15 @@ bool ZRCola::DBSource::Open(LPCTSTR filename) // Create ADO command(s). wxVERIFY(SUCCEEDED(::CoCreateInstance(CLSID_CADOCommand, NULL, CLSCTX_ALL, IID_IADOCommand, (LPVOID*)&m_comCharacterGroup))); - wxVERIFY(SUCCEEDED(m_comCharacterGroup->put_ActiveConnection(ATL::CComVariant(m_db)))); + wxVERIFY(SUCCEEDED(m_comCharacterGroup->put_ActiveConnection(variant(m_db)))); wxVERIFY(SUCCEEDED(m_comCharacterGroup->put_CommandType(adCmdText))); - wxVERIFY(SUCCEEDED(m_comCharacterGroup->put_CommandText(ATL::CComBSTR(L"SELECT [VRS_SkupineZnakov].[Znak], [VRS_SkupineZnakov].[pogost] FROM [VRS_SkupineZnakov] LEFT JOIN [VRS_CharList] ON [VRS_SkupineZnakov].[Znak]=[VRS_CharList].[znak] WHERE [VRS_CharList].[aktiven]=1 AND [VRS_SkupineZnakov].[Skupina]=? ORDER BY [VRS_SkupineZnakov].[Rang] ASC, [VRS_SkupineZnakov].[Znak] ASC")))); + wxVERIFY(SUCCEEDED(m_comCharacterGroup->put_CommandText(bstr(L"SELECT [VRS_SkupineZnakov].[Znak], [VRS_SkupineZnakov].[pogost] FROM [VRS_SkupineZnakov] LEFT JOIN [VRS_CharList] ON [VRS_SkupineZnakov].[Znak]=[VRS_CharList].[znak] WHERE [VRS_CharList].[aktiven]=1 AND [VRS_SkupineZnakov].[Skupina]=? ORDER BY [VRS_SkupineZnakov].[Rang] ASC, [VRS_SkupineZnakov].[Znak] ASC")))); { // Create and add command parameters. - ATL::CComPtr params; + com_obj params; wxVERIFY(SUCCEEDED(m_comCharacterGroup->get_Parameters(¶ms))); wxASSERT_MSG(!m_pCharacterGroup1, wxT("ADO command parameter already created")); - wxVERIFY(SUCCEEDED(m_comCharacterGroup->CreateParameter(ATL::CComBSTR(L"@Skupina"), adVarWChar, adParamInput, 50, ATL::CComVariant(DISP_E_PARAMNOTFOUND, VT_ERROR), &m_pCharacterGroup1))); + wxVERIFY(SUCCEEDED(m_comCharacterGroup->CreateParameter(bstr(L"@Skupina"), adVarWChar, adParamInput, 50, variant(DISP_E_PARAMNOTFOUND, VT_ERROR), &m_pCharacterGroup1))); wxVERIFY(SUCCEEDED(params->Append(m_pCharacterGroup1))); } @@ -315,7 +307,7 @@ bool ZRCola::DBSource::Open(LPCTSTR filename) _ftprintf(stderr, wxT("%s: error ZCC0011: Could not open database (0x%x).\n"), (LPCTSTR)filename, hr); LogErrors(); } - m_db.Release(); + m_db.free(); } else _ftprintf(stderr, wxT("%s: error ZCC0012: Creating ADOConnection object failed (0x%x).\n"), (LPCTSTR)filename, hr); @@ -337,12 +329,12 @@ void ZRCola::DBSource::LogErrors() const // Iterate the errors. for (long i = 0; i < n; i++) { ADOError *err = NULL; - if (SUCCEEDED(errors->get_Item(ATL::CComVariant(i), &err))) { + if (SUCCEEDED(errors->get_Item(variant(i), &err))) { // Write error number and description to the log. long num = 0; wxVERIFY(SUCCEEDED(err->get_Number(&num))); - ATL::CComBSTR desc; + bstr desc; wxVERIFY(SUCCEEDED(err->get_Description(&desc))); _ftprintf(stderr, wxT(" error ADO%x: %ls\n"), num, (BSTR)desc); @@ -356,13 +348,13 @@ void ZRCola::DBSource::LogErrors() const } -bool ZRCola::DBSource::GetValue(const ATL::CComPtr& f, bool& val) const +bool ZRCola::DBSource::GetValue(const com_obj& f, bool& val) const { wxASSERT_MSG(f, wxT("field is empty")); - ATL::CComVariant v; + variant v; wxVERIFY(SUCCEEDED(f->get_Value(&v))); - wxCHECK(SUCCEEDED(v.ChangeType(VT_BOOL)), false); + wxCHECK(SUCCEEDED(v.change_type(VT_BOOL)), false); val = V_BOOL(&v) ? true : false; @@ -370,13 +362,13 @@ bool ZRCola::DBSource::GetValue(const ATL::CComPtr& f, bool& val) cons } -bool ZRCola::DBSource::GetValue(const ATL::CComPtr& f, int& val) const +bool ZRCola::DBSource::GetValue(const com_obj& f, int& val) const { wxASSERT_MSG(f, wxT("field is empty")); - ATL::CComVariant v; + variant v; wxVERIFY(SUCCEEDED(f->get_Value(&v))); - wxCHECK(SUCCEEDED(v.ChangeType(VT_I4)), false); + wxCHECK(SUCCEEDED(v.change_type(VT_I4)), false); val = V_I4(&v); @@ -384,14 +376,14 @@ bool ZRCola::DBSource::GetValue(const ATL::CComPtr& f, int& val) const } -bool ZRCola::DBSource::GetValue(const ATL::CComPtr& f, wstring& val) const +bool ZRCola::DBSource::GetValue(const com_obj& f, wstring& val) const { wxASSERT_MSG(f, wxT("field is empty")); - ATL::CComVariant v; + variant v; wxVERIFY(SUCCEEDED(f->get_Value(&v))); if (V_VT(&v) != VT_NULL) { - wxCHECK(SUCCEEDED(v.ChangeType(VT_BSTR)), false); + wxCHECK(SUCCEEDED(v.change_type(VT_BSTR)), false); val.reserve(::SysStringLen(V_BSTR(&v))); val = V_BSTR(&v); @@ -402,14 +394,14 @@ bool ZRCola::DBSource::GetValue(const ATL::CComPtr& f, wstring& val) c } -bool ZRCola::DBSource::GetUnicodeCharacter(const ATL::CComPtr& f, wchar_t& chr) const +bool ZRCola::DBSource::GetUnicodeCharacter(const com_obj& f, wchar_t& chr) const { wxASSERT_MSG(f, wxT("field is empty")); - ATL::CComVariant v; + variant v; wxVERIFY(SUCCEEDED(f->get_Value(&v))); if (V_VT(&v) != VT_NULL) { - wxCHECK(SUCCEEDED(v.ChangeType(VT_BSTR)), false); + wxCHECK(SUCCEEDED(v.change_type(VT_BSTR)), false); // Parse the field. Must be exactly one Unicode code. UINT i = 0, n = ::SysStringLen(V_BSTR(&v)); @@ -421,12 +413,12 @@ bool ZRCola::DBSource::GetUnicodeCharacter(const ATL::CComPtr& f, wcha else break; } if (i <= 0 && 4 < i) { - ATL::CComBSTR fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname))); - _ftprintf(stderr, wxT("%s: error ZCC0030: Syntax error in \"%.*ls\" field (\"%.*ls\"). Unicode code must be one to four hexadecimal characters long.\n"), m_filename.c_str(), fieldname.Length(), (BSTR)fieldname, n, V_BSTR(&v)); + bstr fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname))); + _ftprintf(stderr, wxT("%s: error ZCC0030: Syntax error in \"%.*ls\" field (\"%.*ls\"). Unicode code must be one to four hexadecimal characters long.\n"), m_filename.c_str(), fieldname.length(), (BSTR)fieldname, n, V_BSTR(&v)); return false; } else if (i != n) { - ATL::CComBSTR fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname))); - _ftprintf(stderr, wxT("%s: error ZCC0031: Syntax error in \"%.*ls\" field (\"%.*ls\"). Extra trailing characters.\n"), m_filename.c_str(), fieldname.Length(), (BSTR)fieldname, n, V_BSTR(&v)); + bstr fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname))); + _ftprintf(stderr, wxT("%s: error ZCC0031: Syntax error in \"%.*ls\" field (\"%.*ls\"). Extra trailing characters.\n"), m_filename.c_str(), fieldname.length(), (BSTR)fieldname, n, V_BSTR(&v)); return false; } } else @@ -436,13 +428,13 @@ bool ZRCola::DBSource::GetUnicodeCharacter(const ATL::CComPtr& f, wcha } -bool ZRCola::DBSource::GetUnicodeString(const ATL::CComPtr& f, wstring& str) const +bool ZRCola::DBSource::GetUnicodeString(const com_obj& f, wstring& str) const { wxASSERT_MSG(f, wxT("field is empty")); - ATL::CComVariant v; + variant v; wxVERIFY(SUCCEEDED(f->get_Value(&v))); - wxCHECK(SUCCEEDED(v.ChangeType(VT_BSTR)), false); + wxCHECK(SUCCEEDED(v.change_type(VT_BSTR)), false); // Parse the field. Must be "xxxx+xxxx+xxxx..." sequence. str.clear(); @@ -457,8 +449,8 @@ bool ZRCola::DBSource::GetUnicodeString(const ATL::CComPtr& f, wstring else break; } if (j <= 0 || 4 < j) { - ATL::CComBSTR fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname))); - _ftprintf(stderr, wxT("%s: error ZCC0020: Syntax error in \"%.*ls\" field (\"%.*ls\"). Unicode code must be one to four hexadecimal characters long.\n"), m_filename.c_str(), fieldname.Length(), (BSTR)fieldname, n, V_BSTR(&v)); + bstr fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname))); + _ftprintf(stderr, wxT("%s: error ZCC0020: Syntax error in \"%.*ls\" field (\"%.*ls\"). Unicode code must be one to four hexadecimal characters long.\n"), m_filename.c_str(), fieldname.length(), (BSTR)fieldname, n, V_BSTR(&v)); return false; } str += c; @@ -471,13 +463,13 @@ bool ZRCola::DBSource::GetUnicodeString(const ATL::CComPtr& f, wstring } -bool ZRCola::DBSource::GetLanguage(const ATL::CComPtr& f, ZRCola::langid_t& lang) const +bool ZRCola::DBSource::GetLanguage(const com_obj& f, ZRCola::langid_t& lang) const { wxASSERT_MSG(f, wxT("field is empty")); - ATL::CComVariant v; + variant v; wxVERIFY(SUCCEEDED(f->get_Value(&v))); - wxCHECK(SUCCEEDED(v.ChangeType(VT_BSTR)), false); + wxCHECK(SUCCEEDED(v.change_type(VT_BSTR)), false); // Convert to lowercase. _wcslwr_l(V_BSTR(&v), m_locale); @@ -485,8 +477,8 @@ bool ZRCola::DBSource::GetLanguage(const ATL::CComPtr& f, ZRCola::lang // Parse the field. size_t n = wcsnlen(V_BSTR(&v), ::SysStringLen(V_BSTR(&v))); if (n != 3) { - ATL::CComBSTR fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname))); - _ftprintf(stderr, wxT("%s: error ZCC0080: Syntax error in \"%.*ls\" field (\"%.*ls\"). Language ID must be exactly three (3) characters long.\n"), m_filename.c_str(), fieldname.Length(), (BSTR)fieldname, n, V_BSTR(&v)); + bstr fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname))); + _ftprintf(stderr, wxT("%s: error ZCC0080: Syntax error in \"%.*ls\" field (\"%.*ls\"). Language ID must be exactly three (3) characters long.\n"), m_filename.c_str(), fieldname.length(), (BSTR)fieldname, n, V_BSTR(&v)); return false; } for (size_t i = 0;; i++) { @@ -494,8 +486,8 @@ bool ZRCola::DBSource::GetLanguage(const ATL::CComPtr& f, ZRCola::lang if (i < n) { wchar_t c = V_BSTR(&v)[i]; if ((unsigned short)c > 0x7f) { - ATL::CComBSTR fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname))); - _ftprintf(stderr, wxT("%s: error ZCC0081: Syntax error in \"%.*ls\" field (\"%.*ls\"). Language ID must contain ASCII characters only.\n"), m_filename.c_str(), fieldname.Length(), (BSTR)fieldname, n, V_BSTR(&v)); + bstr fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname))); + _ftprintf(stderr, wxT("%s: error ZCC0081: Syntax error in \"%.*ls\" field (\"%.*ls\"). Language ID must contain ASCII characters only.\n"), m_filename.c_str(), fieldname.length(), (BSTR)fieldname, n, V_BSTR(&v)); return false; } lang.data[i] = (char)c; @@ -509,20 +501,20 @@ bool ZRCola::DBSource::GetLanguage(const ATL::CComPtr& f, ZRCola::lang } -bool ZRCola::DBSource::GetChrCat(const ATL::CComPtr& f, chrcatid_t& cc) const +bool ZRCola::DBSource::GetChrCat(const com_obj& f, chrcatid_t& cc) const { wxASSERT_MSG(f, wxT("field is empty")); - ATL::CComVariant v; + variant v; wxVERIFY(SUCCEEDED(f->get_Value(&v))); if (V_VT(&v) != VT_NULL) { - wxCHECK(SUCCEEDED(v.ChangeType(VT_BSTR)), false); + wxCHECK(SUCCEEDED(v.change_type(VT_BSTR)), false); // Parse the field. size_t n = wcsnlen(V_BSTR(&v), ::SysStringLen(V_BSTR(&v))); if (n < 1 || 2 < n) { - ATL::CComBSTR fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname))); - _ftprintf(stderr, wxT("%s: error ZCC0110: Syntax error in \"%.*ls\" field (\"%.*ls\"). Character category ID must be one (1) or two (2) characters long.\n"), m_filename.c_str(), fieldname.Length(), (BSTR)fieldname, n, V_BSTR(&v)); + bstr fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname))); + _ftprintf(stderr, wxT("%s: error ZCC0110: Syntax error in \"%.*ls\" field (\"%.*ls\"). Character category ID must be one (1) or two (2) characters long.\n"), m_filename.c_str(), fieldname.length(), (BSTR)fieldname, n, V_BSTR(&v)); return false; } for (size_t i = 0;; i++) { @@ -530,8 +522,8 @@ bool ZRCola::DBSource::GetChrCat(const ATL::CComPtr& f, chrcatid_t& cc if (i < n) { wchar_t c = V_BSTR(&v)[i]; if ((unsigned short)c > 0x7f) { - ATL::CComBSTR fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname))); - _ftprintf(stderr, wxT("%s: error ZCC0111: Syntax error in \"%.*ls\" field (\"%.*ls\"). Character category ID must contain ASCII characters only.\n"), m_filename.c_str(), fieldname.Length(), (BSTR)fieldname, n, V_BSTR(&v)); + bstr fieldname; wxVERIFY(SUCCEEDED(f->get_Name(&fieldname))); + _ftprintf(stderr, wxT("%s: error ZCC0111: Syntax error in \"%.*ls\" field (\"%.*ls\"). Character category ID must contain ASCII characters only.\n"), m_filename.c_str(), fieldname.length(), (BSTR)fieldname, n, V_BSTR(&v)); return false; } cc.data[i] = (char)c; @@ -547,18 +539,18 @@ bool ZRCola::DBSource::GetChrCat(const ATL::CComPtr& f, chrcatid_t& cc } -bool ZRCola::DBSource::SelectTranslations(ATL::CComPtr &rs) const +bool ZRCola::DBSource::SelectTranslations(com_obj &rs) const { // Create a new recordset. - if (rs) rs.Release(); + rs.free(); wxCHECK(SUCCEEDED(::CoCreateInstance(CLSID_CADORecordset, NULL, CLSCTX_ALL, IID_IADORecordset, (LPVOID*)&rs)), false); // Open it. - if (FAILED(rs->Open(ATL::CComVariant( + if (FAILED(rs->Open(variant( L"SELECT [komb], [znak], [rang_znak] " L"FROM [VRS_ReplChar] " L"WHERE [rang_komb]=1 " - L"ORDER BY [znak], [rang_znak], [komb]"), ATL::CComVariant(m_db), adOpenStatic, adLockReadOnly, adCmdText))) + L"ORDER BY [znak], [rang_znak], [komb]"), variant(m_db), adOpenStatic, adLockReadOnly, adCmdText))) { _ftprintf(stderr, wxT("%s: error ZCC0040: Error loading compositions from database. Please make sure the file is ZRCola.zrc compatible.\n"), m_filename.c_str()); LogErrors(); @@ -569,46 +561,46 @@ bool ZRCola::DBSource::SelectTranslations(ATL::CComPtr &rs) const } -bool ZRCola::DBSource::GetTranslation(const ATL::CComPtr& rs, ZRCola::DBSource::translation& t) const +bool ZRCola::DBSource::GetTranslation(const com_obj& rs, ZRCola::DBSource::translation& t) const { wxASSERT_MSG(rs, wxT("recordset is empty")); - ATL::CComPtr flds; + com_obj flds; wxVERIFY(SUCCEEDED(rs->get_Fields(&flds))); { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"komb"), &f))); - wxCHECK(GetUnicodeString(f, t.str), false); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"komb"), &f))); + wxCHECK(GetUnicodeString(f, t.decomp.str), false); } { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"znak"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"znak"), &f))); wxCHECK(GetUnicodeCharacter(f, t.chr), false); } { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"rang_znak"), &f))); - wxCHECK(GetValue(f, t.rank), false); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"rang_znak"), &f))); + wxCHECK(GetValue(f, t.decomp.rank), false); } return true; } -bool ZRCola::DBSource::SelectKeySequences(ATL::CComPtr &rs) const +bool ZRCola::DBSource::SelectKeySequences(com_obj &rs) const { // Create a new recordset. - if (rs) rs.Release(); + rs.free(); wxCHECK(SUCCEEDED(::CoCreateInstance(CLSID_CADORecordset, NULL, CLSCTX_ALL, IID_IADORecordset, (LPVOID*)&rs)), false); // Open it. - if (FAILED(rs->Open(ATL::CComVariant( + if (FAILED(rs->Open(variant( L"SELECT DISTINCT [VRS_KeyCodes].[Znak], [VRS_CharGroup].[CharGroup], IIF([VRS_CharGroup].[Arg1] IS NOT NULL, [VRS_CharGroup].[Arg1], 0)+IIF([VRS_CharGroup].[Arg2] IS NOT NULL, [VRS_CharGroup].[Arg2], 0)+IIF([VRS_CharGroup].[Arg3] IS NOT NULL, [VRS_CharGroup].[Arg3], 0) AS [Modifiers], IIF([VRS_CharGroup].[Arg4] IS NOT NULL, [VRS_CharGroup].[Arg4], 0) AS [KeyCodePre], [VRS_KeyCodes].[KeyCode], [VRS_KeyCodes].[Shift] " L"FROM [VRS_KeyCodes] LEFT JOIN [VRS_CharGroup] ON [VRS_CharGroup].[CharGroup]=[VRS_KeyCodes].[CharGroup] " - L"ORDER BY [VRS_CharGroup].[CharGroup], [VRS_KeyCodes].[KeyCode], [VRS_KeyCodes].[Shift], [VRS_KeyCodes].[Znak]"), ATL::CComVariant(m_db), adOpenStatic, adLockReadOnly, adCmdText))) + L"ORDER BY [VRS_CharGroup].[CharGroup], [VRS_KeyCodes].[KeyCode], [VRS_KeyCodes].[Shift], [VRS_KeyCodes].[Znak]"), variant(m_db), adOpenStatic, adLockReadOnly, adCmdText))) { _ftprintf(stderr, wxT("%s: error ZCC0050: Error loading key sequences from database. Please make sure the file is ZRCola.zrc compatible.\n"), m_filename.c_str()); LogErrors(); @@ -619,44 +611,44 @@ bool ZRCola::DBSource::SelectKeySequences(ATL::CComPtr &rs) const } -bool ZRCola::DBSource::GetKeySequence(const ATL::CComPtr& rs, ZRCola::DBSource::keyseq& ks) const +bool ZRCola::DBSource::GetKeySequence(const com_obj& rs, ZRCola::DBSource::keyseq& ks) const { wxASSERT_MSG(rs, wxT("recordset is empty")); - ATL::CComPtr flds; + com_obj flds; wxVERIFY(SUCCEEDED(rs->get_Fields(&flds))); { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Znak"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"Znak"), &f))); wxCHECK(GetUnicodeCharacter(f, ks.chr), false); } int modifiers; { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Modifiers"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"Modifiers"), &f))); wxCHECK(GetValue(f, modifiers), false); } int keycode1; { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"KeyCodePre"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"KeyCodePre"), &f))); wxCHECK(GetValue(f, keycode1), false); } int keycode; { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"KeyCode"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"KeyCode"), &f))); wxCHECK(GetValue(f, keycode), false); } bool shift; { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Shift"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"Shift"), &f))); wxCHECK(GetValue(f, shift), false); } @@ -686,17 +678,17 @@ bool ZRCola::DBSource::GetKeySequence(const ATL::CComPtr& rs, ZRCo } -bool ZRCola::DBSource::SelectLanguages(ATL::CComPtr &rs) const +bool ZRCola::DBSource::SelectLanguages(com_obj &rs) const { // Create a new recordset. - if (rs) rs.Release(); + rs.free(); wxCHECK(SUCCEEDED(::CoCreateInstance(CLSID_CADORecordset, NULL, CLSCTX_ALL, IID_IADORecordset, (LPVOID*)&rs)), false); // Open it. - if (FAILED(rs->Open(ATL::CComVariant( + if (FAILED(rs->Open(variant( L"SELECT DISTINCT [entCode], [Jezik_En] " L"FROM [VRS_Jezik] " - L"ORDER BY [entCode], [Jezik_En]"), ATL::CComVariant(m_db), adOpenStatic, adLockReadOnly, adCmdText))) + L"ORDER BY [entCode], [Jezik_En]"), variant(m_db), adOpenStatic, adLockReadOnly, adCmdText))) { _ftprintf(stderr, wxT("%s: error ZCC0060: Error loading languages from database. Please make sure the file is ZRCola.zrc compatible.\n"), m_filename.c_str()); LogErrors(); @@ -707,22 +699,22 @@ bool ZRCola::DBSource::SelectLanguages(ATL::CComPtr &rs) const } -bool ZRCola::DBSource::GetLanguage(const ATL::CComPtr& rs, ZRCola::DBSource::language& lang) const +bool ZRCola::DBSource::GetLanguage(const com_obj& rs, ZRCola::DBSource::language& lang) const { wxASSERT_MSG(rs, wxT("recordset is empty")); - ATL::CComPtr flds; + com_obj flds; wxVERIFY(SUCCEEDED(rs->get_Fields(&flds))); { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"entCode"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"entCode"), &f))); wxCHECK(GetLanguage(f, lang.id), false); } { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Jezik_En"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"Jezik_En"), &f))); wxCHECK(GetValue(f, lang.name), false); } @@ -730,17 +722,17 @@ bool ZRCola::DBSource::GetLanguage(const ATL::CComPtr& rs, ZRCola: } -bool ZRCola::DBSource::SelectLanguageCharacters(ATL::CComPtr &rs) const +bool ZRCola::DBSource::SelectLanguageCharacters(com_obj &rs) const { // Create a new recordset. - if (rs) rs.Release(); + rs.free(); wxCHECK(SUCCEEDED(::CoCreateInstance(CLSID_CADORecordset, NULL, CLSCTX_ALL, IID_IADORecordset, (LPVOID*)&rs)), false); // Open it. - if (FAILED(rs->Open(ATL::CComVariant( + if (FAILED(rs->Open(variant( L"SELECT DISTINCT [znak], [lang] " L"FROM [VRS_CharLocal] " - L"ORDER BY [znak], [lang]"), ATL::CComVariant(m_db), adOpenStatic, adLockReadOnly, adCmdText))) + L"ORDER BY [znak], [lang]"), variant(m_db), adOpenStatic, adLockReadOnly, adCmdText))) { _ftprintf(stderr, wxT("%s: error ZCC0090: Error loading language characters from database. Please make sure the file is ZRCola.zrc compatible.\n"), m_filename.c_str()); LogErrors(); @@ -751,22 +743,22 @@ bool ZRCola::DBSource::SelectLanguageCharacters(ATL::CComPtr &rs) } -bool ZRCola::DBSource::GetLanguageCharacter(const ATL::CComPtr& rs, ZRCola::DBSource::langchar& lc) const +bool ZRCola::DBSource::GetLanguageCharacter(const com_obj& rs, ZRCola::DBSource::langchar& lc) const { wxASSERT_MSG(rs, wxT("recordset is empty")); - ATL::CComPtr flds; + com_obj flds; wxVERIFY(SUCCEEDED(rs->get_Fields(&flds))); { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"znak"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"znak"), &f))); wxCHECK(GetUnicodeCharacter(f, lc.chr), false); } { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"lang"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"lang"), &f))); wxCHECK(GetLanguage(f, lc.lang), false); } @@ -774,17 +766,17 @@ bool ZRCola::DBSource::GetLanguageCharacter(const ATL::CComPtr& rs } -bool ZRCola::DBSource::SelectCharacterGroups(ATL::CComPtr& rs) const +bool ZRCola::DBSource::SelectCharacterGroups(com_obj& rs) const { // Create a new recordset. - if (rs) rs.Release(); + rs.free(); wxCHECK(SUCCEEDED(::CoCreateInstance(CLSID_CADORecordset, NULL, CLSCTX_ALL, IID_IADORecordset, (LPVOID*)&rs)), false); // Open it. - if (FAILED(rs->Open(ATL::CComVariant( + if (FAILED(rs->Open(variant( L"SELECT DISTINCT [id], [Skupina], [opis_en], [Rang] " L"FROM [VRS_SkupinaZnakov] " - L"ORDER BY [Rang], [opis_en]"), ATL::CComVariant(m_db), adOpenStatic, adLockReadOnly, adCmdText))) + L"ORDER BY [Rang], [opis_en]"), variant(m_db), adOpenStatic, adLockReadOnly, adCmdText))) { _ftprintf(stderr, wxT("%s: error ZCC0090: Error loading character groups from database. Please make sure the file is ZRCola.zrc compatible.\n"), m_filename.c_str()); LogErrors(); @@ -795,46 +787,46 @@ bool ZRCola::DBSource::SelectCharacterGroups(ATL::CComPtr& rs) con } -bool ZRCola::DBSource::GetCharacterGroup(const ATL::CComPtr& rs, chrgrp& cg) const +bool ZRCola::DBSource::GetCharacterGroup(const com_obj& rs, chrgrp& cg) const { wxASSERT_MSG(rs, wxT("recordset is empty")); - ATL::CComPtr flds; + com_obj flds; wxVERIFY(SUCCEEDED(rs->get_Fields(&flds))); wstring id; { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"id"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"id"), &f))); wxCHECK(GetValue(f, cg.id), false); } { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Skupina"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"Skupina"), &f))); wxCHECK(GetValue(f, id), false); } { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Rang"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"Rang"), &f))); wxCHECK(GetValue(f, cg.rank), false); } { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"opis_en"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"opis_en"), &f))); wxCHECK(GetValue(f, cg.name), false); } // Read character list from database. - wxVERIFY(SUCCEEDED(m_pCharacterGroup1->put_Value(ATL::CComVariant(id.c_str())))); - ATL::CComPtr rs_chars; + wxVERIFY(SUCCEEDED(m_pCharacterGroup1->put_Value(variant(id.c_str())))); + com_obj rs_chars; wxVERIFY(SUCCEEDED(::CoCreateInstance(CLSID_CADORecordset, NULL, CLSCTX_ALL, IID_IADORecordset, (LPVOID*)&rs_chars))); wxVERIFY(SUCCEEDED(rs_chars->put_CursorLocation(adUseClient))); wxVERIFY(SUCCEEDED(rs_chars->put_CursorType(adOpenForwardOnly))); wxVERIFY(SUCCEEDED(rs_chars->put_LockType(adLockReadOnly))); - if (FAILED(rs_chars->Open(ATL::CComVariant(m_comCharacterGroup), ATL::CComVariant(DISP_E_PARAMNOTFOUND, VT_ERROR)))) { + if (FAILED(rs_chars->Open(variant(m_comCharacterGroup), variant(DISP_E_PARAMNOTFOUND, VT_ERROR)))) { _ftprintf(stderr, wxT("%s: error ZCC0100: Error loading character group characters from database. Please make sure the file is ZRCola.zrc compatible.\n"), m_filename.c_str()); LogErrors(); return false; @@ -842,11 +834,11 @@ bool ZRCola::DBSource::GetCharacterGroup(const ATL::CComPtr& rs, c { cg.chars.clear(); - ATL::CComPtr flds; + com_obj flds; wxVERIFY(SUCCEEDED(rs_chars->get_Fields(&flds))); - ATL::CComPtr f_char, f_show; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Znak" ), &f_char))); - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"pogost"), &f_show))); + com_obj f_char, f_show; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"Znak" ), &f_char))); + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"pogost"), &f_show))); for (VARIANT_BOOL eof = VARIANT_TRUE; SUCCEEDED(rs_chars->get_EOF(&eof)) && !eof; rs_chars->MoveNext()) { wchar_t c; wxCHECK(GetUnicodeCharacter(f_char, c), false); @@ -865,20 +857,20 @@ bool ZRCola::DBSource::GetCharacterGroup(const ATL::CComPtr& rs, c } -bool ZRCola::DBSource::SelectCharacters(ATL::CComPtr& rs) const +bool ZRCola::DBSource::SelectCharacters(com_obj& rs) const { // Create a new recordset. - if (rs) rs.Release(); + rs.free(); wxCHECK(SUCCEEDED(::CoCreateInstance(CLSID_CADORecordset, NULL, CLSCTX_ALL, IID_IADORecordset, (LPVOID*)&rs)), false); // Open it. - if (FAILED(rs->Open(ATL::CComVariant( + if (FAILED(rs->Open(variant( L"SELECT DISTINCT [znak], [opis_en], [klj_bes_en], [kat], [znak_v], [znak_m] " L"FROM [VRS_CharList] " L"WHERE " L"[aktiven]=1 AND " // Active characters only L"[kat]<>'g' " // Ignore "Other, Control" category! - L"ORDER BY [znak]"), ATL::CComVariant(m_db), adOpenStatic, adLockReadOnly, adCmdText))) + L"ORDER BY [znak]"), variant(m_db), adOpenStatic, adLockReadOnly, adCmdText))) { _ftprintf(stderr, wxT("%s: error ZCC0120: Error loading characters from database. Please make sure the file is ZRCola.zrc compatible.\n"), m_filename.c_str()); LogErrors(); @@ -889,55 +881,55 @@ bool ZRCola::DBSource::SelectCharacters(ATL::CComPtr& rs) const } -bool ZRCola::DBSource::GetCharacter(const ATL::CComPtr& rs, character& chr) const +bool ZRCola::DBSource::GetCharacter(const com_obj& rs, character& chr) const { wxASSERT_MSG(rs, wxT("recordset is empty")); - ATL::CComPtr flds; + com_obj flds; wxVERIFY(SUCCEEDED(rs->get_Fields(&flds))); wchar_t c; chr.rel.clear(); { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"znak"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"znak"), &f))); wxCHECK(GetUnicodeCharacter(f, chr.chr), false); } { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"znak_v"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"znak_v"), &f))); wxCHECK(GetUnicodeCharacter(f, c), false); if (c && c != chr.chr) chr.rel += c; } { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"znak_m"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"znak_m"), &f))); wxCHECK(GetUnicodeCharacter(f, c), false); if (c && c != chr.chr) chr.rel += c; } { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"opis_en"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"opis_en"), &f))); wxCHECK(GetValue(f, chr.desc), false); } ZRCola::DBSource::character_desc_idx::parse_keywords(chr.desc.c_str(), chr.terms); wstring keywords; { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"klj_bes_en"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"klj_bes_en"), &f))); wxCHECK(GetValue(f, keywords), false); } ZRCola::DBSource::character_desc_idx::parse_keywords(keywords.c_str(), chr.terms); { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"kat"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"kat"), &f))); wxCHECK(GetChrCat(f, chr.cat), false); } @@ -945,18 +937,18 @@ bool ZRCola::DBSource::GetCharacter(const ATL::CComPtr& rs, charac } -bool ZRCola::DBSource::SelectCharacterCategories(ATL::CComPtr& rs) const +bool ZRCola::DBSource::SelectCharacterCategories(com_obj& rs) const { // Create a new recordset. - if (rs) rs.Release(); + rs.free(); wxCHECK(SUCCEEDED(::CoCreateInstance(CLSID_CADORecordset, NULL, CLSCTX_ALL, IID_IADORecordset, (LPVOID*)&rs)), false); // Open it. - if (FAILED(rs->Open(ATL::CComVariant( + if (FAILED(rs->Open(variant( L"SELECT DISTINCT [kat], [opis_en], [Rang] " L"FROM [VRS_CharCategory] " L"WHERE [kat]<>'g' " // Ignore "Other, Control" category! - L"ORDER BY [Rang], [opis_en]"), ATL::CComVariant(m_db), adOpenStatic, adLockReadOnly, adCmdText))) + L"ORDER BY [Rang], [opis_en]"), variant(m_db), adOpenStatic, adLockReadOnly, adCmdText))) { _ftprintf(stderr, wxT("%s: error ZCC0130: Error loading character categories from database. Please make sure the file is ZRCola.zrc compatible.\n"), m_filename.c_str()); LogErrors(); @@ -967,29 +959,29 @@ bool ZRCola::DBSource::SelectCharacterCategories(ATL::CComPtr& rs) } -bool ZRCola::DBSource::GetCharacterCategory(const ATL::CComPtr& rs, chrcat& cc) const +bool ZRCola::DBSource::GetCharacterCategory(const com_obj& rs, chrcat& cc) const { wxASSERT_MSG(rs, wxT("recordset is empty")); - ATL::CComPtr flds; + com_obj flds; wxVERIFY(SUCCEEDED(rs->get_Fields(&flds))); wstring id; { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"kat"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"kat"), &f))); wxCHECK(GetChrCat(f, cc.id), false); } { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"Rang"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"Rang"), &f))); wxCHECK(GetValue(f, cc.rank), false); } { - ATL::CComPtr f; - wxVERIFY(SUCCEEDED(flds->get_Item(ATL::CComVariant(L"opis_en"), &f))); + com_obj f; + wxVERIFY(SUCCEEDED(flds->get_Item(variant(L"opis_en"), &f))); wxCHECK(GetValue(f, cc.name), false); } diff --git a/ZRColaCompile/dbsource.h b/ZRColaCompile/dbsource.h index dd0e2b7..337565b 100644 --- a/ZRColaCompile/dbsource.h +++ b/ZRColaCompile/dbsource.h @@ -22,7 +22,9 @@ #include #include -#include +#include +#include + #include #include #include @@ -38,14 +40,46 @@ namespace ZRCola { class DBSource { public: + /// + /// Character sequence + /// + class charseq { + public: + int rank; ///< Sequence rank + std::wstring str; ///< Sequence string + + inline charseq() + { + } + + inline charseq(_In_ int _rank, _In_z_ const wchar_t *_str) : + rank(_rank), + str (_str) + { + } + + /// + /// Functor to compare two sequences by `rank`, and `str` members respectively + /// + struct less_rank_str { + inline bool operator()(_In_ const charseq& a, _In_ const charseq& b) const + { + if (a.rank < b.rank) return true; + else if (a.rank > b.rank) return false; + else if (a.str < b.str ) return true; + else return false; + } + }; + }; + + /// /// Translation /// class translation { public: wchar_t chr; ///< Composed character - std::wstring str; ///< Decomposed string - int rank; ///< Decomposition rank + charseq decomp; ///< Decomposed sequence }; @@ -171,20 +205,15 @@ namespace ZRCola { void build_related(); protected: - class build_related_worker : public std::unique_ptr > + class build_related_worker : public winstd::win_handle { - public: - typedef std::unique_ptr > thread_type; - public: build_related_worker(_In_ const character_bank *cb, _In_ size_type from, _In_ size_type to); - virtual ~build_related_worker(); inline void join() { - HANDLE h = get(); - if (h) - WaitForSingleObject(h, INFINITE); + if (m_h) + WaitForSingleObject(m_h, INFINITE); } private: @@ -201,7 +230,7 @@ namespace ZRCola { protected: const character_bank *m_cb; size_type m_from, m_to; - HANDLE m_heap; + winstd::heap m_heap; }; protected: @@ -314,7 +343,7 @@ namespace ZRCola { /// - true when at end /// - false otherwise /// - static inline bool IsEOF(const ATL::CComPtr& rs) + static inline bool IsEOF(const winstd::com_obj& rs) { VARIANT_BOOL eof = VARIANT_TRUE; return FAILED(rs->get_EOF(&eof)) || eof ? true : false; @@ -328,7 +357,7 @@ namespace ZRCola { /// /// \returns Number of records /// - static inline size_t GetRecordsetCount(const ATL::CComPtr& rs) + static inline size_t GetRecordsetCount(const winstd::com_obj& rs) { ADO_LONGPTR count; return SUCCEEDED(rs->get_RecordCount(&count)) ? count : (size_t)-1; @@ -358,7 +387,7 @@ namespace ZRCola { /// - true when successful /// - false otherwise /// - bool GetValue(const ATL::CComPtr& f, bool& val) const; + bool GetValue(const winstd::com_obj& f, bool& val) const; /// @@ -371,7 +400,7 @@ namespace ZRCola { /// - true when successful /// - false otherwise /// - bool GetValue(const ATL::CComPtr& f, int& val) const; + bool GetValue(const winstd::com_obj& f, int& val) const; /// @@ -384,7 +413,7 @@ namespace ZRCola { /// - true when successful /// - false otherwise /// - bool GetValue(const ATL::CComPtr& f, std::wstring& val) const; + bool GetValue(const winstd::com_obj& f, std::wstring& val) const; /// @@ -397,7 +426,7 @@ namespace ZRCola { /// - true when successful /// - false otherwise /// - bool GetUnicodeCharacter(const ATL::CComPtr& f, wchar_t& chr) const; + bool GetUnicodeCharacter(const winstd::com_obj& f, wchar_t& chr) const; /// @@ -410,7 +439,7 @@ namespace ZRCola { /// - true when successful /// - false otherwise /// - bool GetUnicodeString(const ATL::CComPtr& f, std::wstring& str) const; + bool GetUnicodeString(const winstd::com_obj& f, std::wstring& str) const; /// @@ -423,7 +452,7 @@ namespace ZRCola { /// - true when successful /// - false otherwise /// - bool GetLanguage(const ATL::CComPtr& f, langid_t& lang) const; + bool GetLanguage(const winstd::com_obj& f, langid_t& lang) const; /// @@ -436,7 +465,7 @@ namespace ZRCola { /// - true when successful /// - false otherwise /// - bool GetChrCat(const ATL::CComPtr& f, chrcatid_t& cc) const; + bool GetChrCat(const winstd::com_obj& f, chrcatid_t& cc) const; /// @@ -448,7 +477,7 @@ namespace ZRCola { /// - true when query succeeds /// - false otherwise /// - bool SelectTranslations(ATL::CComPtr& rs) const; + bool SelectTranslations(winstd::com_obj& rs) const; /// @@ -461,7 +490,7 @@ namespace ZRCola { /// - true when succeeded /// - false otherwise /// - bool GetTranslation(const ATL::CComPtr& rs, translation& t) const; + bool GetTranslation(const winstd::com_obj& rs, translation& t) const; /// @@ -473,7 +502,7 @@ namespace ZRCola { /// - true when query succeeds /// - false otherwise /// - bool SelectKeySequences(ATL::CComPtr& rs) const; + bool SelectKeySequences(winstd::com_obj& rs) const; /// @@ -486,7 +515,7 @@ namespace ZRCola { /// - true when succeeded /// - false otherwise /// - bool GetKeySequence(const ATL::CComPtr& rs, keyseq& ks) const; + bool GetKeySequence(const winstd::com_obj& rs, keyseq& ks) const; /// @@ -498,7 +527,7 @@ namespace ZRCola { /// - true when query succeeds /// - false otherwise /// - bool SelectLanguages(ATL::CComPtr& rs) const; + bool SelectLanguages(winstd::com_obj& rs) const; /// @@ -511,7 +540,7 @@ namespace ZRCola { /// - true when succeeded /// - false otherwise /// - bool GetLanguage(const ATL::CComPtr& rs, language& lang) const; + bool GetLanguage(const winstd::com_obj& rs, language& lang) const; /// @@ -523,7 +552,7 @@ namespace ZRCola { /// - true when query succeeds /// - false otherwise /// - bool SelectLanguageCharacters(ATL::CComPtr& rs) const; + bool SelectLanguageCharacters(winstd::com_obj& rs) const; /// @@ -536,7 +565,7 @@ namespace ZRCola { /// - true when succeeded /// - false otherwise /// - bool GetLanguageCharacter(const ATL::CComPtr& rs, langchar& lc) const; + bool GetLanguageCharacter(const winstd::com_obj& rs, langchar& lc) const; /// @@ -548,7 +577,7 @@ namespace ZRCola { /// - true when query succeeds /// - false otherwise /// - bool SelectCharacterGroups(ATL::CComPtr& rs) const; + bool SelectCharacterGroups(winstd::com_obj& rs) const; /// @@ -561,7 +590,7 @@ namespace ZRCola { /// - true when succeeded /// - false otherwise /// - bool GetCharacterGroup(const ATL::CComPtr& rs, chrgrp& cg) const; + bool GetCharacterGroup(const winstd::com_obj& rs, chrgrp& cg) const; /// /// Returns characters @@ -572,7 +601,7 @@ namespace ZRCola { /// - true when query succeeds /// - false otherwise /// - bool SelectCharacters(ATL::CComPtr& rs) const; + bool SelectCharacters(winstd::com_obj& rs) const; /// @@ -585,7 +614,7 @@ namespace ZRCola { /// - true when succeeded /// - false otherwise /// - bool GetCharacter(const ATL::CComPtr& rs, character& chr) const; + bool GetCharacter(const winstd::com_obj& rs, character& chr) const; /// /// Returns character categories @@ -596,7 +625,7 @@ namespace ZRCola { /// - true when query succeeds /// - false otherwise /// - bool SelectCharacterCategories(ATL::CComPtr& rs) const; + bool SelectCharacterCategories(winstd::com_obj& rs) const; /// @@ -609,14 +638,14 @@ namespace ZRCola { /// - true when succeeded /// - false otherwise /// - bool GetCharacterCategory(const ATL::CComPtr& rs, chrcat& cc) const; + bool GetCharacterCategory(const winstd::com_obj& rs, chrcat& cc) const; protected: std::basic_string m_filename; ///< Database filename - ATL::CComPtr m_db; ///< Database + winstd::com_obj m_db; ///< Database _locale_t m_locale; ///< Database locale - ATL::CComPtr m_comCharacterGroup; ///< ADO Command for GetCharacterGroup subquery - ATL::CComPtr m_pCharacterGroup1; ///< \c m_comCharacterGroup parameter + winstd::com_obj m_comCharacterGroup; ///< ADO Command for GetCharacterGroup subquery + winstd::com_obj m_pCharacterGroup1; ///< \c m_comCharacterGroup parameter }; }; diff --git a/ZRColaCompile/main.cpp b/ZRColaCompile/main.cpp index 9c01d2d..086b3cf 100644 --- a/ZRColaCompile/main.cpp +++ b/ZRColaCompile/main.cpp @@ -21,6 +21,7 @@ using namespace std; using namespace stdex; +using namespace winstd; /// @@ -103,7 +104,7 @@ int _tmain(int argc, _TCHAR *argv[]) { // Get translations. - ATL::CComPtr rs; + com_obj rs; if (src.SelectTranslations(rs)) { size_t count = src.GetRecordsetCount(rs); if (count < 0xffffffff) { // 4G check (-1 is reserved for error condition) @@ -122,13 +123,13 @@ int _tmain(int argc, _TCHAR *argv[]) // Add translation to index and data. unsigned __int32 idx = db.data.size(); db.data.push_back(trans.chr); - wxASSERT_MSG((int)0xffff8000 <= trans.rank && trans.rank <= (int)0x00007fff, wxT("transformation rank out of bounds")); - db.data.push_back((unsigned __int16)trans.rank); - wstring::size_type n = trans.str.length(); + wxASSERT_MSG((int)0xffff8000 <= trans.decomp.rank && trans.decomp.rank <= (int)0x00007fff, wxT("transformation rank out of bounds")); + db.data.push_back((unsigned __int16)trans.decomp.rank); + wstring::size_type n = trans.decomp.str.length(); wxASSERT_MSG(n <= 0xffff, wxT("transformation string too long")); db.data.push_back((unsigned __int16)n); for (wstring::size_type i = 0; i < n; i++) - db.data.push_back(trans.str[i]); + db.data.push_back(trans.decomp.str[i]); db.idxComp .push_back(idx); db.idxDecomp.push_back(idx); } else @@ -153,7 +154,7 @@ int _tmain(int argc, _TCHAR *argv[]) { // Get key sequences. - ATL::CComPtr rs; + com_obj rs; if (src.SelectKeySequences(rs)) { size_t count = src.GetRecordsetCount(rs); if (count < 0xffffffff) { // 4G check (-1 is reserved for error condition) @@ -220,7 +221,7 @@ int _tmain(int argc, _TCHAR *argv[]) { // Get languages. - ATL::CComPtr rs; + com_obj rs; if (src.SelectLanguages(rs)) { size_t count = src.GetRecordsetCount(rs); if (count < 0xffffffff) { // 4G check (-1 is reserved for error condition) @@ -269,7 +270,7 @@ int _tmain(int argc, _TCHAR *argv[]) { // Get language characters. - ATL::CComPtr rs; + com_obj rs; if (src.SelectLanguageCharacters(rs)) { size_t count = src.GetRecordsetCount(rs); if (count < 0xffffffff) { // 4G check (-1 is reserved for error condition) @@ -320,7 +321,7 @@ int _tmain(int argc, _TCHAR *argv[]) { // Get character groups. - ATL::CComPtr rs; + com_obj rs; if (src.SelectCharacterGroups(rs)) { size_t count = src.GetRecordsetCount(rs); if (count < 0xffffffff) { // 4G check (-1 is reserved for error condition) @@ -385,7 +386,7 @@ int _tmain(int argc, _TCHAR *argv[]) { // Get characters. - ATL::CComPtr rs; + com_obj rs; if (src.SelectCharacters(rs)) { size_t count = src.GetRecordsetCount(rs); if (count < 0xffffffff) { // 4G check (-1 is reserved for error condition) @@ -464,7 +465,7 @@ int _tmain(int argc, _TCHAR *argv[]) { // Get character categories. - ATL::CComPtr rs; + com_obj rs; if (src.SelectCharacterCategories(rs)) { size_t count = src.GetRecordsetCount(rs); if (count < 0xffffffff) { // 4G check (-1 is reserved for error condition) diff --git a/ZRColaCompile/stdafx.h b/ZRColaCompile/stdafx.h index 58d3486..27aa835 100644 --- a/ZRColaCompile/stdafx.h +++ b/ZRColaCompile/stdafx.h @@ -19,8 +19,6 @@ #pragma once -#define _ATL_NO_AUTOMATIC_NAMESPACE - #include "../include/zrcola.h" #include "dbsource.h" @@ -39,11 +37,13 @@ #include +#include + #include // GUID helper to prevent LNK2001 errors (unresolved external symbol IID_IADO...) #include #include -#include +#include #include #include diff --git a/ZRColaUtils.sln b/ZRColaUtils.sln index ad2f098..19cb034 100644 --- a/ZRColaUtils.sln +++ b/ZRColaUtils.sln @@ -28,6 +28,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZRColaInstallEn", "ZRColaIn EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZRColaInstallRu", "ZRColaInstall\ZRColaInstallRu.vcxproj", "{2551B561-5E5B-497E-AE01-11519F91EF19}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinStd", "lib\WinStd\build\WinStd.vcxproj", "{47399D91-7EB9-41DE-B521-514BA5DB0C43}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -98,6 +100,14 @@ Global {2551B561-5E5B-497E-AE01-11519F91EF19}.Release|Win32.ActiveCfg = Release|Win32 {2551B561-5E5B-497E-AE01-11519F91EF19}.Release|Win32.Build.0 = Release|Win32 {2551B561-5E5B-497E-AE01-11519F91EF19}.Release|x64.ActiveCfg = Release|Win32 + {47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|Win32.ActiveCfg = Debug|Win32 + {47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|Win32.Build.0 = Debug|Win32 + {47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|x64.ActiveCfg = Debug|x64 + {47399D91-7EB9-41DE-B521-514BA5DB0C43}.Debug|x64.Build.0 = Debug|x64 + {47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|Win32.ActiveCfg = Release|Win32 + {47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|Win32.Build.0 = Release|Win32 + {47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|x64.ActiveCfg = Release|x64 + {47399D91-7EB9-41DE-B521-514BA5DB0C43}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -107,6 +117,7 @@ Global {A3A36689-AC35-4026-93DA-A3BA0C0E767C} = {A7D28E0C-BB96-444D-AAB0-F22A6483FE5F} {518777CC-0A59-4415-A12A-82751ED75343} = {A7D28E0C-BB96-444D-AAB0-F22A6483FE5F} {C0A84BD2-3870-4CD6-B281-0AB322E3C579} = {A7D28E0C-BB96-444D-AAB0-F22A6483FE5F} + {47399D91-7EB9-41DE-B521-514BA5DB0C43} = {A7D28E0C-BB96-444D-AAB0-F22A6483FE5F} {0C2C89C2-C96B-41B6-AA99-7E7741E20F3A} = {7F5D45A3-B3D2-4B1D-B258-9B83395786E6} {620D6AC0-C8FF-4185-B820-DB1503ACB95C} = {7F5D45A3-B3D2-4B1D-B258-9B83395786E6} {5BD95B95-38B0-4C7D-9471-F99CA1203DF4} = {7F5D45A3-B3D2-4B1D-B258-9B83395786E6} diff --git a/lib/WinStd b/lib/WinStd index 244b00e..7b1863d 160000 --- a/lib/WinStd +++ b/lib/WinStd @@ -1 +1 @@ -Subproject commit 244b00ea779895884570b401a59f3447ad73bb24 +Subproject commit 7b1863d8b2734e77796b0526f1cc6f58a8ad0b54 diff --git a/lib/stdex b/lib/stdex index b091bc9..d38be14 160000 --- a/lib/stdex +++ b/lib/stdex @@ -1 +1 @@ -Subproject commit b091bc90bc7445fc117d5818ffd9b5314721fc4c +Subproject commit d38be14633459ff4bf24722094f9b4af17e32a7f