From 52400632c9c1474c03066d2f3accf158f90e9117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Laban?= Date: Thu, 16 May 2019 10:03:12 -0400 Subject: [PATCH 1/2] Marshal history tokens --- src/CalcManager/CCalcManager.cpp | 289 ++++++++++++------ src/CalcManager/CCalcManager.h | 31 +- .../CalcManager/CalculatorManager.Interop.cs | 56 +++- .../CalcManager/CalculatorManager.cs | 62 +++- .../Common/CalculatorDisplay.cs | 2 +- .../ViewModels/HistoryViewModel.cs | 2 +- 6 files changed, 319 insertions(+), 123 deletions(-) diff --git a/src/CalcManager/CCalcManager.cpp b/src/CalcManager/CCalcManager.cpp index 7ffb32af..d9ece638 100644 --- a/src/CalcManager/CCalcManager.cpp +++ b/src/CalcManager/CCalcManager.cpp @@ -9,118 +9,138 @@ #include #include #include +#include +#include + +#define DBGPRINT(kwszDebugFormatString, ...) _DBGPRINT(__FUNCTIONW__, __LINE__, kwszDebugFormatString, __VA_ARGS__) + +VOID _DBGPRINT(LPCWSTR kwszFunction, INT iLineNumber, LPCWSTR kwszDebugFormatString, ...) +{ + INT cbFormatString = 0; + va_list args; + PWCHAR wszDebugString = NULL; + size_t st_Offset = 0; + + va_start(args, kwszDebugFormatString); + + cbFormatString = _scwprintf(L"[%s:%d] ", kwszFunction, iLineNumber) * sizeof(WCHAR); + cbFormatString += _vscwprintf(kwszDebugFormatString, args) * sizeof(WCHAR) + 2; + + /* Depending on the size of the format string, allocate space on the stack or the heap. */ + wszDebugString = (PWCHAR)_malloca(cbFormatString); + + /* Populate the buffer with the contents of the format string. */ + StringCbPrintfW(wszDebugString, cbFormatString, L"[%s:%d] ", kwszFunction, iLineNumber); + StringCbLengthW(wszDebugString, cbFormatString, &st_Offset); + StringCbVPrintfW(&wszDebugString[st_Offset / sizeof(WCHAR)], cbFormatString - st_Offset, kwszDebugFormatString, args); + + OutputDebugStringW(wszDebugString); + + _freea(wszDebugString); + va_end(args); +} using namespace CalculationManager; -class CalcDisplay : public ICalcDisplay { - +class CalcDisplay : public ICalcDisplay +{ private: - CalculatorManager_CreateParams _params; + CalculatorManager_CreateParams _params; public: - CalcDisplay(CalculatorManager_CreateParams params) { - _params = params; - } + CalcDisplay(CalculatorManager_CreateParams params) + { + _params = params; + } - // Inherited via ICalcDisplay - virtual void SetPrimaryDisplay(const std::wstring& pszText, bool isError) override - { - std::wstring_convert> convert; - auto str = convert.to_bytes(pszText); + // Inherited via ICalcDisplay + virtual void SetPrimaryDisplay(const std::wstring& pszText, bool isError) override + { + std::wstring_convert> convert; + auto str = convert.to_bytes(pszText); - _params.SetPrimaryDisplay(_params.CalculatorState, str.data(), isError); - } + _params.SetPrimaryDisplay(_params.CalculatorState, str.data(), isError); + } - virtual void SetIsInError(bool isInError) override - { - _params.SetIsInError(_params.CalculatorState, isInError); - } + virtual void SetIsInError(bool isInError) override + { + _params.SetIsInError(_params.CalculatorState, isInError); + } - virtual void SetExpressionDisplay( - std::shared_ptr>> const& /*tokens*/, - std::shared_ptr>> const& /*commands*/) override - { - } + virtual void SetExpressionDisplay( + std::shared_ptr>> const& /*tokens*/, + std::shared_ptr>> const& /*commands*/) override + { + } - virtual void SetParenthesisNumber(unsigned int count) override - { - _params.SetParenthesisNumber(_params.CalculatorState, count); - } + virtual void SetParenthesisNumber(unsigned int count) override + { + _params.SetParenthesisNumber(_params.CalculatorState, count); + } - virtual void OnNoRightParenAdded() override - { - _params.OnNoRightParenAdded(_params.CalculatorState); - } + virtual void OnNoRightParenAdded() override + { + _params.OnNoRightParenAdded(_params.CalculatorState); + } - virtual void MaxDigitsReached() override - { - _params.MaxDigitsReached(_params.CalculatorState); - } + virtual void MaxDigitsReached() override + { + _params.MaxDigitsReached(_params.CalculatorState); + } - virtual void BinaryOperatorReceived() override - { - _params.BinaryOperatorReceived(_params.CalculatorState); - } + virtual void BinaryOperatorReceived() override + { + _params.BinaryOperatorReceived(_params.CalculatorState); + } - virtual void OnHistoryItemAdded(unsigned int addedItemIndex) override - { - _params.OnHistoryItemAdded(_params.CalculatorState, addedItemIndex); - } + virtual void OnHistoryItemAdded(unsigned int addedItemIndex) override + { + _params.OnHistoryItemAdded(_params.CalculatorState, addedItemIndex); + } - virtual void SetMemorizedNumbers(const std::vector& memorizedNumbers) override - { - std::wstring_convert> convert; + virtual void SetMemorizedNumbers(const std::vector& memorizedNumbers) override + { + auto numbers = new const wchar_t* [memorizedNumbers.size()] {}; - const char** numbers = new const char* [memorizedNumbers.size()]; + for (size_t i = 0; i < memorizedNumbers.size(); i++) + { + auto str = memorizedNumbers[i]; + auto pData = new wchar_t[str.size() + 1]{}; + str.copy(pData, str.size(), 0); + numbers[i] = pData; + } - for (size_t i = 0; i < memorizedNumbers.size(); i++) - { - auto str = convert.to_bytes(memorizedNumbers[i]); - auto pData = new char[str.size() + 1]; + _params.SetMemorizedNumbers(_params.CalculatorState, (unsigned int)memorizedNumbers.size(), numbers); -#if !defined(__EMSCRIPTEN__) - strcpy_s(pData, str.size()+1, str.data()); -#else - strcpy(pData, str.data()); -#endif - numbers[i] = pData; - } + for (size_t i = 0; i < memorizedNumbers.size(); i++) + { + delete[] numbers[i]; + } - _params.SetMemorizedNumbers(_params.CalculatorState, (unsigned int)memorizedNumbers.size(), numbers); + delete[] numbers; + } - for (size_t i = 0; i < memorizedNumbers.size(); i++) - { - delete[] numbers[i]; - } - - delete[] numbers; - } - - virtual void MemoryItemChanged(unsigned int indexOfMemory) override - { - _params.MemoryItemChanged(_params.CalculatorState, indexOfMemory); - } + virtual void MemoryItemChanged(unsigned int indexOfMemory) override + { + _params.MemoryItemChanged(_params.CalculatorState, indexOfMemory); + } }; -class ResourceProvider : public CalculationManager::IResourceProvider { +class ResourceProvider : public CalculationManager::IResourceProvider +{ private: - CalculatorManager_CreateParams _params; + CalculatorManager_CreateParams _params; public: - ResourceProvider(CalculatorManager_CreateParams params) - { - _params = params; - } + ResourceProvider(CalculatorManager_CreateParams params) + { + _params = params; + } - virtual std::wstring GetCEngineString(const std::wstring& id) override { - - std::wstring_convert> convert; - auto str = convert.to_bytes(id); - - auto res = _params.GetCEngineString(_params.ResourceState, str.data()); - - return convert.from_bytes(res); - } + virtual std::wstring GetCEngineString(const std::wstring& id) override + { + return _params.GetCEngineString(_params.ResourceState, id.data()); + } }; CalculatorManager* AsManager(void* manager) @@ -128,13 +148,20 @@ CalculatorManager* AsManager(void* manager) return static_cast(manager); } +const wchar_t* ToWChar(std::wstring& str) +{ + auto out = new wchar_t[str.size() + 1]{}; + str.copy(out, str.size() + 1, 0); + return out; +} + void* CalculatorManager_Create(CalculatorManager_CreateParams* pParams) { - auto calcDisplay = new CalcDisplay(*pParams); - auto resProvider = new ResourceProvider(*pParams); + auto calcDisplay = new CalcDisplay(*pParams); + auto resProvider = new ResourceProvider(*pParams); - auto cm = new CalculatorManager(calcDisplay, resProvider); - return cm; + auto cm = new CalculatorManager(calcDisplay, resProvider); + return cm; } void CalculatorManager_SendCommand(void* manager, int command) @@ -207,14 +234,14 @@ void CalculatorManager_SetMemorizedNumbersString(void* manager) AsManager(manager)->SetMemorizedNumbersString(); } -const char* CalculatorManager_GetResultForRadix(void* manager, int radix, int precision) +const wchar_t* CalculatorManager_GetResultForRadix(void* manager, int radix, int precision) { auto res = AsManager(manager)->GetResultForRadix(radix, precision); - std::wstring_convert> convert; - auto str = convert.to_bytes(res); + auto out = new wchar_t[res.size() + 1]{}; + res.copy(out, res.size(), 0); - return str.data(); + return out; } void CalculatorManager_SetPrecision(void* manager, int precision) @@ -234,7 +261,7 @@ const char* CalculatorManager_DecimalSeparator(void* manager) std::wstring_convert> convert; auto str = convert.to_bytes(res); - return str.data(); + return str.data(); } bool CalculatorManager_RemoveHistoryItem(void* manager, int uIdx) @@ -261,3 +288,77 @@ void CalculatorManager_SetInHistoryItemLoadMode(void* manager, bool isHistoryIte { AsManager(manager)->SetInHistoryItemLoadMode(isHistoryItemLoadMode); } + +GetHistoryItemResult* MarshalHistoryItem(std::shared_ptr& historyItem) +{ + auto itemResult = new GetHistoryItemResult{}; + + itemResult->expression = ToWChar(historyItem->historyItemVector.expression); + itemResult->result = ToWChar(historyItem->historyItemVector.result); + + unsigned int tokenCount; + historyItem->historyItemVector.spTokens->GetSize(&tokenCount); + itemResult->TokenCount = tokenCount; + + auto tokenStrings = new const wchar_t* [tokenCount] {}; + auto tokenValues = new int32_t[tokenCount]{}; + + DBGPRINT(L"TokenCount: %d (int32_t: %d)\n", tokenCount, sizeof(int32_t)); + + for (uint32_t j = 0; j < tokenCount; j++) + { + std::pair pair; + + if (SUCCEEDED(historyItem->historyItemVector.spTokens->GetAt(j, &pair))) + { + tokenStrings[j] = ToWChar(pair.first); + tokenValues[j] = (int32_t)pair.second; + DBGPRINT(L"\tPair: %ws;%d\n", pair.first.data(), tokenValues[j]); + } + } + + itemResult->TokenStrings = tokenStrings; + itemResult->TokenValues = tokenValues; + + return itemResult; +} + +void* MarshalHistoryItems(std::vector>& historyItems) +{ + auto result = new GetHistoryItemsResult{}; + + result->ItemsCount = (int32_t)historyItems.size(); + + auto resultsArray = new GetHistoryItemResult*[result->ItemsCount]; + result->HistoryItems = (void*)resultsArray; + + for (size_t i = 0; i < historyItems.size(); i++) + { + auto historyItem = historyItems[i]; + + resultsArray[i] = MarshalHistoryItem(historyItem); + } + + return result; +} + +void* CalculatorManager_GetHistoryItems(void* manager) +{ + auto historyItems = AsManager(manager)->GetHistoryItems(); + + return MarshalHistoryItems(historyItems); +} + +void* CalculatorManager_GetHistoryItemsWithMode(void* manager, int mode) +{ + auto historyItems = AsManager(manager)->GetHistoryItems((CALCULATOR_MODE)mode); + + return MarshalHistoryItems(historyItems); +} + +void* CalculatorManager_GetHistoryItem(void* manager, int index) +{ + auto historyItem = AsManager(manager)->GetHistoryItem(index); + + return MarshalHistoryItem(historyItem); +} diff --git a/src/CalcManager/CCalcManager.h b/src/CalcManager/CCalcManager.h index 5ce62c9d..e8cf8cbd 100644 --- a/src/CalcManager/CCalcManager.h +++ b/src/CalcManager/CCalcManager.h @@ -28,10 +28,10 @@ typedef void (*OnNoRightParenAddedFunc)(void* state); typedef void (*MaxDigitsReachedFunc)(void* state); typedef void (*BinaryOperatorReceivedFunc)(void* state); typedef void (*OnHistoryItemAddedFunc)(void* state, unsigned int addedItemIndex); -typedef void (*SetMemorizedNumbersFunc)(void* state, unsigned int count, const char** memorizedNumbers); +typedef void (*SetMemorizedNumbersFunc)(void* state, unsigned int count, const wchar_t** memorizedNumbers); typedef void (*MemoryItemChangedFunc)(void* state, unsigned int indexOfMemory); -typedef const char* (*GetCEngineStringFunc)(void* state, const char* id); +typedef const wchar_t* (*GetCEngineStringFunc)(void* state, const wchar_t* id); struct CalculatorManager_CreateParams { void* CalculatorState; @@ -58,6 +58,26 @@ struct CalculatorManager_CreateParams { #endif extern "C" { + + struct GetHistoryItemsResult + { + int32_t ItemsCount; + void* HistoryItems; + }; + + struct GetHistoryItemResult + { + const wchar_t* expression; + const wchar_t* result; + + int32_t TokenCount; + const wchar_t** TokenStrings; + int32_t* TokenValues; + + int32_t CommandCount; + void** Commands; + }; + DLL_EXPORT void* CalculatorManager_Create(CalculatorManager_CreateParams* params); DLL_EXPORT void CalculatorManager_SendCommand(void* manager, int command); DLL_EXPORT void CalculatorManager_SetRadix(void* manager, RADIX_TYPE iRadixType); @@ -73,7 +93,7 @@ extern "C" { DLL_EXPORT void CalculatorManager_MemorizedNumberClearAll(void* manager); DLL_EXPORT bool CalculatorManager_IsEngineRecording(void* manager); DLL_EXPORT void CalculatorManager_SetMemorizedNumbersString(void* manager); - DLL_EXPORT const char* CalculatorManager_GetResultForRadix(void* manager, int radix, int precision); + DLL_EXPORT const wchar_t* CalculatorManager_GetResultForRadix(void* manager, int radix, int precision); DLL_EXPORT void CalculatorManager_SetPrecision(void* manager, int precision); DLL_EXPORT void CalculatorManager_UpdateMaxIntDigits(void* manager); DLL_EXPORT const char* CalculatorManager_DecimalSeparator(void* manager); @@ -82,5 +102,10 @@ extern "C" { DLL_EXPORT size_t CalculatorManager_MaxHistorySize(void* manager); DLL_EXPORT int CalculatorManager_GetCurrentDegreeMode(void* manager); DLL_EXPORT void CalculatorManager_SetInHistoryItemLoadMode(void* manager, bool isHistoryItemLoadMode); + void* MarshalHistoryItem(std::shared_ptr& historyItem, bool& retflag); + void* MarshalHistoryItems(std::vector>& historyItems); + DLL_EXPORT void* CalculatorManager_GetHistoryItemsWithMode(void* manager, int mode); + DLL_EXPORT void* CalculatorManager_GetHistoryItems(void* manager); + DLL_EXPORT void* CalculatorManager_GetHistoryItem(void* manager, int index); } diff --git a/src/Calculator.Shared/CalcManager/CalculatorManager.Interop.cs b/src/Calculator.Shared/CalcManager/CalculatorManager.Interop.cs index 8cb0f3dc..a9b7a2ff 100644 --- a/src/Calculator.Shared/CalcManager/CalculatorManager.Interop.cs +++ b/src/Calculator.Shared/CalcManager/CalculatorManager.Interop.cs @@ -57,7 +57,7 @@ namespace CalculationManager [DllImport("CalcManager")] public static extern void CalculatorManager_SetMemorizedNumbersString(IntPtr nativeManager); - [DllImport("CalcManager")] + [DllImport("CalcManager", CharSet = CharSet.Unicode)] public static extern string CalculatorManager_GetResultForRadix(IntPtr nativeManager, int radix, int precision); [DllImport("CalcManager")] @@ -84,6 +84,15 @@ namespace CalculationManager [DllImport("CalcManager")] public static extern void CalculatorManager_SetInHistoryItemLoadMode(IntPtr nativeManager, bool isHistoryItemLoadMode); + [DllImport("CalcManager")] + public static extern IntPtr CalculatorManager_GetHistoryItems(IntPtr nativeManager); + + [DllImport("CalcManager")] + public static extern IntPtr CalculatorManager_GetHistoryItemsWithMode(IntPtr nativeManager, CALCULATOR_MODE mode); + + [DllImport("CalcManager")] + public static extern IntPtr CalculatorManager_GetHistoryItem(IntPtr nativeManager, int uIdx); + public delegate IntPtr GetCEngineStringFunc(IntPtr state, string id); public delegate void BinaryOperatorReceivedFunc(IntPtr state); public delegate void SetPrimaryDisplayCallbackFunc(IntPtr state, string displayStringValue, bool isError); @@ -157,9 +166,8 @@ namespace CalculationManager var numbers = new List(); for (int i = 0; i < count; i++) { - // TODO Use native encoding instead. - var value = Marshal.PtrToStringAnsi(Marshal.ReadIntPtr(newMemorizedNumbers, i)); - numbers.Add(Encoding.UTF8.GetString(Encoding.ASCII.GetBytes(value))); + var value = Marshal.PtrToStringUni(Marshal.ReadIntPtr(newMemorizedNumbers, i)); + numbers.Add(value); } manager.SetMemorizedNumbers(numbers); @@ -183,7 +191,7 @@ namespace CalculationManager Debug.WriteLine($"CalculatorManager.BinaryOperatorReceivedCallback"); } - public static void SetPrimaryDisplayCallback(IntPtr state, string displayStringValue, bool isError) + public static void SetPrimaryDisplayCallback(IntPtr state, [MarshalAs(UnmanagedType.LPWStr)] string displayStringValue, bool isError) { var manager = GCHandle.FromIntPtr((IntPtr)state).Target as CalculatorDisplay; manager.SetPrimaryDisplay(displayStringValue, isError); @@ -199,23 +207,39 @@ namespace CalculationManager Debug.WriteLine($"CalculatorManager.SetIsInErrorCallback({isError})"); } - public static IntPtr GetCEngineStringCallback(IntPtr state, string resourceId) + public static IntPtr GetCEngineStringCallback(IntPtr state, [MarshalAs(UnmanagedType.LPWStr)] string resourceId) { var provider = GCHandle.FromIntPtr((IntPtr)state).Target as EngineResourceProvider; - var ret = provider.GetCEngineString(resourceId) ?? ""; + var r = provider.GetCEngineString(resourceId) ?? ""; - var retBytes = Encoding.UTF8.GetBytes(ret); - var retPtr = Marshal.AllocHGlobal(retBytes.Length + 1); - Marshal.WriteByte(retPtr + retBytes.Length, 0); - Marshal.Copy(retBytes, 0, retPtr, retBytes.Length); - - Debug.WriteLine($"CalculatorManager.GetCEngineStringCallback({resourceId},{ret})"); - - return retPtr; + return Marshal.StringToHGlobalUni(r); } } - public partial class CalculatorManager : ICalcDisplay + + [StructLayout(LayoutKind.Sequential)] + public struct GetHistoryItemsResult + { + public int ItemsCount; + public IntPtr HistoryItems; + } + + [StructLayout(LayoutKind.Sequential)] + public struct GetHistoryItemResult + { + public string expression; + public string result; + + public int TokenCount; + public IntPtr TokenStrings; + public IntPtr TokenValues; + + public int CommandCount; + public IntPtr Commands; + } + + + public partial class CalculatorManager : ICalcDisplay { private GCHandle _displayCallbackHandle; diff --git a/src/Calculator.Shared/CalcManager/CalculatorManager.cs b/src/Calculator.Shared/CalcManager/CalculatorManager.cs index c440731f..2b754e83 100644 --- a/src/Calculator.Shared/CalcManager/CalculatorManager.cs +++ b/src/Calculator.Shared/CalcManager/CalculatorManager.cs @@ -219,17 +219,63 @@ namespace CalculationManager public char DecimalSeparator() => NativeDispatch.CalculatorManager_DecimalSeparator(_nativeManager); - public List GetHistoryItems() => throw new NotImplementedException(); + public List GetHistoryItems() + { + var pResult = NativeDispatch.CalculatorManager_GetHistoryItems(_nativeManager); + return UnmarshalHistoryItemsResult(pResult); + } - public List GetHistoryItems(CalculationManager.CALCULATOR_MODE mode) - { - Debug.WriteLine($"CalculatorManager.GetHistoryItems({mode})"); + public List GetHistoryItems(CalculationManager.CALCULATOR_MODE mode) + { + var pResult = NativeDispatch.CalculatorManager_GetHistoryItemsWithMode(_nativeManager, mode); + return UnmarshalHistoryItemsResult(pResult); + } - return new List(); - } + private static List UnmarshalHistoryItemsResult(IntPtr pResult) + { + var result = Marshal.PtrToStructure(pResult); + var output = new List(); - public HISTORYITEM GetHistoryItem(int uIdx) => throw new NotImplementedException(); - public bool RemoveHistoryItem(int uIdx) + for (var i = 0; i < result.ItemsCount; i++) + { + var historyResultItem = Marshal.PtrToStructure(Marshal.ReadIntPtr(result.HistoryItems, i * Marshal.SizeOf())); + + var historyItem = UnmarshalHistoryItemResult(historyResultItem); + + output.Add(historyItem); + } + + return output; + } + + private static HISTORYITEM UnmarshalHistoryItemResult(GetHistoryItemResult historyResultItem) + { + var historyItem = new HISTORYITEM(); + historyItem.historyItemVector.expression = historyResultItem.expression; + historyItem.historyItemVector.result = historyResultItem.result; + historyItem.historyItemVector.spTokens = new CalculatorList<(string, int)>(); + + for (var i = 0; i < historyResultItem.TokenCount; i++) + { + var tokenString = Marshal.PtrToStringUni(Marshal.ReadIntPtr(historyResultItem.TokenStrings, i * Marshal.SizeOf())); + + var tokenValue = Marshal.ReadInt32(historyResultItem.TokenValues, i * Marshal.SizeOf()); + + historyItem.historyItemVector.spTokens.Append((tokenString, tokenValue)); + } + + return historyItem; + } + + public HISTORYITEM GetHistoryItem(int uIdx) + { + var pResult = NativeDispatch.CalculatorManager_GetHistoryItem(_nativeManager, uIdx); + var result = Marshal.PtrToStructure(pResult); + + return UnmarshalHistoryItemResult(result); + } + + public bool RemoveHistoryItem(int uIdx) => NativeDispatch.CalculatorManager_RemoveHistoryItem(_nativeManager, uIdx); public void ClearHistory() diff --git a/src/Calculator.Shared/Common/CalculatorDisplay.cs b/src/Calculator.Shared/Common/CalculatorDisplay.cs index 43f3eb71..2d838e3b 100644 --- a/src/Calculator.Shared/Common/CalculatorDisplay.cs +++ b/src/Calculator.Shared/Common/CalculatorDisplay.cs @@ -100,7 +100,7 @@ namespace CalculatorApp { if (m_historyCallbackReference != null) { - if (m_callbackReference.Target is ViewModel.HistoryViewModel historyVM) + if (m_historyCallbackReference.Target is ViewModel.HistoryViewModel historyVM) { historyVM.OnHistoryItemAdded(addedItemIndex); } diff --git a/src/Calculator.Shared/ViewModels/HistoryViewModel.cs b/src/Calculator.Shared/ViewModels/HistoryViewModel.cs index 66e32701..ee9f169a 100644 --- a/src/Calculator.Shared/ViewModels/HistoryViewModel.cs +++ b/src/Calculator.Shared/ViewModels/HistoryViewModel.cs @@ -306,7 +306,7 @@ namespace CalculatorApp try { serializedHistoryItem = SerializeHistoryItem(it); - historyContainer.Values.Add(index.ToString(), serializedHistoryItem); + historyContainer.Values[index.ToString()] = serializedHistoryItem; } catch (Exception e) { From 45204a810219e684845bf066daa17a858bad1d16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Laban?= Date: Thu, 16 May 2019 15:43:56 -0400 Subject: [PATCH 2/2] Adjust encoding to use UTF32 for wasm --- src/CalcManager/CCalcManager.cpp | 61 +++++++++++++++++- src/CalcManager/CCalcManager.h | 4 +- src/CalcManager/CalcManager.wasm | Bin 963469 -> 960212 bytes .../CalcManager/CalculatorManager.Interop.cs | 33 ++++++++-- .../CalcManager/CalculatorManager.cs | 31 ++++++++- .../CalcManager/ExpressionCommandInterface.cs | 48 +++++++++----- src/Calculator.Wasm/Calculator.Wasm.csproj | 4 +- .../WasmScripts/CalcManager.js | 4 +- 8 files changed, 153 insertions(+), 32 deletions(-) diff --git a/src/CalcManager/CCalcManager.cpp b/src/CalcManager/CCalcManager.cpp index d9ece638..9f8393e2 100644 --- a/src/CalcManager/CCalcManager.cpp +++ b/src/CalcManager/CCalcManager.cpp @@ -9,6 +9,8 @@ #include #include #include + +#if !defined(__EMSCRIPTEN__) #include #include @@ -39,6 +41,7 @@ VOID _DBGPRINT(LPCWSTR kwszFunction, INT iLineNumber, LPCWSTR kwszDebugFormatStr _freea(wszDebugString); va_end(args); } +#endif using namespace CalculationManager; @@ -59,11 +62,15 @@ public: std::wstring_convert> convert; auto str = convert.to_bytes(pszText); + printf("Native:SetPrimaryDisplay(%ls, %d)\n", pszText.data(), isError); + _params.SetPrimaryDisplay(_params.CalculatorState, str.data(), isError); } virtual void SetIsInError(bool isInError) override { + printf("Native:SetIsInError(%d)\n", isInError); + _params.SetIsInError(_params.CalculatorState, isInError); } @@ -71,35 +78,45 @@ public: std::shared_ptr>> const& /*tokens*/, std::shared_ptr>> const& /*commands*/) override { + printf("Native:SetExpressionDisplay()\n"); + } virtual void SetParenthesisNumber(unsigned int count) override { + printf("Native:SetParenthesisNumber(%d)\n", count); + _params.SetParenthesisNumber(_params.CalculatorState, count); } virtual void OnNoRightParenAdded() override { + printf("Native:OnNoRightParenAdded()\n"); _params.OnNoRightParenAdded(_params.CalculatorState); } virtual void MaxDigitsReached() override { + printf("Native:MaxDigitsReached()\n"); _params.MaxDigitsReached(_params.CalculatorState); } virtual void BinaryOperatorReceived() override { + printf("Native:BinaryOperatorReceived()\n"); _params.BinaryOperatorReceived(_params.CalculatorState); } virtual void OnHistoryItemAdded(unsigned int addedItemIndex) override { + printf("Native:OnHistoryItemAdded(%d)\n", addedItemIndex); _params.OnHistoryItemAdded(_params.CalculatorState, addedItemIndex); } virtual void SetMemorizedNumbers(const std::vector& memorizedNumbers) override { + printf("Native:SetMemorizedNumbers(%d)\n", (int)memorizedNumbers.size()); + auto numbers = new const wchar_t* [memorizedNumbers.size()] {}; for (size_t i = 0; i < memorizedNumbers.size(); i++) @@ -122,6 +139,8 @@ public: virtual void MemoryItemChanged(unsigned int indexOfMemory) override { + printf("Native:MemoryItemChanged(%d)\n", indexOfMemory); + _params.MemoryItemChanged(_params.CalculatorState, indexOfMemory); } }; @@ -139,7 +158,10 @@ public: virtual std::wstring GetCEngineString(const std::wstring& id) override { - return _params.GetCEngineString(_params.ResourceState, id.data()); + auto pResult = _params.GetCEngineString(_params.ResourceState, id.data()); + auto str = std::wstring(pResult); + printf("Native:GetCEngineString(id=%ls, str.data()=%ls)\n", id.data(), str.data()); + return str; } }; @@ -148,6 +170,11 @@ CalculatorManager* AsManager(void* manager) return static_cast(manager); } +IExpressionCommand* AsIExpressionCommand(void* pExpressionCommand) +{ + return static_cast(pExpressionCommand); +} + const wchar_t* ToWChar(std::wstring& str) { auto out = new wchar_t[str.size() + 1]{}; @@ -300,10 +327,13 @@ GetHistoryItemResult* MarshalHistoryItem(std::shared_ptrhistoryItemVector.spTokens->GetSize(&tokenCount); itemResult->TokenCount = tokenCount; + // + // Marshal Tokens + // auto tokenStrings = new const wchar_t* [tokenCount] {}; auto tokenValues = new int32_t[tokenCount]{}; - DBGPRINT(L"TokenCount: %d (int32_t: %d)\n", tokenCount, sizeof(int32_t)); + // DBGPRINT(L"TokenCount: %d (int32_t: %d)\n", tokenCount, sizeof(int32_t)); for (uint32_t j = 0; j < tokenCount; j++) { @@ -313,13 +343,33 @@ GetHistoryItemResult* MarshalHistoryItem(std::shared_ptrTokenStrings = tokenStrings; itemResult->TokenValues = tokenValues; + // + // Marshal Commands + // + unsigned int commandCount; + historyItem->historyItemVector.spCommands->GetSize(&commandCount); + itemResult->CommandCount = commandCount; + + auto commands = new void*[commandCount]{}; + + for (uint32_t commandId = 0; commandId < commandCount; commandId++) + { + std::shared_ptr command; + if (SUCCEEDED(historyItem->historyItemVector.spCommands->GetAt(commandId, &command))) + { + commands[commandId] = command.get(); + } + } + + itemResult->Commands = commands; + return itemResult; } @@ -362,3 +412,8 @@ void* CalculatorManager_GetHistoryItem(void* manager, int index) return MarshalHistoryItem(historyItem); } + +int IExpressionCommand_GetCommandType(void* pExpressionCommand) +{ + return (int)AsIExpressionCommand(pExpressionCommand)->GetCommandType(); +} diff --git a/src/CalcManager/CCalcManager.h b/src/CalcManager/CCalcManager.h index e8cf8cbd..76cf983d 100644 --- a/src/CalcManager/CCalcManager.h +++ b/src/CalcManager/CCalcManager.h @@ -102,10 +102,10 @@ extern "C" { DLL_EXPORT size_t CalculatorManager_MaxHistorySize(void* manager); DLL_EXPORT int CalculatorManager_GetCurrentDegreeMode(void* manager); DLL_EXPORT void CalculatorManager_SetInHistoryItemLoadMode(void* manager, bool isHistoryItemLoadMode); - void* MarshalHistoryItem(std::shared_ptr& historyItem, bool& retflag); - void* MarshalHistoryItems(std::vector>& historyItems); DLL_EXPORT void* CalculatorManager_GetHistoryItemsWithMode(void* manager, int mode); DLL_EXPORT void* CalculatorManager_GetHistoryItems(void* manager); DLL_EXPORT void* CalculatorManager_GetHistoryItem(void* manager, int index); + + DLL_EXPORT int IExpressionCommand_GetCommandType(void* pExpressionCommand); } diff --git a/src/CalcManager/CalcManager.wasm b/src/CalcManager/CalcManager.wasm index 924d9d07b7ab7bdc6c126f3fa900e78092927f08..873bff551c0352184bf041ec6c6ee16024bf6861 100644 GIT binary patch delta 103580 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

DF*?k_ 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 z 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 Qp5udCXq36)6PoPzKivpIQ~&?~ diff --git a/src/Calculator.Shared/CalcManager/CalculatorManager.Interop.cs b/src/Calculator.Shared/CalcManager/CalculatorManager.Interop.cs index a9b7a2ff..d66d1a09 100644 --- a/src/Calculator.Shared/CalcManager/CalculatorManager.Interop.cs +++ b/src/Calculator.Shared/CalcManager/CalculatorManager.Interop.cs @@ -93,7 +93,10 @@ namespace CalculationManager [DllImport("CalcManager")] public static extern IntPtr CalculatorManager_GetHistoryItem(IntPtr nativeManager, int uIdx); - public delegate IntPtr GetCEngineStringFunc(IntPtr state, string id); + [DllImport("CalcManager")] + public static extern CommandType IExpressionCommand_GetCommandType(IntPtr pExpressionCommand); + + public delegate IntPtr GetCEngineStringFunc(IntPtr state, IntPtr id); public delegate void BinaryOperatorReceivedFunc(IntPtr state); public delegate void SetPrimaryDisplayCallbackFunc(IntPtr state, string displayStringValue, bool isError); public delegate void SetIsInErrorCallbackFunc(IntPtr state, bool isError); @@ -207,16 +210,34 @@ namespace CalculationManager Debug.WriteLine($"CalculatorManager.SetIsInErrorCallback({isError})"); } - public static IntPtr GetCEngineStringCallback(IntPtr state, [MarshalAs(UnmanagedType.LPWStr)] string resourceId) + public static IntPtr GetCEngineStringCallback(IntPtr state, IntPtr pResourceId) { - var provider = GCHandle.FromIntPtr((IntPtr)state).Target as EngineResourceProvider; - var r = provider.GetCEngineString(resourceId) ?? ""; + var provider = GCHandle.FromIntPtr(state).Target as EngineResourceProvider; + var resourceId = Marshal.PtrToStringUni(pResourceId); + var resourceValue = provider.GetCEngineString(resourceId) ?? ""; - return Marshal.StringToHGlobalUni(r); +#if __WASM__ + // wchar_t is 32bits with emscripten + var pEngineString = StringToHGlobalUTF32(resourceValue); +#else + var pEngineString = Marshal.StringToHGlobalUni(resourceValue); +#endif + + Debug.WriteLine($"GetCEngineStringCallback({resourceId}, {resourceValue}"); + + return pEngineString; + } + + private static IntPtr StringToHGlobalUTF32(string resourceValue) + { + var ret = Encoding.UTF32.GetBytes(resourceValue); + var pRet2 = Marshal.AllocHGlobal(resourceValue.Length * 4 + 4); + Marshal.Copy(ret, 0, pRet2, resourceValue.Length * 4); + Marshal.WriteInt32(pRet2 + resourceValue.Length * 4, 0); + return pRet2; } } - [StructLayout(LayoutKind.Sequential)] public struct GetHistoryItemsResult { diff --git a/src/Calculator.Shared/CalcManager/CalculatorManager.cs b/src/Calculator.Shared/CalcManager/CalculatorManager.cs index 2b754e83..f76b1ad2 100644 --- a/src/Calculator.Shared/CalcManager/CalculatorManager.cs +++ b/src/Calculator.Shared/CalcManager/CalculatorManager.cs @@ -258,12 +258,41 @@ namespace CalculationManager for (var i = 0; i < historyResultItem.TokenCount; i++) { var tokenString = Marshal.PtrToStringUni(Marshal.ReadIntPtr(historyResultItem.TokenStrings, i * Marshal.SizeOf())); - var tokenValue = Marshal.ReadInt32(historyResultItem.TokenValues, i * Marshal.SizeOf()); historyItem.historyItemVector.spTokens.Append((tokenString, tokenValue)); } + historyItem.historyItemVector.spCommands = new CalculatorList(); + for (int j = 0; j < historyResultItem.CommandCount; j++) + { + var pExpressionCommand = Marshal.ReadIntPtr(historyResultItem.Commands, j * Marshal.SizeOf()); + var commandType = NativeDispatch.IExpressionCommand_GetCommandType(pExpressionCommand); + + IExpressionCommand getCommand() + { + switch (commandType) + { + case CommandType.BinaryCommand: + return new CUnaryCommand(pExpressionCommand); + + case CommandType.OperandCommand: + return new COpndCommand(pExpressionCommand); + + case CommandType.Parentheses: + return new CParentheses(pExpressionCommand); + + case CommandType.UnaryCommand: + return new CUnaryCommand(pExpressionCommand); + + default: + throw new NotSupportedException($"CommandType.{commandType} is not supported"); + } + } + + historyItem.historyItemVector.spCommands.Append(getCommand()); + } + return historyItem; } diff --git a/src/Calculator.Shared/CalcManager/ExpressionCommandInterface.cs b/src/Calculator.Shared/CalcManager/ExpressionCommandInterface.cs index e211b522..fd052726 100644 --- a/src/Calculator.Shared/CalcManager/ExpressionCommandInterface.cs +++ b/src/Calculator.Shared/CalcManager/ExpressionCommandInterface.cs @@ -61,14 +61,22 @@ namespace CalculationManager public class CParentheses : IParenthesisCommand { - public CParentheses(int command) => throw new NotImplementedException(); - public int GetCommand() => throw new NotImplementedException(); + private IntPtr pExpressionCommand; + + public CParentheses(int command) => throw new NotImplementedException(); + public CParentheses(IntPtr pExpressionCommand) => this.pExpressionCommand = pExpressionCommand; + + public int GetCommand() => throw new NotImplementedException(); public CalculationManager.CommandType GetCommandType() => throw new NotImplementedException(); public void Accept(ISerializeCommandVisitor commandVisitor) => throw new NotImplementedException(); } public class CUnaryCommand : IUnaryCommand { + private IntPtr pExpressionCommand; + + public CUnaryCommand(IntPtr pExpressionCommand) => this.pExpressionCommand = pExpressionCommand; + public CUnaryCommand(int command) => throw new NotImplementedException(); public CUnaryCommand(int command1, int command2) => throw new NotImplementedException(); public CalculatorList GetCommands() => throw new NotImplementedException(); @@ -78,21 +86,29 @@ namespace CalculationManager public void Accept(ISerializeCommandVisitor commandVisitor) => throw new NotImplementedException(); } - public class CBinaryCommand : IBinaryCommand - { - public CBinaryCommand(int command) => throw new NotImplementedException(); - public void SetCommand(int command) => throw new NotImplementedException(); - public int GetCommand() => throw new NotImplementedException(); - public CommandType GetCommandType() => throw new NotImplementedException(); - public void Accept(ISerializeCommandVisitor commandVisitor) => throw new NotImplementedException(); - } + public class CBinaryCommand : IBinaryCommand + { + private IntPtr pExpressionCommand; - public class COpndCommand : IOpndCommand - { - public COpndCommand(CalculatorList commands, bool fNegative, bool fDecimal, bool fSciFmt) => throw new NotImplementedException(); - // public void Initialize(CalcEngine.Rational rat) => throw new NotImplementedException(); + public CBinaryCommand(IntPtr pExpressionCommand) => this.pExpressionCommand = pExpressionCommand; - public CalculatorList GetCommands() => throw new NotImplementedException(); + public CBinaryCommand(int command) => throw new NotImplementedException(); + public void SetCommand(int command) => throw new NotImplementedException(); + public int GetCommand() => throw new NotImplementedException(); + public CommandType GetCommandType() => throw new NotImplementedException(); + public void Accept(ISerializeCommandVisitor commandVisitor) => throw new NotImplementedException(); + } + + public class COpndCommand : IOpndCommand + { + private IntPtr pExpressionCommand; + + public COpndCommand(CalculatorList commands, bool fNegative, bool fDecimal, bool fSciFmt) => throw new NotImplementedException(); + public COpndCommand(IntPtr pExpressionCommand) => this.pExpressionCommand = pExpressionCommand; + + // public void Initialize(CalcEngine.Rational rat) => throw new NotImplementedException(); + + public CalculatorList GetCommands() => throw new NotImplementedException(); public void SetCommands(CalculatorList commands) => throw new NotImplementedException(); public void AppendCommand(int command) => throw new NotImplementedException(); public void ToggleSign() => throw new NotImplementedException(); @@ -105,4 +121,4 @@ namespace CalculationManager public void Accept(ISerializeCommandVisitor commandVisitor) => throw new NotImplementedException(); public string GetString(uint radix, int precision) => throw new NotImplementedException(); } -} \ No newline at end of file +} diff --git a/src/Calculator.Wasm/Calculator.Wasm.csproj b/src/Calculator.Wasm/Calculator.Wasm.csproj index 3ec72b5f..cf7e9eef 100644 --- a/src/Calculator.Wasm/Calculator.Wasm.csproj +++ b/src/Calculator.Wasm/Calculator.Wasm.csproj @@ -12,7 +12,7 @@ release-dynamic - C:\Users\jerome.laban\Downloads\mono-wasm-4d023b6bf84.zip + C:\Users\jerome.laban\Downloads\mono-wasm-527abcd1152.zip @@ -40,7 +40,7 @@ - + diff --git a/src/Calculator.Wasm/WasmScripts/CalcManager.js b/src/Calculator.Wasm/WasmScripts/CalcManager.js index fffd2bfa..e3c5ac1e 100644 --- a/src/Calculator.Wasm/WasmScripts/CalcManager.js +++ b/src/Calculator.Wasm/WasmScripts/CalcManager.js @@ -13,7 +13,7 @@ var _setExpressionDisplayCallback = Module.mono_bind_static_method("[Calculator.Wasm] CalculationManager.NativeDispatch:SetExpressionDisplayCallback"); var _setMemorizedNumbersCallback = Module.mono_bind_static_method("[Calculator.Wasm] CalculationManager.NativeDispatch:SetMemorizedNumbersCallback"); - var fGetCEngineStringCallback = Module.addFunction((state, id) => _getCEngineStringCallback(state, Module.UTF8ToString(id)), 'iii'); + var fGetCEngineStringCallback = Module.addFunction((state, id) => _getCEngineStringCallback(state, id), 'iii'); var fBinaryOperatorReceivedCallback = Module.addFunction((state) => _binaryOperatorReceivedCallback(state), 'vi'); var fSetPrimaryDisplayCallback = Module.addFunction((state, displayStringValue, isError) => _setPrimaryDisplayCallback(state, Module.UTF8ToString(displayStringValue), isError), 'viii'); @@ -24,7 +24,7 @@ var fOnHistoryItemAddedCallback = Module.addFunction((state, addedItemIndex) => _onHistoryItemAddedCallback(state, addedItemIndex), 'vii'); var fOnNoRightParenAddedCallback = Module.addFunction((state) => _onNoRightParenAddedCallback (state), 'vi'); var fSetExpressionDisplayCallback = Module.addFunction((state) => _setExpressionDisplayCallback (state), 'vi'); - var fSetMemorizedNumbersCallback = Module.addFunction((state, numbers) => _setMemorizedNumbersCallback(state, numbers), 'vii'); + var fSetMemorizedNumbersCallback = Module.addFunction((state, size, numbers) => _setMemorizedNumbersCallback(state, size, numbers), 'viii'); var ret = `${fGetCEngineStringCallback};` + `${fBinaryOperatorReceivedCallback};`