From 2826d370565092dfca9a983a5fc6ec0b8b1c62e1 Mon Sep 17 00:00:00 2001 From: Oleg Abrazhaev Date: Thu, 2 May 2019 20:59:19 +0200 Subject: [PATCH] Fix the project code style, as it is not consistent. (#236) Fixes #202 This PR fixes code style for the project files. The Problem Different files in the project use different code style. That is not consistent and leads to harder maintenance of the project. Description of the changes: Have investigated and determined the most used code style across the given codebase Have configured IDE and applied code style to all project files. Have crafted clang-formatter config. see https://clang.llvm.org/docs/ClangFormat.html https://clang.llvm.org/docs/ClangFormatStyleOptions.html Some cases were fixed manually How changes were validated: manual/ad-hoc testing, automated testing All tests pass as before because these are only code style changes. Additional Please review, and let me know if I have any mistake in the code style. In case of any mistake, I will change the configuration and re-apply it to the project. --- .clang-format | 99 + .../Scripts/clang-format/clang-format-all.sh | 53 + src/CalcManager/CEngine/CalcInput.cpp | 8 +- src/CalcManager/CEngine/CalcUtils.cpp | 4 +- src/CalcManager/CEngine/History.cpp | 22 +- src/CalcManager/CEngine/Number.cpp | 23 +- src/CalcManager/CEngine/Rational.cpp | 24 +- src/CalcManager/CEngine/calc.cpp | 73 +- src/CalcManager/CEngine/scicomm.cpp | 66 +- src/CalcManager/CEngine/scidisp.cpp | 27 +- src/CalcManager/CEngine/scifunc.cpp | 9 +- src/CalcManager/CEngine/scioper.cpp | 2 +- src/CalcManager/CEngine/sciset.cpp | 2 +- src/CalcManager/CalculatorHistory.cpp | 12 +- src/CalcManager/CalculatorHistory.h | 20 +- src/CalcManager/CalculatorManager.cpp | 67 +- src/CalcManager/CalculatorManager.h | 18 +- src/CalcManager/CalculatorResource.h | 4 +- src/CalcManager/CalculatorVector.h | 8 +- src/CalcManager/Command.h | 39 +- src/CalcManager/ExpressionCommand.cpp | 36 +- src/CalcManager/ExpressionCommand.h | 28 +- src/CalcManager/ExpressionCommandInterface.h | 8 +- src/CalcManager/Header Files/CCommand.h | 325 ++- src/CalcManager/Header Files/CalcEngine.h | 108 +- src/CalcManager/Header Files/CalcInput.h | 36 +- src/CalcManager/Header Files/EngineStrings.h | 243 +- src/CalcManager/Header Files/History.h | 18 +- src/CalcManager/Header Files/ICalcDisplay.h | 6 +- .../Header Files/IHistoryDisplay.h | 9 +- src/CalcManager/Header Files/RadixType.h | 3 +- src/CalcManager/Ratpack/CalcErr.h | 19 +- src/CalcManager/Ratpack/basex.cpp | 251 +- src/CalcManager/Ratpack/conv.cpp | 627 +++-- src/CalcManager/Ratpack/exp.cpp | 262 ++- src/CalcManager/Ratpack/fact.cpp | 193 +- src/CalcManager/Ratpack/itrans.cpp | 224 +- src/CalcManager/Ratpack/itransh.cpp | 54 +- src/CalcManager/Ratpack/logic.cpp | 49 +- src/CalcManager/Ratpack/num.cpp | 435 ++-- src/CalcManager/Ratpack/rat.cpp | 152 +- src/CalcManager/Ratpack/ratconst.h | 986 ++++---- src/CalcManager/Ratpack/ratpak.h | 412 ++-- src/CalcManager/Ratpack/support.cpp | 378 +-- src/CalcManager/Ratpack/trans.cpp | 196 +- src/CalcManager/Ratpack/transh.cpp | 126 +- src/CalcManager/UnitConverter.cpp | 97 +- src/CalcManager/UnitConverter.h | 83 +- src/CalcViewModel/ApplicationViewModel.cpp | 22 +- src/CalcViewModel/ApplicationViewModel.h | 24 +- .../Common/AlwaysSelectedCollectionView.h | 398 ++-- .../Common/AppResourceProvider.cpp | 6 +- .../Common/AppResourceProvider.h | 10 +- .../Automation/INarratorAnnouncementHost.h | 7 +- .../Common/Automation/LiveRegionHost.cpp | 12 +- .../Common/Automation/LiveRegionHost.h | 9 +- .../Automation/NarratorAnnouncement.cpp | 125 +- .../Common/Automation/NarratorAnnouncement.h | 58 +- .../NarratorAnnouncementHostFactory.cpp | 15 +- .../NarratorAnnouncementHostFactory.h | 12 +- .../Common/Automation/NarratorNotifier.cpp | 25 +- .../Common/Automation/NarratorNotifier.h | 32 +- .../Common/Automation/NotificationHost.cpp | 28 +- .../Common/Automation/NotificationHost.h | 18 +- src/CalcViewModel/Common/BindableBase.cpp | 8 +- src/CalcViewModel/Common/BindableBase.h | 21 +- .../CalculatorButtonPressedEventArgs.cpp | 9 +- .../Common/CalculatorButtonPressedEventArgs.h | 16 +- .../Common/CalculatorButtonUser.h | 388 ++-- .../Common/CalculatorDisplay.cpp | 5 +- src/CalcViewModel/Common/CalculatorDisplay.h | 5 +- .../Common/ConversionResultTaskHelper.cpp | 20 +- src/CalcViewModel/Common/CopyPasteManager.cpp | 108 +- src/CalcViewModel/Common/CopyPasteManager.h | 35 +- src/CalcViewModel/Common/DateCalculator.cpp | 59 +- src/CalcViewModel/Common/DateCalculator.h | 20 +- src/CalcViewModel/Common/DelegateCommand.h | 28 +- .../Common/DisplayExpressionToken.h | 31 +- .../Common/EngineResourceProvider.cpp | 2 +- .../Common/EngineResourceProvider.h | 2 +- .../Common/ExpressionCommandDeserializer.cpp | 6 +- .../Common/ExpressionCommandDeserializer.h | 4 +- .../Common/ExpressionCommandSerializer.cpp | 10 +- .../Common/ExpressionCommandSerializer.h | 12 +- .../Common/KeyboardShortcutManager.cpp | 143 +- .../Common/KeyboardShortcutManager.h | 67 +- .../Common/LocalizationService.cpp | 147 +- .../Common/LocalizationService.h | 152 +- .../Common/LocalizationSettings.h | 62 +- .../Common/LocalizationStringUtil.h | 8 +- src/CalcViewModel/Common/MyVirtualKey.h | 3 +- src/CalcViewModel/Common/NavCategory.cpp | 267 +-- src/CalcViewModel/Common/NavCategory.h | 166 +- src/CalcViewModel/Common/NetworkManager.cpp | 19 +- src/CalcViewModel/Common/NetworkManager.h | 15 +- src/CalcViewModel/Common/TraceActivity.h | 27 +- src/CalcViewModel/Common/TraceLogger.cpp | 265 ++- src/CalcViewModel/Common/TraceLogger.h | 22 +- src/CalcViewModel/Common/Utils.cpp | 35 +- src/CalcViewModel/Common/Utils.h | 606 +++-- .../Common/ValidatingConverters.h | 127 +- .../DataLoaders/CurrencyDataLoader.cpp | 220 +- .../DataLoaders/CurrencyDataLoader.h | 30 +- .../DataLoaders/CurrencyHttpClient.cpp | 12 +- .../DataLoaders/CurrencyHttpClient.h | 14 +- .../DataLoaders/ICurrencyHttpClient.h | 12 +- .../DataLoaders/UnitConverterDataConstants.h | 3 +- .../DataLoaders/UnitConverterDataLoader.cpp | 867 ++++--- .../DataLoaders/UnitConverterDataLoader.h | 32 +- src/CalcViewModel/DateCalculatorViewModel.cpp | 60 +- src/CalcViewModel/DateCalculatorViewModel.h | 92 +- src/CalcViewModel/HistoryItemViewModel.cpp | 11 +- src/CalcViewModel/HistoryItemViewModel.h | 79 +- src/CalcViewModel/HistoryViewModel.cpp | 89 +- src/CalcViewModel/HistoryViewModel.h | 44 +- src/CalcViewModel/MemoryItemViewModel.h | 36 +- .../StandardCalculatorViewModel.cpp | 403 ++-- .../StandardCalculatorViewModel.h | 270 ++- src/CalcViewModel/UnitConverterViewModel.cpp | 234 +- src/CalcViewModel/UnitConverterViewModel.h | 239 +- src/CalcViewModel/ViewState.cpp | 2 +- src/CalcViewModel/ViewState.h | 2 +- src/CalcViewModel/pch.cpp | 1 - src/CalcViewModel/pch.h | 5 +- src/CalcViewModel/targetver.h | 1 - src/Calculator.sln | 2 + src/Calculator/AboutFlyout.xaml.cpp | 12 +- src/Calculator/AboutFlyout.xaml.h | 7 +- src/Calculator/App.xaml.cpp | 205 +- src/Calculator/App.xaml.h | 41 +- .../Common/AlwaysSelectedCollectionView.h | 398 ++-- src/Calculator/Common/AppLifecycleLogger.cpp | 35 +- src/Calculator/Common/AppLifecycleLogger.h | 10 +- src/Calculator/Common/BindableBase.cpp | 8 +- src/Calculator/Common/BindableBase.h | 21 +- src/Calculator/Controls/CalculationResult.cpp | 61 +- src/Calculator/Controls/CalculationResult.h | 57 +- .../CalculationResultAutomationPeer.cpp | 10 +- .../CalculationResultAutomationPeer.h | 9 +- src/Calculator/Controls/CalculatorButton.cpp | 14 +- src/Calculator/Controls/CalculatorButton.h | 22 +- src/Calculator/Controls/FlipButtons.cpp | 10 +- src/Calculator/Controls/FlipButtons.h | 21 +- .../HorizontalNoOverflowStackPanel.cpp | 5 +- .../Controls/HorizontalNoOverflowStackPanel.h | 11 +- src/Calculator/Controls/OverflowTextBlock.cpp | 25 +- src/Calculator/Controls/OverflowTextBlock.h | 23 +- .../OverflowTextBlockAutomationPeer.cpp | 8 +- .../OverflowTextBlockAutomationPeer.h | 7 +- src/Calculator/Controls/RadixButton.cpp | 4 +- src/Calculator/Controls/RadixButton.h | 8 +- .../Controls/SupplementaryItemsControl.cpp | 14 +- .../Controls/SupplementaryItemsControl.h | 81 +- .../BitFlipAutomationNameConverter.cpp | 20 +- .../BitFlipAutomationNameConverter.h | 12 +- .../Converters/BooleanNegationConverter.cpp | 20 +- .../Converters/BooleanNegationConverter.h | 10 +- .../BooleanToVisibilityConverter.cpp | 40 +- .../Converters/BooleanToVisibilityConverter.h | 24 +- .../ExpressionItemTemplateSelector.cpp | 5 +- .../ExpressionItemTemplateSelector.h | 9 +- .../ItemSizeToVisibilityConverter.cpp | 24 +- .../ItemSizeToVisibilityConverter.h | 20 +- .../Converters/RadixToStringConverter.cpp | 17 +- .../Converters/RadixToStringConverter.h | 10 +- .../VisibilityNegationConverter.cpp | 6 +- .../Converters/VisibilityNegationConverter.h | 10 +- .../DesignData/DesignAppViewModel.h | 30 +- .../DesignStandardCalculatorViewModel.h | 49 +- .../DesignData/DesignUnitConverterViewModel.h | 83 +- src/Calculator/Views/Calculator.xaml.cpp | 142 +- src/Calculator/Views/Calculator.xaml.h | 78 +- .../CalculatorProgrammerBitFlipPanel.xaml.cpp | 64 +- .../CalculatorProgrammerBitFlipPanel.xaml.h | 23 +- .../CalculatorProgrammerDisplayPanel.xaml.cpp | 11 +- .../CalculatorProgrammerDisplayPanel.xaml.h | 10 +- .../CalculatorProgrammerOperators.xaml.cpp | 12 +- .../CalculatorProgrammerOperators.xaml.h | 18 +- ...alculatorProgrammerRadixOperators.xaml.cpp | 28 +- .../CalculatorProgrammerRadixOperators.xaml.h | 18 +- .../CalculatorScientificAngleButtons.xaml.cpp | 15 +- .../CalculatorScientificAngleButtons.xaml.h | 14 +- .../CalculatorScientificOperators.xaml.cpp | 16 +- .../CalculatorScientificOperators.xaml.h | 21 +- .../CalculatorStandardOperators.xaml.cpp | 8 +- .../Views/CalculatorStandardOperators.xaml.h | 3 +- src/Calculator/Views/DateCalculator.xaml.cpp | 56 +- src/Calculator/Views/DateCalculator.xaml.h | 30 +- src/Calculator/Views/HistoryList.xaml.cpp | 14 +- src/Calculator/Views/HistoryList.xaml.h | 9 +- src/Calculator/Views/MainPage.xaml.cpp | 84 +- src/Calculator/Views/MainPage.xaml.h | 59 +- src/Calculator/Views/Memory.xaml.cpp | 33 +- src/Calculator/Views/Memory.xaml.h | 23 +- src/Calculator/Views/MemoryListItem.xaml.cpp | 20 +- src/Calculator/Views/MemoryListItem.xaml.h | 22 +- src/Calculator/Views/NumberPad.xaml.cpp | 9 +- src/Calculator/Views/NumberPad.xaml.h | 5 +- src/Calculator/Views/OperatorsPanel.xaml.cpp | 5 +- src/Calculator/Views/OperatorsPanel.xaml.h | 11 +- .../StateTriggers/AspectRatioTrigger.cpp | 16 +- .../Views/StateTriggers/AspectRatioTrigger.h | 16 +- .../Views/SupplementaryResults.xaml.cpp | 18 +- .../Views/SupplementaryResults.xaml.h | 33 +- src/Calculator/Views/TitleBar.xaml.cpp | 82 +- src/Calculator/Views/TitleBar.xaml.h | 25 +- src/Calculator/Views/UnitConverter.xaml.cpp | 75 +- src/Calculator/Views/UnitConverter.xaml.h | 41 +- src/Calculator/WindowFrameService.cpp | 49 +- src/Calculator/WindowFrameService.h | 48 +- src/Calculator/pch.h | 4 +- src/CalculatorUnitTests/AsyncHelper.cpp | 10 +- src/CalculatorUnitTests/AsyncHelper.h | 49 +- src/CalculatorUnitTests/CalcEngineTests.cpp | 44 +- src/CalculatorUnitTests/CalcInputTest.cpp | 3 +- .../CalculatorManagerTest.cpp | 258 +-- .../CopyPasteManagerTest.cpp | 935 +++++++- .../CurrencyConverterUnitTests.cpp | 871 ++++--- .../DateCalculatorUnitTests.cpp | 1733 ++++++++------ src/CalculatorUnitTests/DateUtils.h | 9 +- src/CalculatorUnitTests/Helpers.h | 122 +- src/CalculatorUnitTests/HistoryTests.cpp | 61 +- .../Mocks/CurrencyHttpClient.cpp | 17 +- .../Mocks/CurrencyHttpClient.h | 41 +- src/CalculatorUnitTests/Module.cpp | 6 +- .../MultiWindowUnitTests.cpp | 1831 +++++++-------- .../NavCategoryUnitTests.cpp | 60 +- src/CalculatorUnitTests/RationalTest.cpp | 398 ++-- .../StandardViewModelUnitTests.cpp | 665 +++--- src/CalculatorUnitTests/UnitConverterTest.cpp | 120 +- .../UnitConverterViewModelUnitTests.cpp | 2040 ++++++++--------- .../UnitConverterViewModelUnitTests.h | 88 +- src/CalculatorUnitTests/UnitTestApp.xaml.cpp | 14 +- src/CalculatorUnitTests/UnitTestApp.xaml.h | 9 +- src/CalculatorUnitTests/UtilsTests.cpp | 62 +- src/CalculatorUnitTests/pch.h | 4 +- src/CalculatorUnitTests/resource.h | 8 +- 237 files changed, 12824 insertions(+), 11843 deletions(-) create mode 100644 .clang-format create mode 100644 Tools/Scripts/clang-format/clang-format-all.sh diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000..6f60f7bf --- /dev/null +++ b/.clang-format @@ -0,0 +1,99 @@ +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Right +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: None +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: true +BinPackArguments: true +BinPackParameters: true +BreakBeforeBinaryOperators: NonAssignment +BreakBeforeBraces: Allman +BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeComma +BreakAfterJavaFieldAnnotations: true +BreakStringLiterals: true +ColumnLimit: 160 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: true +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: false +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: false +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^' + Priority: 2 + - Regex: '^<.*\.h>' + Priority: 1 + - Regex: '^<.*' + Priority: 2 + - Regex: '.*' + Priority: 3 +IncludeIsMainRegex: '([-_](test|unittest))?$' +IndentCaseLabels: false +IndentPPDirectives: None +IndentWidth: 4 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Single +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: All +ObjCBlockIndentWidth: 4 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Left +ReflowComments: true +SortIncludes: false +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: ControlStatements +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 4 +UseTab: Never +#... +# unsupported rules +#BreakInheritanceList: AfterColon +#Language: None +#ObjCBinPackProtocolList: Auto +#PenaltyBreakTemplateDeclaration: 10 +#SpaceBeforeCpp11BracedList: false +#SpaceBeforeCtorInitializerColon: true +#SpaceBeforeInheritanceColon: true +#SpaceBeforeRangeBasedForLoopColon: true + diff --git a/Tools/Scripts/clang-format/clang-format-all.sh b/Tools/Scripts/clang-format/clang-format-all.sh new file mode 100644 index 00000000..b54fe6e2 --- /dev/null +++ b/Tools/Scripts/clang-format/clang-format-all.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +function usage { + echo "Usage: $0 DIR..." + exit 1 +} + +# Variable that will hold the name of the clang-format command +FMT="" + +# Some distros just call it clang-format. Others (e.g. Ubuntu) are insistent +# that the version number be part of the command. We prefer clang-format if +# that's present, otherwise we work backwards from highest version to lowest +# version. +for clangfmt in clang-format{,-{4,3}.{9,8,7,6,5,4,3,2,1,0}}; do + if which "$clangfmt" &>/dev/null; then + FMT="$clangfmt" + break + fi +done + +# Check if we found a working clang-format +if [ -z "$FMT" ]; then + echo "failed to find clang-format" + exit 1 +fi + +SRC_PATH="$@" +if [ -z "$SRC_PATH" ]; then + SRC_PATH="../../../src" +fi + +# Check all of the arguments first to make sure they're all directories +for dir in "$SRC_PATH"; do + if [ ! -d "${dir}" ]; then + echo "${dir} is not a directory" + usage + fi +done + +# Run clang-format -i on all of the things +for dir in "$SRC_PATH"; do + pushd "${dir}" &>/dev/null + find . \ + \( -name '*.c' \ + -o -name '*.cc' \ + -o -name '*.cpp' \ + -o -name '*.h' \ + -o -name '*.hh' \ + -o -name '*.hpp' \) \ + -exec "${FMT}" -style=file -i '{}' \; + popd &>/dev/null +done diff --git a/src/CalcManager/CEngine/CalcInput.cpp b/src/CalcManager/CEngine/CalcInput.cpp index 1c47a8da..600f9002 100644 --- a/src/CalcManager/CEngine/CalcInput.cpp +++ b/src/CalcManager/CEngine/CalcInput.cpp @@ -124,15 +124,15 @@ bool CalcInput::TryAddDigit(unsigned int value, uint32_t radix, bool isIntegerMo else if (radix == 10) { // If value length is at least the max, we know we can't add another digit. - if(pNumSec->value.size() < maxNumStr.size()) + if (pNumSec->value.size() < maxNumStr.size()) { // Compare value to substring of maxNumStr of value.size() length. // If cmpResult > 0: - // eg. max is "127", and the current number is "20". first digit itself says we are out. + // eg. max is "127", and the current number is "20". first digit itself says we are out. // Additional digit is not possible // If cmpResult < 0: - // Success case. eg. max is "127", and current number is say "11". The second digit '1' being < + // Success case. eg. max is "127", and current number is say "11". The second digit '1' being < // corresponding digit '2', means all digits are possible to append, like 119 will still be < 127 // If cmpResult == 0: @@ -151,7 +151,7 @@ bool CalcInput::TryAddDigit(unsigned int value, uint32_t radix, bool isIntegerMo } else if (pNumSec->IsNegative() && chDigit <= lastChar + 1) { - // Negative value case, eg. max is "127", and current number is "-12". Then 8 is also valid, as the range + // Negative value case, eg. max is "127", and current number is "-12". Then 8 is also valid, as the range // is always from -(max+1)...max in signed mode allowExtraDigit = true; } diff --git a/src/CalcManager/CEngine/CalcUtils.cpp b/src/CalcManager/CEngine/CalcUtils.cpp index 15b11926..57510dcc 100644 --- a/src/CalcManager/CEngine/CalcUtils.cpp +++ b/src/CalcManager/CEngine/CalcUtils.cpp @@ -33,9 +33,7 @@ bool IsDigitOpCode(OpCode opCode) // was never inout, we need to revert the state changes made as a result of this test bool IsGuiSettingOpCode(OpCode opCode) { - if (IsOpInRange(opCode, IDM_HEX, IDM_BIN) || - IsOpInRange(opCode, IDM_QWORD, IDM_BYTE) || - IsOpInRange(opCode, IDM_DEG, IDM_GRAD)) + if (IsOpInRange(opCode, IDM_HEX, IDM_BIN) || IsOpInRange(opCode, IDM_QWORD, IDM_BYTE) || IsOpInRange(opCode, IDM_DEG, IDM_GRAD)) { return true; } diff --git a/src/CalcManager/CEngine/History.cpp b/src/CalcManager/CEngine/History.cpp index 74edf3cc..a7ea93ed 100644 --- a/src/CalcManager/CEngine/History.cpp +++ b/src/CalcManager/CEngine/History.cpp @@ -11,7 +11,8 @@ constexpr int ASCII_0 = 48; using namespace std; using namespace CalcEngine; -namespace { +namespace +{ void IFT(ResultCode hr) { if (FAILED(hr)) @@ -38,11 +39,8 @@ void CHistoryCollector::ReinitHistory() // Constructor // Can throw Out of memory error -CHistoryCollector::CHistoryCollector(ICalcDisplay *pCalcDisplay, std::shared_ptr pHistoryDisplay, wchar_t decimalSymbol) : - m_pHistoryDisplay(pHistoryDisplay), - m_pCalcDisplay(pCalcDisplay), - m_iCurLineHistStart(-1), - m_decimalSymbol(decimalSymbol) +CHistoryCollector::CHistoryCollector(ICalcDisplay* pCalcDisplay, std::shared_ptr pHistoryDisplay, wchar_t decimalSymbol) + : m_pHistoryDisplay(pHistoryDisplay), m_pCalcDisplay(pCalcDisplay), m_iCurLineHistStart(-1), m_decimalSymbol(decimalSymbol) { ReinitHistory(); } @@ -302,7 +300,8 @@ void CHistoryCollector::CompleteHistoryLine(wstring_view numStr) { if (nullptr != m_pCalcDisplay) { - m_pCalcDisplay->SetExpressionDisplay(std::make_shared>>(), std::make_shared>>()); + m_pCalcDisplay->SetExpressionDisplay(std::make_shared>>(), + std::make_shared>>()); } if (nullptr != m_pHistoryDisplay) @@ -323,14 +322,14 @@ void CHistoryCollector::ClearHistoryLine(wstring_view errStr) { if (nullptr != m_pCalcDisplay) { - m_pCalcDisplay->SetExpressionDisplay(std::make_shared>>(), std::make_shared>>()); + m_pCalcDisplay->SetExpressionDisplay(std::make_shared>>(), + std::make_shared>>()); } m_iCurLineHistStart = -1; // It will get recomputed at the first Opnd ReinitHistory(); } } - // Adds the given string psz to the globally maintained current equation string at the end. // Also returns the 0 based index in the string just added. Can throw out of memory error int CHistoryCollector::IchAddSzToEquationSz(wstring_view str, int icommandIndex) @@ -392,14 +391,13 @@ void CHistoryCollector::SetExpressionDisplay() { m_pCalcDisplay->SetExpressionDisplay(m_spTokens, m_spCommands); } - } -int CHistoryCollector::AddCommand(_In_ const std::shared_ptr & spCommand) +int CHistoryCollector::AddCommand(_In_ const std::shared_ptr& spCommand) { if (m_spCommands == nullptr) { - m_spCommands = std::make_shared >>(); + m_spCommands = std::make_shared>>(); } if (FAILED(m_spCommands->Append(spCommand))) diff --git a/src/CalcManager/CEngine/Number.cpp b/src/CalcManager/CEngine/Number.cpp index fdf29e09..685974a7 100644 --- a/src/CalcManager/CEngine/Number.cpp +++ b/src/CalcManager/CEngine/Number.cpp @@ -7,20 +7,15 @@ using namespace std; namespace CalcEngine { - Number::Number() noexcept : - Number(1, 0, { 0 }) - {} + Number::Number() noexcept : Number(1, 0, { 0 }) + { + } - Number::Number(int32_t sign, int32_t exp, vector const& mantissa) noexcept : - m_sign{ sign }, - m_exp{ exp }, - m_mantissa{ mantissa } - {} + Number::Number(int32_t sign, int32_t exp, vector const& mantissa) noexcept : m_sign{ sign }, m_exp{ exp }, m_mantissa{ mantissa } + { + } - Number::Number(PNUMBER p) noexcept : - m_sign{ p->sign }, - m_exp{ p->exp }, - m_mantissa{} + Number::Number(PNUMBER p) noexcept : m_sign{ p->sign }, m_exp{ p->exp }, m_mantissa{} { m_mantissa.reserve(p->cdigit); copy(p->mant, p->mant + p->cdigit, back_inserter(m_mantissa)); @@ -33,7 +28,7 @@ namespace CalcEngine ret->exp = this->Exp(); ret->cdigit = static_cast(this->Mantissa().size()); - MANTTYPE *ptrRet = ret->mant; + MANTTYPE* ptrRet = ret->mant; for (auto const& digit : this->Mantissa()) { *ptrRet++ = digit; @@ -59,6 +54,6 @@ namespace CalcEngine bool Number::IsZero() const { - return all_of(m_mantissa.begin(), m_mantissa.end(), [](auto &&i) { return i == 0; }); + return all_of(m_mantissa.begin(), m_mantissa.end(), [](auto&& i) { return i == 0; }); } } diff --git a/src/CalcManager/CEngine/Rational.cpp b/src/CalcManager/CEngine/Rational.cpp index e116c237..be2fcb7e 100644 --- a/src/CalcManager/CEngine/Rational.cpp +++ b/src/CalcManager/CEngine/Rational.cpp @@ -7,10 +7,9 @@ using namespace std; namespace CalcEngine { - Rational::Rational() noexcept : - m_p{}, - m_q{ 1, 0, { 1 } } - {} + Rational::Rational() noexcept : m_p{}, m_q{ 1, 0, { 1 } } + { + } Rational::Rational(Number const& n) noexcept { @@ -24,10 +23,9 @@ namespace CalcEngine m_q = Number(1, qExp, { 1 }); } - Rational::Rational(Number const& p, Number const& q) noexcept : - m_p{ p }, - m_q{ q } - {} + Rational::Rational(Number const& p, Number const& q) noexcept : m_p{ p }, m_q{ q } + { + } Rational::Rational(int32_t i) { @@ -60,10 +58,9 @@ namespace CalcEngine m_q = Number{ temp.Q() }; } - Rational::Rational(PRAT prat) noexcept : - m_p{ Number{prat->pp} }, - m_q{ Number{prat->pq} } - {} + Rational::Rational(PRAT prat) noexcept : m_p{ Number{ prat->pp } }, m_q{ Number{ prat->pq } } + { + } PRAT Rational::ToPRAT() const { @@ -353,7 +350,8 @@ namespace CalcEngine /// Calculate the remainder after division, the sign of a result will match the sign of lhs. /// /// - /// This function has the same behavior as the standard C/C++ operator '%', to calculate the modulus after division instead, use instead. + /// This function has the same behavior as the standard C/C++ operator '%', to calculate the modulus after division instead, use instead. /// Rational operator%(Rational lhs, Rational const& rhs) { diff --git a/src/CalcManager/CEngine/calc.cpp b/src/CalcManager/CEngine/calc.cpp index 65e6f0d0..41d41c7b 100644 --- a/src/CalcManager/CEngine/calc.cpp +++ b/src/CalcManager/CEngine/calc.cpp @@ -58,42 +58,43 @@ void CCalcEngine::InitialOneTimeOnlySetup(CalculationManager::IResourceProvider& // CCalcEngine::CCalcEngine // ////////////////////////////////////////////////// -CCalcEngine::CCalcEngine(bool fPrecedence, bool fIntegerMode, CalculationManager::IResourceProvider* const pResourceProvider, __in_opt ICalcDisplay *pCalcDisplay, __in_opt shared_ptr pHistoryDisplay) : - m_fPrecedence(fPrecedence), - m_fIntegerMode(fIntegerMode), - m_pCalcDisplay(pCalcDisplay), - m_resourceProvider(pResourceProvider), - m_nOpCode(0), - m_nPrevOpCode(0), - m_bChangeOp(false), - m_bRecord(false), - m_bSetCalcState(false), - m_input(DEFAULT_DEC_SEPARATOR), - m_nFE(FMT_FLOAT), - m_memoryValue{ make_unique() }, - m_holdVal{}, - m_currentVal{}, - m_lastVal{}, - m_parenVals{}, - m_precedenceVals{}, - m_bError(false), - m_bInv(false), - m_bNoPrevEqu(true), - m_radix(DEFAULT_RADIX), - m_precision(DEFAULT_PRECISION), - m_cIntDigitsSav(DEFAULT_MAX_DIGITS), - m_decGrouping(), - m_numberString(DEFAULT_NUMBER_STR), - m_nTempCom(0), - m_openParenCount(0), - m_nOp(), - m_nPrecOp(), - m_precedenceOpCount(0), - m_nLastCom(0), - m_angletype(ANGLE_DEG), - m_numwidth(QWORD_WIDTH), - m_HistoryCollector(pCalcDisplay, pHistoryDisplay, DEFAULT_DEC_SEPARATOR), - m_groupSeparator(DEFAULT_GRP_SEPARATOR) +CCalcEngine::CCalcEngine(bool fPrecedence, bool fIntegerMode, CalculationManager::IResourceProvider* const pResourceProvider, + __in_opt ICalcDisplay* pCalcDisplay, __in_opt shared_ptr pHistoryDisplay) + : m_fPrecedence(fPrecedence) + , m_fIntegerMode(fIntegerMode) + , m_pCalcDisplay(pCalcDisplay) + , m_resourceProvider(pResourceProvider) + , m_nOpCode(0) + , m_nPrevOpCode(0) + , m_bChangeOp(false) + , m_bRecord(false) + , m_bSetCalcState(false) + , m_input(DEFAULT_DEC_SEPARATOR) + , m_nFE(FMT_FLOAT) + , m_memoryValue{ make_unique() } + , m_holdVal{} + , m_currentVal{} + , m_lastVal{} + , m_parenVals{} + , m_precedenceVals{} + , m_bError(false) + , m_bInv(false) + , m_bNoPrevEqu(true) + , m_radix(DEFAULT_RADIX) + , m_precision(DEFAULT_PRECISION) + , m_cIntDigitsSav(DEFAULT_MAX_DIGITS) + , m_decGrouping() + , m_numberString(DEFAULT_NUMBER_STR) + , m_nTempCom(0) + , m_openParenCount(0) + , m_nOp() + , m_nPrecOp() + , m_precedenceOpCount(0) + , m_nLastCom(0) + , m_angletype(ANGLE_DEG) + , m_numwidth(QWORD_WIDTH) + , m_HistoryCollector(pCalcDisplay, pHistoryDisplay, DEFAULT_DEC_SEPARATOR) + , m_groupSeparator(DEFAULT_GRP_SEPARATOR) { InitChopNumbers(); diff --git a/src/CalcManager/CEngine/scicomm.cpp b/src/CalcManager/CEngine/scicomm.cpp index 36130bb5..12cde360 100644 --- a/src/CalcManager/CEngine/scicomm.cpp +++ b/src/CalcManager/CEngine/scicomm.cpp @@ -20,16 +20,16 @@ using namespace std; using namespace CalcEngine; -namespace { +namespace +{ // NPrecedenceOfOp // // returns a virtual number for precedence for the operator. We expect binary operator only, otherwise the lowest number // 0 is returned. Higher the number, higher the precedence of the operator. int NPrecedenceOfOp(int nopCode) { - static uint8_t rgbPrec[] = { 0,0, IDC_OR,0, IDC_XOR,0, IDC_AND,1, - IDC_ADD,2, IDC_SUB,2, IDC_RSHF,3, IDC_LSHF,3, - IDC_MOD,3, IDC_DIV,3, IDC_MUL,3, IDC_PWR,4, IDC_ROOT, 4 }; + static uint8_t rgbPrec[] = { 0, 0, IDC_OR, 0, IDC_XOR, 0, IDC_AND, 1, IDC_ADD, 2, IDC_SUB, 2, IDC_RSHF, + 3, IDC_LSHF, 3, IDC_MOD, 3, IDC_DIV, 3, IDC_MUL, 3, IDC_PWR, 4, IDC_ROOT, 4 }; unsigned int iPrec; iPrec = 0; @@ -42,7 +42,6 @@ namespace { iPrec = 0; } return rgbPrec[iPrec + 1]; - } } @@ -90,7 +89,7 @@ void CCalcEngine::ProcessCommand(OpCode wParam) void CCalcEngine::ProcessCommandWorker(OpCode wParam) { - int nx, ni; + int nx, ni; // Save the last command. Some commands are not saved in this manor, these // commands are: @@ -125,18 +124,13 @@ void CCalcEngine::ProcessCommandWorker(OpCode wParam) // Toggle Record/Display mode if appropriate. if (m_bRecord) { - if (IsOpInRange(wParam, IDC_AND, IDC_MMINUS) || - IsOpInRange(wParam, IDC_OPENP, IDC_CLOSEP) || - IsOpInRange(wParam, IDM_HEX, IDM_BIN) || - IsOpInRange(wParam, IDM_QWORD, IDM_BYTE) || - IsOpInRange(wParam, IDM_DEG, IDM_GRAD) || - IsOpInRange(wParam, IDC_BINEDITSTART, IDC_BINEDITSTART + 63) || - (IDC_INV == wParam) || - (IDC_SIGN == wParam && 10 != m_radix)) + if (IsOpInRange(wParam, IDC_AND, IDC_MMINUS) || IsOpInRange(wParam, IDC_OPENP, IDC_CLOSEP) || IsOpInRange(wParam, IDM_HEX, IDM_BIN) + || IsOpInRange(wParam, IDM_QWORD, IDM_BYTE) || IsOpInRange(wParam, IDM_DEG, IDM_GRAD) + || IsOpInRange(wParam, IDC_BINEDITSTART, IDC_BINEDITSTART + 63) || (IDC_INV == wParam) || (IDC_SIGN == wParam && 10 != m_radix)) { m_bRecord = false; m_currentVal = m_input.ToRational(m_radix, m_precision); - DisplayNum(); // Causes 3.000 to shrink to 3. on first op. + DisplayNum(); // Causes 3.000 to shrink to 3. on first op. } } else @@ -241,9 +235,9 @@ void CCalcEngine::ProcessCommandWorker(OpCode wParam) else { /* do the last operation and then if the precedence array is not - * empty or the top is not the '(' demarcator then pop the top - * of the array and recheck precedence against the new operator - */ + * empty or the top is not the '(' demarcator then pop the top + * of the array and recheck precedence against the new operator + */ m_currentVal = DoOperation(m_nOpCode, m_currentVal, m_lastVal); m_nPrevOpCode = m_nOpCode; @@ -272,7 +266,6 @@ void CCalcEngine::ProcessCommandWorker(OpCode wParam) m_HistoryCollector.PopLastOpndStart(); goto DoPrecedenceCheckAgain; } - } } @@ -337,11 +330,9 @@ void CCalcEngine::ProcessCommandWorker(OpCode wParam) /* reset the m_bInv flag and indicators if it is set and have been used */ - if (m_bInv && - ((wParam == IDC_CHOP) || - (wParam == IDC_SIN) || (wParam == IDC_COS) || (wParam == IDC_TAN) || - (wParam == IDC_LN) || (wParam == IDC_DMS) || (wParam == IDC_DEGREES) || - (wParam == IDC_SINH) || (wParam == IDC_COSH) || (wParam == IDC_TANH))) + if (m_bInv + && ((wParam == IDC_CHOP) || (wParam == IDC_SIN) || (wParam == IDC_COS) || (wParam == IDC_TAN) || (wParam == IDC_LN) || (wParam == IDC_DMS) + || (wParam == IDC_DEGREES) || (wParam == IDC_SINH) || (wParam == IDC_COSH) || (wParam == IDC_TANH))) { m_bInv = false; } @@ -386,13 +377,13 @@ void CCalcEngine::ProcessCommandWorker(OpCode wParam) m_nPrevOpCode = 0; m_bNoPrevEqu = true; - /* clear the parenthesis status box indicator, this will not be cleared for CENTR */ if (nullptr != m_pCalcDisplay) { m_pCalcDisplay->SetParenthesisNumber(0); - m_pCalcDisplay->SetExpressionDisplay(make_shared>>(), make_shared>>()); + m_pCalcDisplay->SetExpressionDisplay(make_shared>>(), + make_shared>>()); } m_HistoryCollector.ClearHistoryLine(wstring()); @@ -435,7 +426,7 @@ void CCalcEngine::ProcessCommandWorker(OpCode wParam) // automatic closing of all the parenthesis to get a meaningful result as well as ensure data integrity m_nTempCom = m_nLastCom; // Put back this last saved command to the prev state so ) can be handled properly ProcessCommand(IDC_CLOSEP); - m_nLastCom = m_nTempCom; // Actually this is IDC_CLOSEP + m_nLastCom = m_nTempCom; // Actually this is IDC_CLOSEP m_nTempCom = (int)wParam; // put back in the state where last op seen was IDC_CLOSEP, and current op is IDC_EQU } @@ -485,7 +476,8 @@ void CCalcEngine::ProcessCommandWorker(OpCode wParam) m_HistoryCollector.CompleteHistoryLine(groupedString); if (nullptr != m_pCalcDisplay) { - m_pCalcDisplay->SetExpressionDisplay(make_shared>>(), make_shared>>()); + m_pCalcDisplay->SetExpressionDisplay(make_shared>>(), + make_shared>>()); } } @@ -749,7 +741,6 @@ void CCalcEngine::ProcessCommandWorker(OpCode wParam) m_bInv = !m_bInv; break; } - } // Helper function to resolve one item on the precedence stack. @@ -758,8 +749,8 @@ void CCalcEngine::ResolveHighestPrecedenceOperation() // Is there a valid operation around? if (m_nOpCode) { - // If this is the first EQU in a string, set m_holdVal=m_currentVal - // Otherwise let m_currentVal=m_holdVal. This keeps m_currentVal constant + // If this is the first EQU in a string, set m_holdVal=m_currentVal + // Otherwise let m_currentVal=m_holdVal. This keeps m_currentVal constant // through all EQUs in a row. if (m_bNoPrevEqu) { @@ -814,7 +805,6 @@ void CCalcEngine::CheckAndAddLastBinOpToHistory(bool addToHistory) // So erase the last operand m_HistoryCollector.RemoveLastOpndFromHistory(); } - } else if (m_HistoryCollector.FOpndAddedToHistory() && !m_bError) { @@ -823,8 +813,7 @@ void CCalcEngine::CheckAndAddLastBinOpToHistory(bool addToHistory) // Let us make a current value =. So in case of 4 SQRT (or a equation under braces) and then a new equation is started, we can just form // a useful equation of sqrt(4) = 2 and continue a new equation from now on. But no point in doing this for things like // MR, SUM etc. All you will get is 5 = 5 kind of no useful equation. - if ((IsUnaryOpCode(m_nLastCom) || IDC_SIGN == m_nLastCom || IDC_CLOSEP == m_nLastCom) && - 0 == m_openParenCount) + if ((IsUnaryOpCode(m_nLastCom) || IDC_SIGN == m_nLastCom || IDC_CLOSEP == m_nLastCom) && 0 == m_openParenCount) { if (addToHistory) { @@ -864,7 +853,7 @@ void CCalcEngine::DisplayAnnounceBinaryOperator() // we have this separate table to get its localized name and for its Inv function if it exists. struct FunctionNameElement { - wstring degreeString; // Used by default if there are no rad or grad specific strings. + wstring degreeString; // Used by default if there are no rad or grad specific strings. wstring inverseDegreeString; // Will fall back to degreeString if empty wstring radString; @@ -877,9 +866,8 @@ struct FunctionNameElement }; // Table for each unary operator -static const std::unordered_map unaryOperatorStringTable = -{ - { IDC_CHOP, { L"", SIDS_FRAC} }, +static const std::unordered_map unaryOperatorStringTable = { + { IDC_CHOP, { L"", SIDS_FRAC } }, { IDC_SIN, { SIDS_SIND, SIDS_ASIND, SIDS_SINR, SIDS_ASINR, SIDS_SING, SIDS_ASING } }, { IDC_COS, { SIDS_COSD, SIDS_ACOSD, SIDS_COSR, SIDS_ACOSR, SIDS_COSG, SIDS_ACOSG } }, @@ -889,7 +877,7 @@ static const std::unordered_map unaryOperatorStringTab { IDC_COSH, { L"", SIDS_ACOSH } }, { IDC_TANH, { L"", SIDS_ATANH } }, - { IDC_LN , { L"", SIDS_POWE } }, + { IDC_LN, { L"", SIDS_POWE } }, { IDC_SQR, { SIDS_SQR } }, { IDC_CUB, { SIDS_CUBE } }, { IDC_FAC, { SIDS_FACT } }, diff --git a/src/CalcManager/CEngine/scidisp.cpp b/src/CalcManager/CEngine/scidisp.cpp index 1ef88799..8d4eed1f 100644 --- a/src/CalcManager/CEngine/scidisp.cpp +++ b/src/CalcManager/CEngine/scidisp.cpp @@ -25,7 +25,6 @@ constexpr uint32_t MAX_GROUPING_SIZE = 16; constexpr wstring_view c_decPreSepStr = L"[+-]?(\\d*)["; constexpr wstring_view c_decPostSepStr = L"]?(\\d*)(?:e[+-]?(\\d*))?$"; - /****************************************************************************\ * void DisplayNum(void) * @@ -37,15 +36,16 @@ constexpr wstring_view c_decPostSepStr = L"]?(\\d*)(?:e[+-]?(\\d*))?$"; // // State of calc last time DisplayNum was called // -typedef struct { +typedef struct +{ Rational value; int32_t precision; uint32_t radix; - int nFE; - NUM_WIDTH numwidth; - bool fIntMath; - bool bRecord; - bool bUseSep; + int nFE; + NUM_WIDTH numwidth; + bool fIntMath; + bool bRecord; + bool bUseSep; } LASTDISP; LASTDISP gldPrevious = { 0, -1, 0, -1, (NUM_WIDTH)-1, false, false, false }; @@ -66,7 +66,7 @@ CalcEngine::Rational CCalcEngine::TruncateNumForIntMath(CalcEngine::Rational con if (result < 0) { // if negative make positive by doing a twos complement - result = -(result) - 1; + result = -(result)-1; result ^= m_chopNumbers[m_numwidth]; } @@ -84,15 +84,8 @@ void CCalcEngine::DisplayNum(void) // something important has changed since the last time DisplayNum was // called. // - if (m_bRecord || - gldPrevious.value != m_currentVal || - gldPrevious.precision != m_precision || - gldPrevious.radix != m_radix || - gldPrevious.nFE != (int)m_nFE || - gldPrevious.bUseSep != true || - gldPrevious.numwidth != m_numwidth || - gldPrevious.fIntMath != m_fIntegerMode || - gldPrevious.bRecord != m_bRecord) + if (m_bRecord || gldPrevious.value != m_currentVal || gldPrevious.precision != m_precision || gldPrevious.radix != m_radix || gldPrevious.nFE != (int)m_nFE + || gldPrevious.bUseSep != true || gldPrevious.numwidth != m_numwidth || gldPrevious.fIntMath != m_fIntegerMode || gldPrevious.bRecord != m_bRecord) { gldPrevious.precision = m_precision; gldPrevious.radix = m_radix; diff --git a/src/CalcManager/CEngine/scifunc.cpp b/src/CalcManager/CEngine/scifunc.cpp index c2341752..5684ce43 100644 --- a/src/CalcManager/CEngine/scifunc.cpp +++ b/src/CalcManager/CEngine/scifunc.cpp @@ -54,7 +54,7 @@ CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& r uint64_t w64Bits = result.ToUInt64_t(); uint64_t msb = (w64Bits >> (m_dwWordBitWidth - 1)) & 1; - w64Bits <<= 1; // LShift by 1 + w64Bits <<= 1; // LShift by 1 w64Bits |= msb; // Set the prev Msb as the current Lsb result = w64Bits; @@ -168,9 +168,9 @@ CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& r case IDC_DEGREES: ProcessCommand(IDC_INV); - // This case falls through to IDC_DMS case because in the old Win32 Calc, + // This case falls through to IDC_DMS case because in the old Win32 Calc, // the degrees functionality was achieved as 'Inv' of 'dms' operation, - // so setting the IDC_INV command first and then performing 'dms' operation as global variables m_bInv, m_bRecord + // so setting the IDC_INV command first and then performing 'dms' operation as global variables m_bInv, m_bRecord // are set properly through ProcessCommand(IDC_INV) [[fallthrough]]; case IDC_DMS: @@ -202,7 +202,7 @@ CalcEngine::Rational CCalcEngine::SciCalcFunctions(CalcEngine::Rational const& r } break; } - } // end switch( op ) + } // end switch( op ) } catch (uint32_t nErrCode) { @@ -226,4 +226,3 @@ void CCalcEngine::DisplayError(uint32_t nError) m_HistoryCollector.ClearHistoryLine(errorString); } - diff --git a/src/CalcManager/CEngine/scioper.cpp b/src/CalcManager/CEngine/scioper.cpp index f8d04855..e41aee21 100644 --- a/src/CalcManager/CEngine/scioper.cpp +++ b/src/CalcManager/CEngine/scioper.cpp @@ -126,7 +126,7 @@ CalcEngine::Rational CCalcEngine::DoOperation(int operation, CalcEngine::Rationa } else { - //other modes, use modrat (modulus after division) + // other modes, use modrat (modulus after division) result = Mod(result, temp); } } diff --git a/src/CalcManager/CEngine/sciset.cpp b/src/CalcManager/CEngine/sciset.cpp index ca715be5..676ab0eb 100644 --- a/src/CalcManager/CEngine/sciset.cpp +++ b/src/CalcManager/CEngine/sciset.cpp @@ -64,7 +64,7 @@ int32_t CCalcEngine::DwWordBitWidthFromeNumWidth(NUM_WIDTH /*numwidth*/) uint32_t CCalcEngine::NRadixFromRadixType(RADIX_TYPE radixtype) { - static constexpr uint32_t rgnRadish[4] = { 16, 10, 8, 2 }; /* Number bases in the same order as radixtype */ + static constexpr uint32_t rgnRadish[4] = { 16, 10, 8, 2 }; /* Number bases in the same order as radixtype */ uint32_t radix = 10; // convert special bases into symbolic values diff --git a/src/CalcManager/CalculatorHistory.cpp b/src/CalcManager/CalculatorHistory.cpp index 935ea8da..8929cc0c 100644 --- a/src/CalcManager/CalculatorHistory.cpp +++ b/src/CalcManager/CalculatorHistory.cpp @@ -7,11 +7,12 @@ using namespace std; using namespace CalculationManager; -CalculatorHistory::CalculatorHistory(size_t maxSize) : - m_maxHistorySize(maxSize) -{} +CalculatorHistory::CalculatorHistory(size_t maxSize) : m_maxHistorySize(maxSize) +{ +} -unsigned int CalculatorHistory::AddToHistory(_In_ shared_ptr>> const &tokens, _In_ shared_ptr>> const &commands, _In_ wstring_view result) +unsigned int CalculatorHistory::AddToHistory(_In_ shared_ptr>> const& tokens, + _In_ shared_ptr>> const& commands, _In_ wstring_view result) { unsigned int addedIndex; wstring generatedExpression; @@ -31,8 +32,7 @@ unsigned int CalculatorHistory::AddToHistory(_In_ shared_ptr const &spHistoryItem) +unsigned int CalculatorHistory::AddItem(_In_ shared_ptr const& spHistoryItem) { if (m_historyItems.size() >= m_maxHistorySize) { diff --git a/src/CalcManager/CalculatorHistory.h b/src/CalcManager/CalculatorHistory.h index ea87f857..eadb04af 100644 --- a/src/CalcManager/CalculatorHistory.h +++ b/src/CalcManager/CalculatorHistory.h @@ -15,10 +15,10 @@ namespace CalculationManager struct HISTORYITEMVECTOR { - std::shared_ptr>> spTokens; + std::shared_ptr>> spTokens; std::shared_ptr>> spCommands; - std::wstring expression; - std::wstring result; + std::wstring expression; + std::wstring result; }; struct HISTORYITEM @@ -26,19 +26,21 @@ namespace CalculationManager HISTORYITEMVECTOR historyItemVector; }; - class CalculatorHistory : - public IHistoryDisplay + class CalculatorHistory : public IHistoryDisplay { - public: CalculatorHistory(const size_t maxSize); - unsigned int AddToHistory(_In_ std::shared_ptr>> const &spTokens, _In_ std::shared_ptr>> const &spCommands, std::wstring_view result); + unsigned int AddToHistory(_In_ std::shared_ptr>> const& spTokens, + _In_ std::shared_ptr>> const& spCommands, std::wstring_view result); std::vector> const& GetHistory(); std::shared_ptr const& GetHistoryItem(unsigned int uIdx); void ClearHistory(); - unsigned int AddItem(_In_ std::shared_ptr const &spHistoryItem); + unsigned int AddItem(_In_ std::shared_ptr const& spHistoryItem); bool RemoveItem(unsigned int uIdx); - size_t MaxHistorySize() const { return m_maxHistorySize; } + size_t MaxHistorySize() const + { + return m_maxHistorySize; + } ~CalculatorHistory(void); private: diff --git a/src/CalcManager/CalculatorManager.cpp b/src/CalcManager/CalculatorManager.cpp index e640bd94..5d542843 100644 --- a/src/CalcManager/CalculatorManager.cpp +++ b/src/CalcManager/CalculatorManager.cpp @@ -14,25 +14,21 @@ static constexpr size_t SERIALIZED_NUMBER_MINSIZE = 3; // Converts Memory Command enum value to unsigned char, // while ignoring Warning C4309: 'conversion' : truncation of constant value -#define MEMORY_COMMAND_TO_UNSIGNED_CHAR(c)\ - __pragma(warning(push))\ - __pragma(warning(disable: 4309))\ - static_cast(c)\ - __pragma(warning(pop)) +#define MEMORY_COMMAND_TO_UNSIGNED_CHAR(c) __pragma(warning(push)) __pragma(warning(disable : 4309)) static_cast(c) __pragma(warning(pop)) namespace CalculationManager { - CalculatorManager::CalculatorManager(_In_ ICalcDisplay* displayCallback, _In_ IResourceProvider* resourceProvider) : - m_displayCallback(displayCallback), - m_currentCalculatorEngine(nullptr), - m_resourceProvider(resourceProvider), - m_inHistoryItemLoadMode(false), - m_persistedPrimaryValue(), - m_isExponentialFormat(false), - m_currentDegreeMode(Command::CommandNULL), - m_savedDegreeMode(Command::CommandDEG), - m_pStdHistory(new CalculatorHistory(MAX_HISTORY_ITEMS)), - m_pSciHistory(new CalculatorHistory(MAX_HISTORY_ITEMS)) + CalculatorManager::CalculatorManager(_In_ ICalcDisplay* displayCallback, _In_ IResourceProvider* resourceProvider) + : m_displayCallback(displayCallback) + , m_currentCalculatorEngine(nullptr) + , m_resourceProvider(resourceProvider) + , m_inHistoryItemLoadMode(false) + , m_persistedPrimaryValue() + , m_isExponentialFormat(false) + , m_currentDegreeMode(Command::CommandNULL) + , m_savedDegreeMode(Command::CommandDEG) + , m_pStdHistory(new CalculatorHistory(MAX_HISTORY_ITEMS)) + , m_pSciHistory(new CalculatorHistory(MAX_HISTORY_ITEMS)) { CCalcEngine::InitialOneTimeOnlySetup(*m_resourceProvider); } @@ -89,7 +85,8 @@ namespace CalculationManager /// Used to set the expression display value on ViewModel /// /// wstring representing expression to be displayed - void CalculatorManager::SetExpressionDisplay(_Inout_ shared_ptr>> const &tokens, _Inout_ shared_ptr>> const &commands) + void CalculatorManager::SetExpressionDisplay(_Inout_ shared_ptr>> const& tokens, + _Inout_ shared_ptr>> const& commands) { if (!m_inHistoryItemLoadMode) { @@ -165,7 +162,8 @@ namespace CalculationManager { if (!m_standardCalculatorEngine) { - m_standardCalculatorEngine = make_unique(false /* Respect Order of Operations */, false /* Set to Integer Mode */, m_resourceProvider, this, m_pStdHistory); + m_standardCalculatorEngine = + make_unique(false /* Respect Order of Operations */, false /* Set to Integer Mode */, m_resourceProvider, this, m_pStdHistory); } m_currentCalculatorEngine = m_standardCalculatorEngine.get(); @@ -183,7 +181,8 @@ namespace CalculationManager { if (!m_scientificCalculatorEngine) { - m_scientificCalculatorEngine = make_unique(true /* Respect Order of Operations */, false /* Set to Integer Mode */, m_resourceProvider, this, m_pSciHistory); + m_scientificCalculatorEngine = + make_unique(true /* Respect Order of Operations */, false /* Set to Integer Mode */, m_resourceProvider, this, m_pSciHistory); } m_currentCalculatorEngine = m_scientificCalculatorEngine.get(); @@ -198,9 +197,10 @@ namespace CalculationManager /// void CalculatorManager::SetProgrammerMode() { - if(!m_programmerCalculatorEngine) + if (!m_programmerCalculatorEngine) { - m_programmerCalculatorEngine = make_unique(true /* Respect Order of Operations */, true /* Set to Integer Mode */, m_resourceProvider, this, nullptr); + m_programmerCalculatorEngine = + make_unique(true /* Respect Order of Operations */, true /* Set to Integer Mode */, m_resourceProvider, this, nullptr); } m_currentCalculatorEngine = m_programmerCalculatorEngine.get(); @@ -209,7 +209,6 @@ namespace CalculationManager m_currentCalculatorEngine->ChangePrecision(static_cast(CalculatorPrecision::ProgrammerModePrecision)); } - /// /// Send command to the Calc Engine /// Cast Command Enum to OpCode. @@ -220,8 +219,8 @@ namespace CalculationManager { // When the expression line is cleared, we save the current state, which includes, // primary display, memory, and degree mode - if (command == Command::CommandCLEAR || command == Command::CommandEQU - || command == Command::ModeBasic || command == Command::ModeScientific || command == Command::ModeProgrammer) + if (command == Command::CommandCLEAR || command == Command::CommandEQU || command == Command::ModeBasic || command == Command::ModeScientific + || command == Command::ModeProgrammer) { switch (command) { @@ -361,7 +360,7 @@ namespace CalculationManager /// DeSerialize the primary display from vector of long /// /// Serialized Rational of primary display - void CalculatorManager::DeSerializePrimaryDisplay(const vector &serializedPrimaryDisplay) + void CalculatorManager::DeSerializePrimaryDisplay(const vector& serializedPrimaryDisplay) { if (serializedPrimaryDisplay.empty()) { @@ -404,7 +403,7 @@ namespace CalculationManager /// DeSerialize the Memory from vector of long /// /// Serialized Rational of memory - void CalculatorManager::DeSerializeMemory(const vector &serializedMemory) + void CalculatorManager::DeSerializeMemory(const vector& serializedMemory) { vector::const_iterator itr = serializedMemory.begin(); while (itr != serializedMemory.end()) @@ -435,8 +434,8 @@ namespace CalculationManager for (auto commandItr = serializedData.begin(); commandItr != serializedData.end(); ++commandItr) { - if (*commandItr >= MEMORY_COMMAND_TO_UNSIGNED_CHAR(MemoryCommand::MemorizeNumber) && - *commandItr <= MEMORY_COMMAND_TO_UNSIGNED_CHAR(MemoryCommand::MemorizedNumberClearAll)) + if (*commandItr >= MEMORY_COMMAND_TO_UNSIGNED_CHAR(MemoryCommand::MemorizeNumber) + && *commandItr <= MEMORY_COMMAND_TO_UNSIGNED_CHAR(MemoryCommand::MemorizedNumberClearAll)) { // MemoryCommands(which have values above 255) are pushed on m_savedCommands upon casting to unsigned char. // SerializeCommands uses m_savedCommands, which is then used in DeSerializeCommands. @@ -622,10 +621,10 @@ namespace CalculationManager } /// -/// Helper function that selects a memory from the vector and set it to CCalcEngine -/// Saved RAT number needs to be copied and passed in, as CCalcEngine destroyed the passed in RAT -/// -/// Index of the target memory + /// Helper function that selects a memory from the vector and set it to CCalcEngine + /// Saved RAT number needs to be copied and passed in, as CCalcEngine destroyed the passed in RAT + /// + /// Index of the target memory void CalculatorManager::MemorizedNumberSelect(_In_ unsigned int indexOfMemory) { if (m_currentCalculatorEngine->FInErrorState()) @@ -673,9 +672,7 @@ namespace CalculationManager vector> const& CalculatorManager::GetHistoryItems(_In_ CALCULATOR_MODE mode) { - return (mode == CM_STD) ? - m_pStdHistory->GetHistory() : - m_pSciHistory->GetHistory(); + return (mode == CM_STD) ? m_pStdHistory->GetHistory() : m_pSciHistory->GetHistory(); } shared_ptr const& CalculatorManager::GetHistoryItem(_In_ unsigned int uIdx) diff --git a/src/CalcManager/CalculatorManager.h b/src/CalcManager/CalculatorManager.h index e00dc243..91a519d2 100644 --- a/src/CalcManager/CalculatorManager.h +++ b/src/CalcManager/CalculatorManager.h @@ -91,7 +91,8 @@ namespace CalculationManager // ICalcDisplay void SetPrimaryDisplay(_In_ const std::wstring& displayString, _In_ bool isError) override; void SetIsInError(bool isError) override; - void SetExpressionDisplay(_Inout_ std::shared_ptr>> const &tokens, _Inout_ std::shared_ptr>> const &commands) override; + void SetExpressionDisplay(_Inout_ std::shared_ptr>> const& tokens, + _Inout_ std::shared_ptr>> const& commands) override; void SetMemorizedNumbers(_In_ const std::vector& memorizedNumbers) override; void OnHistoryItemAdded(_In_ unsigned int addedItemIndex) override; void SetParenthesisNumber(_In_ unsigned int parenthesisCount) override; @@ -101,7 +102,6 @@ namespace CalculationManager void BinaryOperatorReceived() override; void MemoryItemChanged(unsigned int indexOfMemory) override; - CalculatorManager(ICalcDisplay* displayCallback, IResourceProvider* resourceProvider); ~CalculatorManager(); @@ -114,10 +114,10 @@ namespace CalculationManager void DeSerializeCommands(_In_ const std::vector& serializedData); void SerializeMemory(); std::vector GetSerializedMemory(); - void DeSerializeMemory(const std::vector &serializedMemory); + void DeSerializeMemory(const std::vector& serializedMemory); void SerializePrimaryDisplay(); std::vector GetSerializedPrimaryDisplay(); - void DeSerializePrimaryDisplay(const std::vector &serializedPrimaryDisplay); + void DeSerializePrimaryDisplay(const std::vector& serializedPrimaryDisplay); Command SerializeSavedDegreeMode(); void MemorizeNumber(); @@ -128,7 +128,10 @@ namespace CalculationManager void MemorizedNumberClearAll(); bool IsEngineRecording(); - std::vector GetSavedCommands(){ return m_savedCommands; } + std::vector GetSavedCommands() + { + return m_savedCommands; + } void SetRadix(RADIX_TYPE iRadixType); void SetMemorizedNumbersString(); std::wstring GetResultForRadix(uint32_t radix, int32_t precision); @@ -141,7 +144,10 @@ namespace CalculationManager std::shared_ptr const& GetHistoryItem(_In_ unsigned int uIdx); bool RemoveHistoryItem(_In_ unsigned int uIdx); void ClearHistory(); - size_t MaxHistorySize() const { return m_pHistory->MaxHistorySize(); } + size_t MaxHistorySize() const + { + return m_pHistory->MaxHistorySize(); + } CalculationManager::Command GetCurrentDegreeMode(); void SetHistory(_In_ CALCULATOR_MODE eMode, _In_ std::vector> const& history); void SetInHistoryItemLoadMode(_In_ bool isHistoryItemLoadMode); diff --git a/src/CalcManager/CalculatorResource.h b/src/CalcManager/CalculatorResource.h index 3493234a..5f360f35 100644 --- a/src/CalcManager/CalculatorResource.h +++ b/src/CalcManager/CalculatorResource.h @@ -8,7 +8,9 @@ namespace CalculationManager class IResourceProvider { public: - virtual ~IResourceProvider() { } + virtual ~IResourceProvider() + { + } // Should return a string from the resource table for strings used // by the calculation engine. The strings that must be defined diff --git a/src/CalcManager/CalculatorVector.h b/src/CalcManager/CalculatorVector.h index e9f1b8dc..e89b55e4 100644 --- a/src/CalcManager/CalculatorVector.h +++ b/src/CalcManager/CalculatorVector.h @@ -8,13 +8,13 @@ #include #include "Ratpack/CalcErr.h" #include // for std::out_of_range -#include // for SAL +#include // for SAL template class CalculatorVector { public: - ResultCode GetAt(_In_opt_ unsigned int index, _Out_ TType *item) + ResultCode GetAt(_In_opt_ unsigned int index, _Out_ TType* item) { ResultCode hr = S_OK; try @@ -28,7 +28,7 @@ public: return hr; } - ResultCode GetSize(_Out_ unsigned int *size) + ResultCode GetSize(_Out_ unsigned int* size) { *size = static_cast(m_vector.size()); return S_OK; @@ -122,7 +122,7 @@ public: { ResultCode hr = S_OK; unsigned int nTokens = 0; - std::pair currentPair; + std::pair currentPair; hr = this->GetSize(&nTokens); if (SUCCEEDED(hr)) { diff --git a/src/CalcManager/Command.h b/src/CalcManager/Command.h index 4d98d012..3dd508ed 100644 --- a/src/CalcManager/Command.h +++ b/src/CalcManager/Command.h @@ -7,9 +7,19 @@ namespace UnitConversionManager { enum class Command { - Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine, + Zero, + One, + Two, + Three, + Four, + Five, + Six, + Seven, + Eight, + Nine, Decimal, - Negate, Backspace, + Negate, + Backspace, Clear, Reset, None @@ -20,9 +30,19 @@ namespace CurrencyConversionManager { enum class Command { - Zero, One, Two, Three, Four, Five, Six, Seven, Eight, Nine, + Zero, + One, + Two, + Three, + Four, + Five, + Six, + Seven, + Eight, + Nine, Decimal, - Negate, Backspace, + Negate, + Backspace, Clear, None }; @@ -73,7 +93,7 @@ namespace CalculationManager CommandROOT = 96, CommandPWR = 97, - CommandCHOP = 98, // Unary operators must be between CommandCHOP and CommandEQU + CommandCHOP = 98, // Unary operators must be between CommandCHOP and CommandEQU CommandROL = 99, CommandROR = 100, CommandCOM = 101, @@ -85,7 +105,6 @@ namespace CalculationManager CommandCOSH = 106, CommandTANH = 107, - CommandLN = 108, CommandLOG = 109, CommandSQRT = 110, @@ -94,8 +113,8 @@ namespace CalculationManager CommandFAC = 113, CommandREC = 114, CommandDMS = 115, - CommandCUBEROOT = 116, // x ^ 1/3 - CommandPOW10 = 117, // 10 ^ x + CommandCUBEROOT = 116, // x ^ 1/3 + CommandPOW10 = 117, // 10 ^ x CommandPERCENT = 118, CommandFE = 119, @@ -113,7 +132,7 @@ namespace CalculationManager CommandOPENP = 128, CommandCLOSEP = 129, - Command0 = 130, // The controls for 0 through F must be consecutive and in order + Command0 = 130, // The controls for 0 through F must be consecutive and in order Command1 = 131, Command2 = 132, Command3 = 133, @@ -128,7 +147,7 @@ namespace CalculationManager CommandC = 142, CommandD = 143, CommandE = 144, - CommandF = 145, // this is last control ID which must match the string table + CommandF = 145, // this is last control ID which must match the string table CommandINV = 146, CommandSET_RESULT = 147, diff --git a/src/CalcManager/ExpressionCommand.cpp b/src/CalcManager/ExpressionCommand.cpp index 9fc87708..c177de02 100644 --- a/src/CalcManager/ExpressionCommand.cpp +++ b/src/CalcManager/ExpressionCommand.cpp @@ -13,8 +13,9 @@ constexpr wchar_t chNegate = L'-'; constexpr wchar_t chExp = L'e'; constexpr wchar_t chPlus = L'+'; -CParentheses::CParentheses(_In_ int command) :m_command(command) -{} +CParentheses::CParentheses(_In_ int command) : m_command(command) +{ +} int CParentheses::GetCommand() const { @@ -26,7 +27,7 @@ CalculationManager::CommandType CParentheses::GetCommandType() const return CalculationManager::CommandType::Parentheses; } -void CParentheses::Accept(_In_ ISerializeCommandVisitor &commandVisitor) +void CParentheses::Accept(_In_ ISerializeCommandVisitor& commandVisitor) { commandVisitor.Visit(*this); } @@ -44,7 +45,7 @@ CUnaryCommand::CUnaryCommand(int command1, int command2) m_command->Append(command2); } -const shared_ptr> & CUnaryCommand::GetCommands() const +const shared_ptr>& CUnaryCommand::GetCommands() const { return m_command; } @@ -67,13 +68,14 @@ void CUnaryCommand::SetCommands(int command1, int command2) m_command->Append(command2); } -void CUnaryCommand::Accept(_In_ ISerializeCommandVisitor &commandVisitor) +void CUnaryCommand::Accept(_In_ ISerializeCommandVisitor& commandVisitor) { commandVisitor.Visit(*this); } -CBinaryCommand::CBinaryCommand(int command) :m_command(command) -{} +CBinaryCommand::CBinaryCommand(int command) : m_command(command) +{ +} void CBinaryCommand::SetCommand(int command) { @@ -90,19 +92,15 @@ CalculationManager::CommandType CBinaryCommand::GetCommandType() const return CalculationManager::CommandType::BinaryCommand; } -void CBinaryCommand::Accept(_In_ ISerializeCommandVisitor &commandVisitor) +void CBinaryCommand::Accept(_In_ ISerializeCommandVisitor& commandVisitor) { commandVisitor.Visit(*this); } -COpndCommand::COpndCommand(shared_ptr> const &commands, bool fNegative, bool fDecimal, bool fSciFmt) : - m_commands(commands), - m_fNegative(fNegative), - m_fSciFmt(fSciFmt), - m_fDecimal(fDecimal), - m_fInitialized(false), - m_value{} -{} +COpndCommand::COpndCommand(shared_ptr> const& commands, bool fNegative, bool fDecimal, bool fSciFmt) + : m_commands(commands), m_fNegative(fNegative), m_fSciFmt(fSciFmt), m_fDecimal(fDecimal), m_fInitialized(false), m_value{} +{ +} void COpndCommand::Initialize(Rational const& rat) { @@ -110,7 +108,7 @@ void COpndCommand::Initialize(Rational const& rat) m_fInitialized = true; } -const shared_ptr> & COpndCommand::GetCommands() const +const shared_ptr>& COpndCommand::GetCommands() const { return m_commands; } @@ -213,7 +211,7 @@ void COpndCommand::ClearAllAndAppendCommand(CalculationManager::Command command) m_fDecimal = false; } -const wstring & COpndCommand::GetToken(wchar_t decimalSymbol) +const wstring& COpndCommand::GetToken(wchar_t decimalSymbol) { static const wchar_t chZero = L'0'; @@ -299,7 +297,7 @@ wstring COpndCommand::GetString(uint32_t radix, int32_t precision) return result; } -void COpndCommand::Accept(_In_ ISerializeCommandVisitor &commandVisitor) +void COpndCommand::Accept(_In_ ISerializeCommandVisitor& commandVisitor) { commandVisitor.Visit(*this); } diff --git a/src/CalcManager/ExpressionCommand.h b/src/CalcManager/ExpressionCommand.h index 2958f4f8..91d41e60 100644 --- a/src/CalcManager/ExpressionCommand.h +++ b/src/CalcManager/ExpressionCommand.h @@ -12,7 +12,7 @@ public: CParentheses(_In_ int command); int GetCommand() const override; CalculationManager::CommandType GetCommandType() const override; - void Accept(_In_ ISerializeCommandVisitor &commandVisitor) override; + void Accept(_In_ ISerializeCommandVisitor& commandVisitor) override; private: int m_command; @@ -23,11 +23,11 @@ class CUnaryCommand final : public IUnaryCommand public: CUnaryCommand(int command); CUnaryCommand(int command1, int command2); - const std::shared_ptr> & GetCommands() const override; + const std::shared_ptr>& GetCommands() const override; CalculationManager::CommandType GetCommandType() const override; void SetCommand(int command) override; void SetCommands(int command1, int command2) override; - void Accept(_In_ ISerializeCommandVisitor &commandVisitor) override; + void Accept(_In_ ISerializeCommandVisitor& commandVisitor) override; private: std::shared_ptr> m_command; @@ -40,7 +40,7 @@ public: void SetCommand(int command) override; int GetCommand() const override; CalculationManager::CommandType GetCommandType() const override; - void Accept(_In_ ISerializeCommandVisitor &commandVisitor) override; + void Accept(_In_ ISerializeCommandVisitor& commandVisitor) override; private: int m_command; @@ -49,14 +49,10 @@ private: class COpndCommand final : public IOpndCommand { public: - COpndCommand( - std::shared_ptr> const &commands, - bool fNegative, - bool fDecimal, - bool fSciFmt); + COpndCommand(std::shared_ptr> const& commands, bool fNegative, bool fDecimal, bool fSciFmt); void Initialize(CalcEngine::Rational const& rat); - const std::shared_ptr> & GetCommands() const override; + const std::shared_ptr>& GetCommands() const override; void SetCommands(std::shared_ptr> const& commands) override; void AppendCommand(int command) override; void ToggleSign() override; @@ -64,9 +60,9 @@ public: bool IsNegative() const override; bool IsSciFmt() const override; bool IsDecimalPresent() const override; - const std::wstring & GetToken(wchar_t decimalSymbol) override; + const std::wstring& GetToken(wchar_t decimalSymbol) override; CalculationManager::CommandType GetCommandType() const override; - void Accept(_In_ ISerializeCommandVisitor &commandVisitor) override; + void Accept(_In_ ISerializeCommandVisitor& commandVisitor) override; std::wstring GetString(uint32_t radix, int32_t precision); private: @@ -83,8 +79,8 @@ private: class ISerializeCommandVisitor { public: - virtual void Visit(_In_ COpndCommand &opndCmd) = 0; - virtual void Visit(_In_ CUnaryCommand &unaryCmd) = 0; - virtual void Visit(_In_ CBinaryCommand &binaryCmd) = 0; - virtual void Visit(_In_ CParentheses ¶Cmd) = 0; + virtual void Visit(_In_ COpndCommand& opndCmd) = 0; + virtual void Visit(_In_ CUnaryCommand& unaryCmd) = 0; + virtual void Visit(_In_ CBinaryCommand& binaryCmd) = 0; + virtual void Visit(_In_ CParentheses& paraCmd) = 0; }; diff --git a/src/CalcManager/ExpressionCommandInterface.h b/src/CalcManager/ExpressionCommandInterface.h index 94bae836..9115316d 100644 --- a/src/CalcManager/ExpressionCommandInterface.h +++ b/src/CalcManager/ExpressionCommandInterface.h @@ -13,7 +13,7 @@ class IExpressionCommand { public: virtual CalculationManager::CommandType GetCommandType() const = 0; - virtual void Accept(_In_ ISerializeCommandVisitor &commandVisitor) = 0; + virtual void Accept(_In_ ISerializeCommandVisitor& commandVisitor) = 0; }; class IOperatorCommand : public IExpressionCommand @@ -25,7 +25,7 @@ public: class IUnaryCommand : public IOperatorCommand { public: - virtual const std::shared_ptr> & GetCommands() const = 0; + virtual const std::shared_ptr>& GetCommands() const = 0; virtual void SetCommands(int command1, int command2) = 0; }; @@ -39,14 +39,14 @@ public: class IOpndCommand : public IExpressionCommand { public: - virtual const std::shared_ptr> & GetCommands() const= 0; + virtual const std::shared_ptr>& GetCommands() const = 0; virtual void AppendCommand(int command) = 0; virtual void ToggleSign() = 0; virtual void RemoveFromEnd() = 0; virtual bool IsNegative() const = 0; virtual bool IsSciFmt() const = 0; virtual bool IsDecimalPresent() const = 0; - virtual const std::wstring & GetToken(wchar_t decimalSymbol) = 0; + virtual const std::wstring& GetToken(wchar_t decimalSymbol) = 0; virtual void SetCommands(std::shared_ptr> const& commands) = 0; }; diff --git a/src/CalcManager/Header Files/CCommand.h b/src/CalcManager/Header Files/CCommand.h index 9530b5c5..6366b45a 100644 --- a/src/CalcManager/Header Files/CCommand.h +++ b/src/CalcManager/Header Files/CCommand.h @@ -17,34 +17,33 @@ // The following are the valid id's which can be passed to CCalcEngine::ProcessCommand -#define IDM_HEX 313 -#define IDM_DEC 314 -#define IDM_OCT 315 -#define IDM_BIN 316 -#define IDM_QWORD 317 -#define IDM_DWORD 318 -#define IDM_WORD 319 -#define IDM_BYTE 320 -#define IDM_DEG 321 -#define IDM_RAD 322 -#define IDM_GRAD 323 -#define IDM_DEGREES 324 +#define IDM_HEX 313 +#define IDM_DEC 314 +#define IDM_OCT 315 +#define IDM_BIN 316 +#define IDM_QWORD 317 +#define IDM_DWORD 318 +#define IDM_WORD 319 +#define IDM_BYTE 320 +#define IDM_DEG 321 +#define IDM_RAD 322 +#define IDM_GRAD 323 +#define IDM_DEGREES 324 -#define IDC_HEX IDM_HEX -#define IDC_DEC IDM_DEC -#define IDC_OCT IDM_OCT -#define IDC_BIN IDM_BIN +#define IDC_HEX IDM_HEX +#define IDC_DEC IDM_DEC +#define IDC_OCT IDM_OCT +#define IDC_BIN IDM_BIN -#define IDC_DEG IDM_DEG -#define IDC_RAD IDM_RAD -#define IDC_GRAD IDM_GRAD -#define IDC_DEGREES IDM_DEGREES - -#define IDC_QWORD IDM_QWORD -#define IDC_DWORD IDM_DWORD -#define IDC_WORD IDM_WORD -#define IDC_BYTE IDM_BYTE +#define IDC_DEG IDM_DEG +#define IDC_RAD IDM_RAD +#define IDC_GRAD IDM_GRAD +#define IDC_DEGREES IDM_DEGREES +#define IDC_QWORD IDM_QWORD +#define IDC_DWORD IDM_DWORD +#define IDC_WORD IDM_WORD +#define IDC_BYTE IDM_BYTE // Key IDs: // These id's must be consecutive from IDC_FIRSTCONTROL to IDC_LASTCONTROL. @@ -55,162 +54,158 @@ // Find the string id for that control from the rc file // Now define the control's id as IDC_FRISTCONTROL+stringID(IDC_ST_AVE) #define IDC_FIRSTCONTROL IDC_SIGN -#define IDC_SIGN 80 -#define IDC_CLEAR 81 -#define IDC_CENTR 82 -#define IDC_BACK 83 +#define IDC_SIGN 80 +#define IDC_CLEAR 81 +#define IDC_CENTR 82 +#define IDC_BACK 83 -#define IDC_PNT 84 +#define IDC_PNT 84 // Hole 85 -#define IDC_AND 86 // Binary operators must be between IDC_AND and IDC_PWR -#define IDC_OR 87 -#define IDC_XOR 88 -#define IDC_LSHF 89 -#define IDC_RSHF 90 -#define IDC_DIV 91 -#define IDC_MUL 92 -#define IDC_ADD 93 -#define IDC_SUB 94 -#define IDC_MOD 95 -#define IDC_ROOT 96 -#define IDC_PWR 97 +#define IDC_AND 86 // Binary operators must be between IDC_AND and IDC_PWR +#define IDC_OR 87 +#define IDC_XOR 88 +#define IDC_LSHF 89 +#define IDC_RSHF 90 +#define IDC_DIV 91 +#define IDC_MUL 92 +#define IDC_ADD 93 +#define IDC_SUB 94 +#define IDC_MOD 95 +#define IDC_ROOT 96 +#define IDC_PWR 97 +#define IDC_UNARYFIRST IDC_CHOP +#define IDC_CHOP 98 // Unary operators must be between IDC_CHOP and IDC_EQU +#define IDC_ROL 99 +#define IDC_ROR 100 +#define IDC_COM 101 +#define IDC_SIN 102 +#define IDC_COS 103 +#define IDC_TAN 104 -#define IDC_UNARYFIRST IDC_CHOP -#define IDC_CHOP 98 // Unary operators must be between IDC_CHOP and IDC_EQU -#define IDC_ROL 99 -#define IDC_ROR 100 -#define IDC_COM 101 -#define IDC_SIN 102 -#define IDC_COS 103 -#define IDC_TAN 104 +#define IDC_SINH 105 +#define IDC_COSH 106 +#define IDC_TANH 107 -#define IDC_SINH 105 -#define IDC_COSH 106 -#define IDC_TANH 107 - -#define IDC_LN 108 -#define IDC_LOG 109 -#define IDC_SQRT 110 -#define IDC_SQR 111 -#define IDC_CUB 112 -#define IDC_FAC 113 -#define IDC_REC 114 -#define IDC_DMS 115 -#define IDC_CUBEROOT 116 // x ^ 1/3 -#define IDC_POW10 117 // 10 ^ x -#define IDC_PERCENT 118 +#define IDC_LN 108 +#define IDC_LOG 109 +#define IDC_SQRT 110 +#define IDC_SQR 111 +#define IDC_CUB 112 +#define IDC_FAC 113 +#define IDC_REC 114 +#define IDC_DMS 115 +#define IDC_CUBEROOT 116 // x ^ 1/3 +#define IDC_POW10 117 // 10 ^ x +#define IDC_PERCENT 118 #define IDC_UNARYLAST IDC_PERCENT -#define IDC_FE 119 -#define IDC_PI 120 -#define IDC_EQU 121 +#define IDC_FE 119 +#define IDC_PI 120 +#define IDC_EQU 121 -#define IDC_MCLEAR 122 -#define IDC_RECALL 123 -#define IDC_STORE 124 -#define IDC_MPLUS 125 -#define IDC_MMINUS 126 +#define IDC_MCLEAR 122 +#define IDC_RECALL 123 +#define IDC_STORE 124 +#define IDC_MPLUS 125 +#define IDC_MMINUS 126 -#define IDC_EXP 127 +#define IDC_EXP 127 +#define IDC_OPENP 128 +#define IDC_CLOSEP 129 -#define IDC_OPENP 128 -#define IDC_CLOSEP 129 - -#define IDC_0 130 // The controls for 0 through F must be consecutive and in order -#define IDC_1 131 -#define IDC_2 132 -#define IDC_3 133 -#define IDC_4 134 -#define IDC_5 135 -#define IDC_6 136 -#define IDC_7 137 -#define IDC_8 138 -#define IDC_9 139 -#define IDC_A 140 -#define IDC_B 141 -#define IDC_C 142 -#define IDC_D 143 -#define IDC_E 144 -#define IDC_F 145 // this is last control ID which must match the string table -#define IDC_INV 146 -#define IDC_SET_RESULT 147 +#define IDC_0 130 // The controls for 0 through F must be consecutive and in order +#define IDC_1 131 +#define IDC_2 132 +#define IDC_3 133 +#define IDC_4 134 +#define IDC_5 135 +#define IDC_6 136 +#define IDC_7 137 +#define IDC_8 138 +#define IDC_9 139 +#define IDC_A 140 +#define IDC_B 141 +#define IDC_C 142 +#define IDC_D 143 +#define IDC_E 144 +#define IDC_F 145 // this is last control ID which must match the string table +#define IDC_INV 146 +#define IDC_SET_RESULT 147 #define IDC_LASTCONTROL IDC_SET_RESULT -#define IDC_BINEDITSTART 700 -#define IDC_BINPOS0 700 -#define IDC_BINPOS1 701 -#define IDC_BINPOS2 702 -#define IDC_BINPOS3 703 -#define IDC_BINPOS4 704 -#define IDC_BINPOS5 705 -#define IDC_BINPOS6 706 -#define IDC_BINPOS7 707 -#define IDC_BINPOS8 708 -#define IDC_BINPOS9 709 -#define IDC_BINPOS10 710 -#define IDC_BINPOS11 711 -#define IDC_BINPOS12 712 -#define IDC_BINPOS13 713 -#define IDC_BINPOS14 714 -#define IDC_BINPOS15 715 -#define IDC_BINPOS16 716 -#define IDC_BINPOS17 717 -#define IDC_BINPOS18 718 -#define IDC_BINPOS19 719 -#define IDC_BINPOS20 720 -#define IDC_BINPOS21 721 -#define IDC_BINPOS22 722 -#define IDC_BINPOS23 723 -#define IDC_BINPOS24 724 -#define IDC_BINPOS25 725 -#define IDC_BINPOS26 726 -#define IDC_BINPOS27 727 -#define IDC_BINPOS28 728 -#define IDC_BINPOS29 729 -#define IDC_BINPOS30 730 -#define IDC_BINPOS31 731 -#define IDC_BINPOS32 732 -#define IDC_BINPOS33 733 -#define IDC_BINPOS34 734 -#define IDC_BINPOS35 735 -#define IDC_BINPOS36 736 -#define IDC_BINPOS37 737 -#define IDC_BINPOS38 738 -#define IDC_BINPOS39 739 -#define IDC_BINPOS40 740 -#define IDC_BINPOS41 741 -#define IDC_BINPOS42 742 -#define IDC_BINPOS43 743 -#define IDC_BINPOS44 744 -#define IDC_BINPOS45 745 -#define IDC_BINPOS46 746 -#define IDC_BINPOS47 747 -#define IDC_BINPOS48 748 -#define IDC_BINPOS49 749 -#define IDC_BINPOS50 750 -#define IDC_BINPOS51 751 -#define IDC_BINPOS52 752 -#define IDC_BINPOS53 753 -#define IDC_BINPOS54 754 -#define IDC_BINPOS55 755 -#define IDC_BINPOS56 756 -#define IDC_BINPOS57 757 -#define IDC_BINPOS58 758 -#define IDC_BINPOS59 759 -#define IDC_BINPOS60 760 -#define IDC_BINPOS61 761 -#define IDC_BINPOS62 762 -#define IDC_BINPOS63 763 -#define IDC_BINEDITEND 763 - +#define IDC_BINEDITSTART 700 +#define IDC_BINPOS0 700 +#define IDC_BINPOS1 701 +#define IDC_BINPOS2 702 +#define IDC_BINPOS3 703 +#define IDC_BINPOS4 704 +#define IDC_BINPOS5 705 +#define IDC_BINPOS6 706 +#define IDC_BINPOS7 707 +#define IDC_BINPOS8 708 +#define IDC_BINPOS9 709 +#define IDC_BINPOS10 710 +#define IDC_BINPOS11 711 +#define IDC_BINPOS12 712 +#define IDC_BINPOS13 713 +#define IDC_BINPOS14 714 +#define IDC_BINPOS15 715 +#define IDC_BINPOS16 716 +#define IDC_BINPOS17 717 +#define IDC_BINPOS18 718 +#define IDC_BINPOS19 719 +#define IDC_BINPOS20 720 +#define IDC_BINPOS21 721 +#define IDC_BINPOS22 722 +#define IDC_BINPOS23 723 +#define IDC_BINPOS24 724 +#define IDC_BINPOS25 725 +#define IDC_BINPOS26 726 +#define IDC_BINPOS27 727 +#define IDC_BINPOS28 728 +#define IDC_BINPOS29 729 +#define IDC_BINPOS30 730 +#define IDC_BINPOS31 731 +#define IDC_BINPOS32 732 +#define IDC_BINPOS33 733 +#define IDC_BINPOS34 734 +#define IDC_BINPOS35 735 +#define IDC_BINPOS36 736 +#define IDC_BINPOS37 737 +#define IDC_BINPOS38 738 +#define IDC_BINPOS39 739 +#define IDC_BINPOS40 740 +#define IDC_BINPOS41 741 +#define IDC_BINPOS42 742 +#define IDC_BINPOS43 743 +#define IDC_BINPOS44 744 +#define IDC_BINPOS45 745 +#define IDC_BINPOS46 746 +#define IDC_BINPOS47 747 +#define IDC_BINPOS48 748 +#define IDC_BINPOS49 749 +#define IDC_BINPOS50 750 +#define IDC_BINPOS51 751 +#define IDC_BINPOS52 752 +#define IDC_BINPOS53 753 +#define IDC_BINPOS54 754 +#define IDC_BINPOS55 755 +#define IDC_BINPOS56 756 +#define IDC_BINPOS57 757 +#define IDC_BINPOS58 758 +#define IDC_BINPOS59 759 +#define IDC_BINPOS60 760 +#define IDC_BINPOS61 761 +#define IDC_BINPOS62 762 +#define IDC_BINPOS63 763 +#define IDC_BINEDITEND 763 // The strings in the following range IDS_ENGINESTR_FIRST ... IDS_ENGINESTR_MAX are strings allocated in the // resource for the purpose internal to Engine and cant be used by the clients -#define IDS_ENGINESTR_FIRST 0 -#define IDS_ENGINESTR_MAX 200 - +#define IDS_ENGINESTR_FIRST 0 +#define IDS_ENGINESTR_MAX 200 diff --git a/src/CalcManager/Header Files/CalcEngine.h b/src/CalcManager/Header Files/CalcEngine.h index c84f2d55..ac29ba2a 100644 --- a/src/CalcManager/Header Files/CalcEngine.h +++ b/src/CalcManager/Header Files/CalcEngine.h @@ -20,7 +20,7 @@ #include "../CalculatorVector.h" #include "../ExpressionCommand.h" #include "RadixType.h" -#include "History.h" // for History Collector +#include "History.h" // for History Collector #include "CalcInput.h" #include "CalcUtils.h" #include "ICalcDisplay.h" @@ -31,11 +31,12 @@ // The real exports follows later // This is expected to be in same order as IDM_QWORD, IDM_DWORD etc. -enum eNUM_WIDTH { - QWORD_WIDTH, // Number width of 64 bits mode (default) - DWORD_WIDTH, // Number width of 32 bits mode - WORD_WIDTH, // Number width of 16 bits mode - BYTE_WIDTH // Number width of 16 bits mode +enum eNUM_WIDTH +{ + QWORD_WIDTH, // Number width of 64 bits mode (default) + DWORD_WIDTH, // Number width of 32 bits mode + WORD_WIDTH, // Number width of 16 bits mode + BYTE_WIDTH // Number width of 16 bits mode }; typedef enum eNUM_WIDTH NUM_WIDTH; static constexpr size_t NUM_WIDTH_LENGTH = 4; @@ -50,58 +51,80 @@ namespace CalculatorEngineTests class CalcEngineTests; } -class CCalcEngine { +class CCalcEngine +{ public: - CCalcEngine(bool fPrecedence, bool fIntegerMode, CalculationManager::IResourceProvider* const pResourceProvider, __in_opt ICalcDisplay *pCalcDisplay, __in_opt std::shared_ptr pHistoryDisplay); + CCalcEngine(bool fPrecedence, bool fIntegerMode, CalculationManager::IResourceProvider* const pResourceProvider, __in_opt ICalcDisplay* pCalcDisplay, + __in_opt std::shared_ptr pHistoryDisplay); void ProcessCommand(OpCode wID); - void DisplayError (uint32_t nError); + void DisplayError(uint32_t nError); std::unique_ptr PersistedMemObject(); void PersistedMemObject(CalcEngine::Rational const& memObject); - bool FInErrorState() { return m_bError; } - bool FInRecordingState() { return m_bRecord; } + bool FInErrorState() + { + return m_bError; + } + bool FInRecordingState() + { + return m_bRecord; + } void SettingsChanged(); bool IsCurrentTooBigForTrig(); int GetCurrentRadix(); std::wstring GetCurrentResultForRadix(uint32_t radix, int32_t precision); - void ChangePrecision(int32_t precision) { m_precision = precision; ChangeConstants(m_radix, precision); } + void ChangePrecision(int32_t precision) + { + m_precision = precision; + ChangeConstants(m_radix, precision); + } std::wstring GroupDigitsPerRadix(std::wstring_view numberString, uint32_t radix); std::wstring GetStringForDisplay(CalcEngine::Rational const& rat, uint32_t radix); void UpdateMaxIntDigits(); wchar_t DecimalSeparator() const; // Static methods for the instance - static void InitialOneTimeOnlySetup(CalculationManager::IResourceProvider& resourceProvider); // Once per load time to call to initialize all shared global variables + static void + InitialOneTimeOnlySetup(CalculationManager::IResourceProvider& resourceProvider); // Once per load time to call to initialize all shared global variables // returns the ptr to string representing the operator. Mostly same as the button, but few special cases for x^y etc. - static std::wstring_view GetString(int ids) { return s_engineStrings[std::to_wstring(ids)]; } - static std::wstring_view GetString(std::wstring ids) { return s_engineStrings[ids]; } - static std::wstring_view OpCodeToString(int nOpCode) { return GetString(IdStrFromCmdId(nOpCode)); } + static std::wstring_view GetString(int ids) + { + return s_engineStrings[std::to_wstring(ids)]; + } + static std::wstring_view GetString(std::wstring ids) + { + return s_engineStrings[ids]; + } + static std::wstring_view OpCodeToString(int nOpCode) + { + return GetString(IdStrFromCmdId(nOpCode)); + } static std::wstring_view OpCodeToUnaryString(int nOpCode, bool fInv, ANGLE_TYPE angletype); private: bool m_fPrecedence; bool m_fIntegerMode; /* This is true if engine is explicitly called to be in integer mode. All bases are restricted to be in integers only */ - ICalcDisplay *m_pCalcDisplay; + ICalcDisplay* m_pCalcDisplay; CalculationManager::IResourceProvider* const m_resourceProvider; - int m_nOpCode; /* ID value of operation. */ + int m_nOpCode; /* ID value of operation. */ int m_nPrevOpCode; // opcode which computed the number in m_currentVal. 0 if it is already bracketed or plain number or // if it hasn't yet been computed - bool m_bChangeOp; /* Flag for changing operation. */ - bool m_bRecord; // Global mode: recording or displaying - bool m_bSetCalcState; // Flag for setting the engine result state + bool m_bChangeOp; /* Flag for changing operation. */ + bool m_bRecord; // Global mode: recording or displaying + bool m_bSetCalcState; // Flag for setting the engine result state CalcEngine::CalcInput m_input; // Global calc input object for decimal strings - eNUMOBJ_FMT m_nFE; /* Scientific notation conversion flag. */ + eNUMOBJ_FMT m_nFE; /* Scientific notation conversion flag. */ CalcEngine::Rational m_maxTrigonometricNum; std::unique_ptr m_memoryValue; // Current memory value. CalcEngine::Rational m_holdVal; // For holding the second operand in repetitive calculations ( pressing "=" continuously) - CalcEngine::Rational m_currentVal; // Currently displayed number used everywhere. - CalcEngine::Rational m_lastVal; // Number before operation (left operand). - std::array m_parenVals; // Holding array for parenthesis values. + CalcEngine::Rational m_currentVal; // Currently displayed number used everywhere. + CalcEngine::Rational m_lastVal; // Number before operation (left operand). + std::array m_parenVals; // Holding array for parenthesis values. std::array m_precedenceVals; // Holding array for precedence values. - bool m_bError; // Error flag. - bool m_bInv; // Inverse on/off flag. - bool m_bNoPrevEqu; /* Flag for previous equals. */ + bool m_bError; // Error flag. + bool m_bInv; // Inverse on/off flag. + bool m_bNoPrevEqu; /* Flag for previous equals. */ uint32_t m_radix; int32_t m_precision; @@ -110,20 +133,20 @@ private: std::wstring m_numberString; - int m_nTempCom; /* Holding place for the last command. */ - int m_openParenCount; // Number of open parentheses. - std::array m_nOp; /* Holding array for parenthesis operations. */ - std::array m_nPrecOp; /* Holding array for precedence operations. */ - size_t m_precedenceOpCount; /* Current number of precedence ops in holding. */ - int m_nLastCom; // Last command entered. - ANGLE_TYPE m_angletype; // Current Angle type when in dec mode. one of deg, rad or grad - NUM_WIDTH m_numwidth; // one of qword, dword, word or byte mode. - int32_t m_dwWordBitWidth; // # of bits in currently selected word size + int m_nTempCom; /* Holding place for the last command. */ + int m_openParenCount; // Number of open parentheses. + std::array m_nOp; /* Holding array for parenthesis operations. */ + std::array m_nPrecOp; /* Holding array for precedence operations. */ + size_t m_precedenceOpCount; /* Current number of precedence ops in holding. */ + int m_nLastCom; // Last command entered. + ANGLE_TYPE m_angletype; // Current Angle type when in dec mode. one of deg, rad or grad + NUM_WIDTH m_numwidth; // one of qword, dword, word or byte mode. + int32_t m_dwWordBitWidth; // # of bits in currently selected word size CHistoryCollector m_HistoryCollector; // Accumulator of each line of history as various commands are processed - std::array m_chopNumbers; // word size enforcement - std::array m_maxDecimalValueStrings; // maximum values represented by a given word width based off m_chopNumbers + std::array m_chopNumbers; // word size enforcement + std::array m_maxDecimalValueStrings; // maximum values represented by a given word width based off m_chopNumbers static std::unordered_map s_engineStrings; // the string table shared across all instances wchar_t m_decimalSeparator; wchar_t m_groupSeparator; @@ -143,7 +166,7 @@ private: CalcEngine::Rational DoOperation(int operation, CalcEngine::Rational const& lhs, CalcEngine::Rational const& rhs); void SetRadixTypeAndNumWidth(RADIX_TYPE radixtype, NUM_WIDTH numwidth); int32_t DwWordBitWidthFromeNumWidth(NUM_WIDTH numwidth); - uint32_t NRadixFromRadixType( RADIX_TYPE radixtype); + uint32_t NRadixFromRadixType(RADIX_TYPE radixtype); bool TryToggleBit(CalcEngine::Rational& rat, uint32_t wbitno); void CheckAndAddLastBinOpToHistory(bool addToHistory = true); @@ -151,7 +174,10 @@ private: void InitChopNumbers(); static void LoadEngineStrings(CalculationManager::IResourceProvider& resourceProvider); - static int IdStrFromCmdId(int id) { return id - IDC_FIRSTCONTROL + IDS_ENGINESTR_FIRST; } + static int IdStrFromCmdId(int id) + { + return id - IDC_FIRSTCONTROL + IDS_ENGINESTR_FIRST; + } static std::vector DigitGroupingStringToGroupingVector(std::wstring_view groupingString); std::wstring GroupDigits(std::wstring_view delimiter, std::vector const& grouping, std::wstring_view displayString, bool isNumNegative = false); diff --git a/src/CalcManager/Header Files/CalcInput.h b/src/CalcManager/Header Files/CalcInput.h index b39021e4..3e88f740 100644 --- a/src/CalcManager/Header Files/CalcInput.h +++ b/src/CalcManager/Header Files/CalcInput.h @@ -13,16 +13,24 @@ namespace CalcEngine class CalcNumSec { public: - CalcNumSec() : - value(), - m_isNegative(false) - {} + CalcNumSec() : value(), m_isNegative(false) + { + } void Clear(); - bool IsEmpty() { return value.empty(); } + bool IsEmpty() + { + return value.empty(); + } - bool IsNegative() { return m_isNegative; } - void IsNegative(bool isNegative) { m_isNegative = isNegative; } + bool IsNegative() + { + return m_isNegative; + } + void IsNegative(bool isNegative) + { + m_isNegative = isNegative; + } std::wstring value; @@ -34,16 +42,12 @@ namespace CalcEngine { public: CalcInput() : CalcInput(L'.') - {} + { + } - CalcInput(wchar_t decSymbol) : - m_hasExponent(false), - m_hasDecimal(false), - m_decPtIndex(0), - m_decSymbol(decSymbol), - m_base(), - m_exponent() - {} + CalcInput(wchar_t decSymbol) : m_hasExponent(false), m_hasDecimal(false), m_decPtIndex(0), m_decSymbol(decSymbol), m_base(), m_exponent() + { + } void Clear(); bool TryToggleSign(bool isIntegerMode, std::wstring_view maxNumStr); diff --git a/src/CalcManager/Header Files/EngineStrings.h b/src/CalcManager/Header Files/EngineStrings.h index 89d624bf..a85fc508 100644 --- a/src/CalcManager/Header Files/EngineStrings.h +++ b/src/CalcManager/Header Files/EngineStrings.h @@ -171,126 +171,123 @@ inline constexpr auto SIDS_ERR_INPUT_OVERFLOW = L"119"; inline constexpr auto SIDS_ERR_OUTPUT_OVERFLOW = L"120"; // Include the resource key ID from above into this vector to load it into memory for the engine to use -inline constexpr std::array g_sids = -{ - SIDS_PLUS_MINUS, - SIDS_C, - SIDS_CE, - SIDS_BACKSPACE, - SIDS_DECIMAL_SEPARATOR, - SIDS_EMPTY_STRING, - SIDS_AND, - SIDS_OR, - SIDS_XOR, - SIDS_LSH, - SIDS_RSH, - SIDS_DIVIDE, - SIDS_MULTIPLY, - SIDS_PLUS, - SIDS_MINUS, - SIDS_MOD, - SIDS_YROOT, - SIDS_POW_HAT, - SIDS_INT, - SIDS_ROL, - SIDS_ROR, - SIDS_NOT, - SIDS_SIN, - SIDS_COS, - SIDS_TAN, - SIDS_SINH, - SIDS_COSH, - SIDS_TANH, - SIDS_LN, - SIDS_LOG, - SIDS_SQRT, - SIDS_XPOW2, - SIDS_XPOW3, - SIDS_NFACTORIAL, - SIDS_RECIPROCAL, - SIDS_DMS, - SIDS_CUBEROOT, - SIDS_POWTEN, - SIDS_PERCENT, - SIDS_SCIENTIFIC_NOTATION, - SIDS_PI, - SIDS_EQUAL, - SIDS_MC, - SIDS_MR, - SIDS_MS, - SIDS_MPLUS, - SIDS_MMINUS, - SIDS_EXP, - SIDS_OPEN_PAREN, - SIDS_CLOSE_PAREN, - SIDS_0, - SIDS_1, - SIDS_2, - SIDS_3, - SIDS_4, - SIDS_5, - SIDS_6, - SIDS_7, - SIDS_8, - SIDS_9, - SIDS_A, - SIDS_B, - SIDS_C, - SIDS_D, - SIDS_E, - SIDS_F, - SIDS_FRAC, - SIDS_SIND, - SIDS_COSD, - SIDS_TAND, - SIDS_ASIND, - SIDS_ACOSD, - SIDS_ATAND, - SIDS_SINR, - SIDS_COSR, - SIDS_TANR, - SIDS_ASINR, - SIDS_ACOSR, - SIDS_ATANR, - SIDS_SING, - SIDS_COSG, - SIDS_TANG, - SIDS_ASING, - SIDS_ACOSG, - SIDS_ATANG, - SIDS_ASINH, - SIDS_ACOSH, - SIDS_ATANH, - SIDS_POWE, - SIDS_POWTEN2, - SIDS_SQRT2, - SIDS_SQR, - SIDS_CUBE, - SIDS_CUBERT, - SIDS_FACT, - SIDS_RECIPROC, - SIDS_DEGREES, - SIDS_NEGATE, - SIDS_RSH, - SIDS_DIVIDEBYZERO, - SIDS_DOMAIN, - SIDS_UNDEFINED, - SIDS_POS_INFINITY, - SIDS_NEG_INFINITY, - SIDS_ABORTED, - SIDS_NOMEM, - SIDS_TOOMANY, - SIDS_OVERFLOW, - SIDS_NORESULT, - SIDS_INSUFFICIENT_DATA, - SIDS_ERR_UNK_CH, - SIDS_ERR_UNK_FN, - SIDS_ERR_UNEX_NUM, - SIDS_ERR_UNEX_CH, - SIDS_ERR_UNEX_SZ, - SIDS_ERR_MISMATCH_CLOSE, - SIDS_ERR_UNEX_END, - SIDS_ERR_SG_INV_ERROR, - SIDS_ERR_INPUT_OVERFLOW, - SIDS_ERR_OUTPUT_OVERFLOW -}; +inline constexpr std::array g_sids = { SIDS_PLUS_MINUS, + SIDS_C, + SIDS_CE, + SIDS_BACKSPACE, + SIDS_DECIMAL_SEPARATOR, + SIDS_EMPTY_STRING, + SIDS_AND, + SIDS_OR, + SIDS_XOR, + SIDS_LSH, + SIDS_RSH, + SIDS_DIVIDE, + SIDS_MULTIPLY, + SIDS_PLUS, + SIDS_MINUS, + SIDS_MOD, + SIDS_YROOT, + SIDS_POW_HAT, + SIDS_INT, + SIDS_ROL, + SIDS_ROR, + SIDS_NOT, + SIDS_SIN, + SIDS_COS, + SIDS_TAN, + SIDS_SINH, + SIDS_COSH, + SIDS_TANH, + SIDS_LN, + SIDS_LOG, + SIDS_SQRT, + SIDS_XPOW2, + SIDS_XPOW3, + SIDS_NFACTORIAL, + SIDS_RECIPROCAL, + SIDS_DMS, + SIDS_CUBEROOT, + SIDS_POWTEN, + SIDS_PERCENT, + SIDS_SCIENTIFIC_NOTATION, + SIDS_PI, + SIDS_EQUAL, + SIDS_MC, + SIDS_MR, + SIDS_MS, + SIDS_MPLUS, + SIDS_MMINUS, + SIDS_EXP, + SIDS_OPEN_PAREN, + SIDS_CLOSE_PAREN, + SIDS_0, + SIDS_1, + SIDS_2, + SIDS_3, + SIDS_4, + SIDS_5, + SIDS_6, + SIDS_7, + SIDS_8, + SIDS_9, + SIDS_A, + SIDS_B, + SIDS_C, + SIDS_D, + SIDS_E, + SIDS_F, + SIDS_FRAC, + SIDS_SIND, + SIDS_COSD, + SIDS_TAND, + SIDS_ASIND, + SIDS_ACOSD, + SIDS_ATAND, + SIDS_SINR, + SIDS_COSR, + SIDS_TANR, + SIDS_ASINR, + SIDS_ACOSR, + SIDS_ATANR, + SIDS_SING, + SIDS_COSG, + SIDS_TANG, + SIDS_ASING, + SIDS_ACOSG, + SIDS_ATANG, + SIDS_ASINH, + SIDS_ACOSH, + SIDS_ATANH, + SIDS_POWE, + SIDS_POWTEN2, + SIDS_SQRT2, + SIDS_SQR, + SIDS_CUBE, + SIDS_CUBERT, + SIDS_FACT, + SIDS_RECIPROC, + SIDS_DEGREES, + SIDS_NEGATE, + SIDS_RSH, + SIDS_DIVIDEBYZERO, + SIDS_DOMAIN, + SIDS_UNDEFINED, + SIDS_POS_INFINITY, + SIDS_NEG_INFINITY, + SIDS_ABORTED, + SIDS_NOMEM, + SIDS_TOOMANY, + SIDS_OVERFLOW, + SIDS_NORESULT, + SIDS_INSUFFICIENT_DATA, + SIDS_ERR_UNK_CH, + SIDS_ERR_UNK_FN, + SIDS_ERR_UNEX_NUM, + SIDS_ERR_UNEX_CH, + SIDS_ERR_UNEX_SZ, + SIDS_ERR_MISMATCH_CLOSE, + SIDS_ERR_UNEX_END, + SIDS_ERR_SG_INV_ERROR, + SIDS_ERR_INPUT_OVERFLOW, + SIDS_ERR_OUTPUT_OVERFLOW }; diff --git a/src/CalcManager/Header Files/History.h b/src/CalcManager/Header Files/History.h index 7446616d..b6d6d8db 100644 --- a/src/CalcManager/Header Files/History.h +++ b/src/CalcManager/Header Files/History.h @@ -14,9 +14,10 @@ static constexpr size_t MAXPRECDEPTH = 25; // Helper class really a internal class to CCalcEngine, to accumulate each history line of text by collecting the // operands, operator, unary operator etc. Since it is a separate entity, it can be unit tested on its own but does // rely on CCalcEngine calling it in appropriate order. -class CHistoryCollector { +class CHistoryCollector +{ public: - CHistoryCollector(ICalcDisplay *pCalcDisplay, std::shared_ptr pHistoryDisplay, wchar_t decimalSymbol); // Can throw errors + CHistoryCollector(ICalcDisplay* pCalcDisplay, std::shared_ptr pHistoryDisplay, wchar_t decimalSymbol); // Can throw errors ~CHistoryCollector(); void AddOpndToHistory(std::wstring_view numStr, CalcEngine::Rational const& rat, bool fRepetition = false); void RemoveLastOpndFromHistory(); @@ -31,24 +32,25 @@ public: bool FOpndAddedToHistory(); void CompleteHistoryLine(std::wstring_view numStr); void ClearHistoryLine(std::wstring_view errStr); - int AddCommand(_In_ const std::shared_ptr & spCommand); + int AddCommand(_In_ const std::shared_ptr& spCommand); void UpdateHistoryExpression(uint32_t radix, int32_t precision); void SetDecimalSymbol(wchar_t decimalSymbol); private: std::shared_ptr m_pHistoryDisplay; - ICalcDisplay *m_pCalcDisplay; + ICalcDisplay* m_pCalcDisplay; int m_iCurLineHistStart; // index of the beginning of the current equation // a sort of state, set to the index before 2 after 2 in the expression 2 + 3 say. Useful for auto correct portion of history and for // attaching the unary op around the last operand - int m_lastOpStartIndex; // index of the beginning of the last operand added to the history + int m_lastOpStartIndex; // index of the beginning of the last operand added to the history int m_lastBinOpStartIndex; // index of the beginning of the last binary operator added to the history - std::array m_operandIndices; // Stack of index of opnd's beginning for each '('. A parallel array to m_hnoParNum, but abstracted independently of that + std::array + m_operandIndices; // Stack of index of opnd's beginning for each '('. A parallel array to m_hnoParNum, but abstracted independently of that int m_curOperandIndex; // Stack index for the above stack - bool m_bLastOpndBrace; // iff the last opnd in history is already braced so we can avoid putting another one for unary operator + bool m_bLastOpndBrace; // iff the last opnd in history is already braced so we can avoid putting another one for unary operator wchar_t m_decimalSymbol; - std::shared_ptr>> m_spTokens; + std::shared_ptr>> m_spTokens; std::shared_ptr>> m_spCommands; private: diff --git a/src/CalcManager/Header Files/ICalcDisplay.h b/src/CalcManager/Header Files/ICalcDisplay.h index 73fce932..93bb81c4 100644 --- a/src/CalcManager/Header Files/ICalcDisplay.h +++ b/src/CalcManager/Header Files/ICalcDisplay.h @@ -7,11 +7,13 @@ #include "../ExpressionCommandInterface.h" // Callback interface to be implemented by the clients of CCalcEngine -class ICalcDisplay { +class ICalcDisplay +{ public: virtual void SetPrimaryDisplay(const std::wstring& pszText, bool isError) = 0; virtual void SetIsInError(bool isInError) = 0; - virtual void SetExpressionDisplay(_Inout_ std::shared_ptr>> const &tokens, _Inout_ std::shared_ptr>> const &commands) = 0; + virtual void SetExpressionDisplay(_Inout_ std::shared_ptr>> const& tokens, + _Inout_ std::shared_ptr>> const& commands) = 0; virtual void SetParenthesisNumber(_In_ unsigned int count) = 0; virtual void OnNoRightParenAdded() = 0; virtual void MaxDigitsReached() = 0; // not an error but still need to inform UI layer. diff --git a/src/CalcManager/Header Files/IHistoryDisplay.h b/src/CalcManager/Header Files/IHistoryDisplay.h index bbadbe87..c7189718 100644 --- a/src/CalcManager/Header Files/IHistoryDisplay.h +++ b/src/CalcManager/Header Files/IHistoryDisplay.h @@ -4,8 +4,11 @@ #pragma once // Callback interface to be implemented by the clients of CCalcEngine if they require equation history -class IHistoryDisplay { +class IHistoryDisplay +{ public: - virtual ~IHistoryDisplay() {}; - virtual unsigned int AddToHistory(_In_ std::shared_ptr>> const &tokens, _In_ std::shared_ptr>> const &commands, _In_ std::wstring_view result) = 0; + virtual ~IHistoryDisplay(){}; + virtual unsigned int AddToHistory(_In_ std::shared_ptr>> const& tokens, + _In_ std::shared_ptr>> const& commands, + _In_ std::wstring_view result) = 0; }; diff --git a/src/CalcManager/Header Files/RadixType.h b/src/CalcManager/Header Files/RadixType.h index 3f7f2456..380d6afe 100644 --- a/src/CalcManager/Header Files/RadixType.h +++ b/src/CalcManager/Header Files/RadixType.h @@ -4,7 +4,8 @@ #pragma once // This is expected to be in same order as IDM_HEX, IDM_DEC, IDM_OCT, IDM_BIN -enum eRADIX_TYPE { +enum eRADIX_TYPE +{ HEX_RADIX, DEC_RADIX, OCT_RADIX, diff --git a/src/CalcManager/Ratpack/CalcErr.h b/src/CalcManager/Ratpack/CalcErr.h index 8c23e440..4637c2c3 100644 --- a/src/CalcManager/Ratpack/CalcErr.h +++ b/src/CalcManager/Ratpack/CalcErr.h @@ -41,46 +41,45 @@ typedef int32_t ResultCode; // CALC_E_DIVIDEBYZERO // // The current operation would require a divide by zero to complete -#define CALC_E_DIVIDEBYZERO ((uint32_t)0x80000000) +#define CALC_E_DIVIDEBYZERO ((uint32_t)0x80000000) // CALC_E_DOMAIN // // The given input is not within the domain of this function -#define CALC_E_DOMAIN ((uint32_t)0x80000001) +#define CALC_E_DOMAIN ((uint32_t)0x80000001) // CALC_E_INDEFINITE // // The result of this function is undefined -#define CALC_E_INDEFINITE ((uint32_t)0x80000002) +#define CALC_E_INDEFINITE ((uint32_t)0x80000002) // CALC_E_POSINFINITY // // The result of this function is Positive Infinity. -#define CALC_E_POSINFINITY ((uint32_t)0x80000003) +#define CALC_E_POSINFINITY ((uint32_t)0x80000003) // CALC_E_NEGINFINITY // // The result of this function is Negative Infinity -#define CALC_E_NEGINFINITY ((uint32_t)0x80000004) +#define CALC_E_NEGINFINITY ((uint32_t)0x80000004) // CALC_E_INVALIDRANGE // // The given input is within the domain of the function but is beyond // the range for which calc can successfully compute the answer -#define CALC_E_INVALIDRANGE ((uint32_t)0x80000006) +#define CALC_E_INVALIDRANGE ((uint32_t)0x80000006) // CALC_E_OUTOFMEMORY // // There is not enough free memory to complete the requested function -#define CALC_E_OUTOFMEMORY ((uint32_t)0x80000007) +#define CALC_E_OUTOFMEMORY ((uint32_t)0x80000007) // CALC_E_OVERFLOW // // The result of this operation is an overflow -#define CALC_E_OVERFLOW ((uint32_t)0x80000008) +#define CALC_E_OVERFLOW ((uint32_t)0x80000008) // CALC_E_NORESULT // // The result of this operation is undefined -#define CALC_E_NORESULT ((uint32_t)0x80000009) - +#define CALC_E_NORESULT ((uint32_t)0x80000009) diff --git a/src/CalcManager/Ratpack/basex.cpp b/src/CalcManager/Ratpack/basex.cpp index 2685af87..f52befa9 100644 --- a/src/CalcManager/Ratpack/basex.cpp +++ b/src/CalcManager/Ratpack/basex.cpp @@ -17,7 +17,7 @@ #include "ratpak.h" #include // for memmove -void _mulnumx( PNUMBER *pa, PNUMBER b ); +void _mulnumx(PNUMBER* pa, PNUMBER b); //---------------------------------------------------------------------------- // @@ -34,30 +34,30 @@ void _mulnumx( PNUMBER *pa, PNUMBER b ); // //---------------------------------------------------------------------------- -void __inline mulnumx( PNUMBER *pa, PNUMBER b ) +void __inline mulnumx(PNUMBER* pa, PNUMBER b) { - if ( b->cdigit > 1 || b->mant[0] != 1 || b->exp != 0 ) - { + if (b->cdigit > 1 || b->mant[0] != 1 || b->exp != 0) + { // If b is not one we multiply - if ( (*pa)->cdigit > 1 || (*pa)->mant[0] != 1 || (*pa)->exp != 0 ) - { + if ((*pa)->cdigit > 1 || (*pa)->mant[0] != 1 || (*pa)->exp != 0) + { // pa and b are both non-one. - _mulnumx( pa, b ); - } + _mulnumx(pa, b); + } else - { + { // if pa is one and b isn't just copy b. and adjust the sign. int32_t sign = (*pa)->sign; - DUPNUM(*pa,b); + DUPNUM(*pa, b); (*pa)->sign *= sign; - } } + } else - { + { // B is +/- 1, But we do have to set the sign. (*pa)->sign *= b->sign; - } + } } //---------------------------------------------------------------------------- @@ -76,29 +76,29 @@ void __inline mulnumx( PNUMBER *pa, PNUMBER b ) // //---------------------------------------------------------------------------- -void _mulnumx( PNUMBER *pa, PNUMBER b ) +void _mulnumx(PNUMBER* pa, PNUMBER b) { - PNUMBER c= nullptr; // c will contain the result. - PNUMBER a= nullptr; // a is the dereferenced number pointer from *pa - MANTTYPE *ptra; // ptra is a pointer to the mantissa of a. - MANTTYPE *ptrb; // ptrb is a pointer to the mantissa of b. - MANTTYPE *ptrc; // ptrc is a pointer to the mantissa of c. - MANTTYPE *ptrcoffset; // ptrcoffset, is the anchor location of the next - // single digit multiply partial result. - int32_t iadigit=0; // Index of digit being used in the first number. - int32_t ibdigit=0; // Index of digit being used in the second number. - MANTTYPE da=0; // da is the digit from the fist number. - TWO_MANTTYPE cy=0; // cy is the carry resulting from the addition of - // a multiplied row into the result. - TWO_MANTTYPE mcy=0; // mcy is the resultant from a single - // multiply, AND the carry of that multiply. - int32_t icdigit=0; // Index of digit being calculated in final result. + PNUMBER c = nullptr; // c will contain the result. + PNUMBER a = nullptr; // a is the dereferenced number pointer from *pa + MANTTYPE* ptra; // ptra is a pointer to the mantissa of a. + MANTTYPE* ptrb; // ptrb is a pointer to the mantissa of b. + MANTTYPE* ptrc; // ptrc is a pointer to the mantissa of c. + MANTTYPE* ptrcoffset; // ptrcoffset, is the anchor location of the next + // single digit multiply partial result. + int32_t iadigit = 0; // Index of digit being used in the first number. + int32_t ibdigit = 0; // Index of digit being used in the second number. + MANTTYPE da = 0; // da is the digit from the fist number. + TWO_MANTTYPE cy = 0; // cy is the carry resulting from the addition of + // a multiplied row into the result. + TWO_MANTTYPE mcy = 0; // mcy is the resultant from a single + // multiply, AND the carry of that multiply. + int32_t icdigit = 0; // Index of digit being calculated in final result. - a=*pa; + a = *pa; ibdigit = a->cdigit + b->cdigit - 1; - createnum( c, ibdigit + 1 ); + createnum(c, ibdigit + 1); c->cdigit = ibdigit; c->sign = a->sign * b->sign; @@ -106,36 +106,35 @@ void _mulnumx( PNUMBER *pa, PNUMBER b ) ptra = a->mant; ptrcoffset = c->mant; - for ( iadigit = a->cdigit; iadigit > 0; iadigit-- ) + for (iadigit = a->cdigit; iadigit > 0; iadigit--) { - da = *ptra++; + da = *ptra++; ptrb = b->mant; // Shift ptrc, and ptrcoffset, one for each digit ptrc = ptrcoffset++; - for ( ibdigit = b->cdigit; ibdigit > 0; ibdigit-- ) + for (ibdigit = b->cdigit; ibdigit > 0; ibdigit--) { cy = 0; mcy = (uint64_t)da * (*ptrb); - if ( mcy ) + if (mcy) { icdigit = 0; - if ( ibdigit == 1 && iadigit == 1 ) + if (ibdigit == 1 && iadigit == 1) { c->cdigit++; } } // If result is nonzero, or while result of carry is nonzero... - while ( mcy || cy ) + while (mcy || cy) { - // update carry from addition(s) and multiply. - cy += (TWO_MANTTYPE)ptrc[icdigit]+((uint32_t)mcy&((uint32_t)~BASEX)); + cy += (TWO_MANTTYPE)ptrc[icdigit] + ((uint32_t)mcy & ((uint32_t)~BASEX)); // update result digit from - ptrc[icdigit++]=(MANTTYPE)((uint32_t)cy&((uint32_t)~BASEX)); + ptrc[icdigit++] = (MANTTYPE)((uint32_t)cy & ((uint32_t)~BASEX)); // update carries from mcy >>= BASEXPWR; @@ -144,19 +143,18 @@ void _mulnumx( PNUMBER *pa, PNUMBER b ) ptrb++; ptrc++; - } } // prevent different kinds of zeros, by stripping leading duplicate zeros. // digits are in order of increasing significance. - while ( c->cdigit > 1 && c->mant[c->cdigit-1] == 0 ) - { + while (c->cdigit > 1 && c->mant[c->cdigit - 1] == 0) + { c->cdigit--; - } + } - destroynum( *pa ); - *pa=c; + destroynum(*pa); + *pa = c; } //----------------------------------------------------------------------------- // @@ -174,34 +172,33 @@ void _mulnumx( PNUMBER *pa, PNUMBER b ) // //----------------------------------------------------------------------------- -void numpowi32x( _Inout_ PNUMBER *proot, _In_ int32_t power ) +void numpowi32x(_Inout_ PNUMBER* proot, _In_ int32_t power) { - PNUMBER lret = i32tonum( 1, BASEX ); + PNUMBER lret = i32tonum(1, BASEX); // Once the power remaining is zero we are done. - while ( power > 0 ) - { + while (power > 0) + { // If this bit in the power decomposition is on, multiply the result // by the root number. - if ( power & 1 ) - { - mulnumx( &lret, *proot ); - } + if (power & 1) + { + mulnumx(&lret, *proot); + } // multiply the root number by itself to scale for the next bit (i.e. // square it. - mulnumx( proot, *proot ); + mulnumx(proot, *proot); // move the next bit of the power into place. power >>= 1; - } - destroynum( *proot ); - *proot=lret; - + } + destroynum(*proot); + *proot = lret; } -void _divnumx( PNUMBER *pa, PNUMBER b, int32_t precision); +void _divnumx(PNUMBER* pa, PNUMBER b, int32_t precision); //---------------------------------------------------------------------------- // @@ -218,30 +215,30 @@ void _divnumx( PNUMBER *pa, PNUMBER b, int32_t precision); // //---------------------------------------------------------------------------- -void __inline divnumx( PNUMBER *pa, PNUMBER b, int32_t precision) +void __inline divnumx(PNUMBER* pa, PNUMBER b, int32_t precision) { - if ( b->cdigit > 1 || b->mant[0] != 1 || b->exp != 0 ) - { + if (b->cdigit > 1 || b->mant[0] != 1 || b->exp != 0) + { // b is not one. - if ( (*pa)->cdigit > 1 || (*pa)->mant[0] != 1 || (*pa)->exp != 0 ) - { + if ((*pa)->cdigit > 1 || (*pa)->mant[0] != 1 || (*pa)->exp != 0) + { // pa and b are both not one. - _divnumx( pa, b, precision); - } + _divnumx(pa, b, precision); + } else - { + { // if pa is one and b is not one, just copy b, and adjust the sign. int32_t sign = (*pa)->sign; - DUPNUM(*pa,b); + DUPNUM(*pa, b); (*pa)->sign *= sign; - } } + } else - { + { // b is one so don't divide, but set the sign. (*pa)->sign *= b->sign; - } + } } //---------------------------------------------------------------------------- @@ -257,111 +254,109 @@ void __inline divnumx( PNUMBER *pa, PNUMBER b, int32_t precision) // //---------------------------------------------------------------------------- -void _divnumx( PNUMBER *pa, PNUMBER b, int32_t precision) +void _divnumx(PNUMBER* pa, PNUMBER b, int32_t precision) { - PNUMBER a= nullptr; // a is the dereferenced number pointer from *pa - PNUMBER c= nullptr; // c will contain the result. + PNUMBER a = nullptr; // a is the dereferenced number pointer from *pa + PNUMBER c = nullptr; // c will contain the result. PNUMBER lasttmp = nullptr; // lasttmp allows a backup when the algorithm - // guesses one bit too far. + // guesses one bit too far. PNUMBER tmp = nullptr; // current guess being worked on for divide. PNUMBER rem = nullptr; // remainder after applying guess. int32_t cdigits; // count of digits for answer. - MANTTYPE *ptrc; // ptrc is a pointer to the mantissa of c. + MANTTYPE* ptrc; // ptrc is a pointer to the mantissa of c. int32_t thismax = precision + g_ratio; // set a maximum number of internal digits - // to shoot for in the divide. + // to shoot for in the divide. - a=*pa; - if ( thismax < a->cdigit ) - { + a = *pa; + if (thismax < a->cdigit) + { // a has more digits than precision specified, bump up digits to shoot // for. thismax = a->cdigit; - } + } - if ( thismax < b->cdigit ) - { + if (thismax < b->cdigit) + { // b has more digits than precision specified, bump up digits to shoot // for. thismax = b->cdigit; - } + } // Create c (the divide answer) and set up exponent and sign. - createnum( c, thismax + 1 ); - c->exp = (a->cdigit+a->exp) - (b->cdigit+b->exp) + 1; + createnum(c, thismax + 1); + c->exp = (a->cdigit + a->exp) - (b->cdigit + b->exp) + 1; c->sign = a->sign * b->sign; ptrc = c->mant + thismax; cdigits = 0; - DUPNUM( rem, a ); + DUPNUM(rem, a); rem->sign = b->sign; rem->exp = b->cdigit + b->exp - rem->cdigit; - while ( cdigits++ < thismax && !zernum(rem) ) - { + while (cdigits++ < thismax && !zernum(rem)) + { int32_t digit = 0; *ptrc = 0; - while ( !lessnum( rem, b ) ) - { + while (!lessnum(rem, b)) + { digit = 1; - DUPNUM( tmp, b ); - destroynum( lasttmp ); - lasttmp=i32tonum( 0, BASEX ); - while ( lessnum( tmp, rem ) ) - { - destroynum( lasttmp ); - DUPNUM(lasttmp,tmp); - addnum( &tmp, tmp, BASEX ); + DUPNUM(tmp, b); + destroynum(lasttmp); + lasttmp = i32tonum(0, BASEX); + while (lessnum(tmp, rem)) + { + destroynum(lasttmp); + DUPNUM(lasttmp, tmp); + addnum(&tmp, tmp, BASEX); digit *= 2; - } - if ( lessnum( rem, tmp ) ) - { + } + if (lessnum(rem, tmp)) + { // too far, back up... - destroynum( tmp ); + destroynum(tmp); digit /= 2; - tmp=lasttmp; - lasttmp= nullptr; - } + tmp = lasttmp; + lasttmp = nullptr; + } tmp->sign *= -1; - addnum( &rem, tmp, BASEX ); - destroynum( tmp ); - destroynum( lasttmp ); + addnum(&rem, tmp, BASEX); + destroynum(tmp); + destroynum(lasttmp); *ptrc |= digit; - } + } rem->exp++; ptrc--; - } + } cdigits--; - if ( c->mant != ++ptrc ) - { - memmove( c->mant, ptrc, (int)(cdigits*sizeof(MANTTYPE)) ); - } + if (c->mant != ++ptrc) + { + memmove(c->mant, ptrc, (int)(cdigits * sizeof(MANTTYPE))); + } - if ( !cdigits ) - { + if (!cdigits) + { // A zero, make sure no weird exponents creep in c->exp = 0; c->cdigit = 1; - } + } else - { + { c->cdigit = cdigits; c->exp -= cdigits; // prevent different kinds of zeros, by stripping leading duplicate // zeros. digits are in order of increasing significance. - while ( c->cdigit > 1 && c->mant[c->cdigit-1] == 0 ) - { + while (c->cdigit > 1 && c->mant[c->cdigit - 1] == 0) + { c->cdigit--; - } } + } - destroynum( rem ); + destroynum(rem); - destroynum( *pa ); - *pa=c; + destroynum(*pa); + *pa = c; } - - diff --git a/src/CalcManager/Ratpack/conv.cpp b/src/CalcManager/Ratpack/conv.cpp index 3a1aaa14..9a944ea5 100644 --- a/src/CalcManager/Ratpack/conv.cpp +++ b/src/CalcManager/Ratpack/conv.cpp @@ -32,7 +32,7 @@ static constexpr wstring_view DIGITS = L"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabc // ratio of internal 'digits' to output 'digits' // Calculated elsewhere as part of initialization and when base is changed -int32_t g_ratio; // int(log(2L^BASEXPWR)/log(radix)) +int32_t g_ratio; // int(log(2L^BASEXPWR)/log(radix)) // Default decimal separator wchar_t g_decimalSeparator = L'.'; @@ -42,8 +42,7 @@ wchar_t g_decimalSeparator = L'.'; // See also // * https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros // * https://sourceforge.net/p/predef/wiki/Architectures/ -#if defined(MIDL_PASS) || defined(RC_INVOKED) || defined(_M_CEE_PURE) \ - || defined(_M_AMD64) || defined(__ARM_ARCH) || defined(__x86_64__) || defined(_M_ARM64) +#if defined(MIDL_PASS) || defined(RC_INVOKED) || defined(_M_CEE_PURE) || defined(_M_AMD64) || defined(__ARM_ARCH) || defined(__x86_64__) || defined(_M_ARM64) #ifndef Calc_UInt32x32To64 #define Calc_UInt32x32To64(a, b) ((uint64_t)((uint32_t)(a)) * (uint64_t)((uint32_t)(b))) @@ -63,52 +62,42 @@ wchar_t g_decimalSeparator = L'.'; #define CALC_INTSAFE_E_ARITHMETIC_OVERFLOW ((int32_t)0x80070216L) // 0x216 = 534 = ERROR_ARITHMETIC_OVERFLOW #define CALC_ULONG_ERROR ((uint32_t)0xffffffffU) -namespace { - int32_t - Calc_ULongAdd( - _In_ uint32_t ulAugend, - _In_ uint32_t ulAddend, - _Out_ uint32_t* pulResult) - { - int32_t hr = CALC_INTSAFE_E_ARITHMETIC_OVERFLOW; - *pulResult = CALC_ULONG_ERROR; +namespace +{ + int32_t Calc_ULongAdd(_In_ uint32_t ulAugend, _In_ uint32_t ulAddend, _Out_ uint32_t* pulResult) + { + int32_t hr = CALC_INTSAFE_E_ARITHMETIC_OVERFLOW; + *pulResult = CALC_ULONG_ERROR; - if ((ulAugend + ulAddend) >= ulAugend) - { - *pulResult = (ulAugend + ulAddend); - hr = S_OK; - } + if ((ulAugend + ulAddend) >= ulAugend) + { + *pulResult = (ulAugend + ulAddend); + hr = S_OK; + } - return hr; - } + return hr; + } - int32_t - Calc_ULongLongToULong( - _In_ uint64_t ullOperand, - _Out_ uint32_t* pulResult) - { - int32_t hr = CALC_INTSAFE_E_ARITHMETIC_OVERFLOW; - *pulResult = CALC_ULONG_ERROR; + int32_t Calc_ULongLongToULong(_In_ uint64_t ullOperand, _Out_ uint32_t* pulResult) + { + int32_t hr = CALC_INTSAFE_E_ARITHMETIC_OVERFLOW; + *pulResult = CALC_ULONG_ERROR; - if (ullOperand <= UINT32_MAX) - { - *pulResult = (uint32_t)ullOperand; - hr = S_OK; - } + if (ullOperand <= UINT32_MAX) + { + *pulResult = (uint32_t)ullOperand; + hr = S_OK; + } - return hr; - } + return hr; + } - int32_t - Calc_ULongMult( - _In_ uint32_t ulMultiplicand, - _In_ uint32_t ulMultiplier, - _Out_ uint32_t* pulResult) - { - uint64_t ull64Result = Calc_UInt32x32To64(ulMultiplicand, ulMultiplier); + int32_t Calc_ULongMult(_In_ uint32_t ulMultiplicand, _In_ uint32_t ulMultiplier, _Out_ uint32_t* pulResult) + { + uint64_t ull64Result = Calc_UInt32x32To64(ulMultiplicand, ulMultiplier); - return Calc_ULongLongToULong(ull64Result, pulResult); - } + return Calc_ULongLongToULong(ull64Result, pulResult); + } } // Used to strip trailing zeros, and prevent combinatorial explosions @@ -139,9 +128,9 @@ void* zmalloc(size_t a) // //----------------------------------------------------------------------------- -void _dupnum(_In_ PNUMBER dest, _In_ const NUMBER * const src) +void _dupnum(_In_ PNUMBER dest, _In_ const NUMBER* const src) { - memcpy(dest, src, (int)(sizeof(NUMBER) + ((src)->cdigit)*(sizeof(MANTTYPE)))); + memcpy(dest, src, (int)(sizeof(NUMBER) + ((src)->cdigit) * (sizeof(MANTTYPE)))); } //----------------------------------------------------------------------------- @@ -156,16 +145,15 @@ void _dupnum(_In_ PNUMBER dest, _In_ const NUMBER * const src) // //----------------------------------------------------------------------------- -void _destroynum( _In_ PNUMBER pnum ) +void _destroynum(_In_ PNUMBER pnum) { - if ( pnum != nullptr) - { - free( pnum ); - } + if (pnum != nullptr) + { + free(pnum); + } } - //----------------------------------------------------------------------------- // // FUNCTION: _destroyrat @@ -179,18 +167,17 @@ void _destroynum( _In_ PNUMBER pnum ) // //----------------------------------------------------------------------------- -void _destroyrat( _In_ PRAT prat ) +void _destroyrat(_In_ PRAT prat) { - if ( prat != nullptr) - { - destroynum( prat->pp ); - destroynum( prat->pq ); - free( prat ); - } + if (prat != nullptr) + { + destroynum(prat->pp); + destroynum(prat->pq); + free(prat); + } } - //----------------------------------------------------------------------------- // // FUNCTION: _createnum @@ -203,28 +190,27 @@ void _destroyrat( _In_ PRAT prat ) // //----------------------------------------------------------------------------- -PNUMBER _createnum( _In_ uint32_t size ) +PNUMBER _createnum(_In_ uint32_t size) { - PNUMBER pnumret= nullptr; + PNUMBER pnumret = nullptr; uint32_t cbAlloc; // sizeof( MANTTYPE ) is the size of a 'digit' - if (SUCCEEDED(Calc_ULongAdd(size, 1, &cbAlloc)) && - SUCCEEDED(Calc_ULongMult(cbAlloc, sizeof(MANTTYPE), &cbAlloc)) && - SUCCEEDED(Calc_ULongAdd(cbAlloc, sizeof(NUMBER), &cbAlloc))) + if (SUCCEEDED(Calc_ULongAdd(size, 1, &cbAlloc)) && SUCCEEDED(Calc_ULongMult(cbAlloc, sizeof(MANTTYPE), &cbAlloc)) + && SUCCEEDED(Calc_ULongAdd(cbAlloc, sizeof(NUMBER), &cbAlloc))) { - pnumret = (PNUMBER)zmalloc( cbAlloc ); - if ( pnumret == nullptr) + pnumret = (PNUMBER)zmalloc(cbAlloc); + if (pnumret == nullptr) { - throw( CALC_E_OUTOFMEMORY ); + throw(CALC_E_OUTOFMEMORY); } } else { - throw( CALC_E_INVALIDRANGE ); + throw(CALC_E_INVALIDRANGE); } - return( pnumret ); + return (pnumret); } //----------------------------------------------------------------------------- @@ -241,25 +227,22 @@ PNUMBER _createnum( _In_ uint32_t size ) // //----------------------------------------------------------------------------- - -PRAT _createrat( void ) +PRAT _createrat(void) { - PRAT prat= nullptr; + PRAT prat = nullptr; - prat = (PRAT)zmalloc( sizeof( RAT ) ); + prat = (PRAT)zmalloc(sizeof(RAT)); - if ( prat == nullptr) + if (prat == nullptr) { - throw( CALC_E_OUTOFMEMORY ); + throw(CALC_E_OUTOFMEMORY); } prat->pp = nullptr; prat->pq = nullptr; - return( prat ); + return (prat); } - - //----------------------------------------------------------------------------- // // FUNCTION: numtorat @@ -275,37 +258,34 @@ PRAT _createrat( void ) // //----------------------------------------------------------------------------- -PRAT numtorat( _In_ PNUMBER pin, uint32_t radix) +PRAT numtorat(_In_ PNUMBER pin, uint32_t radix) { - PNUMBER pnRadixn= nullptr; - DUPNUM( pnRadixn, pin ); + PNUMBER pnRadixn = nullptr; + DUPNUM(pnRadixn, pin); - PNUMBER qnRadixn=i32tonum( 1, radix); + PNUMBER qnRadixn = i32tonum(1, radix); // Ensure p and q start out as integers. - if ( pnRadixn->exp < 0 ) - { + if (pnRadixn->exp < 0) + { qnRadixn->exp -= pnRadixn->exp; pnRadixn->exp = 0; - } + } - PRAT pout= nullptr; + PRAT pout = nullptr; createrat(pout); // There is probably a better way to do this. pout->pp = numtonRadixx(pnRadixn, radix); pout->pq = numtonRadixx(qnRadixn, radix); + destroynum(pnRadixn); + destroynum(qnRadixn); - destroynum( pnRadixn ); - destroynum( qnRadixn ); - - return( pout ); + return (pout); } - - //---------------------------------------------------------------------------- // // FUNCTION: nRadixxtonum @@ -320,49 +300,48 @@ PRAT numtorat( _In_ PNUMBER pin, uint32_t radix) // //---------------------------------------------------------------------------- -PNUMBER nRadixxtonum( _In_ PNUMBER a, uint32_t radix, int32_t precision) +PNUMBER nRadixxtonum(_In_ PNUMBER a, uint32_t radix, int32_t precision) { uint32_t bitmask; uint32_t cdigits; - MANTTYPE *ptr; + MANTTYPE* ptr; - PNUMBER sum = i32tonum( 0, radix ); - PNUMBER powofnRadix = i32tonum( BASEX, radix ); + PNUMBER sum = i32tonum(0, radix); + PNUMBER powofnRadix = i32tonum(BASEX, radix); // A large penalty is paid for conversion of digits no one will see anyway. // limit the digits to the minimum of the existing precision or the // requested precision. cdigits = precision + 1; - if ( cdigits > (uint32_t)a->cdigit ) - { + if (cdigits > (uint32_t)a->cdigit) + { cdigits = (uint32_t)a->cdigit; - } + } // scale by the internal base to the internal exponent offset of the LSD - numpowi32( &powofnRadix, a->exp + (a->cdigit - cdigits), radix, precision); + numpowi32(&powofnRadix, a->exp + (a->cdigit - cdigits), radix, precision); // Loop over all the relative digits from MSD to LSD - for ( ptr = &(a->mant[a->cdigit-1]); cdigits > 0; - ptr--, cdigits-- ) - { + for (ptr = &(a->mant[a->cdigit - 1]); cdigits > 0; ptr--, cdigits--) + { // Loop over all the bits from MSB to LSB - for ( bitmask = BASEX/2; bitmask > 0; bitmask /= 2 ) + for (bitmask = BASEX / 2; bitmask > 0; bitmask /= 2) + { + addnum(&sum, sum, radix); + if (*ptr & bitmask) { - addnum( &sum, sum, radix ); - if ( *ptr & bitmask ) - { sum->mant[0] |= 1; - } } } + } // Scale answer by power of internal exponent. - mulnum( &sum, powofnRadix, radix ); + mulnum(&sum, powofnRadix, radix); - destroynum( powofnRadix ); + destroynum(powofnRadix); sum->sign = a->sign; - return( sum ); + return (sum); } //----------------------------------------------------------------------------- @@ -383,37 +362,37 @@ PNUMBER numtonRadixx(_In_ PNUMBER a, uint32_t radix) { PNUMBER pnumret = i32tonum(0, BASEX); // pnumret is the number in internal form. PNUMBER num_radix = i32tonum(radix, BASEX); - MANTTYPE *ptrdigit = a->mant; // pointer to digit being worked on. + MANTTYPE* ptrdigit = a->mant; // pointer to digit being worked on. // Digits are in reverse order, back over them LSD first. - ptrdigit += a->cdigit-1; + ptrdigit += a->cdigit - 1; - PNUMBER thisdigit = nullptr; // thisdigit holds the current digit of a - // being summed into result. - int32_t idigit; // idigit is the iterate of digits in a. - for ( idigit = 0; idigit < a->cdigit; idigit++ ) - { - mulnumx( &pnumret, num_radix); + PNUMBER thisdigit = nullptr; // thisdigit holds the current digit of a + // being summed into result. + int32_t idigit; // idigit is the iterate of digits in a. + for (idigit = 0; idigit < a->cdigit; idigit++) + { + mulnumx(&pnumret, num_radix); // WARNING: // This should just smack in each digit into a 'special' thisdigit. // and not do the overhead of recreating the number type each time. - thisdigit = i32tonum( *ptrdigit--, BASEX ); - addnum( &pnumret, thisdigit, BASEX ); - destroynum( thisdigit ); - } + thisdigit = i32tonum(*ptrdigit--, BASEX); + addnum(&pnumret, thisdigit, BASEX); + destroynum(thisdigit); + } // Calculate the exponent of the external base for scaling. - numpowi32x( &num_radix, a->exp ); + numpowi32x(&num_radix, a->exp); // ... and scale the result. - mulnumx( &pnumret, num_radix); + mulnumx(&pnumret, num_radix); destroynum(num_radix); // And propagate the sign. pnumret->sign = a->sign; - return( pnumret ); + return (pnumret); } //----------------------------------------------------------------------------- @@ -569,80 +548,66 @@ static constexpr uint8_t EX = 4; static constexpr uint8_t START = 0; static constexpr uint8_t MANTS = 1; -static constexpr uint8_t LZ = 2; -static constexpr uint8_t LZDP = 3; -static constexpr uint8_t LD = 4; -static constexpr uint8_t DZ = 5; -static constexpr uint8_t DD = 6; -static constexpr uint8_t DDP = 7; -static constexpr uint8_t EXPB = 8; -static constexpr uint8_t EXPS = 9; -static constexpr uint8_t EXPD = 10; +static constexpr uint8_t LZ = 2; +static constexpr uint8_t LZDP = 3; +static constexpr uint8_t LD = 4; +static constexpr uint8_t DZ = 5; +static constexpr uint8_t DD = 6; +static constexpr uint8_t DDP = 7; +static constexpr uint8_t EXPB = 8; +static constexpr uint8_t EXPS = 9; +static constexpr uint8_t EXPD = 10; static constexpr uint8_t EXPBZ = 11; static constexpr uint8_t EXPSZ = 12; static constexpr uint8_t EXPDZ = 13; -static constexpr uint8_t ERR = 14; +static constexpr uint8_t ERR = 14; -#if defined( DEBUG ) -char *statestr[] = { - "START", - "MANTS", - "LZ", - "LZDP", - "LD", - "DZ", - "DD", - "DDP", - "EXPB", - "EXPS", - "EXPD", - "EXPBZ", - "EXPSZ", - "EXPDZ", - "ERR", +#if defined(DEBUG) +char* statestr[] = { + "START", "MANTS", "LZ", "LZDP", "LD", "DZ", "DD", "DDP", "EXPB", "EXPS", "EXPD", "EXPBZ", "EXPSZ", "EXPDZ", "ERR", }; #endif // New state is machine[state][terminal] -static constexpr uint8_t machine[ERR+1][EX+1]= { +static constexpr uint8_t machine[ERR + 1][EX + 1] = { // DP, ZR, NZ, SG, EX // START - { LZDP, LZ, LD, MANTS, ERR }, + { LZDP, LZ, LD, MANTS, ERR }, // MANTS - { LZDP, LZ, LD, ERR, ERR }, + { LZDP, LZ, LD, ERR, ERR }, // LZ - { LZDP, LZ, LD, ERR, EXPBZ }, + { LZDP, LZ, LD, ERR, EXPBZ }, // LZDP - { ERR, DZ, DD, ERR, EXPB }, + { ERR, DZ, DD, ERR, EXPB }, // LD - { DDP, LD, LD, ERR, EXPB }, + { DDP, LD, LD, ERR, EXPB }, // DZ - { ERR, DZ, DD, ERR, EXPBZ }, + { ERR, DZ, DD, ERR, EXPBZ }, // DD - { ERR, DD, DD, ERR, EXPB }, + { ERR, DD, DD, ERR, EXPB }, // DDP - { ERR, DD, DD, ERR, EXPB }, + { ERR, DD, DD, ERR, EXPB }, // EXPB - { ERR, EXPD, EXPD, EXPS, ERR }, + { ERR, EXPD, EXPD, EXPS, ERR }, // EXPS - { ERR, EXPD, EXPD, ERR, ERR }, + { ERR, EXPD, EXPD, ERR, ERR }, // EXPD - { ERR, EXPD, EXPD, ERR, ERR }, + { ERR, EXPD, EXPD, ERR, ERR }, // EXPBZ - { ERR, EXPDZ, EXPDZ, EXPSZ, ERR }, + { ERR, EXPDZ, EXPDZ, EXPSZ, ERR }, // EXPSZ - { ERR, EXPDZ, EXPDZ, ERR, ERR }, + { ERR, EXPDZ, EXPDZ, ERR, ERR }, // EXPDZ - { ERR, EXPDZ, EXPDZ, ERR, ERR }, + { ERR, EXPDZ, EXPDZ, ERR, ERR }, // ERR - { ERR, ERR, ERR, ERR, ERR } + { ERR, ERR, ERR, ERR, ERR } }; wchar_t NormalizeCharDigit(wchar_t c, uint32_t radix) { // Allow upper and lower case letters as equivalent, base // is in the range where this is not ambiguous. - if (size_t{ radix } >= DIGITS.find(L'A') && size_t { radix } <= DIGITS.find(L'Z')) + if (size_t{ radix } >= DIGITS.find(L'A') && size_t{ radix } <= DIGITS.find(L'Z')) { return towupper(c); } @@ -652,15 +617,15 @@ wchar_t NormalizeCharDigit(wchar_t c, uint32_t radix) PNUMBER StringToNumber(wstring_view numberString, uint32_t radix, int32_t precision) { - int32_t expSign = 1L; // expSign is exponent sign ( +/- 1 ) - int32_t expValue = 0L; // expValue is exponent mantissa, should be unsigned + int32_t expSign = 1L; // expSign is exponent sign ( +/- 1 ) + int32_t expValue = 0L; // expValue is exponent mantissa, should be unsigned PNUMBER pnumret = nullptr; createnum(pnumret, static_cast(numberString.length())); pnumret->sign = 1L; pnumret->cdigit = 0; pnumret->exp = 0; - MANTTYPE *pmant = pnumret->mant + numberString.length() - 1; + MANTTYPE* pmant = pnumret->mant + numberString.length() - 1; uint8_t state = START; // state is the state of the input state machine. wchar_t curChar; @@ -708,41 +673,41 @@ PNUMBER StringToNumber(wstring_view numberString, uint32_t radix, int32_t precis break; case EXPDZ: case EXPD: - { - curChar = NormalizeCharDigit(curChar, radix); + { + curChar = NormalizeCharDigit(curChar, radix); - size_t pos = DIGITS.find(curChar); - if (pos != wstring_view::npos) - { - expValue *= radix; - expValue += static_cast(pos); - } - else - { - state = ERR; - } + size_t pos = DIGITS.find(curChar); + if (pos != wstring_view::npos) + { + expValue *= radix; + expValue += static_cast(pos); } - break; + else + { + state = ERR; + } + } + break; case LD: pnumret->exp++; [[fallthrough]]; case DD: - { - curChar = NormalizeCharDigit(curChar, radix); + { + curChar = NormalizeCharDigit(curChar, radix); - size_t pos = DIGITS.find(curChar); - if (pos != wstring_view::npos && pos < static_cast(radix)) - { - *pmant-- = static_cast(pos); - pnumret->exp--; - pnumret->cdigit++; - } - else - { - state = ERR; - } + size_t pos = DIGITS.find(curChar); + if (pos != wstring_view::npos && pos < static_cast(radix)) + { + *pmant-- = static_cast(pos); + pnumret->exp--; + pnumret->cdigit++; } - break; + else + { + state = ERR; + } + } + break; case DZ: pnumret->exp--; break; @@ -795,14 +760,14 @@ PNUMBER StringToNumber(wstring_view numberString, uint32_t radix, int32_t precis // //----------------------------------------------------------------------------- -PRAT i32torat( _In_ int32_t ini32 ) +PRAT i32torat(_In_ int32_t ini32) { - PRAT pratret= nullptr; - createrat( pratret ); - pratret->pp = i32tonum(ini32, BASEX ); - pratret->pq = i32tonum(1L, BASEX ); - return( pratret ); + PRAT pratret = nullptr; + createrat(pratret); + pratret->pp = i32tonum(ini32, BASEX); + pratret->pq = i32tonum(1L, BASEX); + return (pratret); } //----------------------------------------------------------------------------- @@ -819,14 +784,14 @@ PRAT i32torat( _In_ int32_t ini32 ) // //----------------------------------------------------------------------------- -PRAT Ui32torat( _In_ uint32_t inui32 ) +PRAT Ui32torat(_In_ uint32_t inui32) { - PRAT pratret= nullptr; - createrat( pratret ); - pratret->pp = Ui32tonum(inui32, BASEX ); - pratret->pq = i32tonum(1L, BASEX ); - return( pratret ); + PRAT pratret = nullptr; + createrat(pratret); + pratret->pp = Ui32tonum(inui32, BASEX); + pratret->pq = i32tonum(1L, BASEX); + return (pratret); } //----------------------------------------------------------------------------- @@ -842,33 +807,34 @@ PRAT Ui32torat( _In_ uint32_t inui32 ) // //----------------------------------------------------------------------------- -PNUMBER i32tonum( int32_t ini32, uint32_t radix) +PNUMBER i32tonum(int32_t ini32, uint32_t radix) { - MANTTYPE *pmant; - PNUMBER pnumret= nullptr; + MANTTYPE* pmant; + PNUMBER pnumret = nullptr; - createnum( pnumret, MAX_LONG_SIZE ); + createnum(pnumret, MAX_LONG_SIZE); pmant = pnumret->mant; pnumret->cdigit = 0; pnumret->exp = 0; - if ( ini32 < 0 ) - { + if (ini32 < 0) + { pnumret->sign = -1; ini32 *= -1; - } + } else - { + { pnumret->sign = 1; - } + } - do { + do + { *pmant++ = (MANTTYPE)(ini32 % radix); ini32 /= radix; pnumret->cdigit++; - } while ( ini32 ); + } while (ini32); - return( pnumret ); + return (pnumret); } //----------------------------------------------------------------------------- @@ -885,28 +851,27 @@ PNUMBER i32tonum( int32_t ini32, uint32_t radix) // //----------------------------------------------------------------------------- - PNUMBER Ui32tonum(uint32_t ini32, uint32_t radix) { - MANTTYPE *pmant; - PNUMBER pnumret= nullptr; + MANTTYPE* pmant; + PNUMBER pnumret = nullptr; - createnum( pnumret, MAX_LONG_SIZE ); + createnum(pnumret, MAX_LONG_SIZE); pmant = pnumret->mant; pnumret->cdigit = 0; pnumret->exp = 0; pnumret->sign = 1; - do { + do + { *pmant++ = (MANTTYPE)(ini32 % radix); ini32 /= radix; pnumret->cdigit++; - } while ( ini32 ); + } while (ini32); - return( pnumret ); + return (pnumret); } - //----------------------------------------------------------------------------- // // FUNCTION: rattoi32 @@ -921,26 +886,26 @@ PNUMBER Ui32tonum(uint32_t ini32, uint32_t radix) // //----------------------------------------------------------------------------- -int32_t rattoi32( _In_ PRAT prat , uint32_t radix, int32_t precision) +int32_t rattoi32(_In_ PRAT prat, uint32_t radix, int32_t precision) { - if ( rat_gt( prat, rat_max_i32, precision) || rat_lt( prat, rat_min_i32, precision) ) + if (rat_gt(prat, rat_max_i32, precision) || rat_lt(prat, rat_min_i32, precision)) { // Don't attempt rattoi32 of anything too big or small - throw( CALC_E_DOMAIN ); + throw(CALC_E_DOMAIN); } PRAT pint = nullptr; - DUPRAT(pint,prat); + DUPRAT(pint, prat); - intrat( &pint, radix, precision); - divnumx( &(pint->pp), pint->pq, precision); - DUPNUM( pint->pq, num_one ); + intrat(&pint, radix, precision); + divnumx(&(pint->pp), pint->pq, precision); + DUPNUM(pint->pq, num_one); - int32_t lret = numtoi32( pint->pp, BASEX ); + int32_t lret = numtoi32(pint->pp, BASEX); destroyrat(pint); - return( lret ); + return (lret); } //----------------------------------------------------------------------------- @@ -956,29 +921,28 @@ int32_t rattoi32( _In_ PRAT prat , uint32_t radix, int32_t precision) // base. // //----------------------------------------------------------------------------- -uint32_t rattoUi32( _In_ PRAT prat, uint32_t radix, int32_t precision) +uint32_t rattoUi32(_In_ PRAT prat, uint32_t radix, int32_t precision) { - if ( rat_gt( prat, rat_dword, precision) || rat_lt( prat, rat_zero, precision) ) + if (rat_gt(prat, rat_dword, precision) || rat_lt(prat, rat_zero, precision)) { // Don't attempt rattoui32 of anything too big or small - throw( CALC_E_DOMAIN ); + throw(CALC_E_DOMAIN); } PRAT pint = nullptr; - DUPRAT(pint,prat); + DUPRAT(pint, prat); - intrat( &pint, radix, precision); - divnumx( &(pint->pp), pint->pq, precision); - DUPNUM( pint->pq, num_one ); + intrat(&pint, radix, precision); + divnumx(&(pint->pp), pint->pq, precision); + DUPNUM(pint->pq, num_one); - uint32_t lret = numtoi32( pint->pp, BASEX ); // This happens to work even if it is only signed + uint32_t lret = numtoi32(pint->pp, BASEX); // This happens to work even if it is only signed destroyrat(pint); - return( lret ); + return (lret); } - //----------------------------------------------------------------------------- // // FUNCTION: rattoUi64 @@ -994,20 +958,20 @@ uint32_t rattoUi32( _In_ PRAT prat, uint32_t radix, int32_t precision) // internal base chosen happens to be 2^32, this is easier. //----------------------------------------------------------------------------- -uint64_t rattoUi64( _In_ PRAT prat, uint32_t radix, int32_t precision) +uint64_t rattoUi64(_In_ PRAT prat, uint32_t radix, int32_t precision) { PRAT pint = nullptr; // first get the LO 32 bit word DUPRAT(pint, prat); - andrat(&pint, rat_dword, radix, precision); // & 0xFFFFFFFF (2 ^ 32 -1) - uint32_t lo = rattoUi32(pint, radix, precision); // wont throw exception because already hi-dword chopped off + andrat(&pint, rat_dword, radix, precision); // & 0xFFFFFFFF (2 ^ 32 -1) + uint32_t lo = rattoUi32(pint, radix, precision); // wont throw exception because already hi-dword chopped off DUPRAT(pint, prat); // previous pint will get freed by this as well PRAT prat32 = i32torat(32); rshrat(&pint, prat32, radix, precision); - intrat( &pint, radix, precision); - andrat(&pint, rat_dword, radix, precision); // & 0xFFFFFFFF (2 ^ 32 -1) + intrat(&pint, radix, precision); + andrat(&pint, rat_dword, radix, precision); // & 0xFFFFFFFF (2 ^ 32 -1) uint32_t hi = rattoUi32(pint, radix, precision); destroyrat(prat32); @@ -1029,11 +993,11 @@ uint64_t rattoUi64( _In_ PRAT prat, uint32_t radix, int32_t precision) // base claimed. // //----------------------------------------------------------------------------- -int32_t numtoi32( _In_ PNUMBER pnum, uint32_t radix ) +int32_t numtoi32(_In_ PNUMBER pnum, uint32_t radix) { int32_t lret = 0; - MANTTYPE *pmant = pnum->mant; + MANTTYPE* pmant = pnum->mant; pmant += pnum->cdigit - 1; int32_t expt = pnum->exp; @@ -1066,40 +1030,40 @@ int32_t numtoi32( _In_ PNUMBER pnum, uint32_t radix ) bool stripzeroesnum(_Inout_ PNUMBER pnum, int32_t starting) { - MANTTYPE *pmant; + MANTTYPE* pmant; int32_t cdigits; bool fstrip = false; // point pmant to the LeastCalculatedDigit - pmant=pnum->mant; - cdigits=pnum->cdigit; + pmant = pnum->mant; + cdigits = pnum->cdigit; // point pmant to the LSD - if ( cdigits > starting ) - { + if (cdigits > starting) + { pmant += cdigits - starting; cdigits = starting; - } + } // Check we haven't gone too far, and we are still looking at zeros. - while ( ( cdigits > 0 ) && !(*pmant) ) - { + while ((cdigits > 0) && !(*pmant)) + { // move to next significant digit and keep track of digits we can - // ignore later. + // ignore later. pmant++; cdigits--; fstrip = true; } // If there are zeros to remove. - if ( fstrip ) - { + if (fstrip) + { // Remove them. - memmove( pnum->mant, pmant, (int)(cdigits*sizeof(MANTTYPE)) ); + memmove(pnum->mant, pmant, (int)(cdigits * sizeof(MANTTYPE))); // And adjust exponent and digit count accordingly. - pnum->exp += ( pnum->cdigit - cdigits ); + pnum->exp += (pnum->cdigit - cdigits); pnum->cdigit = cdigits; - } - return( fstrip ); + } + return (fstrip); } //----------------------------------------------------------------------------- @@ -1205,7 +1169,7 @@ wstring NumberToString(_Inout_ PNUMBER& pnum, int format, uint32_t radix, int32_ // Set up all the post rounding stuff. bool useSciForm = false; int32_t eout = exponent - 1; // Displayed exponent. - MANTTYPE *pmant = pnum->mant + pnum->cdigit - 1; + MANTTYPE* pmant = pnum->mant + pnum->cdigit - 1; // Case where too many digits are to the left of the decimal or // FMT_SCIENTIFIC or FMT_ENGINEERING was specified. if ((format == FMT_SCIENTIFIC) || (format == FMT_ENGINEERING)) @@ -1397,17 +1361,17 @@ void flatrat(_Inout_ PRAT& prat, uint32_t radix, int32_t precision) // //----------------------------------------------------------------------------- -PNUMBER gcd( _In_ PNUMBER a, _In_ PNUMBER b) +PNUMBER gcd(_In_ PNUMBER a, _In_ PNUMBER b) { - PNUMBER r= nullptr; - PNUMBER larger= nullptr; - PNUMBER smaller= nullptr; + PNUMBER r = nullptr; + PNUMBER larger = nullptr; + PNUMBER smaller = nullptr; if (zernum(a)) { return b; } - else if(zernum(b)) + else if (zernum(b)) { return a; } @@ -1453,18 +1417,18 @@ PNUMBER gcd( _In_ PNUMBER a, _In_ PNUMBER b) PNUMBER i32factnum(int32_t ini32, uint32_t radix) { - PNUMBER lret= nullptr; - PNUMBER tmp= nullptr; + PNUMBER lret = nullptr; + PNUMBER tmp = nullptr; - lret = i32tonum( 1, radix); + lret = i32tonum(1, radix); - while ( ini32 > 0 ) - { - tmp = i32tonum( ini32--, radix); - mulnum( &lret, tmp, radix); - destroynum( tmp ); - } - return( lret ); + while (ini32 > 0) + { + tmp = i32tonum(ini32--, radix); + mulnum(&lret, tmp, radix); + destroynum(tmp); + } + return (lret); } //----------------------------------------------------------------------------- @@ -1483,22 +1447,22 @@ PNUMBER i32factnum(int32_t ini32, uint32_t radix) PNUMBER i32prodnum(int32_t start, int32_t stop, uint32_t radix) { - PNUMBER lret= nullptr; - PNUMBER tmp= nullptr; + PNUMBER lret = nullptr; + PNUMBER tmp = nullptr; - lret = i32tonum( 1, radix); + lret = i32tonum(1, radix); - while ( start <= stop ) + while (start <= stop) + { + if (start) { - if ( start ) - { - tmp = i32tonum( start, radix); - mulnum( &lret, tmp, radix); - destroynum( tmp ); - } - start++; + tmp = i32tonum(start, radix); + mulnum(&lret, tmp, radix); + destroynum(tmp); } - return( lret ); + start++; + } + return (lret); } //----------------------------------------------------------------------------- @@ -1515,23 +1479,22 @@ PNUMBER i32prodnum(int32_t start, int32_t stop, uint32_t radix) // //----------------------------------------------------------------------------- -void numpowi32( _Inout_ PNUMBER *proot, int32_t power, uint32_t radix, int32_t precision) +void numpowi32(_Inout_ PNUMBER* proot, int32_t power, uint32_t radix, int32_t precision) { - PNUMBER lret = i32tonum( 1, radix ); + PNUMBER lret = i32tonum(1, radix); - while ( power > 0 ) + while (power > 0) + { + if (power & 1) { - if ( power & 1 ) - { - mulnum( &lret, *proot, radix ); - } - mulnum( proot, *proot, radix ); + mulnum(&lret, *proot, radix); + } + mulnum(proot, *proot, radix); TRIMNUM(*proot, precision); power >>= 1; - } - destroynum( *proot ); - *proot=lret; - + } + destroynum(*proot); + *proot = lret; } //----------------------------------------------------------------------------- @@ -1547,37 +1510,37 @@ void numpowi32( _Inout_ PNUMBER *proot, int32_t power, uint32_t radix, int32_t p // //----------------------------------------------------------------------------- -void ratpowi32( _Inout_ PRAT *proot, int32_t power, int32_t precision) +void ratpowi32(_Inout_ PRAT* proot, int32_t power, int32_t precision) { - if ( power < 0 ) - { + if (power < 0) + { // Take the positive power and invert answer. PNUMBER pnumtemp = nullptr; - ratpowi32( proot, -power, precision); + ratpowi32(proot, -power, precision); pnumtemp = (*proot)->pp; - (*proot)->pp = (*proot)->pq; + (*proot)->pp = (*proot)->pq; (*proot)->pq = pnumtemp; - } + } else + { + PRAT lret = nullptr; + + lret = i32torat(1); + + while (power > 0) { - PRAT lret= nullptr; - - lret = i32torat( 1 ); - - while ( power > 0 ) + if (power & 1) { - if ( power & 1 ) - { - mulnumx( &(lret->pp), (*proot)->pp ); - mulnumx( &(lret->pq), (*proot)->pq ); - } - mulrat( proot, *proot, precision); + mulnumx(&(lret->pp), (*proot)->pp); + mulnumx(&(lret->pq), (*proot)->pq); + } + mulrat(proot, *proot, precision); trimit(&lret, precision); trimit(proot, precision); power >>= 1; - } - destroyrat( *proot ); - *proot=lret; } + destroyrat(*proot); + *proot = lret; + } } diff --git a/src/CalcManager/Ratpack/exp.cpp b/src/CalcManager/Ratpack/exp.cpp index e4939db4..1252002d 100644 --- a/src/CalcManager/Ratpack/exp.cpp +++ b/src/CalcManager/Ratpack/exp.cpp @@ -16,7 +16,6 @@ //----------------------------------------------------------------------------- #include "ratpak.h" - //----------------------------------------------------------------------------- // // FUNCTION: exprat @@ -40,63 +39,63 @@ // //----------------------------------------------------------------------------- -void _exprat( PRAT *px, int32_t precision) +void _exprat(PRAT* px, int32_t precision) { CREATETAYLOR(); - addnum(&(pret->pp),num_one, BASEX); - addnum(&(pret->pq),num_one, BASEX); - DUPRAT(thisterm,pret); + addnum(&(pret->pp), num_one, BASEX); + addnum(&(pret->pq), num_one, BASEX); + DUPRAT(thisterm, pret); - n2=i32tonum(0L, BASEX); + n2 = i32tonum(0L, BASEX); - do { + do + { NEXTTERM(*px, INC(n2) DIVNUM(n2), precision); - } while ( !SMALL_ENOUGH_RAT( thisterm, precision) ); + } while (!SMALL_ENOUGH_RAT(thisterm, precision)); DESTROYTAYLOR(); } -void exprat( PRAT *px, uint32_t radix, int32_t precision) +void exprat(PRAT* px, uint32_t radix, int32_t precision) { - PRAT pwr= nullptr; - PRAT pint= nullptr; + PRAT pwr = nullptr; + PRAT pint = nullptr; int32_t intpwr; - if ( rat_gt( *px, rat_max_exp, precision) || rat_lt( *px, rat_min_exp, precision) ) - { + if (rat_gt(*px, rat_max_exp, precision) || rat_lt(*px, rat_min_exp, precision)) + { // Don't attempt exp of anything large. - throw( CALC_E_DOMAIN ); - } + throw(CALC_E_DOMAIN); + } - DUPRAT(pwr,rat_exp); - DUPRAT(pint,*px); + DUPRAT(pwr, rat_exp); + DUPRAT(pint, *px); intrat(&pint, radix, precision); intpwr = rattoi32(pint, radix, precision); - ratpowi32( &pwr, intpwr, precision); + ratpowi32(&pwr, intpwr, precision); subrat(px, pint, precision); // It just so happens to be an integral power of e. - if ( rat_gt( *px, rat_negsmallest, precision) && rat_lt( *px, rat_smallest, precision) ) - { - DUPRAT(*px,pwr); - } + if (rat_gt(*px, rat_negsmallest, precision) && rat_lt(*px, rat_smallest, precision)) + { + DUPRAT(*px, pwr); + } else - { + { _exprat(px, precision); mulrat(px, pwr, precision); - } + } - destroyrat( pwr ); - destroyrat( pint ); + destroyrat(pwr); + destroyrat(pint); } - //----------------------------------------------------------------------------- // // FUNCTION: lograt, _lograt @@ -124,7 +123,7 @@ void exprat( PRAT *px, uint32_t radix, int32_t precision) // //----------------------------------------------------------------------------- -void _lograt( PRAT *px, int32_t precision) +void _lograt(PRAT* px, int32_t precision) { CREATETAYLOR(); @@ -133,76 +132,75 @@ void _lograt( PRAT *px, int32_t precision) // sub one from x (*px)->pq->sign *= -1; - addnum(&((*px)->pp),(*px)->pq, BASEX); + addnum(&((*px)->pp), (*px)->pq, BASEX); (*px)->pq->sign *= -1; - DUPRAT(pret,*px); - DUPRAT(thisterm,*px); + DUPRAT(pret, *px); + DUPRAT(thisterm, *px); - n2=i32tonum(1L, BASEX); + n2 = i32tonum(1L, BASEX); (*px)->pp->sign *= -1; - do { + do + { NEXTTERM(*px, MULNUM(n2) INC(n2) DIVNUM(n2), precision); TRIMTOP(*px, precision); - } while ( !SMALL_ENOUGH_RAT( thisterm, precision) ); + } while (!SMALL_ENOUGH_RAT(thisterm, precision)); DESTROYTAYLOR(); } - -void lograt( PRAT *px, int32_t precision) +void lograt(PRAT* px, int32_t precision) { bool fneglog; - PRAT pwr = nullptr; // pwr is the large scaling factor. - PRAT offset = nullptr; // offset is the incremental scaling factor. - + PRAT pwr = nullptr; // pwr is the large scaling factor. + PRAT offset = nullptr; // offset is the incremental scaling factor. // Check for someone taking the log of zero or a negative number. - if ( rat_le( *px, rat_zero, precision) ) - { - throw( CALC_E_DOMAIN ); - } + if (rat_le(*px, rat_zero, precision)) + { + throw(CALC_E_DOMAIN); + } // Get number > 1, for scaling - fneglog = rat_lt( *px, rat_one, precision); - if ( fneglog ) - { + fneglog = rat_lt(*px, rat_one, precision); + if (fneglog) + { // WARNING: This is equivalent to doing *px = 1 / *px - PNUMBER pnumtemp= nullptr; + PNUMBER pnumtemp = nullptr; pnumtemp = (*px)->pp; (*px)->pp = (*px)->pq; (*px)->pq = pnumtemp; - } + } // Scale the number within BASEX factor of 1, for the large scale. // log(x*2^(BASEXPWR*k)) = BASEXPWR*k*log(2)+log(x) - if ( LOGRAT2(*px) > 1 ) - { + if (LOGRAT2(*px) > 1) + { // Take advantage of px's base BASEX to scale quickly down to // a reasonable range. int32_t intpwr; - intpwr=LOGRAT2(*px)-1; + intpwr = LOGRAT2(*px) - 1; (*px)->pq->exp += intpwr; - pwr=i32torat(intpwr*BASEXPWR); + pwr = i32torat(intpwr * BASEXPWR); mulrat(&pwr, ln_two, precision); // ln(x+e)-ln(x) looks close to e when x is close to one using some // expansions. This means we can trim past precision digits+1. TRIMTOP(*px, precision); - } + } else - { - DUPRAT(pwr,rat_zero); - } + { + DUPRAT(pwr, rat_zero); + } - DUPRAT(offset,rat_zero); + DUPRAT(offset, rat_zero); // Scale the number between 1 and e_to_one_half, for the small scale. - while ( rat_gt( *px, e_to_one_half, precision) ) - { - divrat( px, e_to_one_half, precision); - addrat( &offset, rat_one, precision); - } + while (rat_gt(*px, e_to_one_half, precision)) + { + divrat(px, e_to_one_half, precision); + addrat(&offset, rat_one, precision); + } _lograt(px, precision); @@ -217,16 +215,16 @@ void lograt( PRAT *px, int32_t precision) trimit(px, precision); // If number started out < 1 rescale answer to negative. - if ( fneglog ) - { + if (fneglog) + { (*px)->pp->sign *= -1; - } + } destroyrat(offset); destroyrat(pwr); } -void log10rat( PRAT *px, int32_t precision) +void log10rat(PRAT* px, int32_t precision) { lograt(px, precision); @@ -246,7 +244,7 @@ bool IsEven(PRAT x, uint32_t radix, int32_t precision) fracrat(&tmp, radix, precision); addrat(&tmp, tmp, precision); subrat(&tmp, rat_one, precision); - if ( rat_lt( tmp, rat_zero, precision)) + if (rat_lt(tmp, rat_zero, precision)) { bRet = true; } @@ -269,7 +267,7 @@ bool IsEven(PRAT x, uint32_t radix, int32_t precision) // // //--------------------------------------------------------------------------- -void powrat(PRAT *px, PRAT y, uint32_t radix, int32_t precision) +void powrat(PRAT* px, PRAT y, uint32_t radix, int32_t precision) { // Handle cases where px or y is 0 by calling powratcomp directly if (zerrat(*px) || zerrat(y)) @@ -296,12 +294,12 @@ void powrat(PRAT *px, PRAT y, uint32_t radix, int32_t precision) } } -void powratNumeratorDenominator(PRAT *px, PRAT y, uint32_t radix, int32_t precision) +void powratNumeratorDenominator(PRAT* px, PRAT y, uint32_t radix, int32_t precision) { // Prepare rationals PRAT yNumerator = nullptr; PRAT yDenominator = nullptr; - DUPRAT(yNumerator, rat_zero); // yNumerator->pq is 1 one + DUPRAT(yNumerator, rat_zero); // yNumerator->pq is 1 one DUPRAT(yDenominator, rat_zero); // yDenominator->pq is 1 one DUPNUM(yNumerator->pp, y->pp); DUPNUM(yDenominator->pp, y->pq); @@ -405,7 +403,7 @@ void powratNumeratorDenominator(PRAT *px, PRAT y, uint32_t radix, int32_t precis // // //--------------------------------------------------------------------------- -void powratcomp(PRAT *px, PRAT y, uint32_t radix, int32_t precision) +void powratcomp(PRAT* px, PRAT y, uint32_t radix, int32_t precision) { int32_t sign = SIGN(*px); @@ -413,76 +411,74 @@ void powratcomp(PRAT *px, PRAT y, uint32_t radix, int32_t precision) (*px)->pp->sign = 1; (*px)->pq->sign = 1; - if ( zerrat( *px ) ) - { + if (zerrat(*px)) + { // *px is zero. - if ( rat_lt( y, rat_zero, precision) ) - { - throw( CALC_E_DOMAIN ); - } - else if ( zerrat( y ) ) - { - // *px and y are both zero, special case a 1 return. - DUPRAT(*px,rat_one); - // Ensure sign is positive. - sign = 1; - } - } - else + if (rat_lt(y, rat_zero, precision)) { - PRAT pxint= nullptr; - DUPRAT(pxint,*px); - subrat(&pxint, rat_one, precision); - if ( rat_gt( pxint, rat_negsmallest, precision) && - rat_lt( pxint, rat_smallest, precision) && ( sign == 1 ) ) - { - // *px is one, special case a 1 return. - DUPRAT(*px,rat_one); + throw(CALC_E_DOMAIN); + } + else if (zerrat(y)) + { + // *px and y are both zero, special case a 1 return. + DUPRAT(*px, rat_one); // Ensure sign is positive. sign = 1; - } + } + } + else + { + PRAT pxint = nullptr; + DUPRAT(pxint, *px); + subrat(&pxint, rat_one, precision); + if (rat_gt(pxint, rat_negsmallest, precision) && rat_lt(pxint, rat_smallest, precision) && (sign == 1)) + { + // *px is one, special case a 1 return. + DUPRAT(*px, rat_one); + // Ensure sign is positive. + sign = 1; + } else - { - + { // Only do the exp if the number isn't zero or one PRAT podd = nullptr; - DUPRAT(podd,y); + DUPRAT(podd, y); fracrat(&podd, radix, precision); - if ( rat_gt( podd, rat_negsmallest, precision) && rat_lt( podd, rat_smallest, precision) ) - { + if (rat_gt(podd, rat_negsmallest, precision) && rat_lt(podd, rat_smallest, precision)) + { // If power is an integer let ratpowi32 deal with it. PRAT iy = nullptr; int32_t inty; - DUPRAT(iy,y); + DUPRAT(iy, y); subrat(&iy, podd, precision); inty = rattoi32(iy, radix, precision); PRAT plnx = nullptr; - DUPRAT(plnx,*px); + DUPRAT(plnx, *px); lograt(&plnx, precision); mulrat(&plnx, iy, precision); - if ( rat_gt( plnx, rat_max_exp, precision) || rat_lt( plnx, rat_min_exp, precision) ) - { + if (rat_gt(plnx, rat_max_exp, precision) || rat_lt(plnx, rat_min_exp, precision)) + { // Don't attempt exp of anything large or small.A destroyrat(plnx); destroyrat(iy); destroyrat(pxint); destroyrat(podd); - throw( CALC_E_DOMAIN ); - } + throw(CALC_E_DOMAIN); + } destroyrat(plnx); ratpowi32(px, inty, precision); - if ( ( inty & 1 ) == 0 ) - { - sign=1; - } - destroyrat(iy); - } - else + if ((inty & 1) == 0) { + sign = 1; + } + destroyrat(iy); + } + else + { // power is a fraction - if ( sign == -1 ) - { + if (sign == -1) + { // Need to throw an error if the exponent has an even denominator. // As a first step, the numerator and denominator must be divided by 2 as many times as // possible, so that 2/6 is allowed. @@ -492,7 +488,7 @@ void powratcomp(PRAT *px, PRAT y, uint32_t radix, int32_t precision) bool fBadExponent = false; // Get the numbers in arbitrary precision rational number format - DUPRAT(pNumerator, rat_zero); // pNumerator->pq is 1 one + DUPRAT(pNumerator, rat_zero); // pNumerator->pq is 1 one DUPRAT(pDenominator, rat_zero); // pDenominator->pq is 1 one DUPNUM(pNumerator->pp, y->pp); @@ -501,39 +497,39 @@ void powratcomp(PRAT *px, PRAT y, uint32_t radix, int32_t precision) pDenominator->pp->sign = 1; while (IsEven(pNumerator, radix, precision) && IsEven(pDenominator, radix, precision)) // both Numerator & denominator is even - { + { divrat(&pNumerator, rat_two, precision); divrat(&pDenominator, rat_two, precision); - } + } if (IsEven(pDenominator, radix, precision)) // denominator is still even - { - fBadExponent = true; - } + { + fBadExponent = true; + } if (IsEven(pNumerator, radix, precision)) // numerator is still even - { + { sign = 1; - } + } destroyrat(pNumerator); destroyrat(pDenominator); if (fBadExponent) - { - throw( CALC_E_DOMAIN ); - } - } - else { + throw(CALC_E_DOMAIN); + } + } + else + { // If the exponent is not odd disregard the sign. sign = 1; - } + } lograt(px, precision); mulrat(px, y, precision); exprat(px, radix, precision); - } - destroyrat(podd); - } - destroyrat(pxint); + } + destroyrat(podd); } + destroyrat(pxint); + } (*px)->pp->sign *= sign; } diff --git a/src/CalcManager/Ratpack/fact.cpp b/src/CalcManager/Ratpack/fact.cpp index bdcbccb0..4bb2a71a 100644 --- a/src/CalcManager/Ratpack/fact.cpp +++ b/src/CalcManager/Ratpack/fact.cpp @@ -15,8 +15,7 @@ //----------------------------------------------------------------------------- #include "ratpak.h" - -#define ABSRAT(x) (((x)->pp->sign=1),((x)->pq->sign=1)) +#define ABSRAT(x) (((x)->pp->sign = 1), ((x)->pq->sign = 1)) #define NEGATE(x) ((x)->pp->sign *= -1) //----------------------------------------------------------------------------- @@ -55,37 +54,36 @@ // //----------------------------------------------------------------------------- - -void _gamma( PRAT *pn, uint32_t radix, int32_t precision) +void _gamma(PRAT* pn, uint32_t radix, int32_t precision) { - PRAT factorial= nullptr; - PNUMBER count= nullptr; - PRAT tmp= nullptr; - PRAT one_pt_five= nullptr; - PRAT a= nullptr; - PRAT a2= nullptr; - PRAT term= nullptr; - PRAT sum= nullptr; - PRAT err= nullptr; - PRAT mpy= nullptr; + PRAT factorial = nullptr; + PNUMBER count = nullptr; + PRAT tmp = nullptr; + PRAT one_pt_five = nullptr; + PRAT a = nullptr; + PRAT a2 = nullptr; + PRAT term = nullptr; + PRAT sum = nullptr; + PRAT err = nullptr; + PRAT mpy = nullptr; PRAT ratprec = nullptr; PRAT ratRadix = nullptr; int32_t oldprec; // Set up constants and initial conditions oldprec = precision; - ratprec = i32torat( oldprec ); + ratprec = i32torat(oldprec); // Find the best 'A' for convergence to the required precision. - a=i32torat( radix ); + a = i32torat(radix); lograt(&a, precision); mulrat(&a, ratprec, precision); // Really is -ln(n)+1, but -ln(n) will be < 1 // if we scale n between 0.5 and 1.5 addrat(&a, rat_two, precision); - DUPRAT(tmp,a); + DUPRAT(tmp, a); lograt(&tmp, precision); mulrat(&tmp, *pn, precision); addrat(&a, tmp, precision); @@ -94,85 +92,85 @@ void _gamma( PRAT *pn, uint32_t radix, int32_t precision) // Calculate the necessary bump in precision and up the precision. // The following code is equivalent to // precision += ln(exp(a)*pow(a,n+1.5))-ln(radix)); - DUPRAT(tmp,*pn); - one_pt_five=i32torat( 3L ); - divrat( &one_pt_five, rat_two, precision); - addrat( &tmp, one_pt_five, precision); - DUPRAT(term,a); - powratcomp( &term, tmp, radix, precision); - DUPRAT( tmp, a ); - exprat( &tmp, radix, precision); - mulrat( &term, tmp, precision); - lograt( &term, precision); + DUPRAT(tmp, *pn); + one_pt_five = i32torat(3L); + divrat(&one_pt_five, rat_two, precision); + addrat(&tmp, one_pt_five, precision); + DUPRAT(term, a); + powratcomp(&term, tmp, radix, precision); + DUPRAT(tmp, a); + exprat(&tmp, radix, precision); + mulrat(&term, tmp, precision); + lograt(&term, precision); ratRadix = i32torat(radix); - DUPRAT(tmp,ratRadix); - lograt( &tmp, precision); - subrat( &term, tmp, precision); - precision += rattoi32( term, radix, precision); + DUPRAT(tmp, ratRadix); + lograt(&tmp, precision); + subrat(&term, tmp, precision); + precision += rattoi32(term, radix, precision); // Set up initial terms for series, refer to series in above comment block. - DUPRAT(factorial,rat_one); // Start factorial out with one - count = i32tonum( 0L, BASEX ); + DUPRAT(factorial, rat_one); // Start factorial out with one + count = i32tonum(0L, BASEX); - DUPRAT(mpy,a); - powratcomp(&mpy,*pn, radix, precision); + DUPRAT(mpy, a); + powratcomp(&mpy, *pn, radix, precision); // a2=a^2 - DUPRAT(a2,a); + DUPRAT(a2, a); mulrat(&a2, a, precision); // sum=(1/n)-(a/(n+1)) - DUPRAT(sum,rat_one); + DUPRAT(sum, rat_one); divrat(&sum, *pn, precision); - DUPRAT(tmp,*pn); + DUPRAT(tmp, *pn); addrat(&tmp, rat_one, precision); - DUPRAT(term,a); + DUPRAT(term, a); divrat(&term, tmp, precision); subrat(&sum, term, precision); - DUPRAT(err,ratRadix); + DUPRAT(err, ratRadix); NEGATE(ratprec); - powratcomp(&err,ratprec, radix, precision); + powratcomp(&err, ratprec, radix, precision); divrat(&err, ratRadix, precision); // Just get something not tiny in term - DUPRAT(term, rat_two ); + DUPRAT(term, rat_two); // Loop until precision is reached, or asked to halt. - while ( !zerrat( term ) && rat_gt( term, err, precision) ) - { + while (!zerrat(term) && rat_gt(term, err, precision)) + { addrat(pn, rat_two, precision); // WARNING: mixing numbers and rationals here. // for speed and efficiency. INC(count); - mulnumx(&(factorial->pp),count); + mulnumx(&(factorial->pp), count); INC(count) - mulnumx(&(factorial->pp),count); + mulnumx(&(factorial->pp), count); divrat(&factorial, a2, precision); - DUPRAT(tmp,*pn); - addrat( &tmp, rat_one, precision); + DUPRAT(tmp, *pn); + addrat(&tmp, rat_one, precision); destroyrat(term); createrat(term); - DUPNUM(term->pp,count); - DUPNUM(term->pq,num_one); - addrat( &term, rat_one, precision); - mulrat( &term, tmp, precision); - DUPRAT(tmp,a); - divrat( &tmp, term, precision); + DUPNUM(term->pp, count); + DUPNUM(term->pq, num_one); + addrat(&term, rat_one, precision); + mulrat(&term, tmp, precision); + DUPRAT(tmp, a); + divrat(&tmp, term, precision); - DUPRAT(term,rat_one); - divrat( &term, *pn, precision); - subrat( &term, tmp, precision); + DUPRAT(term, rat_one); + divrat(&term, *pn, precision); + subrat(&term, tmp, precision); - divrat (&term, factorial, precision); - addrat( &sum, term, precision); + divrat(&term, factorial, precision); + addrat(&sum, term, precision); ABSRAT(term); - } + } // Multiply by factor. - mulrat( &sum, mpy, precision); + mulrat(&sum, mpy, precision); // And cleanup precision = oldprec; @@ -188,70 +186,67 @@ void _gamma( PRAT *pn, uint32_t radix, int32_t precision) destroyrat(factorial); destroyrat(*pn); - DUPRAT(*pn,sum); + DUPRAT(*pn, sum); destroyrat(sum); } -void factrat( PRAT *px, uint32_t radix, int32_t precision) +void factrat(PRAT* px, uint32_t radix, int32_t precision) { PRAT fact = nullptr; PRAT frac = nullptr; PRAT neg_rat_one = nullptr; - if ( rat_gt( *px, rat_max_fact, precision) || rat_lt( *px, rat_min_fact, precision) ) - { + if (rat_gt(*px, rat_max_fact, precision) || rat_lt(*px, rat_min_fact, precision)) + { // Don't attempt factorial of anything too large or small. throw CALC_E_OVERFLOW; - } + } - DUPRAT(fact,rat_one); + DUPRAT(fact, rat_one); - DUPRAT(neg_rat_one,rat_one); + DUPRAT(neg_rat_one, rat_one); neg_rat_one->pp->sign *= -1; - DUPRAT( frac, *px ); - fracrat( &frac, radix, precision); + DUPRAT(frac, *px); + fracrat(&frac, radix, precision); // Check for negative integers and throw an error. - if ( ( zerrat(frac) || ( LOGRATRADIX(frac) <= -precision) ) && - ( SIGN(*px) == -1 ) ) - { + if ((zerrat(frac) || (LOGRATRADIX(frac) <= -precision)) && (SIGN(*px) == -1)) + { throw CALC_E_DOMAIN; - } - while ( rat_gt( *px, rat_zero, precision) && - ( LOGRATRADIX(*px) > -precision) ) - { - mulrat( &fact, *px, precision); - subrat( px, rat_one, precision); - } + } + while (rat_gt(*px, rat_zero, precision) && (LOGRATRADIX(*px) > -precision)) + { + mulrat(&fact, *px, precision); + subrat(px, rat_one, precision); + } // Added to make numbers 'close enough' to integers use integer factorial. - if ( LOGRATRADIX(*px) <= -precision) - { - DUPRAT((*px),rat_zero); + if (LOGRATRADIX(*px) <= -precision) + { + DUPRAT((*px), rat_zero); intrat(&fact, radix, precision); - } + } - while ( rat_lt( *px, neg_rat_one, precision) ) - { - addrat( px, rat_one, precision); - divrat( &fact, *px, precision); - } + while (rat_lt(*px, neg_rat_one, precision)) + { + addrat(px, rat_one, precision); + divrat(&fact, *px, precision); + } - if ( rat_neq( *px, rat_zero, precision) ) - { - addrat( px, rat_one, precision); - _gamma( px, radix, precision); - mulrat( px, fact, precision); - } + if (rat_neq(*px, rat_zero, precision)) + { + addrat(px, rat_one, precision); + _gamma(px, radix, precision); + mulrat(px, fact, precision); + } else - { - DUPRAT(*px,fact); - } + { + DUPRAT(*px, fact); + } destroyrat(fact); destroyrat(frac); destroyrat(neg_rat_one); } - diff --git a/src/CalcManager/Ratpack/itrans.cpp b/src/CalcManager/Ratpack/itrans.cpp index 1521308d..18c1fb41 100644 --- a/src/CalcManager/Ratpack/itrans.cpp +++ b/src/CalcManager/Ratpack/itrans.cpp @@ -17,26 +17,23 @@ //----------------------------------------------------------------------------- #include "ratpak.h" - - -void ascalerat( _Inout_ PRAT *pa, ANGLE_TYPE angletype, int32_t precision) +void ascalerat(_Inout_ PRAT* pa, ANGLE_TYPE angletype, int32_t precision) { - switch ( angletype ) - { + switch (angletype) + { case ANGLE_RAD: break; case ANGLE_DEG: - divrat( pa, two_pi, precision); - mulrat( pa, rat_360, precision); + divrat(pa, two_pi, precision); + mulrat(pa, rat_360, precision); break; case ANGLE_GRAD: - divrat( pa, two_pi, precision); - mulrat( pa, rat_400, precision); + divrat(pa, two_pi, precision); + mulrat(pa, rat_400, precision); break; - } + } } - //----------------------------------------------------------------------------- // // FUNCTION: asinrat, _asinrat @@ -64,86 +61,83 @@ void ascalerat( _Inout_ PRAT *pa, ANGLE_TYPE angletype, int32_t precision) // //----------------------------------------------------------------------------- -void _asinrat( PRAT *px, int32_t precision) +void _asinrat(PRAT* px, int32_t precision) { CREATETAYLOR(); - DUPRAT(pret,*px); - DUPRAT(thisterm,*px); - DUPNUM(n2,num_one); + DUPRAT(pret, *px); + DUPRAT(thisterm, *px); + DUPNUM(n2, num_one); do - { - NEXTTERM(xx,MULNUM(n2) MULNUM(n2) - INC(n2) DIVNUM(n2) INC(n2) DIVNUM(n2), precision); - } - while ( !SMALL_ENOUGH_RAT( thisterm, precision) ); + { + NEXTTERM(xx, MULNUM(n2) MULNUM(n2) INC(n2) DIVNUM(n2) INC(n2) DIVNUM(n2), precision); + } while (!SMALL_ENOUGH_RAT(thisterm, precision)); DESTROYTAYLOR(); } -void asinanglerat( _Inout_ PRAT *pa, ANGLE_TYPE angletype, uint32_t radix, int32_t precision) +void asinanglerat(_Inout_ PRAT* pa, ANGLE_TYPE angletype, uint32_t radix, int32_t precision) { - asinrat( pa, radix, precision); - ascalerat( pa, angletype, precision); + asinrat(pa, radix, precision); + ascalerat(pa, angletype, precision); } -void asinrat( PRAT *px, uint32_t radix, int32_t precision) +void asinrat(PRAT* px, uint32_t radix, int32_t precision) { - PRAT pret= nullptr; - PRAT phack= nullptr; + PRAT pret = nullptr; + PRAT phack = nullptr; int32_t sgn = SIGN(*px); (*px)->pp->sign = 1; (*px)->pq->sign = 1; // Avoid the really bad part of the asin curve near +/-1. - DUPRAT(phack,*px); + DUPRAT(phack, *px); subrat(&phack, rat_one, precision); // Since *px might be epsilon near zero we must set it to zero. - if ( rat_le(phack, rat_smallest, precision) && rat_ge(phack, rat_negsmallest, precision) ) - { + if (rat_le(phack, rat_smallest, precision) && rat_ge(phack, rat_negsmallest, precision)) + { destroyrat(phack); - DUPRAT( *px, pi_over_two ); - } + DUPRAT(*px, pi_over_two); + } else - { + { destroyrat(phack); - if ( rat_gt( *px, pt_eight_five, precision) ) + if (rat_gt(*px, pt_eight_five, precision)) + { + if (rat_gt(*px, rat_one, precision)) { - if ( rat_gt( *px, rat_one, precision) ) + subrat(px, rat_one, precision); + if (rat_gt(*px, rat_smallest, precision)) { - subrat( px, rat_one, precision); - if ( rat_gt( *px, rat_smallest, precision) ) - { - throw( CALC_E_DOMAIN ); - } - else - { - DUPRAT(*px,rat_one); - } + throw(CALC_E_DOMAIN); } - DUPRAT(pret,*px); - mulrat( px, pret, precision); + else + { + DUPRAT(*px, rat_one); + } + } + DUPRAT(pret, *px); + mulrat(px, pret, precision); (*px)->pp->sign *= -1; - addrat( px, rat_one, precision); - rootrat( px, rat_two, radix, precision); - _asinrat( px, precision); + addrat(px, rat_one, precision); + rootrat(px, rat_two, radix, precision); + _asinrat(px, precision); (*px)->pp->sign *= -1; - addrat( px, pi_over_two, precision); + addrat(px, pi_over_two, precision); destroyrat(pret); - } - else - { - _asinrat( px, precision); - } } + else + { + _asinrat(px, precision); + } + } (*px)->pp->sign = sgn; (*px)->pq->sign = 1; } - //----------------------------------------------------------------------------- // // FUNCTION: acosrat, _acosrat @@ -170,35 +164,33 @@ void asinrat( PRAT *px, uint32_t radix, int32_t precision) // //----------------------------------------------------------------------------- -void acosanglerat( _Inout_ PRAT *pa, ANGLE_TYPE angletype, uint32_t radix, int32_t precision) +void acosanglerat(_Inout_ PRAT* pa, ANGLE_TYPE angletype, uint32_t radix, int32_t precision) { - acosrat( pa, radix, precision); - ascalerat( pa, angletype, precision); + acosrat(pa, radix, precision); + ascalerat(pa, angletype, precision); } -void _acosrat( PRAT *px, int32_t precision) +void _acosrat(PRAT* px, int32_t precision) { CREATETAYLOR(); createrat(thisterm); - thisterm->pp=i32tonum( 1L, BASEX ); - thisterm->pq=i32tonum( 1L, BASEX ); + thisterm->pp = i32tonum(1L, BASEX); + thisterm->pq = i32tonum(1L, BASEX); - DUPNUM(n2,num_one); + DUPNUM(n2, num_one); do - { - NEXTTERM(xx,MULNUM(n2) MULNUM(n2) - INC(n2) DIVNUM(n2) INC(n2) DIVNUM(n2), precision); - } - while ( !SMALL_ENOUGH_RAT( thisterm, precision) ); + { + NEXTTERM(xx, MULNUM(n2) MULNUM(n2) INC(n2) DIVNUM(n2) INC(n2) DIVNUM(n2), precision); + } while (!SMALL_ENOUGH_RAT(thisterm, precision)); DESTROYTAYLOR(); } -void acosrat( PRAT *px, uint32_t radix, int32_t precision) +void acosrat(PRAT* px, uint32_t radix, int32_t precision) { int32_t sgn = SIGN(*px); @@ -206,24 +198,24 @@ void acosrat( PRAT *px, uint32_t radix, int32_t precision) (*px)->pp->sign = 1; (*px)->pq->sign = 1; - if ( rat_equ( *px, rat_one, precision) ) + if (rat_equ(*px, rat_one, precision)) + { + if (sgn == -1) { - if ( sgn == -1 ) - { - DUPRAT(*px,pi); - } - else - { - DUPRAT( *px, rat_zero ); - } + DUPRAT(*px, pi); } - else + else { + DUPRAT(*px, rat_zero); + } + } + else + { (*px)->pp->sign = sgn; - asinrat( px, radix, precision); + asinrat(px, radix, precision); (*px)->pp->sign *= -1; addrat(px, pi_over_two, precision); - } + } } //----------------------------------------------------------------------------- @@ -257,79 +249,79 @@ void acosrat( PRAT *px, uint32_t radix, int32_t precision) // //----------------------------------------------------------------------------- -void atananglerat( _Inout_ PRAT *pa, ANGLE_TYPE angletype, uint32_t radix, int32_t precision) +void atananglerat(_Inout_ PRAT* pa, ANGLE_TYPE angletype, uint32_t radix, int32_t precision) { - atanrat( pa, radix, precision); - ascalerat( pa, angletype, precision); + atanrat(pa, radix, precision); + ascalerat(pa, angletype, precision); } -void _atanrat( PRAT *px, int32_t precision) +void _atanrat(PRAT* px, int32_t precision) { CREATETAYLOR(); - DUPRAT(pret,*px); - DUPRAT(thisterm,*px); + DUPRAT(pret, *px); + DUPRAT(thisterm, *px); - DUPNUM(n2,num_one); + DUPNUM(n2, num_one); xx->pp->sign *= -1; - do { - NEXTTERM(xx,MULNUM(n2) INC(n2) INC(n2) DIVNUM(n2), precision); - } while ( !SMALL_ENOUGH_RAT( thisterm, precision) ); + do + { + NEXTTERM(xx, MULNUM(n2) INC(n2) INC(n2) DIVNUM(n2), precision); + } while (!SMALL_ENOUGH_RAT(thisterm, precision)); DESTROYTAYLOR(); } -void atanrat( PRAT *px, uint32_t radix, int32_t precision) +void atanrat(PRAT* px, uint32_t radix, int32_t precision) { - PRAT tmpx= nullptr; + PRAT tmpx = nullptr; int32_t sgn = SIGN(*px); (*px)->pp->sign = 1; (*px)->pq->sign = 1; - if ( rat_gt( (*px), pt_eight_five, precision) ) + if (rat_gt((*px), pt_eight_five, precision)) + { + if (rat_gt((*px), rat_two, precision)) { - if ( rat_gt( (*px), rat_two, precision) ) - { (*px)->pp->sign = sgn; (*px)->pq->sign = 1; - DUPRAT(tmpx,rat_one); + DUPRAT(tmpx, rat_one); divrat(&tmpx, (*px), precision); _atanrat(&tmpx, precision); tmpx->pp->sign = sgn; tmpx->pq->sign = 1; - DUPRAT(*px,pi_over_two); + DUPRAT(*px, pi_over_two); subrat(px, tmpx, precision); - destroyrat( tmpx ); - } + destroyrat(tmpx); + } else - { + { (*px)->pp->sign = sgn; - DUPRAT(tmpx,*px); - mulrat( &tmpx, *px, precision); - addrat( &tmpx, rat_one, precision); - rootrat( &tmpx, rat_two, radix, precision); - divrat( px, tmpx, precision); - destroyrat( tmpx ); - asinrat( px, radix, precision); + DUPRAT(tmpx, *px); + mulrat(&tmpx, *px, precision); + addrat(&tmpx, rat_one, precision); + rootrat(&tmpx, rat_two, radix, precision); + divrat(px, tmpx, precision); + destroyrat(tmpx); + asinrat(px, radix, precision); (*px)->pp->sign = sgn; (*px)->pq->sign = 1; - } } + } else - { + { (*px)->pp->sign = sgn; (*px)->pq->sign = 1; - _atanrat( px, precision); - } - if ( rat_gt( *px, pi_over_two, precision) ) - { - subrat( px, pi, precision); - } + _atanrat(px, precision); + } + if (rat_gt(*px, pi_over_two, precision)) + { + subrat(px, pi, precision); + } } - diff --git a/src/CalcManager/Ratpack/itransh.cpp b/src/CalcManager/Ratpack/itransh.cpp index 50941287..d1ec113f 100644 --- a/src/CalcManager/Ratpack/itransh.cpp +++ b/src/CalcManager/Ratpack/itransh.cpp @@ -18,8 +18,6 @@ //----------------------------------------------------------------------------- #include "ratpak.h" - - //----------------------------------------------------------------------------- // // FUNCTION: asinhrat @@ -49,47 +47,44 @@ // //----------------------------------------------------------------------------- -void asinhrat( PRAT *px, uint32_t radix, int32_t precision) +void asinhrat(PRAT* px, uint32_t radix, int32_t precision) { PRAT neg_pt_eight_five = nullptr; - DUPRAT(neg_pt_eight_five,pt_eight_five); + DUPRAT(neg_pt_eight_five, pt_eight_five); neg_pt_eight_five->pp->sign *= -1; - if ( rat_gt( *px, pt_eight_five, precision) || rat_lt( *px, neg_pt_eight_five, precision) ) - { + if (rat_gt(*px, pt_eight_five, precision) || rat_lt(*px, neg_pt_eight_five, precision)) + { PRAT ptmp = nullptr; - DUPRAT(ptmp,(*px)); + DUPRAT(ptmp, (*px)); mulrat(&ptmp, *px, precision); addrat(&ptmp, rat_one, precision); rootrat(&ptmp, rat_two, radix, precision); addrat(px, ptmp, precision); lograt(px, precision); destroyrat(ptmp); - } + } else - { + { CREATETAYLOR(); xx->pp->sign *= -1; - DUPRAT(pret,(*px)); - DUPRAT(thisterm,(*px)); + DUPRAT(pret, (*px)); + DUPRAT(thisterm, (*px)); - DUPNUM(n2,num_one); + DUPNUM(n2, num_one); do - { - NEXTTERM(xx,MULNUM(n2) MULNUM(n2) - INC(n2) DIVNUM(n2) INC(n2) DIVNUM(n2), precision); - } - while ( !SMALL_ENOUGH_RAT( thisterm, precision) ); + { + NEXTTERM(xx, MULNUM(n2) MULNUM(n2) INC(n2) DIVNUM(n2) INC(n2) DIVNUM(n2), precision); + } while (!SMALL_ENOUGH_RAT(thisterm, precision)); DESTROYTAYLOR(); - } + } destroyrat(neg_pt_eight_five); } - //----------------------------------------------------------------------------- // // FUNCTION: acoshrat @@ -106,24 +101,24 @@ void asinhrat( PRAT *px, uint32_t radix, int32_t precision) // //----------------------------------------------------------------------------- -void acoshrat( PRAT *px, uint32_t radix, int32_t precision) +void acoshrat(PRAT* px, uint32_t radix, int32_t precision) { - if ( rat_lt( *px, rat_one, precision) ) - { + if (rat_lt(*px, rat_one, precision)) + { throw CALC_E_DOMAIN; - } + } else - { + { PRAT ptmp = nullptr; - DUPRAT(ptmp,(*px)); + DUPRAT(ptmp, (*px)); mulrat(&ptmp, *px, precision); subrat(&ptmp, rat_one, precision); - rootrat(&ptmp,rat_two, radix, precision); + rootrat(&ptmp, rat_two, radix, precision); addrat(px, ptmp, precision); lograt(px, precision); destroyrat(ptmp); - } + } } //----------------------------------------------------------------------------- @@ -143,11 +138,11 @@ void acoshrat( PRAT *px, uint32_t radix, int32_t precision) // //----------------------------------------------------------------------------- -void atanhrat( PRAT *px, int32_t precision) +void atanhrat(PRAT* px, int32_t precision) { PRAT ptmp = nullptr; - DUPRAT(ptmp,(*px)); + DUPRAT(ptmp, (*px)); subrat(&ptmp, rat_one, precision); addrat(px, rat_one, precision); divrat(px, ptmp, precision); @@ -156,4 +151,3 @@ void atanhrat( PRAT *px, int32_t precision) divrat(px, rat_two, precision); destroyrat(ptmp); } - diff --git a/src/CalcManager/Ratpack/logic.cpp b/src/CalcManager/Ratpack/logic.cpp index 7939ce26..b3970ef4 100644 --- a/src/CalcManager/Ratpack/logic.cpp +++ b/src/CalcManager/Ratpack/logic.cpp @@ -17,7 +17,7 @@ using namespace std; -void lshrat(PRAT *pa, PRAT b, uint32_t radix, int32_t precision) +void lshrat(PRAT* pa, PRAT b, uint32_t radix, int32_t precision) { PRAT pwr = nullptr; @@ -40,7 +40,7 @@ void lshrat(PRAT *pa, PRAT b, uint32_t radix, int32_t precision) } } -void rshrat(PRAT *pa, PRAT b, uint32_t radix, int32_t precision) +void rshrat(PRAT* pa, PRAT b, uint32_t radix, int32_t precision) { PRAT pwr = nullptr; @@ -63,29 +63,29 @@ void rshrat(PRAT *pa, PRAT b, uint32_t radix, int32_t precision) } } -void boolrat(PRAT *pa, PRAT b, int func, uint32_t radix, int32_t precision); -void boolnum(PNUMBER *pa, PNUMBER b, int func); +void boolrat(PRAT* pa, PRAT b, int func, uint32_t radix, int32_t precision); +void boolnum(PNUMBER* pa, PNUMBER b, int func); - -enum { +enum +{ FUNC_AND, FUNC_OR, FUNC_XOR } BOOL_FUNCS; -void andrat(PRAT *pa, PRAT b, uint32_t radix, int32_t precision) +void andrat(PRAT* pa, PRAT b, uint32_t radix, int32_t precision) { boolrat(pa, b, FUNC_AND, radix, precision); } -void orrat(PRAT *pa, PRAT b, uint32_t radix, int32_t precision) +void orrat(PRAT* pa, PRAT b, uint32_t radix, int32_t precision) { boolrat(pa, b, FUNC_OR, radix, precision); } -void xorrat(PRAT *pa, PRAT b, uint32_t radix, int32_t precision) +void xorrat(PRAT* pa, PRAT b, uint32_t radix, int32_t precision) { boolrat(pa, b, FUNC_XOR, radix, precision); @@ -103,7 +103,7 @@ void xorrat(PRAT *pa, PRAT b, uint32_t radix, int32_t precision) // //--------------------------------------------------------------------------- -void boolrat(PRAT *pa, PRAT b, int func, uint32_t radix, int32_t precision) +void boolrat(PRAT* pa, PRAT b, int func, uint32_t radix, int32_t precision) { PRAT tmp = nullptr; @@ -129,22 +129,21 @@ void boolrat(PRAT *pa, PRAT b, int func, uint32_t radix, int32_t precision) // //--------------------------------------------------------------------------- -void boolnum(PNUMBER *pa, PNUMBER b, int func) +void boolnum(PNUMBER* pa, PNUMBER b, int func) { PNUMBER c = nullptr; PNUMBER a = nullptr; - MANTTYPE *pcha; - MANTTYPE *pchb; - MANTTYPE *pchc; + MANTTYPE* pcha; + MANTTYPE* pchb; + MANTTYPE* pchc; int32_t cdigits; int32_t mexp; MANTTYPE da; MANTTYPE db; a = *pa; - cdigits = max(a->cdigit + a->exp, b->cdigit + b->exp) - - min(a->exp, b->exp); + cdigits = max(a->cdigit + a->exp, b->cdigit + b->exp) - min(a->exp, b->exp); createnum(c, cdigits); c->exp = min(a->exp, b->exp); mexp = c->exp; @@ -154,12 +153,8 @@ void boolnum(PNUMBER *pa, PNUMBER b, int func) pchc = c->mant; for (; cdigits > 0; cdigits--, mexp++) { - da = (((mexp >= a->exp) && (cdigits + a->exp - c->exp > - (c->cdigit - a->cdigit))) ? - *pcha++ : 0); - db = (((mexp >= b->exp) && (cdigits + b->exp - c->exp > - (c->cdigit - b->cdigit))) ? - *pchb++ : 0); + da = (((mexp >= a->exp) && (cdigits + a->exp - c->exp > (c->cdigit - a->cdigit))) ? *pcha++ : 0); + db = (((mexp >= b->exp) && (cdigits + b->exp - c->exp > (c->cdigit - b->cdigit))) ? *pchb++ : 0); switch (func) { case FUNC_AND: @@ -196,7 +191,7 @@ void boolnum(PNUMBER *pa, PNUMBER b, int func) // //----------------------------------------------------------------------------- -void remrat(PRAT *pa, PRAT b) +void remrat(PRAT* pa, PRAT b) { if (zerrat(b)) @@ -227,15 +222,15 @@ void remrat(PRAT *pa, PRAT b) // RETURN: None, changes pointer. // // DESCRIPTION: Calculate the remainder of *pa / b, with the sign of the result -// either zero or has the same sign as the divisor. +// either zero or has the same sign as the divisor. // NOTE: When *pa or b are negative, the result won't be the same as -// the C/C++ operator %, use remrat if it's the behavior you expect. +// the C/C++ operator %, use remrat if it's the behavior you expect. // //----------------------------------------------------------------------------- -void modrat(PRAT *pa, PRAT b) +void modrat(PRAT* pa, PRAT b) { - //contrary to remrat(X, 0) returning 0, modrat(X, 0) must return X + // contrary to remrat(X, 0) returning 0, modrat(X, 0) must return X if (zerrat(b)) { return; diff --git a/src/CalcManager/Ratpack/num.cpp b/src/CalcManager/Ratpack/num.cpp index 7b45fea0..07b59d91 100644 --- a/src/CalcManager/Ratpack/num.cpp +++ b/src/CalcManager/Ratpack/num.cpp @@ -41,51 +41,49 @@ using namespace std; // //---------------------------------------------------------------------------- -void _addnum( PNUMBER *pa, PNUMBER b, uint32_t radix); +void _addnum(PNUMBER* pa, PNUMBER b, uint32_t radix); -void __inline addnum( PNUMBER *pa, PNUMBER b, uint32_t radix) +void __inline addnum(PNUMBER* pa, PNUMBER b, uint32_t radix) { - if ( b->cdigit > 1 || b->mant[0] != 0 ) - { // If b is zero we are done. - if ( (*pa)->cdigit > 1 || (*pa)->mant[0] != 0 ) - { // pa and b are both nonzero. - _addnum( pa, b, radix); - } - else - { // if pa is zero and b isn't just copy b. - DUPNUM(*pa,b); - } + if (b->cdigit > 1 || b->mant[0] != 0) + { // If b is zero we are done. + if ((*pa)->cdigit > 1 || (*pa)->mant[0] != 0) + { // pa and b are both nonzero. + _addnum(pa, b, radix); } + else + { // if pa is zero and b isn't just copy b. + DUPNUM(*pa, b); + } + } } -void _addnum( PNUMBER *pa, PNUMBER b, uint32_t radix) +void _addnum(PNUMBER* pa, PNUMBER b, uint32_t radix) { - PNUMBER c= nullptr; // c will contain the result. - PNUMBER a= nullptr; // a is the dereferenced number pointer from *pa - MANTTYPE *pcha; // pcha is a pointer to the mantissa of a. - MANTTYPE *pchb; // pchb is a pointer to the mantissa of b. - MANTTYPE *pchc; // pchc is a pointer to the mantissa of c. - int32_t cdigits; // cdigits is the max count of the digits results - // used as a counter. - int32_t mexp; // mexp is the exponent of the result. - MANTTYPE da; // da is a single 'digit' after possible padding. - MANTTYPE db; // db is a single 'digit' after possible padding. - MANTTYPE cy=0; // cy is the value of a carry after adding two 'digits' - int32_t fcompla = 0; // fcompla is a flag to signal a is negative. - int32_t fcomplb = 0; // fcomplb is a flag to signal b is negative. - - a=*pa; + PNUMBER c = nullptr; // c will contain the result. + PNUMBER a = nullptr; // a is the dereferenced number pointer from *pa + MANTTYPE* pcha; // pcha is a pointer to the mantissa of a. + MANTTYPE* pchb; // pchb is a pointer to the mantissa of b. + MANTTYPE* pchc; // pchc is a pointer to the mantissa of c. + int32_t cdigits; // cdigits is the max count of the digits results + // used as a counter. + int32_t mexp; // mexp is the exponent of the result. + MANTTYPE da; // da is a single 'digit' after possible padding. + MANTTYPE db; // db is a single 'digit' after possible padding. + MANTTYPE cy = 0; // cy is the value of a carry after adding two 'digits' + int32_t fcompla = 0; // fcompla is a flag to signal a is negative. + int32_t fcomplb = 0; // fcomplb is a flag to signal b is negative. + a = *pa; // Calculate the overlap of the numbers after alignment, this includes // necessary padding 0's - cdigits = max( a->cdigit+a->exp, b->cdigit+b->exp ) - - min( a->exp, b->exp ); + cdigits = max(a->cdigit + a->exp, b->cdigit + b->exp) - min(a->exp, b->exp); - createnum( c, cdigits + 1 ); - c->exp = min( a->exp, b->exp ); + createnum(c, cdigits + 1); + c->exp = min(a->exp, b->exp); mexp = c->exp; c->cdigit = cdigits; pcha = a->mant; @@ -93,89 +91,82 @@ void _addnum( PNUMBER *pa, PNUMBER b, uint32_t radix) pchc = c->mant; // Figure out the sign of the numbers - if ( a->sign != b->sign ) - { + if (a->sign != b->sign) + { cy = 1; - fcompla = ( a->sign == -1 ); - fcomplb = ( b->sign == -1 ); - } + fcompla = (a->sign == -1); + fcomplb = (b->sign == -1); + } // Loop over all the digits, real and 0 padded. Here we know a and b are // aligned - for ( ;cdigits > 0; cdigits--, mexp++ ) - { - + for (; cdigits > 0; cdigits--, mexp++) + { // Get digit from a, taking padding into account. - da = ( ( ( mexp >= a->exp ) && ( cdigits + a->exp - c->exp > - (c->cdigit - a->cdigit) ) ) ? - *pcha++ : 0 ); + da = (((mexp >= a->exp) && (cdigits + a->exp - c->exp > (c->cdigit - a->cdigit))) ? *pcha++ : 0); // Get digit from b, taking padding into account. - db = ( ( ( mexp >= b->exp ) && ( cdigits + b->exp - c->exp > - (c->cdigit - b->cdigit) ) ) ? - *pchb++ : 0 ); + db = (((mexp >= b->exp) && (cdigits + b->exp - c->exp > (c->cdigit - b->cdigit))) ? *pchb++ : 0); // Handle complementing for a and b digit. Might be a better way, but // haven't found it yet. - if ( fcompla ) - { - da = (MANTTYPE)(radix) - 1 - da; - } - if ( fcomplb ) - { - db = (MANTTYPE)(radix) - 1 - db; - } + if (fcompla) + { + da = (MANTTYPE)(radix)-1 - da; + } + if (fcomplb) + { + db = (MANTTYPE)(radix)-1 - db; + } // Update carry as necessary cy = da + db + cy; *pchc++ = (MANTTYPE)(cy % (MANTTYPE)radix); cy /= (MANTTYPE)radix; - } + } // Handle carry from last sum as extra digit - if ( cy && !(fcompla || fcomplb) ) - { + if (cy && !(fcompla || fcomplb)) + { *pchc++ = cy; c->cdigit++; - } + } // Compute sign of result - if ( !(fcompla || fcomplb) ) - { + if (!(fcompla || fcomplb)) + { c->sign = a->sign; - } + } else + { + if (cy) { - if ( cy ) - { c->sign = 1; - } + } else - { + { // In this particular case an overflow or underflow has occurred // and all the digits need to be complemented, at one time an // attempt to handle this above was made, it turned out to be much // slower on average. c->sign = -1; cy = 1; - for ( ( cdigits = c->cdigit ), (pchc = c->mant); - cdigits > 0; - cdigits-- ) - { + for ((cdigits = c->cdigit), (pchc = c->mant); cdigits > 0; cdigits--) + { cy = (MANTTYPE)radix - (MANTTYPE)1 - *pchc + cy; - *pchc++ = (MANTTYPE)( cy % (MANTTYPE)radix); + *pchc++ = (MANTTYPE)(cy % (MANTTYPE)radix); cy /= (MANTTYPE)radix; - } } } + } // Remove leading zeros, remember digits are in order of // increasing significance. i.e. 100 would be 0,0,1 - while ( c->cdigit > 1 && *(--pchc) == 0 ) - { + while (c->cdigit > 1 && *(--pchc) == 0) + { c->cdigit--; - } - destroynum( *pa ); - *pa=c; + } + destroynum(*pa); + *pa = c; } //---------------------------------------------------------------------------- @@ -193,52 +184,52 @@ void _addnum( PNUMBER *pa, PNUMBER b, uint32_t radix) // //---------------------------------------------------------------------------- -void _mulnum( PNUMBER *pa, PNUMBER b, uint32_t radix); +void _mulnum(PNUMBER* pa, PNUMBER b, uint32_t radix); -void __inline mulnum( PNUMBER *pa, PNUMBER b, uint32_t radix) +void __inline mulnum(PNUMBER* pa, PNUMBER b, uint32_t radix) { - if ( b->cdigit > 1 || b->mant[0] != 1 || b->exp != 0 ) - { // If b is one we don't multiply exactly. - if ( (*pa)->cdigit > 1 || (*pa)->mant[0] != 1 || (*pa)->exp != 0 ) - { // pa and b are both non-one. - _mulnum( pa, b, radix); - } + if (b->cdigit > 1 || b->mant[0] != 1 || b->exp != 0) + { // If b is one we don't multiply exactly. + if ((*pa)->cdigit > 1 || (*pa)->mant[0] != 1 || (*pa)->exp != 0) + { // pa and b are both non-one. + _mulnum(pa, b, radix); + } else - { // if pa is one and b isn't just copy b, and adjust the sign. + { // if pa is one and b isn't just copy b, and adjust the sign. int32_t sign = (*pa)->sign; - DUPNUM(*pa,b); + DUPNUM(*pa, b); (*pa)->sign *= sign; - } } + } else - { // But we do have to set the sign. + { // But we do have to set the sign. (*pa)->sign *= b->sign; - } + } } -void _mulnum( PNUMBER *pa, PNUMBER b, uint32_t radix) +void _mulnum(PNUMBER* pa, PNUMBER b, uint32_t radix) { - PNUMBER c= nullptr; // c will contain the result. - PNUMBER a= nullptr; // a is the dereferenced number pointer from *pa - MANTTYPE *pcha; // pcha is a pointer to the mantissa of a. - MANTTYPE *pchb; // pchb is a pointer to the mantissa of b. - MANTTYPE *pchc; // pchc is a pointer to the mantissa of c. - MANTTYPE *pchcoffset; // pchcoffset, is the anchor location of the next - // single digit multiply partial result. - int32_t iadigit = 0; // Index of digit being used in the first number. - int32_t ibdigit = 0; // Index of digit being used in the second number. - MANTTYPE da = 0; // da is the digit from the fist number. - TWO_MANTTYPE cy = 0; // cy is the carry resulting from the addition of - // a multiplied row into the result. - TWO_MANTTYPE mcy = 0; // mcy is the resultant from a single - // multiply, AND the carry of that multiply. - int32_t icdigit = 0; // Index of digit being calculated in final result. + PNUMBER c = nullptr; // c will contain the result. + PNUMBER a = nullptr; // a is the dereferenced number pointer from *pa + MANTTYPE* pcha; // pcha is a pointer to the mantissa of a. + MANTTYPE* pchb; // pchb is a pointer to the mantissa of b. + MANTTYPE* pchc; // pchc is a pointer to the mantissa of c. + MANTTYPE* pchcoffset; // pchcoffset, is the anchor location of the next + // single digit multiply partial result. + int32_t iadigit = 0; // Index of digit being used in the first number. + int32_t ibdigit = 0; // Index of digit being used in the second number. + MANTTYPE da = 0; // da is the digit from the fist number. + TWO_MANTTYPE cy = 0; // cy is the carry resulting from the addition of + // a multiplied row into the result. + TWO_MANTTYPE mcy = 0; // mcy is the resultant from a single + // multiply, AND the carry of that multiply. + int32_t icdigit = 0; // Index of digit being calculated in final result. - a=*pa; + a = *pa; ibdigit = a->cdigit + b->cdigit - 1; - createnum( c, ibdigit + 1 ); + createnum(c, ibdigit + 1); c->cdigit = ibdigit; c->sign = a->sign * b->sign; @@ -246,58 +237,56 @@ void _mulnum( PNUMBER *pa, PNUMBER b, uint32_t radix) pcha = a->mant; pchcoffset = c->mant; - for ( iadigit = a->cdigit; iadigit > 0; iadigit-- ) - { - da = *pcha++; + for (iadigit = a->cdigit; iadigit > 0; iadigit--) + { + da = *pcha++; pchb = b->mant; // Shift pchc, and pchcoffset, one for each digit pchc = pchcoffset++; - for ( ibdigit = b->cdigit; ibdigit > 0; ibdigit-- ) - { + for (ibdigit = b->cdigit; ibdigit > 0; ibdigit--) + { cy = 0; mcy = (TWO_MANTTYPE)da * *pchb; - if ( mcy ) - { + if (mcy) + { icdigit = 0; - if ( ibdigit == 1 && iadigit == 1 ) - { - c->cdigit++; - } - } - // If result is nonzero, or while result of carry is nonzero... - while ( mcy || cy ) + if (ibdigit == 1 && iadigit == 1) { - + c->cdigit++; + } + } + // If result is nonzero, or while result of carry is nonzero... + while (mcy || cy) + { // update carry from addition(s) and multiply. - cy += (TWO_MANTTYPE)pchc[icdigit]+(mcy%(TWO_MANTTYPE)radix); + cy += (TWO_MANTTYPE)pchc[icdigit] + (mcy % (TWO_MANTTYPE)radix); // update result digit from - pchc[icdigit++]=(MANTTYPE)(cy%(TWO_MANTTYPE)radix); + pchc[icdigit++] = (MANTTYPE)(cy % (TWO_MANTTYPE)radix); // update carries from mcy /= (TWO_MANTTYPE)radix; cy /= (TWO_MANTTYPE)radix; - } + } pchb++; pchc++; - } } + } // prevent different kinds of zeros, by stripping leading duplicate zeros. // digits are in order of increasing significance. - while ( c->cdigit > 1 && c->mant[c->cdigit-1] == 0 ) - { + while (c->cdigit > 1 && c->mant[c->cdigit - 1] == 0) + { c->cdigit--; - } + } - destroynum( *pa ); - *pa=c; + destroynum(*pa); + *pa = c; } - //---------------------------------------------------------------------------- // // FUNCTION: remnum @@ -313,55 +302,53 @@ void _mulnum( PNUMBER *pa, PNUMBER b, uint32_t radix) // //---------------------------------------------------------------------------- -void remnum( PNUMBER *pa, PNUMBER b, uint32_t radix) +void remnum(PNUMBER* pa, PNUMBER b, uint32_t radix) { PNUMBER tmp = nullptr; // tmp is the working remainder. PNUMBER lasttmp = nullptr; // lasttmp is the last remainder which worked. // Once *pa is less than b, *pa is the remainder. - while ( !lessnum( *pa, b ) ) + while (!lessnum(*pa, b)) + { + DUPNUM(tmp, b); + if (lessnum(tmp, *pa)) { - DUPNUM( tmp, b ); - if ( lessnum( tmp, *pa ) ) - { // Start off close to the right answer for subtraction. - tmp->exp = (*pa)->cdigit+(*pa)->exp - tmp->cdigit; - if ( MSD(*pa) <= MSD(tmp) ) - { + tmp->exp = (*pa)->cdigit + (*pa)->exp - tmp->cdigit; + if (MSD(*pa) <= MSD(tmp)) + { // Don't take the chance that the numbers are equal. tmp->exp--; - } } + } - destroynum( lasttmp ); - lasttmp=i32tonum( 0, radix); + destroynum(lasttmp); + lasttmp = i32tonum(0, radix); - while ( lessnum( tmp, *pa ) ) - { - DUPNUM( lasttmp, tmp ); - addnum( &tmp, tmp, radix); - } + while (lessnum(tmp, *pa)) + { + DUPNUM(lasttmp, tmp); + addnum(&tmp, tmp, radix); + } - if ( lessnum( *pa, tmp ) ) - { + if (lessnum(*pa, tmp)) + { // too far, back up... - destroynum( tmp ); - tmp=lasttmp; - lasttmp= nullptr; - } + destroynum(tmp); + tmp = lasttmp; + lasttmp = nullptr; + } // Subtract the working remainder from the remainder holder. - tmp->sign = -1*(*pa)->sign; - addnum( pa, tmp, radix); + tmp->sign = -1 * (*pa)->sign; + addnum(pa, tmp, radix); - destroynum( tmp ); - destroynum( lasttmp ); - - } + destroynum(tmp); + destroynum(lasttmp); + } } - //--------------------------------------------------------------------------- // // FUNCTION: divnum @@ -376,23 +363,23 @@ void remnum( PNUMBER *pa, PNUMBER b, uint32_t radix) // //--------------------------------------------------------------------------- -void _divnum( PNUMBER *pa, PNUMBER b, uint32_t radix, int32_t precision); +void _divnum(PNUMBER* pa, PNUMBER b, uint32_t radix, int32_t precision); -void __inline divnum( PNUMBER *pa, PNUMBER b, uint32_t radix, int32_t precision) +void __inline divnum(PNUMBER* pa, PNUMBER b, uint32_t radix, int32_t precision) { - if ( b->cdigit > 1 || b->mant[0] != 1 || b->exp != 0 ) - { + if (b->cdigit > 1 || b->mant[0] != 1 || b->exp != 0) + { // b is not one - _divnum( pa, b, radix, precision); - } + _divnum(pa, b, radix, precision); + } else - { // But we do have to set the sign. + { // But we do have to set the sign. (*pa)->sign *= b->sign; - } + } } -void _divnum( PNUMBER *pa, PNUMBER b, uint32_t radix, int32_t precision) +void _divnum(PNUMBER* pa, PNUMBER b, uint32_t radix, int32_t precision) { PNUMBER a = *pa; int32_t thismax = precision + 2; @@ -411,7 +398,7 @@ void _divnum( PNUMBER *pa, PNUMBER b, uint32_t radix, int32_t precision) c->exp = (a->cdigit + a->exp) - (b->cdigit + b->exp) + 1; c->sign = a->sign * b->sign; - MANTTYPE *ptrc = c->mant + thismax; + MANTTYPE* ptrc = c->mant + thismax; PNUMBER rem = nullptr; PNUMBER tmp = nullptr; DUPNUM(rem, a); @@ -489,7 +476,6 @@ void _divnum( PNUMBER *pa, PNUMBER b, uint32_t radix, int32_t precision) *pa = c; } - //--------------------------------------------------------------------------- // // FUNCTION: equnum @@ -503,58 +489,56 @@ void _divnum( PNUMBER *pa, PNUMBER b, uint32_t radix, int32_t precision) // //--------------------------------------------------------------------------- -bool equnum( PNUMBER a, PNUMBER b ) +bool equnum(PNUMBER a, PNUMBER b) { int32_t diff; - MANTTYPE *pa; - MANTTYPE *pb; + MANTTYPE* pa; + MANTTYPE* pb; int32_t cdigits; int32_t ccdigits; - MANTTYPE da; - MANTTYPE db; + MANTTYPE da; + MANTTYPE db; - diff = ( a->cdigit + a->exp ) - ( b->cdigit + b->exp ); - if ( diff < 0 ) - { + diff = (a->cdigit + a->exp) - (b->cdigit + b->exp); + if (diff < 0) + { // If the exponents are different, these are different numbers. return false; - } + } else + { + if (diff > 0) { - if ( diff > 0 ) - { // If the exponents are different, these are different numbers. return false; - } + } else - { + { // OK the exponents match. pa = a->mant; pb = b->mant; pa += a->cdigit - 1; pb += b->cdigit - 1; - cdigits = max( a->cdigit, b->cdigit ); + cdigits = max(a->cdigit, b->cdigit); ccdigits = cdigits; // Loop over all digits until we run out of digits or there is a // difference in the digits. - for ( ;cdigits > 0; cdigits-- ) + for (; cdigits > 0; cdigits--) + { + da = ((cdigits > (ccdigits - a->cdigit)) ? *pa-- : 0); + db = ((cdigits > (ccdigits - b->cdigit)) ? *pb-- : 0); + if (da != db) { - da = ( (cdigits > (ccdigits - a->cdigit) ) ? - *pa-- : 0 ); - db = ( (cdigits > (ccdigits - b->cdigit) ) ? - *pb-- : 0 ); - if ( da != db ) - { return false; - } } + } // In this case, they are equal. return true; - } } + } } //--------------------------------------------------------------------------- @@ -571,54 +555,51 @@ bool equnum( PNUMBER a, PNUMBER b ) // //--------------------------------------------------------------------------- -bool lessnum( PNUMBER a, PNUMBER b ) +bool lessnum(PNUMBER a, PNUMBER b) { int32_t diff; - MANTTYPE *pa; - MANTTYPE *pb; + MANTTYPE* pa; + MANTTYPE* pb; int32_t cdigits; int32_t ccdigits; - MANTTYPE da; - MANTTYPE db; + MANTTYPE da; + MANTTYPE db; - - diff = ( a->cdigit + a->exp ) - ( b->cdigit + b->exp ); - if ( diff < 0 ) - { + diff = (a->cdigit + a->exp) - (b->cdigit + b->exp); + if (diff < 0) + { // The exponent of a is less than b return true; - } + } else + { + if (diff > 0) { - if ( diff > 0 ) - { return false; - } + } else - { + { pa = a->mant; pb = b->mant; pa += a->cdigit - 1; pb += b->cdigit - 1; - cdigits = max( a->cdigit, b->cdigit ); + cdigits = max(a->cdigit, b->cdigit); ccdigits = cdigits; - for ( ;cdigits > 0; cdigits-- ) + for (; cdigits > 0; cdigits--) + { + da = ((cdigits > (ccdigits - a->cdigit)) ? *pa-- : 0); + db = ((cdigits > (ccdigits - b->cdigit)) ? *pb-- : 0); + diff = da - db; + if (diff) { - da = ( (cdigits > (ccdigits - a->cdigit) ) ? - *pa-- : 0 ); - db = ( (cdigits > (ccdigits - b->cdigit) ) ? - *pb-- : 0 ); - diff = da-db; - if ( diff ) - { - return( diff < 0 ); - } + return (diff < 0); } + } // In this case, they are equal. return false; - } } + } } //---------------------------------------------------------------------------- @@ -633,24 +614,24 @@ bool lessnum( PNUMBER a, PNUMBER b ) // //---------------------------------------------------------------------------- -bool zernum( PNUMBER a ) +bool zernum(PNUMBER a) { int32_t length; - MANTTYPE *pcha; + MANTTYPE* pcha; length = a->cdigit; pcha = a->mant; // loop over all the digits until you find a nonzero or until you run // out of digits - while ( length-- > 0 ) + while (length-- > 0) + { + if (*pcha++) { - if ( *pcha++ ) - { // One of the digits isn't zero, therefore the number isn't zero return false; - } } + } // All of the digits are zero, therefore the number is zero return true; } diff --git a/src/CalcManager/Ratpack/rat.cpp b/src/CalcManager/Ratpack/rat.cpp index e5a6d254..4315add1 100644 --- a/src/CalcManager/Ratpack/rat.cpp +++ b/src/CalcManager/Ratpack/rat.cpp @@ -37,23 +37,23 @@ using namespace std; // //----------------------------------------------------------------------------- -void gcdrat( PRAT *pa, int32_t precision) +void gcdrat(PRAT* pa, int32_t precision) { - PNUMBER pgcd= nullptr; - PRAT a= nullptr; + PNUMBER pgcd = nullptr; + PRAT a = nullptr; - a=*pa; - pgcd = gcd( a->pp, a->pq ); + a = *pa; + pgcd = gcd(a->pp, a->pq); - if ( !zernum( pgcd ) ) - { - divnumx( &(a->pp), pgcd, precision); - divnumx( &(a->pq), pgcd, precision); - } + if (!zernum(pgcd)) + { + divnumx(&(a->pp), pgcd, precision); + divnumx(&(a->pq), pgcd, precision); + } - destroynum( pgcd ); - *pa=a; + destroynum(pgcd); + *pa = a; RENORMALIZE(*pa); } @@ -70,16 +70,16 @@ void gcdrat( PRAT *pa, int32_t precision) // //----------------------------------------------------------------------------- -void fracrat( PRAT *pa , uint32_t radix, int32_t precision) +void fracrat(PRAT* pa, uint32_t radix, int32_t precision) { // Only do the flatrat operation if number is nonzero. // and only if the bottom part is not one. - if ( !zernum( (*pa)->pp ) && !equnum( (*pa)->pq, num_one ) ) + if (!zernum((*pa)->pp) && !equnum((*pa)->pq, num_one)) { flatrat(*pa, radix, precision); } - remnum( &((*pa)->pp), (*pa)->pq, BASEX ); + remnum(&((*pa)->pp), (*pa)->pq, BASEX); // Get *pa back in the integer over integer form. RENORMALIZE(*pa); @@ -98,26 +98,25 @@ void fracrat( PRAT *pa , uint32_t radix, int32_t precision) // //----------------------------------------------------------------------------- -void mulrat( PRAT *pa, PRAT b, int32_t precision) +void mulrat(PRAT* pa, PRAT b, int32_t precision) - { +{ // Only do the multiply if it isn't zero. - if ( !zernum( (*pa)->pp ) ) - { - mulnumx( &((*pa)->pp), b->pp ); - mulnumx( &((*pa)->pq), b->pq ); + if (!zernum((*pa)->pp)) + { + mulnumx(&((*pa)->pp), b->pp); + mulnumx(&((*pa)->pq), b->pq); trimit(pa, precision); - } + } else - { + { // If it is zero, blast a one in the denominator. - DUPNUM( ((*pa)->pq), num_one ); - } + DUPNUM(((*pa)->pq), num_one); + } #ifdef MULGCD - gcdrat( pa ); + gcdrat(pa); #endif - } //----------------------------------------------------------------------------- @@ -133,44 +132,41 @@ void mulrat( PRAT *pa, PRAT b, int32_t precision) // //----------------------------------------------------------------------------- - -void divrat( PRAT *pa, PRAT b, int32_t precision) +void divrat(PRAT* pa, PRAT b, int32_t precision) { - - if ( !zernum( (*pa)->pp ) ) - { + if (!zernum((*pa)->pp)) + { // Only do the divide if the top isn't zero. - mulnumx( &((*pa)->pp), b->pq ); - mulnumx( &((*pa)->pq), b->pp ); + mulnumx(&((*pa)->pp), b->pq); + mulnumx(&((*pa)->pq), b->pp); - if ( zernum( (*pa)->pq ) ) - { - // raise an exception if the bottom is 0. - throw( CALC_E_DIVIDEBYZERO ); - } - trimit(pa, precision); - } - else + if (zernum((*pa)->pq)) { + // raise an exception if the bottom is 0. + throw(CALC_E_DIVIDEBYZERO); + } + trimit(pa, precision); + } + else + { // Top is zero. - if ( zerrat( b ) ) - { + if (zerrat(b)) + { // If bottom is zero // 0 / 0 is indefinite, raise an exception. - throw( CALC_E_INDEFINITE ); - } - else - { - // 0/x make a unique 0. - DUPNUM( ((*pa)->pq), num_one ); - } + throw(CALC_E_INDEFINITE); } + else + { + // 0/x make a unique 0. + DUPNUM(((*pa)->pq), num_one); + } + } #ifdef DIVGCD - gcdrat( pa ); + gcdrat(pa); #endif - } //----------------------------------------------------------------------------- @@ -186,11 +182,11 @@ void divrat( PRAT *pa, PRAT b, int32_t precision) // //----------------------------------------------------------------------------- -void subrat( PRAT *pa, PRAT b, int32_t precision) +void subrat(PRAT* pa, PRAT b, int32_t precision) { b->pp->sign *= -1; - addrat( pa, b, precision); + addrat(pa, b, precision); b->pp->sign *= -1; } @@ -207,13 +203,13 @@ void subrat( PRAT *pa, PRAT b, int32_t precision) // //----------------------------------------------------------------------------- -void addrat( PRAT *pa, PRAT b, int32_t precision) +void addrat(PRAT* pa, PRAT b, int32_t precision) { - PNUMBER bot= nullptr; + PNUMBER bot = nullptr; - if ( equnum( (*pa)->pq, b->pq ) ) - { + if (equnum((*pa)->pq, b->pq)) + { // Very special case, q's match., // make sure signs are involved in the calculation // we have to do this since the optimization here is only @@ -222,33 +218,30 @@ void addrat( PRAT *pa, PRAT b, int32_t precision) (*pa)->pq->sign = 1; b->pp->sign *= b->pq->sign; b->pq->sign = 1; - addnum( &((*pa)->pp), b->pp, BASEX ); - } + addnum(&((*pa)->pp), b->pp, BASEX); + } else - { + { // Usual case q's aren't the same. - DUPNUM( bot, (*pa)->pq ); - mulnumx( &bot, b->pq ); - mulnumx( &((*pa)->pp), b->pq ); - mulnumx( &((*pa)->pq), b->pp ); - addnum( &((*pa)->pp), (*pa)->pq, BASEX ); - destroynum( (*pa)->pq ); + DUPNUM(bot, (*pa)->pq); + mulnumx(&bot, b->pq); + mulnumx(&((*pa)->pp), b->pq); + mulnumx(&((*pa)->pq), b->pp); + addnum(&((*pa)->pp), (*pa)->pq, BASEX); + destroynum((*pa)->pq); (*pa)->pq = bot; trimit(pa, precision); // Get rid of negative zeros here. (*pa)->pp->sign *= (*pa)->pq->sign; (*pa)->pq->sign = 1; - } + } #ifdef ADDGCD - gcdrat( pa ); + gcdrat(pa); #endif - } - - //----------------------------------------------------------------------------- // // FUNCTION: rootrat @@ -262,11 +255,11 @@ void addrat( PRAT *pa, PRAT b, int32_t precision) // //----------------------------------------------------------------------------- -void rootrat( PRAT *py, PRAT n, uint32_t radix, int32_t precision) +void rootrat(PRAT* py, PRAT n, uint32_t radix, int32_t precision) { // Initialize 1/n - PRAT oneovern= nullptr; - DUPRAT(oneovern,rat_one); + PRAT oneovern = nullptr; + DUPRAT(oneovern, rat_one); divrat(&oneovern, n, precision); powrat(py, oneovern, radix, precision); @@ -274,7 +267,6 @@ void rootrat( PRAT *py, PRAT n, uint32_t radix, int32_t precision) destroyrat(oneovern); } - //----------------------------------------------------------------------------- // // FUNCTION: zerrat @@ -288,10 +280,8 @@ void rootrat( PRAT *py, PRAT n, uint32_t radix, int32_t precision) // //----------------------------------------------------------------------------- -bool zerrat( PRAT a ) +bool zerrat(PRAT a) { - return( zernum(a->pp) ); + return (zernum(a->pp)); } - - diff --git a/src/CalcManager/Ratpack/ratconst.h b/src/CalcManager/Ratpack/ratconst.h index 7367cd36..23efaabb 100644 --- a/src/CalcManager/Ratpack/ratconst.h +++ b/src/CalcManager/Ratpack/ratconst.h @@ -4,481 +4,591 @@ #pragma once // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_num_one= { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_num_one = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_num_two= { - 1, - 1, - 0, - { 2,} -}; +inline const NUMBER init_num_two = { 1, + 1, + 0, + { + 2, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_num_five= { - 1, - 1, - 0, - { 5,} -}; +inline const NUMBER init_num_five = { 1, + 1, + 0, + { + 5, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_num_six= { - 1, - 1, - 0, - { 6,} -}; +inline const NUMBER init_num_six = { 1, + 1, + 0, + { + 6, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_num_ten= { - 1, - 1, - 0, - { 10,} -}; +inline const NUMBER init_num_ten = { 1, + 1, + 0, + { + 10, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_smallest = { - 1, - 1, - 0, - { 1,} -}; -inline const NUMBER init_q_rat_smallest = { - 1, - 4, - 0, - { 0, 190439170, 901055854, 10097,} -}; +inline const NUMBER init_p_rat_smallest = { 1, + 1, + 0, + { + 1, + } }; +inline const NUMBER init_q_rat_smallest = { 1, + 4, + 0, + { + 0, + 190439170, + 901055854, + 10097, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_negsmallest = { - -1, - 1, - 0, - { 1,} -}; -inline const NUMBER init_q_rat_negsmallest = { - 1, - 4, - 0, - { 0, 190439170, 901055854, 10097,} -}; +inline const NUMBER init_p_rat_negsmallest = { -1, + 1, + 0, + { + 1, + } }; +inline const NUMBER init_q_rat_negsmallest = { 1, + 4, + 0, + { + 0, + 190439170, + 901055854, + 10097, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_pt_eight_five = { - 1, - 1, - 0, - { 85,} -}; -inline const NUMBER init_q_pt_eight_five = { - 1, - 1, - 0, - { 100,} -}; +inline const NUMBER init_p_pt_eight_five = { 1, + 1, + 0, + { + 85, + } }; +inline const NUMBER init_q_pt_eight_five = { 1, + 1, + 0, + { + 100, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_six = { - 1, - 1, - 0, - { 6,} -}; -inline const NUMBER init_q_rat_six = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_six = { 1, + 1, + 0, + { + 6, + } }; +inline const NUMBER init_q_rat_six = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_two = { - 1, - 1, - 0, - { 2,} -}; -inline const NUMBER init_q_rat_two = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_two = { 1, + 1, + 0, + { + 2, + } }; +inline const NUMBER init_q_rat_two = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_zero = { - 1, - 1, - 0, - { 0,} -}; -inline const NUMBER init_q_rat_zero = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_zero = { 1, + 1, + 0, + { + 0, + } }; +inline const NUMBER init_q_rat_zero = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_one = { - 1, - 1, - 0, - { 1,} -}; -inline const NUMBER init_q_rat_one = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_one = { 1, + 1, + 0, + { + 1, + } }; +inline const NUMBER init_q_rat_one = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_neg_one = { - -1, - 1, - 0, - { 1,} -}; -inline const NUMBER init_q_rat_neg_one = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_neg_one = { -1, + 1, + 0, + { + 1, + } }; +inline const NUMBER init_q_rat_neg_one = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_half = { - 1, - 1, - 0, - { 1,} -}; -inline const NUMBER init_q_rat_half = { - 1, - 1, - 0, - { 2,} -}; +inline const NUMBER init_p_rat_half = { 1, + 1, + 0, + { + 1, + } }; +inline const NUMBER init_q_rat_half = { 1, + 1, + 0, + { + 2, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_ten = { - 1, - 1, - 0, - { 10,} -}; -inline const NUMBER init_q_rat_ten = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_ten = { 1, + 1, + 0, + { + 10, + } }; +inline const NUMBER init_q_rat_ten = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_pi = { - 1, - 6, - 0, - { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} -}; -inline const NUMBER init_q_pi = { - 1, - 6, - 0, - { 1288380402, 1120116153, 1860424692, 1944118326, 1583591604, 2,} -}; +inline const NUMBER init_p_pi = { 1, + 6, + 0, + { + 125527896, + 283898350, + 1960493936, + 1672850762, + 1288168272, + 8, + } }; +inline const NUMBER init_q_pi = { 1, + 6, + 0, + { + 1288380402, + 1120116153, + 1860424692, + 1944118326, + 1583591604, + 2, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_two_pi = { - 1, - 6, - 0, - { 251055792, 567796700, 1773504224, 1198217877, 428852897, 17,} -}; -inline const NUMBER init_q_two_pi = { - 1, - 6, - 0, - { 1288380402, 1120116153, 1860424692, 1944118326, 1583591604, 2,} -}; +inline const NUMBER init_p_two_pi = { 1, + 6, + 0, + { + 251055792, + 567796700, + 1773504224, + 1198217877, + 428852897, + 17, + } }; +inline const NUMBER init_q_two_pi = { 1, + 6, + 0, + { + 1288380402, + 1120116153, + 1860424692, + 1944118326, + 1583591604, + 2, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_pi_over_two = { - 1, - 6, - 0, - { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} -}; -inline const NUMBER init_q_pi_over_two = { - 1, - 6, - 0, - { 429277156, 92748659, 1573365737, 1740753005, 1019699561, 5,} -}; +inline const NUMBER init_p_pi_over_two = { 1, + 6, + 0, + { + 125527896, + 283898350, + 1960493936, + 1672850762, + 1288168272, + 8, + } }; +inline const NUMBER init_q_pi_over_two = { 1, + 6, + 0, + { + 429277156, + 92748659, + 1573365737, + 1740753005, + 1019699561, + 5, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_one_pt_five_pi = { - 1, - 6, - 0, - { 1241201312, 270061909, 1051574664, 1924965045, 1340320627, 70,} -}; -inline const NUMBER init_q_one_pt_five_pi = { - 1, - 6, - 0, - { 1579671539, 1837970263, 1067644340, 523549916, 2119366659, 14,} -}; +inline const NUMBER init_p_one_pt_five_pi = { 1, + 6, + 0, + { + 1241201312, + 270061909, + 1051574664, + 1924965045, + 1340320627, + 70, + } }; +inline const NUMBER init_q_one_pt_five_pi = { 1, + 6, + 0, + { + 1579671539, + 1837970263, + 1067644340, + 523549916, + 2119366659, + 14, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_e_to_one_half = { - 1, - 6, - 0, - { 256945612, 216219427, 223516738, 477442596, 581063757, 23,} -}; -inline const NUMBER init_q_e_to_one_half = { - 1, - 6, - 0, - { 1536828363, 698484484, 1127331835, 224219346, 245499408, 14,} -}; +inline const NUMBER init_p_e_to_one_half = { 1, + 6, + 0, + { + 256945612, + 216219427, + 223516738, + 477442596, + 581063757, + 23, + } }; +inline const NUMBER init_q_e_to_one_half = { 1, + 6, + 0, + { + 1536828363, + 698484484, + 1127331835, + 224219346, + 245499408, + 14, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_exp = { - 1, - 6, - 0, - { 943665199, 1606559160, 1094967530, 1759391384, 1671799163, 1123581,} -}; -inline const NUMBER init_q_rat_exp = { - 1, - 6, - 0, - { 879242208, 2022880100, 617392930, 1374929092, 1367479163, 413342,} -}; +inline const NUMBER init_p_rat_exp = { 1, + 6, + 0, + { + 943665199, + 1606559160, + 1094967530, + 1759391384, + 1671799163, + 1123581, + } }; +inline const NUMBER init_q_rat_exp = { 1, + 6, + 0, + { + 879242208, + 2022880100, + 617392930, + 1374929092, + 1367479163, + 413342, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_ln_ten = { - 1, - 6, - 0, - { 2086268922, 165794492, 1416063951, 1851428830, 1893239400, 65366841,} -}; -inline const NUMBER init_q_ln_ten = { - 1, - 6, - 0, - { 26790652, 564532679, 783998273, 216030448, 1564709968, 28388458,} -}; +inline const NUMBER init_p_ln_ten = { 1, + 6, + 0, + { + 2086268922, + 165794492, + 1416063951, + 1851428830, + 1893239400, + 65366841, + } }; +inline const NUMBER init_q_ln_ten = { 1, + 6, + 0, + { + 26790652, + 564532679, + 783998273, + 216030448, + 1564709968, + 28388458, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_ln_two = { - 1, - 6, - 0, - { 1789230241, 1057927868, 715399197, 908801241, 1411265331, 3,} -}; -inline const NUMBER init_q_ln_two = { - 1, - 6, - 0, - { 1559869847, 1930657510, 1228561531, 219003871, 593099283, 5,} -}; +inline const NUMBER init_p_ln_two = { 1, + 6, + 0, + { + 1789230241, + 1057927868, + 715399197, + 908801241, + 1411265331, + 3, + } }; +inline const NUMBER init_q_ln_two = { 1, + 6, + 0, + { + 1559869847, + 1930657510, + 1228561531, + 219003871, + 593099283, + 5, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rad_to_deg = { - 1, - 6, - 0, - { 2127722024, 1904928383, 2016479213, 2048947859, 1578647346, 492,} -}; -inline const NUMBER init_q_rad_to_deg = { - 1, - 6, - 0, - { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} -}; +inline const NUMBER init_p_rad_to_deg = { 1, + 6, + 0, + { + 2127722024, + 1904928383, + 2016479213, + 2048947859, + 1578647346, + 492, + } }; +inline const NUMBER init_q_rad_to_deg = { 1, + 6, + 0, + { + 125527896, + 283898350, + 1960493936, + 1672850762, + 1288168272, + 8, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rad_to_grad = { - 1, - 6, - 0, - { 2125526288, 684931327, 570267400, 129125085, 1038224725, 547,} -}; -inline const NUMBER init_q_rad_to_grad = { - 1, - 6, - 0, - { 125527896, 283898350, 1960493936, 1672850762, 1288168272, 8,} -}; +inline const NUMBER init_p_rad_to_grad = { 1, + 6, + 0, + { + 2125526288, + 684931327, + 570267400, + 129125085, + 1038224725, + 547, + } }; +inline const NUMBER init_q_rad_to_grad = { 1, + 6, + 0, + { + 125527896, + 283898350, + 1960493936, + 1672850762, + 1288168272, + 8, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_qword = { - 1, - 3, - 0, - { 2147483647, 2147483647, 3,} -}; -inline const NUMBER init_q_rat_qword = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_qword = { 1, + 3, + 0, + { + 2147483647, + 2147483647, + 3, + } }; +inline const NUMBER init_q_rat_qword = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_dword = { - 1, - 2, - 0, - { 2147483647, 1,} -}; -inline const NUMBER init_q_rat_dword = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_dword = { 1, + 2, + 0, + { + 2147483647, + 1, + } }; +inline const NUMBER init_q_rat_dword = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_max_i32 = { - 1, - 1, - 0, - { 2147483647,} -}; -inline const NUMBER init_q_rat_max_i32 = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_max_i32 = { 1, + 1, + 0, + { + 2147483647, + } }; +inline const NUMBER init_q_rat_max_i32 = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_min_i32 = { - -1, - 2, - 0, - { 0, 1,} -}; -inline const NUMBER init_q_rat_min_i32 = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_min_i32 = { -1, + 2, + 0, + { + 0, + 1, + } }; +inline const NUMBER init_q_rat_min_i32 = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_word = { - 1, - 1, - 0, - { 65535,} -}; -inline const NUMBER init_q_rat_word = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_word = { 1, + 1, + 0, + { + 65535, + } }; +inline const NUMBER init_q_rat_word = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_byte = { - 1, - 1, - 0, - { 255,} -}; -inline const NUMBER init_q_rat_byte = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_byte = { 1, + 1, + 0, + { + 255, + } }; +inline const NUMBER init_q_rat_byte = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_400 = { - 1, - 1, - 0, - { 400,} -}; -inline const NUMBER init_q_rat_400 = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_400 = { 1, + 1, + 0, + { + 400, + } }; +inline const NUMBER init_q_rat_400 = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_360 = { - 1, - 1, - 0, - { 360,} -}; -inline const NUMBER init_q_rat_360 = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_360 = { 1, + 1, + 0, + { + 360, + } }; +inline const NUMBER init_q_rat_360 = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_200 = { - 1, - 1, - 0, - { 200,} -}; -inline const NUMBER init_q_rat_200 = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_200 = { 1, + 1, + 0, + { + 200, + } }; +inline const NUMBER init_q_rat_200 = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_180 = { - 1, - 1, - 0, - { 180,} -}; -inline const NUMBER init_q_rat_180 = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_180 = { 1, + 1, + 0, + { + 180, + } }; +inline const NUMBER init_q_rat_180 = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_max_exp = { - 1, - 1, - 0, - { 100000,} -}; -inline const NUMBER init_q_rat_max_exp = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_max_exp = { 1, + 1, + 0, + { + 100000, + } }; +inline const NUMBER init_q_rat_max_exp = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_min_exp = { - -1, - 1, - 0, - { 100000,} -}; -inline const NUMBER init_q_rat_min_exp = { - 1, - 1, - 0, - { 1,} -}; +inline const NUMBER init_p_rat_min_exp = { -1, + 1, + 0, + { + 100000, + } }; +inline const NUMBER init_q_rat_min_exp = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_max_fact = { - 1, - 1, - 0, - { 3249, } -}; -inline const NUMBER init_q_rat_max_fact = { - 1, - 1, - 0, - { 1, } -}; +inline const NUMBER init_p_rat_max_fact = { 1, + 1, + 0, + { + 3249, + } }; +inline const NUMBER init_q_rat_max_fact = { 1, + 1, + 0, + { + 1, + } }; // Autogenerated by _dumprawrat in support.cpp -inline const NUMBER init_p_rat_min_fact = { - -1, - 1, - 0, - { 1000, } -}; -inline const NUMBER init_q_rat_min_fact = { - 1, - 1, - 0, - { 1, } -}; +inline const NUMBER init_p_rat_min_fact = { -1, + 1, + 0, + { + 1000, + } }; +inline const NUMBER init_q_rat_min_fact = { 1, + 1, + 0, + { + 1, + } }; diff --git a/src/CalcManager/Ratpack/ratpak.h b/src/CalcManager/Ratpack/ratpak.h index 349569a6..d98b3003 100644 --- a/src/CalcManager/Ratpack/ratpak.h +++ b/src/CalcManager/Ratpack/ratpak.h @@ -21,27 +21,29 @@ #include #include "CalcErr.h" #include // for memmove -#include // for SAL +#include // for SAL -static constexpr uint32_t BASEXPWR = 31L;// Internal log2(BASEX) +static constexpr uint32_t BASEXPWR = 31L; // Internal log2(BASEX) static constexpr uint32_t BASEX = 0x80000000; // Internal radix used in calculations, hope to raise - // this to 2^32 after solving scaling problems with - // overflow detection esp. in mul + // this to 2^32 after solving scaling problems with + // overflow detection esp. in mul typedef uint32_t MANTTYPE; typedef uint64_t TWO_MANTTYPE; -enum eNUMOBJ_FMT { - FMT_FLOAT, // returns floating point, or exponential if number is too big - FMT_SCIENTIFIC, // always returns scientific notation - FMT_ENGINEERING // always returns engineering notation such that exponent is a multiple of 3 +enum eNUMOBJ_FMT +{ + FMT_FLOAT, // returns floating point, or exponential if number is too big + FMT_SCIENTIFIC, // always returns scientific notation + FMT_ENGINEERING // always returns engineering notation such that exponent is a multiple of 3 }; -enum eANGLE_TYPE { - ANGLE_DEG, // Calculate trig using 360 degrees per revolution - ANGLE_RAD, // Calculate trig using 2 pi radians per revolution - ANGLE_GRAD // Calculate trig using 400 gradients per revolution +enum eANGLE_TYPE +{ + ANGLE_DEG, // Calculate trig using 360 degrees per revolution + ANGLE_RAD, // Calculate trig using 2 pi radians per revolution + ANGLE_GRAD // Calculate trig using 400 gradients per revolution }; @@ -55,21 +57,20 @@ typedef enum eANGLE_TYPE ANGLE_TYPE; //----------------------------------------------------------------------------- #pragma warning(push) -#pragma warning(disable:4200) // nonstandard extension used : zero-sized array in struct/union +#pragma warning(disable : 4200) // nonstandard extension used : zero-sized array in struct/union typedef struct _number { - int32_t sign; // The sign of the mantissa, +1, or -1 - int32_t cdigit; // The number of digits, or what passes for digits in the + int32_t sign; // The sign of the mantissa, +1, or -1 + int32_t cdigit; // The number of digits, or what passes for digits in the // radix being used. - int32_t exp; // The offset of digits from the radix point + int32_t exp; // The offset of digits from the radix point // (decimal point in radix 10) MANTTYPE mant[]; - // This is actually allocated as a continuation of the - // NUMBER structure. + // This is actually allocated as a continuation of the + // NUMBER structure. } NUMBER, *PNUMBER, **PPNUMBER; #pragma warning(pop) - //----------------------------------------------------------------------------- // // RAT type is a representation radix on 2 NUMBER types. @@ -78,10 +79,10 @@ typedef struct _number //----------------------------------------------------------------------------- typedef struct _rat - { +{ PNUMBER pp; PNUMBER pq; - } RAT, *PRAT; +} RAT, *PRAT; static constexpr uint32_t MAX_LONG_SIZE = 33; // Base 2 requires 32 'digits' @@ -135,27 +136,34 @@ extern PRAT rat_max_i32; extern PRAT rat_min_i32; // DUPNUM Duplicates a number taking care of allocation and internals -#define DUPNUM(a,b) destroynum(a);createnum( a, (b)->cdigit );_dupnum(a, b); +#define DUPNUM(a, b) \ + destroynum(a); \ + createnum(a, (b)->cdigit); \ + _dupnum(a, b); // DUPRAT Duplicates a rational taking care of allocation and internals -#define DUPRAT(a,b) destroyrat(a);createrat(a);DUPNUM((a)->pp,(b)->pp);DUPNUM((a)->pq,(b)->pq); +#define DUPRAT(a, b) \ + destroyrat(a); \ + createrat(a); \ + DUPNUM((a)->pp, (b)->pp); \ + DUPNUM((a)->pq, (b)->pq); // LOG*RADIX calculates the integral portion of the log of a number in // the base currently being used, only accurate to within g_ratio -#define LOGNUMRADIX(pnum) (((pnum)->cdigit+(pnum)->exp)*g_ratio) -#define LOGRATRADIX(prat) (LOGNUMRADIX((prat)->pp)-LOGNUMRADIX((prat)->pq)) +#define LOGNUMRADIX(pnum) (((pnum)->cdigit + (pnum)->exp) * g_ratio) +#define LOGRATRADIX(prat) (LOGNUMRADIX((prat)->pp) - LOGNUMRADIX((prat)->pq)) // LOG*2 calculates the integral portion of the log of a number in // the internal base being used, only accurate to within g_ratio -#define LOGNUM2(pnum) ((pnum)->cdigit+(pnum)->exp) -#define LOGRAT2(prat) (LOGNUM2((prat)->pp)-LOGNUM2((prat)->pq)) +#define LOGNUM2(pnum) ((pnum)->cdigit + (pnum)->exp) +#define LOGRAT2(prat) (LOGNUM2((prat)->pp) - LOGNUM2((prat)->pq)) // SIGN returns the sign of the rational -#define SIGN(prat) ((prat)->pp->sign*(prat)->pq->sign) +#define SIGN(prat) ((prat)->pp->sign * (prat)->pq->sign) -#if defined( DEBUG_RATPAK ) +#if defined(DEBUG_RATPAK) //----------------------------------------------------------------------------- // // Debug versions of rational number creation and destruction routines. @@ -163,37 +171,39 @@ extern PRAT rat_min_i32; // //----------------------------------------------------------------------------- -#define createrat(y) (y)=_createrat(); \ -{ \ - std::wstringstream outputString; \ - outputString << "createrat " << y << " " << # y << " file= " << __FILE__ << ", line= " << __LINE__ << "\n"; \ - OutputDebugString(outputString.str().c_str()); \ -} -#define destroyrat(x) \ -{ \ - std::wstringstream outputString; \ - outputString << "destroyrat " << x << " file= " << __FILE__ << ", line= " << __LINE__ << "\n"; \ - OutputDebugString(outputString.str().c_str()); \ -} \ -_destroyrat(x),(x)=nullptr -#define createnum(y,x) (y)=_createnum(x); \ -{ \ - std::wstringstream outputString; \ - outputString << "createnum " << y << " " << # y << " file= " << __FILE__ << ", line= " << __LINE__ << "\n"; \ - OutputDebugString(outputString.str().c_str()); \ -} -#define destroynum(x) \ -{ \ - std::wstringstream outputString; \ - outputString << "destroynum " << x << " file= " << __FILE__ << ", line= " << __LINE__ << "\n"; \ - OutputDebugString(outputString.str().c_str()); \ -} \ -_destroynum(x),(x)=nullptr +#define createrat(y) \ + (y) = _createrat(); \ + { \ + std::wstringstream outputString; \ + outputString << "createrat " << y << " " << #y << " file= " << __FILE__ << ", line= " << __LINE__ << "\n"; \ + OutputDebugString(outputString.str().c_str()); \ + } +#define destroyrat(x) \ + { \ + std::wstringstream outputString; \ + outputString << "destroyrat " << x << " file= " << __FILE__ << ", line= " << __LINE__ << "\n"; \ + OutputDebugString(outputString.str().c_str()); \ + } \ + _destroyrat(x), (x) = nullptr +#define createnum(y, x) \ + (y) = _createnum(x); \ + { \ + std::wstringstream outputString; \ + outputString << "createnum " << y << " " << #y << " file= " << __FILE__ << ", line= " << __LINE__ << "\n"; \ + OutputDebugString(outputString.str().c_str()); \ + } +#define destroynum(x) \ + { \ + std::wstringstream outputString; \ + outputString << "destroynum " << x << " file= " << __FILE__ << ", line= " << __LINE__ << "\n"; \ + OutputDebugString(outputString.str().c_str()); \ + } \ + _destroynum(x), (x) = nullptr #else -#define createrat(y) (y)=_createrat() -#define destroyrat(x) _destroyrat(x),(x)=nullptr -#define createnum(y,x) (y)=_createnum(x) -#define destroynum(x) _destroynum(x),(x)=nullptr +#define createrat(y) (y) = _createrat() +#define destroyrat(x) _destroyrat(x), (x) = nullptr +#define createnum(y, x) (y) = _createnum(x) +#define destroynum(x) _destroynum(x), (x) = nullptr #endif //----------------------------------------------------------------------------- @@ -204,40 +214,47 @@ _destroynum(x),(x)=nullptr //----------------------------------------------------------------------------- // RENORMALIZE, gets the exponents non-negative. -#define RENORMALIZE(x) if ( (x)->pp->exp < 0 ) { \ - (x)->pq->exp -= (x)->pp->exp; \ - (x)->pp->exp = 0; \ - } \ - if ( (x)->pq->exp < 0 ) { \ - (x)->pp->exp -= (x)->pq->exp; \ - (x)->pq->exp = 0; \ +#define RENORMALIZE(x) \ + if ((x)->pp->exp < 0) \ + { \ + (x)->pq->exp -= (x)->pp->exp; \ + (x)->pp->exp = 0; \ + } \ + if ((x)->pq->exp < 0) \ + { \ + (x)->pp->exp -= (x)->pq->exp; \ + (x)->pq->exp = 0; \ } // TRIMNUM ASSUMES the number is in radix form NOT INTERNAL BASEX!!! -#define TRIMNUM(x, precision) if ( !g_ftrueinfinite ) { \ - int32_t trim = (x)->cdigit - precision-g_ratio;\ - if ( trim > 1 ) \ - { \ -memmove( (x)->mant, &((x)->mant[trim]), sizeof(MANTTYPE)*((x)->cdigit-trim) ); \ - (x)->cdigit -= trim; \ - (x)->exp += trim; \ - } \ - } +#define TRIMNUM(x, precision) \ + if (!g_ftrueinfinite) \ + { \ + int32_t trim = (x)->cdigit - precision - g_ratio; \ + if (trim > 1) \ + { \ + memmove((x)->mant, &((x)->mant[trim]), sizeof(MANTTYPE) * ((x)->cdigit - trim)); \ + (x)->cdigit -= trim; \ + (x)->exp += trim; \ + } \ + } // TRIMTOP ASSUMES the number is in INTERNAL BASEX!!! -#define TRIMTOP(x, precision) if ( !g_ftrueinfinite ) { \ - int32_t trim = (x)->pp->cdigit - (precision/g_ratio) - 2;\ - if ( trim > 1 ) \ - { \ -memmove( (x)->pp->mant, &((x)->pp->mant[trim]), sizeof(MANTTYPE)*((x)->pp->cdigit-trim) ); \ - (x)->pp->cdigit -= trim; \ - (x)->pp->exp += trim; \ - } \ - trim = std::min((x)->pp->exp,(x)->pq->exp);\ - (x)->pp->exp -= trim;\ - (x)->pq->exp -= trim;\ - } +#define TRIMTOP(x, precision) \ + if (!g_ftrueinfinite) \ + { \ + int32_t trim = (x)->pp->cdigit - (precision / g_ratio) - 2; \ + if (trim > 1) \ + { \ + memmove((x)->pp->mant, &((x)->pp->mant[trim]), sizeof(MANTTYPE) * ((x)->pp->cdigit - trim)); \ + (x)->pp->cdigit -= trim; \ + (x)->pp->exp += trim; \ + } \ + trim = std::min((x)->pp->exp, (x)->pq->exp); \ + (x)->pp->exp -= trim; \ + (x)->pq->exp -= trim; \ + } -#define SMALL_ENOUGH_RAT(a, precision) (zernum((a)->pp) || ( ( ( (a)->pq->cdigit + (a)->pq->exp ) - ( (a)->pp->cdigit + (a)->pp->exp ) - 1 ) * g_ratio > precision ) ) +#define SMALL_ENOUGH_RAT(a, precision) (zernum((a)->pp) || ((((a)->pq->cdigit + (a)->pq->exp) - ((a)->pp->cdigit + (a)->pp->exp) - 1) * g_ratio > precision)) //----------------------------------------------------------------------------- // @@ -246,50 +263,55 @@ memmove( (x)->pp->mant, &((x)->pp->mant[trim]), sizeof(MANTTYPE)*((x)->pp->cdigi // //----------------------------------------------------------------------------- -#define CREATETAYLOR() PRAT xx=nullptr;\ - PNUMBER n2=nullptr; \ - PRAT pret=nullptr; \ - PRAT thisterm=nullptr; \ - DUPRAT(xx,*px); \ - mulrat(&xx,*px, precision); \ - createrat(pret); \ - pret->pp=i32tonum( 0L, BASEX ); \ - pret->pq=i32tonum( 0L, BASEX ); +#define CREATETAYLOR() \ + PRAT xx = nullptr; \ + PNUMBER n2 = nullptr; \ + PRAT pret = nullptr; \ + PRAT thisterm = nullptr; \ + DUPRAT(xx, *px); \ + mulrat(&xx, *px, precision); \ + createrat(pret); \ + pret->pp = i32tonum(0L, BASEX); \ + pret->pq = i32tonum(0L, BASEX); -#define DESTROYTAYLOR() destroynum( n2 ); \ - destroyrat( xx );\ - destroyrat( thisterm );\ - destroyrat( *px );\ - trimit(&pret, precision);\ - *px=pret; +#define DESTROYTAYLOR() \ + destroynum(n2); \ + destroyrat(xx); \ + destroyrat(thisterm); \ + destroyrat(*px); \ + trimit(&pret, precision); \ + *px = pret; // INC(a) is the rational equivalent of a++ // Check to see if we can avoid doing this the hard way. -#define INC(a) if ( (a)->mant[0] < BASEX - 1 ) \ - { \ - (a)->mant[0]++; \ - } \ - else \ - { \ - addnum( &(a), num_one, BASEX); \ +#define INC(a) \ + if ((a)->mant[0] < BASEX - 1) \ + { \ + (a)->mant[0]++; \ + } \ + else \ + { \ + addnum(&(a), num_one, BASEX); \ } -#define MSD(x) ((x)->mant[(x)->cdigit-1]) +#define MSD(x) ((x)->mant[(x)->cdigit - 1]) // MULNUM(b) is the rational equivalent of thisterm *= b where thisterm is // a rational and b is a number, NOTE this is a mixed type operation for // efficiency reasons. -#define MULNUM(b) mulnumx( &(thisterm->pp), b); +#define MULNUM(b) mulnumx(&(thisterm->pp), b); // DIVNUM(b) is the rational equivalent of thisterm /= b where thisterm is // a rational and b is a number, NOTE this is a mixed type operation for // efficiency reasons. -#define DIVNUM(b) mulnumx( &(thisterm->pq), b); +#define DIVNUM(b) mulnumx(&(thisterm->pq), b); // NEXTTERM(p,d) is the rational equivalent of // thisterm *= p // d // pret += thisterm -#define NEXTTERM(p,d,precision) mulrat(&thisterm,p,precision);d addrat( &pret, thisterm, precision ) +#define NEXTTERM(p, d, precision) \ + mulrat(&thisterm, p, precision); \ + d addrat(&pret, thisterm, precision) //----------------------------------------------------------------------------- // @@ -299,9 +321,9 @@ memmove( (x)->pp->mant, &((x)->pp->mant[trim]), sizeof(MANTTYPE)*((x)->pp->cdigi extern bool g_ftrueinfinite; // set to true to allow infinite precision // don't use unless you know what you are doing - // used to help decide when to stop calculating. + // used to help decide when to stop calculating. -extern int32_t g_ratio; // Internally calculated ratio of internal radix +extern int32_t g_ratio; // Internally calculated ratio of internal radix //----------------------------------------------------------------------------- // @@ -315,10 +337,10 @@ extern void SetDecimalSeparator(wchar_t decimalSeparator); // Call whenever either radix or precision changes, is smarter about recalculating constants. extern void ChangeConstants(uint32_t radix, int32_t precision); -extern bool equnum(_In_ PNUMBER a, _In_ PNUMBER b ); // returns true of a == b -extern bool lessnum(_In_ PNUMBER a, _In_ PNUMBER b ); // returns true of a < b -extern bool zernum(_In_ PNUMBER a ); // returns true of a == 0 -extern bool zerrat(_In_ PRAT a ); // returns true if a == 0/q +extern bool equnum(_In_ PNUMBER a, _In_ PNUMBER b); // returns true of a == b +extern bool lessnum(_In_ PNUMBER a, _In_ PNUMBER b); // returns true of a < b +extern bool zernum(_In_ PNUMBER a); // returns true of a == 0 +extern bool zerrat(_In_ PRAT a); // returns true if a == 0/q extern std::wstring NumberToString(_Inout_ PNUMBER& pnum, int format, uint32_t radix, int32_t precision); // returns a text representation of a PRAT @@ -328,16 +350,18 @@ extern PNUMBER RatToNumber(_In_ PRAT prat, uint32_t radix, int32_t precision); // flattens a PRAT by converting it to a PNUMBER and back to a PRAT extern void flatrat(_Inout_ PRAT& prat, uint32_t radix, int32_t precision); -extern int32_t numtoi32(_In_ PNUMBER pnum, uint32_t radix ); +extern int32_t numtoi32(_In_ PNUMBER pnum, uint32_t radix); extern int32_t rattoi32(_In_ PRAT prat, uint32_t radix, int32_t precision); uint64_t rattoUi64(_In_ PRAT prat, uint32_t radix, int32_t precision); -extern PNUMBER _createnum(_In_ uint32_t size ); // returns an empty number structure with size digits +extern PNUMBER _createnum(_In_ uint32_t size); // returns an empty number structure with size digits extern PNUMBER nRadixxtonum(_In_ PNUMBER a, uint32_t radix, int32_t precision); -extern PNUMBER gcd(_In_ PNUMBER a, _In_ PNUMBER b ); -extern PNUMBER StringToNumber(std::wstring_view numberString, uint32_t radix, int32_t precision); // takes a text representation of a number and returns a number. +extern PNUMBER gcd(_In_ PNUMBER a, _In_ PNUMBER b); +extern PNUMBER StringToNumber(std::wstring_view numberString, uint32_t radix, + int32_t precision); // takes a text representation of a number and returns a number. // takes a text representation of a number as a mantissa with sign and an exponent with sign. -extern PRAT StringToRat(bool mantissaIsNegative, std::wstring_view mantissa, bool exponentIsNegative, std::wstring_view exponent, uint32_t radix, int32_t precision); +extern PRAT StringToRat(bool mantissaIsNegative, std::wstring_view mantissa, bool exponentIsNegative, std::wstring_view exponent, uint32_t radix, + int32_t precision); extern PNUMBER i32factnum(int32_t ini32, uint32_t radix); extern PNUMBER i32prodnum(int32_t start, int32_t stop, uint32_t radix); @@ -346,119 +370,119 @@ extern PNUMBER Ui32tonum(uint32_t ini32, uint32_t radix); extern PNUMBER numtonRadixx(PNUMBER a, uint32_t radix); // creates a empty/undefined rational representation (p/q) -extern PRAT _createrat( void ); +extern PRAT _createrat(void); // returns a new rat structure with the acos of x->p/x->q taking into account // angle type -extern void acosanglerat( _Inout_ PRAT *px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision); +extern void acosanglerat(_Inout_ PRAT* px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision); // returns a new rat structure with the acosh of x->p/x->q -extern void acoshrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision); +extern void acoshrat(_Inout_ PRAT* px, uint32_t radix, int32_t precision); // returns a new rat structure with the acos of x->p/x->q -extern void acosrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision); +extern void acosrat(_Inout_ PRAT* px, uint32_t radix, int32_t precision); // returns a new rat structure with the asin of x->p/x->q taking into account // angle type -extern void asinanglerat( _Inout_ PRAT *px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision); +extern void asinanglerat(_Inout_ PRAT* px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision); -extern void asinhrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision); +extern void asinhrat(_Inout_ PRAT* px, uint32_t radix, int32_t precision); // returns a new rat structure with the asinh of x->p/x->q // returns a new rat structure with the asin of x->p/x->q -extern void asinrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision); +extern void asinrat(_Inout_ PRAT* px, uint32_t radix, int32_t precision); // returns a new rat structure with the atan of x->p/x->q taking into account // angle type -extern void atananglerat( _Inout_ PRAT *px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision); +extern void atananglerat(_Inout_ PRAT* px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision); // returns a new rat structure with the atanh of x->p/x->q -extern void atanhrat( _Inout_ PRAT *px, int32_t precision); +extern void atanhrat(_Inout_ PRAT* px, int32_t precision); // returns a new rat structure with the atan of x->p/x->q -extern void atanrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision); +extern void atanrat(_Inout_ PRAT* px, uint32_t radix, int32_t precision); // returns a new rat structure with the cosh of x->p/x->q -extern void coshrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision); +extern void coshrat(_Inout_ PRAT* px, uint32_t radix, int32_t precision); // returns a new rat structure with the cos of x->p/x->q -extern void cosrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision); +extern void cosrat(_Inout_ PRAT* px, uint32_t radix, int32_t precision); // returns a new rat structure with the cos of x->p/x->q taking into account // angle type -extern void cosanglerat( _Inout_ PRAT *px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision); +extern void cosanglerat(_Inout_ PRAT* px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision); // returns a new rat structure with the exp of x->p/x->q this should not be called explicitly. -extern void _exprat( _Inout_ PRAT *px, int32_t precision); +extern void _exprat(_Inout_ PRAT* px, int32_t precision); // returns a new rat structure with the exp of x->p/x->q -extern void exprat( _Inout_ PRAT *px, uint32_t radix, int32_t precision); +extern void exprat(_Inout_ PRAT* px, uint32_t radix, int32_t precision); // returns a new rat structure with the log base 10 of x->p/x->q -extern void log10rat( _Inout_ PRAT *px, int32_t precision); +extern void log10rat(_Inout_ PRAT* px, int32_t precision); // returns a new rat structure with the natural log of x->p/x->q -extern void lograt( _Inout_ PRAT *px, int32_t precision); +extern void lograt(_Inout_ PRAT* px, int32_t precision); -extern PRAT i32torat( int32_t ini32 ); -extern PRAT Ui32torat( uint32_t inui32 ); -extern PRAT numtorat( _In_ PNUMBER pin, uint32_t radix); +extern PRAT i32torat(int32_t ini32); +extern PRAT Ui32torat(uint32_t inui32); +extern PRAT numtorat(_In_ PNUMBER pin, uint32_t radix); -extern void sinhrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision); -extern void sinrat( _Inout_ PRAT *px ); +extern void sinhrat(_Inout_ PRAT* px, uint32_t radix, int32_t precision); +extern void sinrat(_Inout_ PRAT* px); // returns a new rat structure with the sin of x->p/x->q taking into account // angle type -extern void sinanglerat( _Inout_ PRAT *px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision); +extern void sinanglerat(_Inout_ PRAT* px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision); -extern void tanhrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision); -extern void tanrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision); +extern void tanhrat(_Inout_ PRAT* px, uint32_t radix, int32_t precision); +extern void tanrat(_Inout_ PRAT* px, uint32_t radix, int32_t precision); // returns a new rat structure with the tan of x->p/x->q taking into account // angle type -extern void tananglerat( _Inout_ PRAT *px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision); +extern void tananglerat(_Inout_ PRAT* px, ANGLE_TYPE angletype, uint32_t radix, int32_t precision); -extern void _dupnum(_In_ PNUMBER dest, _In_ const NUMBER * const src); +extern void _dupnum(_In_ PNUMBER dest, _In_ const NUMBER* const src); -extern void _destroynum( _In_ PNUMBER pnum ); -extern void _destroyrat( _In_ PRAT prat ); -extern void addnum( _Inout_ PNUMBER *pa, _In_ PNUMBER b, uint32_t radix); -extern void addrat( _Inout_ PRAT *pa, _In_ PRAT b, int32_t precision); -extern void andrat( _Inout_ PRAT *pa, _In_ PRAT b, uint32_t radix, int32_t precision); -extern void divnum( _Inout_ PNUMBER *pa, _In_ PNUMBER b, uint32_t radix, int32_t precision); -extern void divnumx( _Inout_ PNUMBER *pa, _In_ PNUMBER b, int32_t precision); -extern void divrat( _Inout_ PRAT *pa, _In_ PRAT b, int32_t precision); -extern void fracrat( _Inout_ PRAT *pa , uint32_t radix, int32_t precision); -extern void factrat( _Inout_ PRAT *pa, uint32_t radix, int32_t precision); -extern void remrat(_Inout_ PRAT *pa, _In_ PRAT b); -extern void modrat(_Inout_ PRAT *pa, _In_ PRAT b); -extern void gcdrat( _Inout_ PRAT *pa, int32_t precision); -extern void intrat( _Inout_ PRAT *px, uint32_t radix, int32_t precision); -extern void mulnum( _Inout_ PNUMBER *pa, _In_ PNUMBER b, uint32_t radix); -extern void mulnumx( _Inout_ PNUMBER *pa, _In_ PNUMBER b ); -extern void mulrat( _Inout_ PRAT *pa, _In_ PRAT b, int32_t precision); -extern void numpowi32( _Inout_ PNUMBER *proot, int32_t power, uint32_t radix, int32_t precision); -extern void numpowi32x( _Inout_ PNUMBER *proot, int32_t power ); -extern void orrat( _Inout_ PRAT *pa, _In_ PRAT b, uint32_t radix, int32_t precision); -extern void powrat( _Inout_ PRAT *pa, _In_ PRAT b , uint32_t radix, int32_t precision); -extern void powratNumeratorDenominator(_Inout_ PRAT *pa, _In_ PRAT b, uint32_t radix, int32_t precision); -extern void powratcomp(_Inout_ PRAT *pa, _In_ PRAT b, uint32_t radix, int32_t precision); -extern void ratpowi32( _Inout_ PRAT *proot, int32_t power, int32_t precision); -extern void remnum( _Inout_ PNUMBER *pa, _In_ PNUMBER b, uint32_t radix); -extern void rootrat( _Inout_ PRAT *pa, _In_ PRAT b , uint32_t radix, int32_t precision); -extern void scale2pi( _Inout_ PRAT *px, uint32_t radix, int32_t precision); -extern void scale( _Inout_ PRAT *px, _In_ PRAT scalefact, uint32_t radix, int32_t precision); -extern void subrat( _Inout_ PRAT *pa, _In_ PRAT b, int32_t precision); -extern void xorrat( _Inout_ PRAT *pa, _In_ PRAT b, uint32_t radix, int32_t precision); -extern void lshrat( _Inout_ PRAT *pa, _In_ PRAT b , uint32_t radix, int32_t precision); -extern void rshrat( _Inout_ PRAT *pa, _In_ PRAT b, uint32_t radix, int32_t precision); -extern bool rat_equ( _In_ PRAT a, _In_ PRAT b, int32_t precision); -extern bool rat_neq( _In_ PRAT a, _In_ PRAT b, int32_t precision); -extern bool rat_gt( _In_ PRAT a, _In_ PRAT b, int32_t precision); -extern bool rat_ge( _In_ PRAT a, _In_ PRAT b, int32_t precision); -extern bool rat_lt( _In_ PRAT a, _In_ PRAT b, int32_t precision); -extern bool rat_le( _In_ PRAT a, _In_ PRAT b, int32_t precision); -extern void inbetween( _In_ PRAT *px, _In_ PRAT range, int32_t precision); -extern void trimit( _Inout_ PRAT *px, int32_t precision); -extern void _dumprawrat(_In_ const wchar_t *varname, _In_ PRAT rat, std::wostream& out); -extern void _dumprawnum(_In_ const wchar_t *varname, _In_ PNUMBER num, std::wostream& out); +extern void _destroynum(_In_ PNUMBER pnum); +extern void _destroyrat(_In_ PRAT prat); +extern void addnum(_Inout_ PNUMBER* pa, _In_ PNUMBER b, uint32_t radix); +extern void addrat(_Inout_ PRAT* pa, _In_ PRAT b, int32_t precision); +extern void andrat(_Inout_ PRAT* pa, _In_ PRAT b, uint32_t radix, int32_t precision); +extern void divnum(_Inout_ PNUMBER* pa, _In_ PNUMBER b, uint32_t radix, int32_t precision); +extern void divnumx(_Inout_ PNUMBER* pa, _In_ PNUMBER b, int32_t precision); +extern void divrat(_Inout_ PRAT* pa, _In_ PRAT b, int32_t precision); +extern void fracrat(_Inout_ PRAT* pa, uint32_t radix, int32_t precision); +extern void factrat(_Inout_ PRAT* pa, uint32_t radix, int32_t precision); +extern void remrat(_Inout_ PRAT* pa, _In_ PRAT b); +extern void modrat(_Inout_ PRAT* pa, _In_ PRAT b); +extern void gcdrat(_Inout_ PRAT* pa, int32_t precision); +extern void intrat(_Inout_ PRAT* px, uint32_t radix, int32_t precision); +extern void mulnum(_Inout_ PNUMBER* pa, _In_ PNUMBER b, uint32_t radix); +extern void mulnumx(_Inout_ PNUMBER* pa, _In_ PNUMBER b); +extern void mulrat(_Inout_ PRAT* pa, _In_ PRAT b, int32_t precision); +extern void numpowi32(_Inout_ PNUMBER* proot, int32_t power, uint32_t radix, int32_t precision); +extern void numpowi32x(_Inout_ PNUMBER* proot, int32_t power); +extern void orrat(_Inout_ PRAT* pa, _In_ PRAT b, uint32_t radix, int32_t precision); +extern void powrat(_Inout_ PRAT* pa, _In_ PRAT b, uint32_t radix, int32_t precision); +extern void powratNumeratorDenominator(_Inout_ PRAT* pa, _In_ PRAT b, uint32_t radix, int32_t precision); +extern void powratcomp(_Inout_ PRAT* pa, _In_ PRAT b, uint32_t radix, int32_t precision); +extern void ratpowi32(_Inout_ PRAT* proot, int32_t power, int32_t precision); +extern void remnum(_Inout_ PNUMBER* pa, _In_ PNUMBER b, uint32_t radix); +extern void rootrat(_Inout_ PRAT* pa, _In_ PRAT b, uint32_t radix, int32_t precision); +extern void scale2pi(_Inout_ PRAT* px, uint32_t radix, int32_t precision); +extern void scale(_Inout_ PRAT* px, _In_ PRAT scalefact, uint32_t radix, int32_t precision); +extern void subrat(_Inout_ PRAT* pa, _In_ PRAT b, int32_t precision); +extern void xorrat(_Inout_ PRAT* pa, _In_ PRAT b, uint32_t radix, int32_t precision); +extern void lshrat(_Inout_ PRAT* pa, _In_ PRAT b, uint32_t radix, int32_t precision); +extern void rshrat(_Inout_ PRAT* pa, _In_ PRAT b, uint32_t radix, int32_t precision); +extern bool rat_equ(_In_ PRAT a, _In_ PRAT b, int32_t precision); +extern bool rat_neq(_In_ PRAT a, _In_ PRAT b, int32_t precision); +extern bool rat_gt(_In_ PRAT a, _In_ PRAT b, int32_t precision); +extern bool rat_ge(_In_ PRAT a, _In_ PRAT b, int32_t precision); +extern bool rat_lt(_In_ PRAT a, _In_ PRAT b, int32_t precision); +extern bool rat_le(_In_ PRAT a, _In_ PRAT b, int32_t precision); +extern void inbetween(_In_ PRAT* px, _In_ PRAT range, int32_t precision); +extern void trimit(_Inout_ PRAT* px, int32_t precision); +extern void _dumprawrat(_In_ const wchar_t* varname, _In_ PRAT rat, std::wostream& out); +extern void _dumprawnum(_In_ const wchar_t* varname, _In_ PNUMBER num, std::wostream& out); diff --git a/src/CalcManager/Ratpack/support.cpp b/src/CalcManager/Ratpack/support.cpp index 1e6a9204..a46b180c 100644 --- a/src/CalcManager/Ratpack/support.cpp +++ b/src/CalcManager/Ratpack/support.cpp @@ -19,36 +19,47 @@ //---------------------------------------------------------------------------- #include -#include // for memmove +#include // for memmove #include // for wostream #include "ratpak.h" using namespace std; -void _readconstants( void ); +void _readconstants(void); -#if defined( GEN_CONST ) +#if defined(GEN_CONST) static int cbitsofprecision = 0; #define READRAWRAT(v) #define READRAWNUM(v) -#define DUMPRAWRAT(v) _dumprawrat(#v,v, wcout) -#define DUMPRAWNUM(v) fprintf( stderr, \ -"// Autogenerated by _dumprawrat in support.cpp\n" ); \ - fprintf( stderr, "inline const NUMBER init_" #v "= {\n" ); \ - _dumprawnum(v, wcout); \ - fprintf( stderr, "};\n" ) - +#define DUMPRAWRAT(v) _dumprawrat(#v, v, wcout) +#define DUMPRAWNUM(v) \ + fprintf(stderr, "// Autogenerated by _dumprawrat in support.cpp\n"); \ + fprintf(stderr, "inline const NUMBER init_" #v "= {\n"); \ + _dumprawnum(v, wcout); \ + fprintf(stderr, "};\n") #else #define DUMPRAWRAT(v) #define DUMPRAWNUM(v) -#define READRAWRAT(v) createrat(v); DUPNUM((v)->pp,(&(init_p_##v))); \ -DUPNUM((v)->pq,(&(init_q_##v))); -#define READRAWNUM(v) DUPNUM(v,(&(init_##v))) +#define READRAWRAT(v) \ + createrat(v); \ + DUPNUM((v)->pp, (&(init_p_##v))); \ + DUPNUM((v)->pq, (&(init_q_##v))); +#define READRAWNUM(v) DUPNUM(v, (&(init_##v))) -#define INIT_AND_DUMP_RAW_NUM_IF_NULL(r, v) if (r == nullptr) { r = i32tonum(v, BASEX); DUMPRAWNUM(v); } -#define INIT_AND_DUMP_RAW_RAT_IF_NULL(r, v) if (r == nullptr) { r = i32torat(v); DUMPRAWRAT(v); } +#define INIT_AND_DUMP_RAW_NUM_IF_NULL(r, v) \ + if (r == nullptr) \ + { \ + r = i32tonum(v, BASEX); \ + DUMPRAWNUM(v); \ + } +#define INIT_AND_DUMP_RAW_RAT_IF_NULL(r, v) \ + if (r == nullptr) \ + { \ + r = i32torat(v); \ + DUMPRAWRAT(v); \ + } static constexpr int RATIO_FOR_DECIMAL = 9; static constexpr int DECIMAL = 10; @@ -60,51 +71,51 @@ static int cbitsofprecision = RATIO_FOR_DECIMAL * DECIMAL * CALC_DECIMAL_DIGITS_ #endif -bool g_ftrueinfinite = false; // Set to true if you don't want - // chopping internally - // precision used internally +bool g_ftrueinfinite = false; // Set to true if you don't want + // chopping internally + // precision used internally -PNUMBER num_one= nullptr; -PNUMBER num_two= nullptr; -PNUMBER num_five= nullptr; -PNUMBER num_six= nullptr; -PNUMBER num_ten= nullptr; +PNUMBER num_one = nullptr; +PNUMBER num_two = nullptr; +PNUMBER num_five = nullptr; +PNUMBER num_six = nullptr; +PNUMBER num_ten = nullptr; -PRAT ln_ten= nullptr; -PRAT ln_two= nullptr; -PRAT rat_zero= nullptr; -PRAT rat_one= nullptr; -PRAT rat_neg_one= nullptr; -PRAT rat_two= nullptr; -PRAT rat_six= nullptr; -PRAT rat_half= nullptr; -PRAT rat_ten= nullptr; -PRAT pt_eight_five= nullptr; -PRAT pi= nullptr; -PRAT pi_over_two= nullptr; -PRAT two_pi= nullptr; -PRAT one_pt_five_pi= nullptr; -PRAT e_to_one_half= nullptr; -PRAT rat_exp= nullptr; -PRAT rad_to_deg= nullptr; -PRAT rad_to_grad= nullptr; -PRAT rat_qword= nullptr; -PRAT rat_dword= nullptr; // unsigned max ui32 -PRAT rat_word= nullptr; -PRAT rat_byte= nullptr; -PRAT rat_360= nullptr; -PRAT rat_400= nullptr; -PRAT rat_180= nullptr; -PRAT rat_200= nullptr; -PRAT rat_nRadix= nullptr; -PRAT rat_smallest= nullptr; -PRAT rat_negsmallest= nullptr; -PRAT rat_max_exp= nullptr; -PRAT rat_min_exp= nullptr; +PRAT ln_ten = nullptr; +PRAT ln_two = nullptr; +PRAT rat_zero = nullptr; +PRAT rat_one = nullptr; +PRAT rat_neg_one = nullptr; +PRAT rat_two = nullptr; +PRAT rat_six = nullptr; +PRAT rat_half = nullptr; +PRAT rat_ten = nullptr; +PRAT pt_eight_five = nullptr; +PRAT pi = nullptr; +PRAT pi_over_two = nullptr; +PRAT two_pi = nullptr; +PRAT one_pt_five_pi = nullptr; +PRAT e_to_one_half = nullptr; +PRAT rat_exp = nullptr; +PRAT rad_to_deg = nullptr; +PRAT rad_to_grad = nullptr; +PRAT rat_qword = nullptr; +PRAT rat_dword = nullptr; // unsigned max ui32 +PRAT rat_word = nullptr; +PRAT rat_byte = nullptr; +PRAT rat_360 = nullptr; +PRAT rat_400 = nullptr; +PRAT rat_180 = nullptr; +PRAT rat_200 = nullptr; +PRAT rat_nRadix = nullptr; +PRAT rat_smallest = nullptr; +PRAT rat_negsmallest = nullptr; +PRAT rat_max_exp = nullptr; +PRAT rat_min_exp = nullptr; PRAT rat_max_fact = nullptr; PRAT rat_min_fact = nullptr; -PRAT rat_min_i32= nullptr; // min signed i32 -PRAT rat_max_i32= nullptr; // max signed i32 +PRAT rat_min_i32 = nullptr; // min signed i32 +PRAT rat_max_i32 = nullptr; // max signed i32 //---------------------------------------------------------------------------- // @@ -127,14 +138,14 @@ void ChangeConstants(uint32_t radix, int32_t precision) uint64_t limit = static_cast(BASEX) / static_cast(radix); g_ratio = 0; - for (uint32_t digit = 1; digit < limit; digit *= radix ) + for (uint32_t digit = 1; digit < limit; digit *= radix) { g_ratio++; } g_ratio += !g_ratio; destroyrat(rat_nRadix); - rat_nRadix=i32torat( radix ); + rat_nRadix = i32torat(radix); // Check to see what we have to recalculate and what we don't if (cbitsofprecision < (g_ratio * static_cast(radix) * precision)) @@ -253,7 +264,6 @@ void ChangeConstants(uint32_t radix, int32_t precision) lograt(&ln_two, extraPrecision); DUMPRAWRAT(ln_two); - destroyrat(rad_to_deg); rad_to_deg = i32torat(180L); divrat(&rad_to_deg, pi, extraPrecision); @@ -273,7 +283,6 @@ void ChangeConstants(uint32_t radix, int32_t precision) DUPRAT(rat_negsmallest, rat_smallest); rat_negsmallest->pp->sign = -1; } - } //---------------------------------------------------------------------------- @@ -287,21 +296,21 @@ void ChangeConstants(uint32_t radix, int32_t precision) // //---------------------------------------------------------------------------- -void intrat( PRAT *px, uint32_t radix, int32_t precision) +void intrat(PRAT* px, uint32_t radix, int32_t precision) { // Only do the intrat operation if number is nonzero. // and only if the bottom part is not one. - if ( !zernum( (*px)->pp ) && !equnum( (*px)->pq, num_one ) ) + if (!zernum((*px)->pp) && !equnum((*px)->pq, num_one)) { flatrat(*px, radix, precision); // Subtract the fractional part of the rational PRAT pret = nullptr; - DUPRAT(pret,*px); - remrat( &pret, rat_one ); + DUPRAT(pret, *px); + remrat(&pret, rat_one); - subrat( px, pret, precision); - destroyrat( pret ); + subrat(px, pret, precision); + destroyrat(pret); // Simplify the value if possible to resolve rounding errors flatrat(*px, radix, precision); @@ -319,16 +328,16 @@ void intrat( PRAT *px, uint32_t radix, int32_t precision) // //--------------------------------------------------------------------------- -bool rat_equ( PRAT a, PRAT b, int32_t precision) +bool rat_equ(PRAT a, PRAT b, int32_t precision) { - PRAT rattmp= nullptr; - DUPRAT(rattmp,a); + PRAT rattmp = nullptr; + DUPRAT(rattmp, a); rattmp->pp->sign *= -1; - addrat( &rattmp, b, precision); - bool bret = zernum( rattmp->pp ); - destroyrat( rattmp ); - return( bret ); + addrat(&rattmp, b, precision); + bool bret = zernum(rattmp->pp); + destroyrat(rattmp); + return (bret); } //--------------------------------------------------------------------------- @@ -342,20 +351,19 @@ bool rat_equ( PRAT a, PRAT b, int32_t precision) // //--------------------------------------------------------------------------- -bool rat_ge( PRAT a, PRAT b, int32_t precision) +bool rat_ge(PRAT a, PRAT b, int32_t precision) { - PRAT rattmp= nullptr; - DUPRAT(rattmp,a); + PRAT rattmp = nullptr; + DUPRAT(rattmp, a); b->pp->sign *= -1; - addrat( &rattmp, b, precision); + addrat(&rattmp, b, precision); b->pp->sign *= -1; - bool bret = ( zernum( rattmp->pp ) || SIGN(rattmp) == 1 ); - destroyrat( rattmp ); - return( bret ); + bool bret = (zernum(rattmp->pp) || SIGN(rattmp) == 1); + destroyrat(rattmp); + return (bret); } - //--------------------------------------------------------------------------- // // FUNCTION: rat_gt @@ -367,17 +375,17 @@ bool rat_ge( PRAT a, PRAT b, int32_t precision) // //--------------------------------------------------------------------------- -bool rat_gt( PRAT a, PRAT b, int32_t precision) +bool rat_gt(PRAT a, PRAT b, int32_t precision) { - PRAT rattmp= nullptr; - DUPRAT(rattmp,a); + PRAT rattmp = nullptr; + DUPRAT(rattmp, a); b->pp->sign *= -1; - addrat( &rattmp, b, precision); + addrat(&rattmp, b, precision); b->pp->sign *= -1; - bool bret = ( !zernum( rattmp->pp ) && SIGN(rattmp) == 1 ); - destroyrat( rattmp ); - return( bret ); + bool bret = (!zernum(rattmp->pp) && SIGN(rattmp) == 1); + destroyrat(rattmp); + return (bret); } //--------------------------------------------------------------------------- @@ -391,21 +399,19 @@ bool rat_gt( PRAT a, PRAT b, int32_t precision) // //--------------------------------------------------------------------------- -bool rat_le( PRAT a, PRAT b, int32_t precision) +bool rat_le(PRAT a, PRAT b, int32_t precision) { - - PRAT rattmp= nullptr; - DUPRAT(rattmp,a); + PRAT rattmp = nullptr; + DUPRAT(rattmp, a); b->pp->sign *= -1; - addrat( &rattmp, b, precision); + addrat(&rattmp, b, precision); b->pp->sign *= -1; - bool bret = ( zernum( rattmp->pp ) || SIGN(rattmp) == -1 ); - destroyrat( rattmp ); - return( bret ); + bool bret = (zernum(rattmp->pp) || SIGN(rattmp) == -1); + destroyrat(rattmp); + return (bret); } - //--------------------------------------------------------------------------- // // FUNCTION: rat_lt @@ -417,20 +423,19 @@ bool rat_le( PRAT a, PRAT b, int32_t precision) // //--------------------------------------------------------------------------- -bool rat_lt( PRAT a, PRAT b, int32_t precision) +bool rat_lt(PRAT a, PRAT b, int32_t precision) { - PRAT rattmp= nullptr; - DUPRAT(rattmp,a); + PRAT rattmp = nullptr; + DUPRAT(rattmp, a); b->pp->sign *= -1; - addrat( &rattmp, b, precision); + addrat(&rattmp, b, precision); b->pp->sign *= -1; - bool bret = ( !zernum( rattmp->pp ) && SIGN(rattmp) == -1 ); - destroyrat( rattmp ); - return( bret ); + bool bret = (!zernum(rattmp->pp) && SIGN(rattmp) == -1); + destroyrat(rattmp); + return (bret); } - //--------------------------------------------------------------------------- // // FUNCTION: rat_neq @@ -442,17 +447,16 @@ bool rat_lt( PRAT a, PRAT b, int32_t precision) // //--------------------------------------------------------------------------- - -bool rat_neq( PRAT a, PRAT b, int32_t precision) +bool rat_neq(PRAT a, PRAT b, int32_t precision) { - PRAT rattmp= nullptr; - DUPRAT(rattmp,a); + PRAT rattmp = nullptr; + DUPRAT(rattmp, a); rattmp->pp->sign *= -1; - addrat( &rattmp, b, precision); - bool bret = !( zernum( rattmp->pp ) ); - destroyrat( rattmp ); - return( bret ); + addrat(&rattmp, b, precision); + bool bret = !(zernum(rattmp->pp)); + destroyrat(rattmp); + return (bret); } //--------------------------------------------------------------------------- @@ -466,27 +470,26 @@ bool rat_neq( PRAT a, PRAT b, int32_t precision) // //--------------------------------------------------------------------------- -void scale( PRAT *px, PRAT scalefact, uint32_t radix, int32_t precision ) +void scale(PRAT* px, PRAT scalefact, uint32_t radix, int32_t precision) { PRAT pret = nullptr; - DUPRAT(pret,*px); + DUPRAT(pret, *px); // Logscale is a quick way to tell how much extra precision is needed for // scaling by scalefact. - int32_t logscale = g_ratio * ( (pret->pp->cdigit+pret->pp->exp) - - (pret->pq->cdigit+pret->pq->exp) ); - if ( logscale > 0 ) + int32_t logscale = g_ratio * ((pret->pp->cdigit + pret->pp->exp) - (pret->pq->cdigit + pret->pq->exp)); + if (logscale > 0) { precision += logscale; } - divrat( &pret, scalefact, precision); + divrat(&pret, scalefact, precision); intrat(&pret, radix, precision); - mulrat( &pret, scalefact, precision); + mulrat(&pret, scalefact, precision); pret->pp->sign *= -1; - addrat( px, pret, precision); + addrat(px, pret, precision); - destroyrat( pret ); + destroyrat(pret); } //--------------------------------------------------------------------------- @@ -500,38 +503,37 @@ void scale( PRAT *px, PRAT scalefact, uint32_t radix, int32_t precision ) // //--------------------------------------------------------------------------- -void scale2pi( PRAT *px, uint32_t radix, int32_t precision ) +void scale2pi(PRAT* px, uint32_t radix, int32_t precision) { PRAT pret = nullptr; PRAT my_two_pi = nullptr; - DUPRAT(pret,*px); + DUPRAT(pret, *px); // Logscale is a quick way to tell how much extra precision is needed for // scaling by 2 pi. - int32_t logscale = g_ratio * ( (pret->pp->cdigit+pret->pp->exp) - - (pret->pq->cdigit+pret->pq->exp) ); - if ( logscale > 0 ) + int32_t logscale = g_ratio * ((pret->pp->cdigit + pret->pp->exp) - (pret->pq->cdigit + pret->pq->exp)); + if (logscale > 0) { precision += logscale; - DUPRAT(my_two_pi,rat_half); - asinrat( &my_two_pi, radix, precision); - mulrat( &my_two_pi, rat_six, precision); - mulrat( &my_two_pi, rat_two, precision); + DUPRAT(my_two_pi, rat_half); + asinrat(&my_two_pi, radix, precision); + mulrat(&my_two_pi, rat_six, precision); + mulrat(&my_two_pi, rat_two, precision); } else { - DUPRAT(my_two_pi,two_pi); + DUPRAT(my_two_pi, two_pi); logscale = 0; } - divrat( &pret, my_two_pi, precision); + divrat(&pret, my_two_pi, precision); intrat(&pret, radix, precision); - mulrat( &pret, my_two_pi, precision); + mulrat(&pret, my_two_pi, precision); pret->pp->sign *= -1; - addrat( px, pret, precision); + addrat(px, pret, precision); - destroyrat( my_two_pi ); - destroyrat( pret ); + destroyrat(my_two_pi); + destroyrat(pret); } //--------------------------------------------------------------------------- @@ -544,22 +546,22 @@ void scale2pi( PRAT *px, uint32_t radix, int32_t precision ) // //--------------------------------------------------------------------------- -void inbetween( PRAT *px, PRAT range, int32_t precision) +void inbetween(PRAT* px, PRAT range, int32_t precision) { - if ( rat_gt(*px,range, precision) ) - { - DUPRAT(*px,range); - } + if (rat_gt(*px, range, precision)) + { + DUPRAT(*px, range); + } else + { + range->pp->sign *= -1; + if (rat_lt(*px, range, precision)) { - range->pp->sign *= -1; - if ( rat_lt(*px, range, precision) ) - { - DUPRAT(*px,range); - } - range->pp->sign *= -1; + DUPRAT(*px, range); } + range->pp->sign *= -1; + } } //--------------------------------------------------------------------------- @@ -573,11 +575,11 @@ void inbetween( PRAT *px, PRAT range, int32_t precision) // //--------------------------------------------------------------------------- -void _dumprawrat( const wchar_t *varname, PRAT rat, wostream& out) +void _dumprawrat(const wchar_t* varname, PRAT rat, wostream& out) { - _dumprawnum(varname, rat->pp, out ); - _dumprawnum(varname, rat->pq, out ); + _dumprawnum(varname, rat->pp, out); + _dumprawnum(varname, rat->pq, out); } //--------------------------------------------------------------------------- @@ -591,26 +593,26 @@ void _dumprawrat( const wchar_t *varname, PRAT rat, wostream& out) // //--------------------------------------------------------------------------- -void _dumprawnum(const wchar_t *varname, PNUMBER num, wostream& out) +void _dumprawnum(const wchar_t* varname, PNUMBER num, wostream& out) { int i; out << L"NUMBER " << varname << L" = {\n"; - out << L"\t"<< num->sign << L",\n"; + out << L"\t" << num->sign << L",\n"; out << L"\t" << num->cdigit << L",\n"; out << L"\t" << num->exp << L",\n"; out << L"\t{ "; - for ( i = 0; i < num->cdigit; i++ ) - { - out << L" "<< num->mant[i] << L","; - } + for (i = 0; i < num->cdigit; i++) + { + out << L" " << num->mant[i] << L","; + } out << L"}\n"; out << L"};\n"; } -void _readconstants( void ) +void _readconstants(void) { READRAWNUM(num_one); @@ -674,43 +676,43 @@ void _readconstants( void ) // //--------------------------------------------------------------------------- -void trimit( PRAT *px, int32_t precision) +void trimit(PRAT* px, int32_t precision) { - if ( !g_ftrueinfinite ) - { + if (!g_ftrueinfinite) + { int32_t trim; - PNUMBER pp=(*px)->pp; - PNUMBER pq=(*px)->pq; - trim = g_ratio * (min((pp->cdigit+pp->exp),(pq->cdigit+pq->exp))-1) - precision; - if ( trim > g_ratio ) - { + PNUMBER pp = (*px)->pp; + PNUMBER pq = (*px)->pq; + trim = g_ratio * (min((pp->cdigit + pp->exp), (pq->cdigit + pq->exp)) - 1) - precision; + if (trim > g_ratio) + { trim /= g_ratio; - if ( trim <= pp->exp ) - { + if (trim <= pp->exp) + { pp->exp -= trim; - } - else - { - memmove( pp->mant, &(pp->mant[trim-pp->exp]), sizeof(MANTTYPE)*(pp->cdigit-trim+pp->exp) ); - pp->cdigit -= trim-pp->exp; - pp->exp = 0; - } - - if ( trim <= pq->exp ) - { - pq->exp -= trim; - } - else - { - memmove( pq->mant, &(pq->mant[trim-pq->exp]), sizeof(MANTTYPE)*(pq->cdigit-trim+pq->exp) ); - pq->cdigit -= trim-pq->exp; - pq->exp = 0; - } } - trim = min(pp->exp,pq->exp); + else + { + memmove(pp->mant, &(pp->mant[trim - pp->exp]), sizeof(MANTTYPE) * (pp->cdigit - trim + pp->exp)); + pp->cdigit -= trim - pp->exp; + pp->exp = 0; + } + + if (trim <= pq->exp) + { + pq->exp -= trim; + } + else + { + memmove(pq->mant, &(pq->mant[trim - pq->exp]), sizeof(MANTTYPE) * (pq->cdigit - trim + pq->exp)); + pq->cdigit -= trim - pq->exp; + pq->exp = 0; + } + } + trim = min(pp->exp, pq->exp); pp->exp -= trim; pq->exp -= trim; - } + } } diff --git a/src/CalcManager/Ratpack/trans.cpp b/src/CalcManager/Ratpack/trans.cpp index 3706d44d..30104abb 100644 --- a/src/CalcManager/Ratpack/trans.cpp +++ b/src/CalcManager/Ratpack/trans.cpp @@ -16,25 +16,22 @@ #include "ratpak.h" - - -void scalerat( _Inout_ PRAT *pa, ANGLE_TYPE angletype, uint32_t radix, int32_t precision ) +void scalerat(_Inout_ PRAT* pa, ANGLE_TYPE angletype, uint32_t radix, int32_t precision) { - switch ( angletype ) + switch (angletype) { case ANGLE_RAD: - scale2pi( pa, radix, precision); + scale2pi(pa, radix, precision); break; case ANGLE_DEG: - scale( pa, rat_360, radix, precision); + scale(pa, rat_360, radix, precision); break; case ANGLE_GRAD: - scale( pa, rat_400, radix, precision); + scale(pa, rat_400, radix, precision); break; } } - //----------------------------------------------------------------------------- // // FUNCTION: sinrat, _sinrat @@ -66,21 +63,21 @@ void scalerat( _Inout_ PRAT *pa, ANGLE_TYPE angletype, uint32_t radix, int32_t p // //----------------------------------------------------------------------------- - -void _sinrat( PRAT *px, int32_t precision) +void _sinrat(PRAT* px, int32_t precision) { CREATETAYLOR(); - DUPRAT(pret,*px); - DUPRAT(thisterm,*px); + DUPRAT(pret, *px); + DUPRAT(thisterm, *px); - DUPNUM(n2,num_one); + DUPNUM(n2, num_one); xx->pp->sign *= -1; - do { - NEXTTERM(xx,INC(n2) DIVNUM(n2) INC(n2) DIVNUM(n2), precision); - } while ( !SMALL_ENOUGH_RAT( thisterm, precision) ); + do + { + NEXTTERM(xx, INC(n2) DIVNUM(n2) INC(n2) DIVNUM(n2), precision); + } while (!SMALL_ENOUGH_RAT(thisterm, precision)); DESTROYTAYLOR(); @@ -89,42 +86,42 @@ void _sinrat( PRAT *px, int32_t precision) inbetween(px, rat_one, precision); // Since *px might be epsilon near zero we must set it to zero. - if ( rat_le(*px, rat_smallest, precision) && rat_ge(*px, rat_negsmallest, precision) ) - { - DUPRAT(*px,rat_zero); - } + if (rat_le(*px, rat_smallest, precision) && rat_ge(*px, rat_negsmallest, precision)) + { + DUPRAT(*px, rat_zero); + } } -void sinrat( PRAT *px, uint32_t radix, int32_t precision) +void sinrat(PRAT* px, uint32_t radix, int32_t precision) { scale2pi(px, radix, precision); _sinrat(px, precision); } -void sinanglerat( _Inout_ PRAT *pa, ANGLE_TYPE angletype, uint32_t radix, int32_t precision) +void sinanglerat(_Inout_ PRAT* pa, ANGLE_TYPE angletype, uint32_t radix, int32_t precision) { - scalerat( pa, angletype, radix, precision); - switch ( angletype ) - { + scalerat(pa, angletype, radix, precision); + switch (angletype) + { case ANGLE_DEG: - if ( rat_gt( *pa, rat_180, precision) ) - { + if (rat_gt(*pa, rat_180, precision)) + { subrat(pa, rat_360, precision); - } - divrat( pa, rat_180, precision); - mulrat( pa, pi, precision); + } + divrat(pa, rat_180, precision); + mulrat(pa, pi, precision); break; case ANGLE_GRAD: - if ( rat_gt( *pa, rat_200, precision) ) - { - subrat(pa,rat_400, precision); - } - divrat( pa, rat_200, precision); - mulrat( pa, pi, precision); - break; + if (rat_gt(*pa, rat_200, precision)) + { + subrat(pa, rat_400, precision); } - _sinrat( pa, precision); + divrat(pa, rat_200, precision); + mulrat(pa, pi, precision); + break; + } + _sinrat(pa, precision); } //----------------------------------------------------------------------------- @@ -158,8 +155,7 @@ void sinanglerat( _Inout_ PRAT *pa, ANGLE_TYPE angletype, uint32_t radix, int32_ // //----------------------------------------------------------------------------- - -void _cosrat( PRAT *px, uint32_t radix, int32_t precision) +void _cosrat(PRAT* px, uint32_t radix, int32_t precision) { CREATETAYLOR(); @@ -167,67 +163,68 @@ void _cosrat( PRAT *px, uint32_t radix, int32_t precision) destroynum(pret->pp); destroynum(pret->pq); - pret->pp=i32tonum( 1L, radix); - pret->pq=i32tonum( 1L, radix); + pret->pp = i32tonum(1L, radix); + pret->pq = i32tonum(1L, radix); - DUPRAT(thisterm,pret) + DUPRAT(thisterm, pret) - n2=i32tonum(0L, radix); + n2 = i32tonum(0L, radix); xx->pp->sign *= -1; - do { - NEXTTERM(xx,INC(n2) DIVNUM(n2) INC(n2) DIVNUM(n2), precision); - } while ( !SMALL_ENOUGH_RAT( thisterm, precision) ); + do + { + NEXTTERM(xx, INC(n2) DIVNUM(n2) INC(n2) DIVNUM(n2), precision); + } while (!SMALL_ENOUGH_RAT(thisterm, precision)); DESTROYTAYLOR(); // Since *px might be epsilon above 1 or below -1, due to TRIMIT we need // this trick here. inbetween(px, rat_one, precision); // Since *px might be epsilon near zero we must set it to zero. - if ( rat_le(*px, rat_smallest, precision) && rat_ge(*px, rat_negsmallest, precision) ) - { - DUPRAT(*px,rat_zero); - } + if (rat_le(*px, rat_smallest, precision) && rat_ge(*px, rat_negsmallest, precision)) + { + DUPRAT(*px, rat_zero); + } } -void cosrat( PRAT *px, uint32_t radix, int32_t precision) +void cosrat(PRAT* px, uint32_t radix, int32_t precision) { scale2pi(px, radix, precision); _cosrat(px, radix, precision); } -void cosanglerat( _Inout_ PRAT *pa, ANGLE_TYPE angletype, uint32_t radix, int32_t precision) +void cosanglerat(_Inout_ PRAT* pa, ANGLE_TYPE angletype, uint32_t radix, int32_t precision) { - scalerat( pa, angletype, radix, precision); - switch ( angletype ) - { + scalerat(pa, angletype, radix, precision); + switch (angletype) + { case ANGLE_DEG: - if ( rat_gt( *pa, rat_180, precision) ) - { - PRAT ptmp= nullptr; - DUPRAT(ptmp,rat_360); + if (rat_gt(*pa, rat_180, precision)) + { + PRAT ptmp = nullptr; + DUPRAT(ptmp, rat_360); subrat(&ptmp, *pa, precision); destroyrat(*pa); - *pa=ptmp; - } - divrat( pa, rat_180, precision); - mulrat( pa, pi, precision); + *pa = ptmp; + } + divrat(pa, rat_180, precision); + mulrat(pa, pi, precision); break; case ANGLE_GRAD: - if ( rat_gt( *pa, rat_200, precision) ) - { - PRAT ptmp= nullptr; - DUPRAT(ptmp,rat_400); + if (rat_gt(*pa, rat_200, precision)) + { + PRAT ptmp = nullptr; + DUPRAT(ptmp, rat_400); subrat(&ptmp, *pa, precision); destroyrat(*pa); - *pa=ptmp; - } - divrat( pa, rat_200, precision); - mulrat( pa, pi, precision); - break; + *pa = ptmp; } - _cosrat( pa, radix, precision); + divrat(pa, rat_200, precision); + mulrat(pa, pi, precision); + break; + } + _cosrat(pa, radix, precision); } //----------------------------------------------------------------------------- @@ -242,55 +239,52 @@ void cosanglerat( _Inout_ PRAT *pa, ANGLE_TYPE angletype, uint32_t radix, int32_ // //----------------------------------------------------------------------------- - -void _tanrat( PRAT *px, uint32_t radix, int32_t precision) +void _tanrat(PRAT* px, uint32_t radix, int32_t precision) { - PRAT ptmp= nullptr; + PRAT ptmp = nullptr; - DUPRAT(ptmp,*px); + DUPRAT(ptmp, *px); _sinrat(px, precision); _cosrat(&ptmp, radix, precision); - if ( zerrat( ptmp ) ) - { + if (zerrat(ptmp)) + { destroyrat(ptmp); - throw( CALC_E_DOMAIN ); - } + throw(CALC_E_DOMAIN); + } divrat(px, ptmp, precision); destroyrat(ptmp); - } -void tanrat( PRAT *px, uint32_t radix, int32_t precision) +void tanrat(PRAT* px, uint32_t radix, int32_t precision) { scale2pi(px, radix, precision); _tanrat(px, radix, precision); } -void tananglerat( _Inout_ PRAT *pa, ANGLE_TYPE angletype, uint32_t radix, int32_t precision) +void tananglerat(_Inout_ PRAT* pa, ANGLE_TYPE angletype, uint32_t radix, int32_t precision) { - scalerat( pa, angletype, radix, precision); - switch ( angletype ) - { + scalerat(pa, angletype, radix, precision); + switch (angletype) + { case ANGLE_DEG: - if ( rat_gt( *pa, rat_180, precision) ) - { + if (rat_gt(*pa, rat_180, precision)) + { subrat(pa, rat_180, precision); - } - divrat( pa, rat_180, precision); - mulrat( pa, pi, precision); + } + divrat(pa, rat_180, precision); + mulrat(pa, pi, precision); break; case ANGLE_GRAD: - if ( rat_gt( *pa, rat_200, precision) ) - { + if (rat_gt(*pa, rat_200, precision)) + { subrat(pa, rat_200, precision); - } - divrat( pa, rat_200, precision); - mulrat( pa, pi, precision); - break; } - _tanrat( pa, radix, precision); + divrat(pa, rat_200, precision); + mulrat(pa, pi, precision); + break; + } + _tanrat(pa, radix, precision); } - diff --git a/src/CalcManager/Ratpack/transh.cpp b/src/CalcManager/Ratpack/transh.cpp index 85c27f8b..006db769 100644 --- a/src/CalcManager/Ratpack/transh.cpp +++ b/src/CalcManager/Ratpack/transh.cpp @@ -16,22 +16,19 @@ //----------------------------------------------------------------------------- #include "ratpak.h" - - bool IsValidForHypFunc(PRAT px, int32_t precision) { PRAT ptmp = nullptr; bool bRet = true; - DUPRAT(ptmp,rat_min_exp); + DUPRAT(ptmp, rat_min_exp); divrat(&ptmp, rat_ten, precision); - if ( rat_lt( px, ptmp, precision) ) + if (rat_lt(px, ptmp, precision)) { bRet = false; } - destroyrat( ptmp ); + destroyrat(ptmp); return bRet; - } //----------------------------------------------------------------------------- @@ -67,49 +64,49 @@ bool IsValidForHypFunc(PRAT px, int32_t precision) // //----------------------------------------------------------------------------- - -void _sinhrat( PRAT *px, int32_t precision) +void _sinhrat(PRAT* px, int32_t precision) { - if ( !IsValidForHypFunc(*px, precision)) - { + if (!IsValidForHypFunc(*px, precision)) + { // Don't attempt exp of anything large or small - throw( CALC_E_DOMAIN ); - } + throw(CALC_E_DOMAIN); + } CREATETAYLOR(); - DUPRAT(pret,*px); - DUPRAT(thisterm,pret); + DUPRAT(pret, *px); + DUPRAT(thisterm, pret); - DUPNUM(n2,num_one); + DUPNUM(n2, num_one); - do { - NEXTTERM(xx,INC(n2) DIVNUM(n2) INC(n2) DIVNUM(n2), precision); - } while ( !SMALL_ENOUGH_RAT( thisterm, precision) ); + do + { + NEXTTERM(xx, INC(n2) DIVNUM(n2) INC(n2) DIVNUM(n2), precision); + } while (!SMALL_ENOUGH_RAT(thisterm, precision)); DESTROYTAYLOR(); } -void sinhrat( PRAT *px, uint32_t radix, int32_t precision) +void sinhrat(PRAT* px, uint32_t radix, int32_t precision) { - PRAT tmpx= nullptr; + PRAT tmpx = nullptr; - if ( rat_ge( *px, rat_one, precision) ) - { - DUPRAT(tmpx,*px); + if (rat_ge(*px, rat_one, precision)) + { + DUPRAT(tmpx, *px); exprat(px, radix, precision); tmpx->pp->sign *= -1; exprat(&tmpx, radix, precision); - subrat( px, tmpx, precision); - divrat( px, rat_two, precision); - destroyrat( tmpx ); - } + subrat(px, tmpx, precision); + divrat(px, rat_two, precision); + destroyrat(tmpx); + } else - { - _sinhrat( px, precision); - } + { + _sinhrat(px, precision); + } } //----------------------------------------------------------------------------- @@ -146,59 +143,59 @@ void sinhrat( PRAT *px, uint32_t radix, int32_t precision) // //----------------------------------------------------------------------------- - -void _coshrat( PRAT *px, uint32_t radix, int32_t precision) +void _coshrat(PRAT* px, uint32_t radix, int32_t precision) { - if ( !IsValidForHypFunc(*px, precision)) - { + if (!IsValidForHypFunc(*px, precision)) + { // Don't attempt exp of anything large or small - throw( CALC_E_DOMAIN ); - } + throw(CALC_E_DOMAIN); + } CREATETAYLOR(); - pret->pp=i32tonum( 1L, radix); - pret->pq=i32tonum( 1L, radix); + pret->pp = i32tonum(1L, radix); + pret->pq = i32tonum(1L, radix); - DUPRAT(thisterm,pret) + DUPRAT(thisterm, pret) - n2=i32tonum(0L, radix); + n2 = i32tonum(0L, radix); - do { - NEXTTERM(xx,INC(n2) DIVNUM(n2) INC(n2) DIVNUM(n2), precision); - } while ( !SMALL_ENOUGH_RAT( thisterm, precision) ); + do + { + NEXTTERM(xx, INC(n2) DIVNUM(n2) INC(n2) DIVNUM(n2), precision); + } while (!SMALL_ENOUGH_RAT(thisterm, precision)); DESTROYTAYLOR(); } -void coshrat( PRAT *px, uint32_t radix, int32_t precision) +void coshrat(PRAT* px, uint32_t radix, int32_t precision) { - PRAT tmpx= nullptr; + PRAT tmpx = nullptr; (*px)->pp->sign = 1; (*px)->pq->sign = 1; - if ( rat_ge( *px, rat_one, precision) ) - { - DUPRAT(tmpx,*px); + if (rat_ge(*px, rat_one, precision)) + { + DUPRAT(tmpx, *px); exprat(px, radix, precision); tmpx->pp->sign *= -1; exprat(&tmpx, radix, precision); - addrat( px, tmpx, precision); - divrat( px, rat_two, precision); - destroyrat( tmpx ); - } + addrat(px, tmpx, precision); + divrat(px, rat_two, precision); + destroyrat(tmpx); + } else - { - _coshrat( px, radix, precision); - } + { + _coshrat(px, radix, precision); + } // Since *px might be epsilon below 1 due to TRIMIT // we need this trick here. - if ( rat_lt(*px, rat_one, precision) ) - { - DUPRAT(*px,rat_one); - } + if (rat_lt(*px, rat_one, precision)) + { + DUPRAT(*px, rat_one); + } } //----------------------------------------------------------------------------- @@ -214,17 +211,16 @@ void coshrat( PRAT *px, uint32_t radix, int32_t precision) // //----------------------------------------------------------------------------- -void tanhrat( PRAT *px, uint32_t radix, int32_t precision) +void tanhrat(PRAT* px, uint32_t radix, int32_t precision) { - PRAT ptmp= nullptr; + PRAT ptmp = nullptr; - DUPRAT(ptmp,*px); + DUPRAT(ptmp, *px); sinhrat(px, radix, precision); coshrat(&ptmp, radix, precision); - mulnumx(&((*px)->pp),ptmp->pq); - mulnumx(&((*px)->pq),ptmp->pp); + mulnumx(&((*px)->pp), ptmp->pq); + mulnumx(&((*px)->pq), ptmp->pp); destroyrat(ptmp); - } diff --git a/src/CalcManager/UnitConverter.cpp b/src/CalcManager/UnitConverter.cpp index 7bfc4817..6c59ae97 100644 --- a/src/CalcManager/UnitConverter.cpp +++ b/src/CalcManager/UnitConverter.cpp @@ -34,8 +34,7 @@ unordered_map unquoteConversions; /// Constructor, sets up all the variables and requires a configLoader /// /// An instance of the IConverterDataLoader interface which we use to read in category/unit names and conversion data -UnitConverter::UnitConverter(_In_ const shared_ptr& dataLoader) : - UnitConverter::UnitConverter(dataLoader, nullptr) +UnitConverter::UnitConverter(_In_ const shared_ptr& dataLoader) : UnitConverter::UnitConverter(dataLoader, nullptr) { } @@ -192,14 +191,14 @@ void UnitConverter::SwitchActive(const wstring& newValue) } } -wstring UnitConverter::CategoryToString(const Category& c, const wchar_t * delimiter) +wstring UnitConverter::CategoryToString(const Category& c, const wchar_t* delimiter) { wstringstream out(wstringstream::out); out << Quote(std::to_wstring(c.id)) << delimiter << Quote(std::to_wstring(c.supportsNegative)) << delimiter << Quote(c.name) << delimiter; return out.str(); } -vector UnitConverter::StringToVector(const wstring& w, const wchar_t * delimiter, bool addRemainder) +vector UnitConverter::StringToVector(const wstring& w, const wchar_t* delimiter, bool addRemainder) { size_t delimiterIndex = w.find(delimiter); size_t startIndex = 0; @@ -229,10 +228,12 @@ Category UnitConverter::StringToCategory(const wstring& w) return serializedCategory; } -wstring UnitConverter::UnitToString(const Unit& u, const wchar_t * delimiter) +wstring UnitConverter::UnitToString(const Unit& u, const wchar_t* delimiter) { wstringstream out(wstringstream::out); - out << Quote(std::to_wstring(u.id)) << delimiter << Quote(u.name) << delimiter << Quote(u.abbreviation) << delimiter << std::to_wstring(u.isConversionSource) << delimiter << std::to_wstring(u.isConversionTarget) << delimiter << std::to_wstring(u.isWhimsical) << delimiter; + out << Quote(std::to_wstring(u.id)) << delimiter << Quote(u.name) << delimiter << Quote(u.abbreviation) << delimiter + << std::to_wstring(u.isConversionSource) << delimiter << std::to_wstring(u.isConversionTarget) << delimiter << std::to_wstring(u.isWhimsical) + << delimiter; return out.str(); } @@ -262,7 +263,7 @@ ConversionData UnitConverter::StringToConversionData(const wstring& w) return serializedConversionData; } -wstring UnitConverter::ConversionDataToString(ConversionData d, const wchar_t * delimiter) +wstring UnitConverter::ConversionDataToString(ConversionData d, const wchar_t* delimiter) { wstringstream out(wstringstream::out); out.precision(32); @@ -289,12 +290,13 @@ wstring UnitConverter::Serialize() } wstringstream out(wstringstream::out); - const wchar_t * delimiter = L";"; + const wchar_t* delimiter = L";"; out << UnitToString(m_fromType, delimiter) << "|"; out << UnitToString(m_toType, delimiter) << "|"; out << CategoryToString(m_currentCategory, delimiter) << "|"; - out << std::to_wstring(m_currentHasDecimal) << delimiter << std::to_wstring(m_returnHasDecimal) << delimiter << std::to_wstring(m_switchedActive) << delimiter; + out << std::to_wstring(m_currentHasDecimal) << delimiter << std::to_wstring(m_returnHasDecimal) << delimiter << std::to_wstring(m_switchedActive) + << delimiter; out << m_currentDisplay << delimiter << m_returnDisplay << delimiter << "|"; wstringstream categoryString(wstringstream::out); wstringstream categoryToUnitString(wstringstream::out); @@ -311,7 +313,8 @@ wstring UnitConverter::Serialize() { categoryToUnitString << UnitToString(u, delimiter) << ","; } - categoryToUnitString << "[" << "]"; + categoryToUnitString << "[" + << "]"; } for (const auto& cur : m_ratioMap) @@ -322,7 +325,8 @@ wstring UnitConverter::Serialize() unitToUnitToDoubleString << UnitToString(curConversion.first, delimiter) << ":"; unitToUnitToDoubleString << ConversionDataToString(curConversion.second, delimiter) << ":,"; } - unitToUnitToDoubleString << "[" << "]"; + unitToUnitToDoubleString << "[" + << "]"; } out << categoryString.str() << "|"; @@ -429,7 +433,6 @@ void UnitConverter::RestoreUserPreferences(const wstring& userPreferences) m_toType = toType; } } - } /// @@ -438,7 +441,7 @@ void UnitConverter::RestoreUserPreferences(const wstring& userPreferences) wstring UnitConverter::SaveUserPreferences() { wstringstream out(wstringstream::out); - const wchar_t * delimiter = L";"; + const wchar_t* delimiter = L";"; out << UnitToString(m_fromType, delimiter) << "|"; out << UnitToString(m_toType, delimiter) << "|"; @@ -457,7 +460,7 @@ wstring UnitConverter::Quote(const wstring& s) // Iterate over the delimiter characters we need to quote wstring::const_iterator cursor = s.begin(); - while(cursor != s.end()) + while (cursor != s.end()) { if (quoteConversions.find(*cursor) != quoteConversions.end()) { @@ -481,9 +484,9 @@ wstring UnitConverter::Unquote(const wstring& s) wstringstream quotedSubString(wstringstream::out); wstringstream unquotedString(wstringstream::out); wstring::const_iterator cursor = s.begin(); - while(cursor != s.end()) + while (cursor != s.end()) { - if(*cursor == LEFTESCAPECHAR) + if (*cursor == LEFTESCAPECHAR) { quotedSubString.str(L""); while (cursor != s.end() && *cursor != RIGHTESCAPECHAR) @@ -529,7 +532,8 @@ void UnitConverter::SendCommand(Command command) clearFront = true; } bool clearBack = false; - if ((m_currentHasDecimal && m_currentDisplay.size() - 1 >= MAXIMUMDIGITSALLOWED) || (!m_currentHasDecimal && m_currentDisplay.size() >= MAXIMUMDIGITSALLOWED)) + if ((m_currentHasDecimal && m_currentDisplay.size() - 1 >= MAXIMUMDIGITSALLOWED) + || (!m_currentHasDecimal && m_currentDisplay.size() >= MAXIMUMDIGITSALLOWED)) { clearBack = true; } @@ -643,7 +647,6 @@ void UnitConverter::SendCommand(Command command) break; } - if (clearFront) { m_currentDisplay.erase(0, 1); @@ -684,26 +687,27 @@ void UnitConverter::SetViewModelCurrencyCallback(_In_ const shared_ptr> UnitConverter::RefreshCurrencyRatios() { shared_ptr currencyDataLoader = GetCurrencyConverterDataLoader(); - return create_task([this, currencyDataLoader]() - { - if (currencyDataLoader != nullptr) - { - return currencyDataLoader->TryLoadDataFromWebOverrideAsync(); - } - else - { - return task_from_result(false); - } - }).then([this, currencyDataLoader](bool didLoad) - { - wstring timestamp = L""; - if (currencyDataLoader != nullptr) - { - timestamp = currencyDataLoader->GetCurrencyTimestamp(); - } + return create_task([this, currencyDataLoader]() { + if (currencyDataLoader != nullptr) + { + return currencyDataLoader->TryLoadDataFromWebOverrideAsync(); + } + else + { + return task_from_result(false); + } + }) + .then( + [this, currencyDataLoader](bool didLoad) { + wstring timestamp = L""; + if (currencyDataLoader != nullptr) + { + timestamp = currencyDataLoader->GetCurrencyTimestamp(); + } - return make_pair(didLoad, timestamp); - }, task_continuation_context::use_default()); + return make_pair(didLoad, timestamp); + }, + task_continuation_context::use_default()); } shared_ptr UnitConverter::GetCurrencyConverterDataLoader() @@ -752,7 +756,7 @@ vector> UnitConverter::CalculateSuggested() newEntry.magnitude = log10(convertedValue); newEntry.value = convertedValue; newEntry.type = cur.first; - if(newEntry.type.isWhimsical == false) + if (newEntry.type.isWhimsical == false) intermediateVector.push_back(newEntry); else intermediateWhimsicalVector.push_back(newEntry); @@ -760,9 +764,7 @@ vector> UnitConverter::CalculateSuggested() } // Sort the resulting list by absolute magnitude, breaking ties by choosing the positive value - sort(intermediateVector.begin(), intermediateVector.end(), [] - (SuggestedValueIntermediate first, SuggestedValueIntermediate second) - { + sort(intermediateVector.begin(), intermediateVector.end(), [](SuggestedValueIntermediate first, SuggestedValueIntermediate second) { if (abs(first.magnitude) == abs(second.magnitude)) { return first.magnitude > second.magnitude; @@ -783,7 +785,7 @@ vector> UnitConverter::CalculateSuggested() } else if (abs(entry.value) < 1000) { - roundedString = RoundSignificant(entry.value, 1); + roundedString = RoundSignificant(entry.value, 1); } else { @@ -798,9 +800,7 @@ vector> UnitConverter::CalculateSuggested() // The Whimsicals are determined differently // Sort the resulting list by absolute magnitude, breaking ties by choosing the positive value - sort(intermediateWhimsicalVector.begin(), intermediateWhimsicalVector.end(), [] - (SuggestedValueIntermediate first, SuggestedValueIntermediate second) - { + sort(intermediateWhimsicalVector.begin(), intermediateWhimsicalVector.end(), [](SuggestedValueIntermediate first, SuggestedValueIntermediate second) { if (abs(first.magnitude) == abs(second.magnitude)) { return first.magnitude > second.magnitude; @@ -922,7 +922,6 @@ shared_ptr UnitConverter::GetDataLoaderForCategory(const C /// void UnitConverter::InitializeSelectedUnits() { - if (m_categoryToUnits.empty()) { return; @@ -1057,7 +1056,7 @@ void UnitConverter::TrimString(wstring& returnString) } wstring::iterator iter; - for (iter = returnString.end() - 1; ;iter--) + for (iter = returnString.end() - 1;; iter--) { if (*iter != L'0') { @@ -1065,9 +1064,9 @@ void UnitConverter::TrimString(wstring& returnString) break; } } - if (*(returnString.end()-1) == L'.') + if (*(returnString.end() - 1) == L'.') { - returnString.erase(returnString.end()-1, returnString.end()); + returnString.erase(returnString.end() - 1, returnString.end()); } } diff --git a/src/CalcManager/UnitConverter.h b/src/CalcManager/UnitConverter.h index 4c77f8aa..87dc91dc 100644 --- a/src/CalcManager/UnitConverter.h +++ b/src/CalcManager/UnitConverter.h @@ -6,7 +6,7 @@ #include #include #include -#include // for SAL +#include // for SAL #include // for std::shared_ptr namespace UnitConversionManager @@ -15,13 +15,22 @@ namespace UnitConversionManager struct Unit { - Unit(){} + Unit() + { + } Unit(int id, std::wstring name, std::wstring abbreviation, bool isConversionSource, bool isConversionTarget, bool isWhimsical) - : id(id), name(name), accessibleName(name), abbreviation(abbreviation), isConversionSource(isConversionSource), isConversionTarget(isConversionTarget), isWhimsical(isWhimsical) + : id(id) + , name(name) + , accessibleName(name) + , abbreviation(abbreviation) + , isConversionSource(isConversionSource) + , isConversionTarget(isConversionTarget) + , isWhimsical(isWhimsical) { } - Unit(int id, std::wstring currencyName, std::wstring countryName, std::wstring abbreviation, bool isRtlLanguage, bool isConversionSource, bool isConversionTarget) + Unit(int id, std::wstring currencyName, std::wstring countryName, std::wstring abbreviation, bool isRtlLanguage, bool isConversionSource, + bool isConversionTarget) : id(id), abbreviation(abbreviation), isConversionSource(isConversionSource), isConversionTarget(isConversionTarget), isWhimsical(false) { std::wstring nameValue1 = isRtlLanguage ? currencyName : countryName; @@ -31,7 +40,9 @@ namespace UnitConversionManager accessibleName = nameValue1 + L" " + nameValue2; } - virtual ~Unit() {} + virtual ~Unit() + { + } int id; std::wstring name; @@ -41,12 +52,12 @@ namespace UnitConversionManager bool isConversionTarget; bool isWhimsical; - bool operator!= (const Unit& that) const + bool operator!=(const Unit& that) const { return that.id != id; } - bool operator== (const Unit& that) const + bool operator==(const Unit& that) const { return that.id == id; } @@ -61,7 +72,9 @@ namespace UnitConversionManager struct Category { - Category(){} + Category() + { + } Category(int id, std::wstring name, bool supportsNegative) : id(id), name(name), supportsNegative(supportsNegative) { @@ -71,12 +84,12 @@ namespace UnitConversionManager std::wstring name; bool supportsNegative; - bool operator!= (const Category& that) const + bool operator!=(const Category& that) const { return that.id != id; } - bool operator== (const Category& that) const + bool operator==(const Category& that) const { return that.id == id; } @@ -85,7 +98,8 @@ namespace UnitConversionManager class UnitHash { public: - size_t operator() (const Unit & x) const { + size_t operator()(const Unit& x) const + { return x.id; } }; @@ -93,7 +107,8 @@ namespace UnitConversionManager class CategoryHash { public: - size_t operator() (const Category & x) const { + size_t operator()(const Category& x) const + { return x.id; } }; @@ -107,12 +122,16 @@ namespace UnitConversionManager struct ConversionData { - ConversionData(){} + ConversionData() + { + } ConversionData(double ratio, double offset, bool offsetFirst) : ratio(ratio), offset(offset), offsetFirst(offsetFirst) { } - virtual ~ConversionData() {} + virtual ~ConversionData() + { + } double ratio; double offset; @@ -136,13 +155,17 @@ namespace UnitConversionManager }; typedef std::tuple, UnitConversionManager::Unit, UnitConversionManager::Unit> CategorySelectionInitializer; - typedef std::unordered_map, UnitConversionManager::UnitHash> UnitToUnitToConversionDataMap; - typedef std::unordered_map, UnitConversionManager::CategoryHash> CategoryToUnitVectorMap; + typedef std::unordered_map, + UnitConversionManager::UnitHash> + UnitToUnitToConversionDataMap; + typedef std::unordered_map, UnitConversionManager::CategoryHash> + CategoryToUnitVectorMap; class IViewModelCurrencyCallback { public: - virtual ~IViewModelCurrencyCallback() { }; + virtual ~IViewModelCurrencyCallback(){}; virtual void CurrencyDataLoadFinished(bool didLoad) = 0; virtual void CurrencySymbolsCallback(_In_ const std::wstring& fromSymbol, _In_ const std::wstring& toSymbol) = 0; virtual void CurrencyRatiosCallback(_In_ const std::wstring& ratioEquality, _In_ const std::wstring& accRatioEquality) = 0; @@ -153,8 +176,8 @@ namespace UnitConversionManager class IConverterDataLoader { public: - virtual ~IConverterDataLoader() { }; - virtual void LoadData() = 0; // prepare data if necessary before calling other functions + virtual ~IConverterDataLoader(){}; + virtual void LoadData() = 0; // prepare data if necessary before calling other functions virtual std::vector LoadOrderedCategories() = 0; virtual std::vector LoadOrderedUnits(const Category& c) = 0; virtual std::unordered_map LoadOrderedRatios(const Unit& u) = 0; @@ -165,8 +188,10 @@ namespace UnitConversionManager { public: virtual void SetViewModelCallback(const std::shared_ptr& callback) = 0; - virtual std::pair GetCurrencySymbols(_In_ const UnitConversionManager::Unit& unit1, _In_ const UnitConversionManager::Unit& unit2) = 0; - virtual std::pair GetCurrencyRatioEquality(_In_ const UnitConversionManager::Unit& unit1, _In_ const UnitConversionManager::Unit& unit2) = 0; + virtual std::pair GetCurrencySymbols(_In_ const UnitConversionManager::Unit& unit1, + _In_ const UnitConversionManager::Unit& unit2) = 0; + virtual std::pair GetCurrencyRatioEquality(_In_ const UnitConversionManager::Unit& unit1, + _In_ const UnitConversionManager::Unit& unit2) = 0; virtual std::wstring GetCurrencyTimestamp() = 0; virtual concurrency::task TryLoadDataFromCacheAsync() = 0; @@ -177,7 +202,7 @@ namespace UnitConversionManager class IUnitConverterVMCallback { public: - virtual ~IUnitConverterVMCallback() { }; + virtual ~IUnitConverterVMCallback(){}; virtual void DisplayCallback(const std::wstring& from, const std::wstring& to) = 0; virtual void SuggestedValueCallback(const std::vector>& suggestedValues) = 0; virtual void MaxDigitsReached() = 0; @@ -186,8 +211,10 @@ namespace UnitConversionManager class IUnitConverter { public: - virtual ~IUnitConverter() { } - virtual void Initialize() = 0; // Use to initialize first time, use deserialize instead to rehydrate + virtual ~IUnitConverter() + { + } + virtual void Initialize() = 0; // Use to initialize first time, use deserialize instead to rehydrate virtual std::vector GetCategories() = 0; virtual CategorySelectionInitializer SetCurrentCategory(const Category& input) = 0; virtual Category GetCurrentCategory() = 0; @@ -230,7 +257,7 @@ namespace UnitConversionManager void ResetCategoriesAndRatios() override; // IUnitConverter - static std::vector StringToVector(const std::wstring& w, const wchar_t * delimiter, bool addRemainder = false); + static std::vector StringToVector(const std::wstring& w, const wchar_t* delimiter, bool addRemainder = false); static std::wstring Quote(const std::wstring& s); static std::wstring Unquote(const std::wstring& s); @@ -243,11 +270,11 @@ namespace UnitConversionManager void InitializeSelectedUnits(); std::wstring RoundSignificant(double num, int numSignificant); Category StringToCategory(const std::wstring& w); - std::wstring CategoryToString(const Category& c, const wchar_t * delimiter); - std::wstring UnitToString(const Unit& u, const wchar_t * delimiter); + std::wstring CategoryToString(const Category& c, const wchar_t* delimiter); + std::wstring UnitToString(const Unit& u, const wchar_t* delimiter); Unit StringToUnit(const std::wstring& w); ConversionData StringToConversionData(const std::wstring& w); - std::wstring ConversionDataToString(ConversionData d, const wchar_t * delimiter); + std::wstring ConversionDataToString(ConversionData d, const wchar_t* delimiter); void UpdateCurrencySymbols(); void UpdateViewModel(); bool AnyUnitIsEmpty(); diff --git a/src/CalcViewModel/ApplicationViewModel.cpp b/src/CalcViewModel/ApplicationViewModel.cpp index 5033080b..e5f55ed4 100644 --- a/src/CalcViewModel/ApplicationViewModel.cpp +++ b/src/CalcViewModel/ApplicationViewModel.cpp @@ -38,13 +38,13 @@ namespace StringReference ClearMemoryVisibilityPropertyName(L"ClearMemoryVisibility"); } -ApplicationViewModel::ApplicationViewModel() : - m_CalculatorViewModel(nullptr), - m_DateCalcViewModel(nullptr), - m_ConverterViewModel(nullptr), - m_PreviousMode(ViewMode::None), - m_mode(ViewMode::None), - m_categories(nullptr) +ApplicationViewModel::ApplicationViewModel() + : m_CalculatorViewModel(nullptr) + , m_DateCalcViewModel(nullptr) + , m_ConverterViewModel(nullptr) + , m_PreviousMode(ViewMode::None) + , m_mode(ViewMode::None) + , m_categories(nullptr) { SetMenuCategories(); } @@ -60,7 +60,7 @@ void ApplicationViewModel::Mode::set(ViewMode value) } } -void ApplicationViewModel::Categories::set(IObservableVector^ value) +void ApplicationViewModel::Categories::set(IObservableVector ^ value) { if (m_categories != value) { @@ -90,7 +90,7 @@ void ApplicationViewModel::Initialize(ViewMode mode) throw; } } - catch (Exception^ e) + catch (Exception ^ e) { TraceLogger::GetInstance().LogPlatformException(__FUNCTIONW__, e); if (!TryRecoverFromNavigationModeFailure()) @@ -165,7 +165,7 @@ void ApplicationViewModel::OnModeChanged() RaisePropertyChanged(ClearMemoryVisibilityPropertyName); } -void ApplicationViewModel::OnCopyCommand(Object^ parameter) +void ApplicationViewModel::OnCopyCommand(Object ^ parameter) { if (NavCategory::IsConverterViewMode(m_mode)) { @@ -181,7 +181,7 @@ void ApplicationViewModel::OnCopyCommand(Object^ parameter) } } -void ApplicationViewModel::OnPasteCommand(Object^ parameter) +void ApplicationViewModel::OnPasteCommand(Object ^ parameter) { if (NavCategory::IsConverterViewMode(m_mode)) { diff --git a/src/CalcViewModel/ApplicationViewModel.h b/src/CalcViewModel/ApplicationViewModel.h index 74567ca1..dffa3b9b 100644 --- a/src/CalcViewModel/ApplicationViewModel.h +++ b/src/CalcViewModel/ApplicationViewModel.h @@ -11,20 +11,19 @@ namespace CalculatorApp { namespace ViewModel { - [Windows::UI::Xaml::Data::Bindable] - public ref class ApplicationViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged + [Windows::UI::Xaml::Data::Bindable] public ref class ApplicationViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged { public: ApplicationViewModel(); - void Initialize(CalculatorApp::Common::ViewMode mode); // Use for first init, use deserialize for rehydration + void Initialize(CalculatorApp::Common::ViewMode mode); // Use for first init, use deserialize for rehydration OBSERVABLE_OBJECT(); - OBSERVABLE_PROPERTY_RW(StandardCalculatorViewModel^, CalculatorViewModel); - OBSERVABLE_PROPERTY_RW(DateCalculatorViewModel^, DateCalcViewModel); - OBSERVABLE_PROPERTY_RW(UnitConverterViewModel^, ConverterViewModel); + OBSERVABLE_PROPERTY_RW(StandardCalculatorViewModel ^, CalculatorViewModel); + OBSERVABLE_PROPERTY_RW(DateCalculatorViewModel ^, DateCalcViewModel); + OBSERVABLE_PROPERTY_RW(UnitConverterViewModel ^, ConverterViewModel); OBSERVABLE_PROPERTY_RW(CalculatorApp::Common::ViewMode, PreviousMode); - OBSERVABLE_NAMED_PROPERTY_RW(Platform::String^, CategoryName); + OBSERVABLE_NAMED_PROPERTY_RW(Platform::String ^, CategoryName); COMMAND_FOR_METHOD(CopyCommand, ApplicationViewModel::OnCopyCommand); COMMAND_FOR_METHOD(PasteCommand, ApplicationViewModel::OnPasteCommand); @@ -60,9 +59,8 @@ namespace CalculatorApp { Windows::UI::Xaml::Visibility get() { - return CalculatorApp::Common::NavCategory::IsCalculatorViewMode(Mode) - ? Windows::UI::Xaml::Visibility::Visible - : Windows::UI::Xaml::Visibility::Collapsed; + return CalculatorApp::Common::NavCategory::IsCalculatorViewMode(Mode) ? Windows::UI::Xaml::Visibility::Visible + : Windows::UI::Xaml::Visibility::Collapsed; } } @@ -71,13 +69,13 @@ namespace CalculatorApp void OnModeChanged(); - void OnCopyCommand(Platform::Object^ parameter); - void OnPasteCommand(Platform::Object^ parameter); + void OnCopyCommand(Platform::Object ^ parameter); + void OnPasteCommand(Platform::Object ^ parameter); void SetMenuCategories(); CalculatorApp::Common::ViewMode m_mode; - Windows::Foundation::Collections::IObservableVector^ m_categories; + Windows::Foundation::Collections::IObservableVector ^ m_categories; }; } } diff --git a/src/CalcViewModel/Common/AlwaysSelectedCollectionView.h b/src/CalcViewModel/Common/AlwaysSelectedCollectionView.h index 54c3b67c..1d0c7c49 100644 --- a/src/CalcViewModel/Common/AlwaysSelectedCollectionView.h +++ b/src/CalcViewModel/Common/AlwaysSelectedCollectionView.h @@ -3,107 +3,102 @@ #pragma once -namespace CalculatorApp { namespace Common +namespace CalculatorApp { - ref class AlwaysSelectedCollectionView sealed: - public Windows::UI::Xaml::DependencyObject, - public Windows::UI::Xaml::Data::ICollectionView + namespace Common { - internal: - AlwaysSelectedCollectionView(Windows::UI::Xaml::Interop::IBindableVector^ source): - m_currentPosition(-1) + ref class AlwaysSelectedCollectionView sealed : public Windows::UI::Xaml::DependencyObject, public Windows::UI::Xaml::Data::ICollectionView { - m_source = source; + internal : AlwaysSelectedCollectionView(Windows::UI::Xaml::Interop::IBindableVector ^ source) : m_currentPosition(-1) + { + m_source = source; - Windows::UI::Xaml::Interop::IBindableObservableVector^ observable = dynamic_cast(source); - if (observable) - { - observable->VectorChanged += - ref new Windows::UI::Xaml::Interop::BindableVectorChangedEventHandler(this, &AlwaysSelectedCollectionView::OnSourceBindableVectorChanged); - } - } - - private: - // ICollectionView - // Not implemented methods - virtual WF::IAsyncOperation^ LoadMoreItemsAsync(unsigned int) = Windows::UI::Xaml::Data::ICollectionView::LoadMoreItemsAsync - { - throw ref new Platform::NotImplementedException(); - } - virtual bool MoveCurrentToFirst() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToFirst - { - throw ref new Platform::NotImplementedException(); - } - virtual bool MoveCurrentToLast() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToLast - { - throw ref new Platform::NotImplementedException(); - } - virtual bool MoveCurrentToNext() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToNext - { - throw ref new Platform::NotImplementedException(); - } - virtual bool MoveCurrentToPrevious() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToPrevious - { - throw ref new Platform::NotImplementedException(); - } - property Windows::Foundation::Collections::IObservableVector^ CollectionGroups - { - virtual Windows::Foundation::Collections::IObservableVector^ get() = Windows::UI::Xaml::Data::ICollectionView::CollectionGroups::get - { - return ref new Platform::Collections::Vector(); - } - } - property bool HasMoreItems - { - virtual bool get() = Windows::UI::Xaml::Data::ICollectionView::HasMoreItems::get - { - return false; - } - } - - // Implemented methods - virtual bool MoveCurrentTo(Platform::Object^ item) = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentTo - { - if (item) - { - unsigned int newCurrentPosition = 0; - bool result = m_source->IndexOf(item, &newCurrentPosition); - if (result) + Windows::UI::Xaml::Interop::IBindableObservableVector ^ observable = + dynamic_cast(source); + if (observable) { - m_currentPosition = newCurrentPosition; - m_currentChanged(this, nullptr); - return true; + observable->VectorChanged += ref new Windows::UI::Xaml::Interop::BindableVectorChangedEventHandler( + this, &AlwaysSelectedCollectionView::OnSourceBindableVectorChanged); } } - // The item is not in the collection - // We're going to schedule a call back later so we - // restore the selection to the way we wanted it to begin with - if (m_currentPosition >= 0 && m_currentPosition < static_cast(m_source->Size)) + private: + // ICollectionView + // Not implemented methods + virtual WF::IAsyncOperation< + Windows::UI::Xaml::Data::LoadMoreItemsResult> ^ LoadMoreItemsAsync(unsigned int) = Windows::UI::Xaml::Data::ICollectionView::LoadMoreItemsAsync { - this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, - ref new Windows::UI::Core::DispatchedHandler( - [this]() - { - m_currentChanged(this, nullptr); - })); + throw ref new Platform::NotImplementedException(); } - return false; - } - - virtual bool MoveCurrentToPosition(int index) = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToPosition - { - if (index < 0 || index >= static_cast(m_source->Size)) + virtual bool MoveCurrentToFirst() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToFirst { + throw ref new Platform::NotImplementedException(); + } + virtual bool MoveCurrentToLast() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToLast + { + throw ref new Platform::NotImplementedException(); + } + virtual bool MoveCurrentToNext() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToNext + { + throw ref new Platform::NotImplementedException(); + } + virtual bool MoveCurrentToPrevious() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToPrevious + { + throw ref new Platform::NotImplementedException(); + } + property Windows::Foundation::Collections::IObservableVector ^ CollectionGroups { + virtual Windows::Foundation::Collections::IObservableVector ^ get() = Windows::UI::Xaml::Data::ICollectionView::CollectionGroups::get + { + return ref new Platform::Collections::Vector(); + } + } property bool HasMoreItems + { + virtual bool get() = Windows::UI::Xaml::Data::ICollectionView::HasMoreItems::get + { + return false; + } + } + + // Implemented methods + virtual bool MoveCurrentTo(Platform::Object ^ item) = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentTo + { + if (item) + { + unsigned int newCurrentPosition = 0; + bool result = m_source->IndexOf(item, &newCurrentPosition); + if (result) + { + m_currentPosition = newCurrentPosition; + m_currentChanged(this, nullptr); + return true; + } + } + + // The item is not in the collection + // We're going to schedule a call back later so we + // restore the selection to the way we wanted it to begin with + if (m_currentPosition >= 0 && m_currentPosition < static_cast(m_source->Size)) + { + this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, + ref new Windows::UI::Core::DispatchedHandler([this]() { m_currentChanged(this, nullptr); })); + } return false; } - m_currentPosition = index; - m_currentChanged(this, nullptr); - return true; - } + virtual bool MoveCurrentToPosition(int index) = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToPosition + { + if (index < 0 || index >= static_cast(m_source->Size)) + { + return false; + } - property Platform::Object^ CurrentItem + m_currentPosition = index; + m_currentChanged(this, nullptr); + return true; + } + + property Platform::Object^ CurrentItem { virtual Platform::Object^ get() = Windows::UI::Xaml::Data::ICollectionView::CurrentItem::get { @@ -116,30 +111,30 @@ namespace CalculatorApp { namespace Common } property int CurrentPosition - { - virtual int get() = Windows::UI::Xaml::Data::ICollectionView::CurrentPosition::get { - return m_currentPosition; + virtual int get() = Windows::UI::Xaml::Data::ICollectionView::CurrentPosition::get + { + return m_currentPosition; + } } - } - property bool IsCurrentAfterLast - { - virtual bool get() = Windows::UI::Xaml::Data::ICollectionView::IsCurrentAfterLast::get + property bool IsCurrentAfterLast { - return m_currentPosition >= static_cast(m_source->Size); + virtual bool get() = Windows::UI::Xaml::Data::ICollectionView::IsCurrentAfterLast::get + { + return m_currentPosition >= static_cast(m_source->Size); + } } - } - property bool IsCurrentBeforeFirst - { - virtual bool get() = Windows::UI::Xaml::Data::ICollectionView::IsCurrentBeforeFirst::get + property bool IsCurrentBeforeFirst { - return m_currentPosition < 0; + virtual bool get() = Windows::UI::Xaml::Data::ICollectionView::IsCurrentBeforeFirst::get + { + return m_currentPosition < 0; + } } - } - event WF::EventHandler^ CurrentChanged + event WF::EventHandler^ CurrentChanged { virtual WF::EventRegistrationToken add(WF::EventHandler^ handler) = Windows::UI::Xaml::Data::ICollectionView::CurrentChanged::add { @@ -165,63 +160,67 @@ namespace CalculatorApp { namespace Common // IVector // Not implemented methods virtual void Append(Platform::Object^ /*item*/) = Windows::Foundation::Collections::IVector::Append - { - throw ref new Platform::NotImplementedException(); - } - virtual void Clear() = Windows::Foundation::Collections::IVector::Clear - { - throw ref new Platform::NotImplementedException(); - } - virtual unsigned int GetMany(unsigned int /*startIndex*/, Platform::WriteOnlyArray^ /*items*/) = Windows::Foundation::Collections::IVector::GetMany - { - throw ref new Platform::NotImplementedException(); - } - virtual Windows::Foundation::Collections::IVectorView^ GetView() = Windows::Foundation::Collections::IVector::GetView - { - throw ref new Platform::NotImplementedException(); - } - virtual void InsertAt(unsigned int /*index*/, Platform::Object^ /*item*/) = Windows::Foundation::Collections::IVector::InsertAt - { - throw ref new Platform::NotImplementedException(); - } - virtual void RemoveAt(unsigned int /*index*/) = Windows::Foundation::Collections::IVector::RemoveAt - { - throw ref new Platform::NotImplementedException(); - } - virtual void RemoveAtEnd() = Windows::Foundation::Collections::IVector::RemoveAtEnd - { - throw ref new Platform::NotImplementedException(); - } - virtual void ReplaceAll(const Platform::Array^ /*items*/) = Windows::Foundation::Collections::IVector::ReplaceAll - { - throw ref new Platform::NotImplementedException(); - } - virtual void SetAt(unsigned int /*index*/, Platform::Object^ /*item*/) = Windows::Foundation::Collections::IVector::SetAt - { - throw ref new Platform::NotImplementedException(); - } - - // Implemented methods - virtual Platform::Object^ GetAt(unsigned int index) = Windows::Foundation::Collections::IVector::GetAt - { - return m_source->GetAt(index); - } - - virtual bool IndexOf(Platform::Object^ item, unsigned int* index) = Windows::Foundation::Collections::IVector::IndexOf - { - return m_source->IndexOf(item, index); - } - - property unsigned int Size - { - virtual unsigned int get() = Windows::Foundation::Collections::IVector::Size::get { - return m_source->Size; + throw ref new Platform::NotImplementedException(); + } + virtual void Clear() = Windows::Foundation::Collections::IVector::Clear + { + throw ref new Platform::NotImplementedException(); + } + virtual unsigned int + GetMany(unsigned int /*startIndex*/, + Platform::WriteOnlyArray ^ /*items*/) = Windows::Foundation::Collections::IVector::GetMany + { + throw ref new Platform::NotImplementedException(); + } + virtual Windows::Foundation::Collections::IVectorView ^ GetView() = Windows::Foundation::Collections::IVector::GetView + { + throw ref new Platform::NotImplementedException(); + } + virtual void InsertAt(unsigned int /*index*/, Platform::Object ^ /*item*/) = Windows::Foundation::Collections::IVector::InsertAt + { + throw ref new Platform::NotImplementedException(); + } + virtual void RemoveAt(unsigned int /*index*/) = Windows::Foundation::Collections::IVector::RemoveAt + { + throw ref new Platform::NotImplementedException(); + } + virtual void RemoveAtEnd() = Windows::Foundation::Collections::IVector::RemoveAtEnd + { + throw ref new Platform::NotImplementedException(); + } + virtual void + ReplaceAll(const Platform::Array ^ /*items*/) = Windows::Foundation::Collections::IVector::ReplaceAll + { + throw ref new Platform::NotImplementedException(); + } + virtual void SetAt(unsigned int /*index*/, Platform::Object ^ /*item*/) = Windows::Foundation::Collections::IVector::SetAt + { + throw ref new Platform::NotImplementedException(); } - } - // IObservableVector - event Windows::Foundation::Collections::VectorChangedEventHandler^ VectorChanged + // Implemented methods + virtual Platform::Object ^ GetAt(unsigned int index) = Windows::Foundation::Collections::IVector::GetAt + { + return m_source->GetAt(index); + } + + virtual bool IndexOf(Platform::Object ^ item, unsigned int* index) = Windows::Foundation::Collections::IVector::IndexOf + { + return m_source->IndexOf(item, index); + } + + property unsigned int Size + { + virtual unsigned int get() = Windows::Foundation::Collections::IVector::Size::get + { + return m_source->Size; + } + } + + // IObservableVector + event Windows::Foundation::Collections::VectorChangedEventHandler^ VectorChanged { virtual WF::EventRegistrationToken add(Windows::Foundation::Collections::VectorChangedEventHandler^ handler) = Windows::Foundation::Collections::IObservableVector::VectorChanged::add { @@ -236,52 +235,51 @@ namespace CalculatorApp { namespace Common // IIterable // Not implemented virtual Windows::Foundation::Collections::IIterator^ First() = Windows::Foundation::Collections::IIterable::First - { - throw ref new Platform::NotImplementedException(); - } - - // Event handlers - void OnSourceBindableVectorChanged(Windows::UI::Xaml::Interop::IBindableObservableVector^ source, Platform::Object^ e) - { - Windows::Foundation::Collections::IVectorChangedEventArgs^ args = safe_cast(e); - m_vectorChanged(this, args); - } - - Windows::UI::Xaml::Interop::IBindableVector^ m_source; - int m_currentPosition; - event WF::EventHandler^ m_currentChanged; - event Windows::UI::Xaml::Data::CurrentChangingEventHandler^ m_currentChanging; - event Windows::Foundation::Collections::VectorChangedEventHandler^ m_vectorChanged; - }; - - public ref class AlwaysSelectedCollectionViewConverter sealed: public Windows::UI::Xaml::Data::IValueConverter - { - public: - AlwaysSelectedCollectionViewConverter() - { } - - private: - virtual Platform::Object^ Convert( - Platform::Object^ value, - Windows::UI::Xaml::Interop::TypeName /*targetType*/, - Platform::Object^ /*parameter*/, - Platform::String^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::Convert - { - auto result = dynamic_cast(value); - if (result) { - return ref new AlwaysSelectedCollectionView(result); + throw ref new Platform::NotImplementedException(); } - return Windows::UI::Xaml::DependencyProperty::UnsetValue; // Can't convert - } - virtual Platform::Object^ ConvertBack( - Platform::Object^ /*value*/, - Windows::UI::Xaml::Interop::TypeName /*targetType*/, - Platform::Object^ /*parameter*/, - Platform::String^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::ConvertBack + // Event handlers + void OnSourceBindableVectorChanged(Windows::UI::Xaml::Interop::IBindableObservableVector ^ source, Platform::Object ^ e) + { + Windows::Foundation::Collections::IVectorChangedEventArgs ^ args = safe_cast(e); + m_vectorChanged(this, args); + } + + Windows::UI::Xaml::Interop::IBindableVector ^ m_source; + int m_currentPosition; + event WF::EventHandler ^ m_currentChanged; + event Windows::UI::Xaml::Data::CurrentChangingEventHandler ^ m_currentChanging; + event Windows::Foundation::Collections::VectorChangedEventHandler ^ m_vectorChanged; + }; + + public + ref class AlwaysSelectedCollectionViewConverter sealed : public Windows::UI::Xaml::Data::IValueConverter { - return Windows::UI::Xaml::DependencyProperty::UnsetValue; - } - }; -}} + public: + AlwaysSelectedCollectionViewConverter() + { + } + + private: + virtual Platform::Object + ^ Convert(Platform::Object ^ value, Windows::UI::Xaml::Interop::TypeName /*targetType*/, Platform::Object ^ /*parameter*/, + Platform::String ^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::Convert + { + auto result = dynamic_cast(value); + if (result) + { + return ref new AlwaysSelectedCollectionView(result); + } + return Windows::UI::Xaml::DependencyProperty::UnsetValue; // Can't convert + } + + virtual Platform::Object + ^ ConvertBack(Platform::Object ^ /*value*/, Windows::UI::Xaml::Interop::TypeName /*targetType*/, Platform::Object ^ /*parameter*/, + Platform::String ^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::ConvertBack + { + return Windows::UI::Xaml::DependencyProperty::UnsetValue; + } + }; + } +} diff --git a/src/CalcViewModel/Common/AppResourceProvider.cpp b/src/CalcViewModel/Common/AppResourceProvider.cpp index 45d3a31c..a75a375f 100644 --- a/src/CalcViewModel/Common/AppResourceProvider.cpp +++ b/src/CalcViewModel/Common/AppResourceProvider.cpp @@ -14,18 +14,18 @@ AppResourceProvider::AppResourceProvider() m_cEngineStringResLoader = ResourceLoader::GetForViewIndependentUse(L"CEngineStrings"); } -AppResourceProvider & AppResourceProvider::GetInstance() +AppResourceProvider& AppResourceProvider::GetInstance() { static AppResourceProvider s_instance; return s_instance; } -String^ AppResourceProvider::GetResourceString(_In_ String^ key) +String ^ AppResourceProvider::GetResourceString(_In_ String ^ key) { return m_stringResLoader->GetString(key); } -String^ AppResourceProvider::GetCEngineString(_In_ String^ key) +String ^ AppResourceProvider::GetCEngineString(_In_ String ^ key) { return m_cEngineStringResLoader->GetString(key); } diff --git a/src/CalcViewModel/Common/AppResourceProvider.h b/src/CalcViewModel/Common/AppResourceProvider.h index 5807e82f..8876fb91 100644 --- a/src/CalcViewModel/Common/AppResourceProvider.h +++ b/src/CalcViewModel/Common/AppResourceProvider.h @@ -8,13 +8,13 @@ namespace CalculatorApp class AppResourceProvider { public: - static AppResourceProvider & GetInstance(); - Platform::String^ GetResourceString(_In_ Platform::String^ key); - Platform::String^ GetCEngineString(_In_ Platform::String^ key); + static AppResourceProvider& GetInstance(); + Platform::String ^ GetResourceString(_In_ Platform::String ^ key); + Platform::String ^ GetCEngineString(_In_ Platform::String ^ key); private: AppResourceProvider(); - Windows::ApplicationModel::Resources::ResourceLoader^ m_stringResLoader; - Windows::ApplicationModel::Resources::ResourceLoader^ m_cEngineStringResLoader; + Windows::ApplicationModel::Resources::ResourceLoader ^ m_stringResLoader; + Windows::ApplicationModel::Resources::ResourceLoader ^ m_cEngineStringResLoader; }; } diff --git a/src/CalcViewModel/Common/Automation/INarratorAnnouncementHost.h b/src/CalcViewModel/Common/Automation/INarratorAnnouncementHost.h index 40069a7c..9f947f41 100644 --- a/src/CalcViewModel/Common/Automation/INarratorAnnouncementHost.h +++ b/src/CalcViewModel/Common/Automation/INarratorAnnouncementHost.h @@ -11,16 +11,17 @@ namespace CalculatorApp::Common::Automation { - public interface class INarratorAnnouncementHost +public + interface class INarratorAnnouncementHost { public: // Is the host available on this OS. bool IsHostAvailable(); // Make a new instance of a concrete host. - INarratorAnnouncementHost^ MakeHost(); + INarratorAnnouncementHost ^ MakeHost(); // Make an announcement using the concrete host's preferred method. - void Announce(NarratorAnnouncement^ announcement); + void Announce(NarratorAnnouncement ^ announcement); }; } diff --git a/src/CalcViewModel/Common/Automation/LiveRegionHost.cpp b/src/CalcViewModel/Common/Automation/LiveRegionHost.cpp index 614f4595..4fd96591 100644 --- a/src/CalcViewModel/Common/Automation/LiveRegionHost.cpp +++ b/src/CalcViewModel/Common/Automation/LiveRegionHost.cpp @@ -9,9 +9,9 @@ using namespace Windows::UI::Xaml::Automation; using namespace Windows::UI::Xaml::Automation::Peers; using namespace Windows::UI::Xaml::Controls; -LiveRegionHost::LiveRegionHost() : - m_host(nullptr) -{} +LiveRegionHost::LiveRegionHost() : m_host(nullptr) +{ +} bool LiveRegionHost::IsHostAvailable() { @@ -19,12 +19,12 @@ bool LiveRegionHost::IsHostAvailable() return true; } -INarratorAnnouncementHost^ LiveRegionHost::MakeHost() +INarratorAnnouncementHost ^ LiveRegionHost::MakeHost() { return ref new LiveRegionHost(); } -void LiveRegionHost::Announce(NarratorAnnouncement^ announcement) +void LiveRegionHost::Announce(NarratorAnnouncement ^ announcement) { if (m_host == nullptr) { @@ -33,7 +33,7 @@ void LiveRegionHost::Announce(NarratorAnnouncement^ announcement) } AutomationProperties::SetName(m_host, announcement->Announcement); - AutomationPeer^ peer = FrameworkElementAutomationPeer::FromElement(m_host); + AutomationPeer ^ peer = FrameworkElementAutomationPeer::FromElement(m_host); if (peer != nullptr) { peer->RaiseAutomationEvent(AutomationEvents::LiveRegionChanged); diff --git a/src/CalcViewModel/Common/Automation/LiveRegionHost.h b/src/CalcViewModel/Common/Automation/LiveRegionHost.h index c80d1477..fef7c714 100644 --- a/src/CalcViewModel/Common/Automation/LiveRegionHost.h +++ b/src/CalcViewModel/Common/Automation/LiveRegionHost.h @@ -16,17 +16,18 @@ namespace CalculatorApp::Common::Automation // When the app switches to min version RS3, this class can be removed // and the app will switch to using the Notification API. // TODO - MSFT 12735088 - public ref class LiveRegionHost sealed : public INarratorAnnouncementHost +public + ref class LiveRegionHost sealed : public INarratorAnnouncementHost { public: LiveRegionHost(); virtual bool IsHostAvailable(); - virtual INarratorAnnouncementHost^ MakeHost(); + virtual INarratorAnnouncementHost ^ MakeHost(); - virtual void Announce(NarratorAnnouncement^ announcement); + virtual void Announce(NarratorAnnouncement ^ announcement); private: - Windows::UI::Xaml::UIElement^ m_host; + Windows::UI::Xaml::UIElement ^ m_host; }; } diff --git a/src/CalcViewModel/Common/Automation/NarratorAnnouncement.cpp b/src/CalcViewModel/Common/Automation/NarratorAnnouncement.cpp index 823572f3..fd5bb0a0 100644 --- a/src/CalcViewModel/Common/Automation/NarratorAnnouncement.cpp +++ b/src/CalcViewModel/Common/Automation/NarratorAnnouncement.cpp @@ -25,24 +25,18 @@ namespace CalculatorApp::Common::Automation } } -NarratorAnnouncement::NarratorAnnouncement( - String^ announcement, - String^ activityId, - AutomationNotificationKind kind, - AutomationNotificationProcessing processing) - : - m_announcement(announcement), - m_activityId(activityId), - m_kind(kind), - m_processing(processing) -{} +NarratorAnnouncement::NarratorAnnouncement(String ^ announcement, String ^ activityId, AutomationNotificationKind kind, + AutomationNotificationProcessing processing) + : m_announcement(announcement), m_activityId(activityId), m_kind(kind), m_processing(processing) +{ +} -String^ NarratorAnnouncement::Announcement::get() +String ^ NarratorAnnouncement::Announcement::get() { return m_announcement; } -String^ NarratorAnnouncement::ActivityId::get() +String ^ NarratorAnnouncement::ActivityId::get() { return m_activityId; } @@ -57,108 +51,73 @@ AutomationNotificationProcessing NarratorAnnouncement::Processing::get() return m_processing; } -bool NarratorAnnouncement::IsValid(NarratorAnnouncement^ announcement) +bool NarratorAnnouncement::IsValid(NarratorAnnouncement ^ announcement) { - return announcement != nullptr - && announcement->Announcement != nullptr - && !announcement->Announcement->IsEmpty(); + return announcement != nullptr && announcement->Announcement != nullptr && !announcement->Announcement->IsEmpty(); } -NarratorAnnouncement^ CalculatorAnnouncement::GetDisplayUpdatedAnnouncement(String^ announcement) +NarratorAnnouncement ^ CalculatorAnnouncement::GetDisplayUpdatedAnnouncement(String ^ announcement) { - return ref new NarratorAnnouncement( - announcement, - CalculatorActivityIds::DisplayUpdated, - AutomationNotificationKind::Other, - AutomationNotificationProcessing::ImportantMostRecent); + return ref new NarratorAnnouncement(announcement, CalculatorActivityIds::DisplayUpdated, AutomationNotificationKind::Other, + AutomationNotificationProcessing::ImportantMostRecent); } -NarratorAnnouncement^ CalculatorAnnouncement::GetMaxDigitsReachedAnnouncement(String^ announcement) +NarratorAnnouncement ^ CalculatorAnnouncement::GetMaxDigitsReachedAnnouncement(String ^ announcement) { - return ref new NarratorAnnouncement( - announcement, - CalculatorActivityIds::MaxDigitsReached, - AutomationNotificationKind::Other, - AutomationNotificationProcessing::ImportantMostRecent); + return ref new NarratorAnnouncement(announcement, CalculatorActivityIds::MaxDigitsReached, AutomationNotificationKind::Other, + AutomationNotificationProcessing::ImportantMostRecent); } -NarratorAnnouncement^ CalculatorAnnouncement::GetMemoryClearedAnnouncement(String^ announcement) +NarratorAnnouncement ^ CalculatorAnnouncement::GetMemoryClearedAnnouncement(String ^ announcement) { - return ref new NarratorAnnouncement( - announcement, - CalculatorActivityIds::MemoryCleared, - AutomationNotificationKind::ItemRemoved, - AutomationNotificationProcessing::ImportantMostRecent); + return ref new NarratorAnnouncement(announcement, CalculatorActivityIds::MemoryCleared, AutomationNotificationKind::ItemRemoved, + AutomationNotificationProcessing::ImportantMostRecent); } -NarratorAnnouncement^ CalculatorAnnouncement::GetMemoryItemChangedAnnouncement(String^ announcement) +NarratorAnnouncement ^ CalculatorAnnouncement::GetMemoryItemChangedAnnouncement(String ^ announcement) { - return ref new NarratorAnnouncement( - announcement, - CalculatorActivityIds::MemoryItemChanged, - AutomationNotificationKind::ActionCompleted, - AutomationNotificationProcessing::MostRecent); + return ref new NarratorAnnouncement(announcement, CalculatorActivityIds::MemoryItemChanged, AutomationNotificationKind::ActionCompleted, + AutomationNotificationProcessing::MostRecent); } -NarratorAnnouncement^ CalculatorAnnouncement::GetMemoryItemAddedAnnouncement(String^ announcement) +NarratorAnnouncement ^ CalculatorAnnouncement::GetMemoryItemAddedAnnouncement(String ^ announcement) { - return ref new NarratorAnnouncement( - announcement, - CalculatorActivityIds::MemoryItemAdded, - AutomationNotificationKind::ItemAdded, - AutomationNotificationProcessing::MostRecent); + return ref new NarratorAnnouncement(announcement, CalculatorActivityIds::MemoryItemAdded, AutomationNotificationKind::ItemAdded, + AutomationNotificationProcessing::MostRecent); } -NarratorAnnouncement^ CalculatorAnnouncement::GetHistoryClearedAnnouncement(String^ announcement) +NarratorAnnouncement ^ CalculatorAnnouncement::GetHistoryClearedAnnouncement(String ^ announcement) { - return ref new NarratorAnnouncement( - announcement, - CalculatorActivityIds::HistoryCleared, - AutomationNotificationKind::ItemRemoved, - AutomationNotificationProcessing::MostRecent); + return ref new NarratorAnnouncement(announcement, CalculatorActivityIds::HistoryCleared, AutomationNotificationKind::ItemRemoved, + AutomationNotificationProcessing::MostRecent); } -NarratorAnnouncement^ CalculatorAnnouncement::GetCategoryNameChangedAnnouncement(String^ announcement) +NarratorAnnouncement ^ CalculatorAnnouncement::GetCategoryNameChangedAnnouncement(String ^ announcement) { - return ref new NarratorAnnouncement( - announcement, - CalculatorActivityIds::CategoryNameChanged, - AutomationNotificationKind::ActionCompleted, - AutomationNotificationProcessing::ImportantMostRecent); + return ref new NarratorAnnouncement(announcement, CalculatorActivityIds::CategoryNameChanged, AutomationNotificationKind::ActionCompleted, + AutomationNotificationProcessing::ImportantMostRecent); } -NarratorAnnouncement^ CalculatorAnnouncement::GetUpdateCurrencyRatesAnnouncement(String^ announcement) +NarratorAnnouncement ^ CalculatorAnnouncement::GetUpdateCurrencyRatesAnnouncement(String ^ announcement) { - return ref new NarratorAnnouncement( - announcement, - CalculatorActivityIds::UpdateCurrencyRates, - AutomationNotificationKind::ActionCompleted, - AutomationNotificationProcessing::ImportantMostRecent); + return ref new NarratorAnnouncement(announcement, CalculatorActivityIds::UpdateCurrencyRates, AutomationNotificationKind::ActionCompleted, + AutomationNotificationProcessing::ImportantMostRecent); } -NarratorAnnouncement^ CalculatorAnnouncement::GetDisplayCopiedAnnouncement(String^ announcement) +NarratorAnnouncement ^ CalculatorAnnouncement::GetDisplayCopiedAnnouncement(String ^ announcement) { - return ref new NarratorAnnouncement( - announcement, - CalculatorActivityIds::DisplayCopied, - AutomationNotificationKind::ActionCompleted, - AutomationNotificationProcessing::ImportantMostRecent); + return ref new NarratorAnnouncement(announcement, CalculatorActivityIds::DisplayCopied, AutomationNotificationKind::ActionCompleted, + AutomationNotificationProcessing::ImportantMostRecent); } -NarratorAnnouncement^ CalculatorAnnouncement::GetOpenParenthesisCountChangedAnnouncement(String^ announcement) +NarratorAnnouncement ^ CalculatorAnnouncement::GetOpenParenthesisCountChangedAnnouncement(String ^ announcement) { - return ref new NarratorAnnouncement( - announcement, - CalculatorActivityIds::OpenParenthesisCountChanged, - AutomationNotificationKind::ActionCompleted, - AutomationNotificationProcessing::ImportantMostRecent); + return ref new NarratorAnnouncement(announcement, CalculatorActivityIds::OpenParenthesisCountChanged, AutomationNotificationKind::ActionCompleted, + AutomationNotificationProcessing::ImportantMostRecent); } -NarratorAnnouncement^ CalculatorAnnouncement::GetNoRightParenthesisAddedAnnouncement(String^ announcement) +NarratorAnnouncement ^ CalculatorAnnouncement::GetNoRightParenthesisAddedAnnouncement(String ^ announcement) { - return ref new NarratorAnnouncement( - announcement, - CalculatorActivityIds::NoParenthesisAdded, - AutomationNotificationKind::ActionCompleted, - AutomationNotificationProcessing::ImportantMostRecent); + return ref new NarratorAnnouncement(announcement, CalculatorActivityIds::NoParenthesisAdded, AutomationNotificationKind::ActionCompleted, + AutomationNotificationProcessing::ImportantMostRecent); } diff --git a/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h b/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h index 3ec6a5e3..f3582981 100644 --- a/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h +++ b/src/CalcViewModel/Common/Automation/NarratorAnnouncement.h @@ -11,7 +11,8 @@ namespace CalculatorApp::Common::Automation // enums should be removed and the Windows types should be used // instead. // TODO - MSFT 12735088 - public enum class AutomationNotificationKind +public + enum class AutomationNotificationKind { ItemAdded = 0, ItemRemoved = 1, @@ -20,7 +21,8 @@ namespace CalculatorApp::Common::Automation Other = 4 }; - public enum class AutomationNotificationProcessing +public + enum class AutomationNotificationProcessing { ImportantAll = 0, ImportantMostRecent = 1, @@ -29,20 +31,17 @@ namespace CalculatorApp::Common::Automation CurrentThenMostRecent = 4 }; - public ref class NarratorAnnouncement sealed +public + ref class NarratorAnnouncement sealed { public: - property Platform::String^ Announcement - { - Platform::String^ get(); - } + property Platform::String + ^ Announcement { Platform::String ^ get(); } - property Platform::String^ ActivityId - { - Platform::String^ get(); - } + property Platform::String + ^ ActivityId { Platform::String ^ get(); } - property AutomationNotificationKind Kind + property AutomationNotificationKind Kind { AutomationNotificationKind get(); } @@ -52,21 +51,18 @@ namespace CalculatorApp::Common::Automation AutomationNotificationProcessing get(); } - static bool IsValid(NarratorAnnouncement^ announcement); + static bool IsValid(NarratorAnnouncement ^ announcement); private: // Make CalculatorAnnouncement a friend class so it is the only // class that can access the private constructor. friend class CalculatorAnnouncement; - NarratorAnnouncement( - Platform::String^ announcement, - Platform::String^ activityId, - AutomationNotificationKind kind, - AutomationNotificationProcessing processing); + NarratorAnnouncement(Platform::String ^ announcement, Platform::String ^ activityId, AutomationNotificationKind kind, + AutomationNotificationProcessing processing); - Platform::String^ m_announcement; - Platform::String^ m_activityId; + Platform::String ^ m_announcement; + Platform::String ^ m_activityId; AutomationNotificationKind m_kind; AutomationNotificationProcessing m_processing; }; @@ -76,22 +72,22 @@ namespace CalculatorApp::Common::Automation class CalculatorAnnouncement { public: - static NarratorAnnouncement^ GetDisplayUpdatedAnnouncement(Platform::String^ announcement); - static NarratorAnnouncement^ GetMaxDigitsReachedAnnouncement(Platform::String^ announcement); + static NarratorAnnouncement ^ GetDisplayUpdatedAnnouncement(Platform::String ^ announcement); + static NarratorAnnouncement ^ GetMaxDigitsReachedAnnouncement(Platform::String ^ announcement); - static NarratorAnnouncement^ GetMemoryClearedAnnouncement(Platform::String^ announcement); - static NarratorAnnouncement^ GetMemoryItemChangedAnnouncement(Platform::String^ announcement); - static NarratorAnnouncement^ GetMemoryItemAddedAnnouncement(Platform::String^ announcement); + static NarratorAnnouncement ^ GetMemoryClearedAnnouncement(Platform::String ^ announcement); + static NarratorAnnouncement ^ GetMemoryItemChangedAnnouncement(Platform::String ^ announcement); + static NarratorAnnouncement ^ GetMemoryItemAddedAnnouncement(Platform::String ^ announcement); - static NarratorAnnouncement^ GetHistoryClearedAnnouncement(Platform::String^ announcement); + static NarratorAnnouncement ^ GetHistoryClearedAnnouncement(Platform::String ^ announcement); - static NarratorAnnouncement^ GetCategoryNameChangedAnnouncement(Platform::String^ announcement); + static NarratorAnnouncement ^ GetCategoryNameChangedAnnouncement(Platform::String ^ announcement); - static NarratorAnnouncement^ GetUpdateCurrencyRatesAnnouncement(Platform::String^ announcement); + static NarratorAnnouncement ^ GetUpdateCurrencyRatesAnnouncement(Platform::String ^ announcement); - static NarratorAnnouncement^ GetDisplayCopiedAnnouncement(Platform::String^ announcement); + static NarratorAnnouncement ^ GetDisplayCopiedAnnouncement(Platform::String ^ announcement); - static NarratorAnnouncement^ GetOpenParenthesisCountChangedAnnouncement(Platform::String^ announcement); - static NarratorAnnouncement^ GetNoRightParenthesisAddedAnnouncement(Platform::String ^ announcement); + static NarratorAnnouncement ^ GetOpenParenthesisCountChangedAnnouncement(Platform::String ^ announcement); + static NarratorAnnouncement ^ GetNoRightParenthesisAddedAnnouncement(Platform::String ^ announcement); }; } diff --git a/src/CalcViewModel/Common/Automation/NarratorAnnouncementHostFactory.cpp b/src/CalcViewModel/Common/Automation/NarratorAnnouncementHostFactory.cpp index ed773149..a103c7e7 100644 --- a/src/CalcViewModel/Common/Automation/NarratorAnnouncementHostFactory.cpp +++ b/src/CalcViewModel/Common/Automation/NarratorAnnouncementHostFactory.cpp @@ -9,8 +9,8 @@ using namespace CalculatorApp::Common::Automation; using namespace std; -INarratorAnnouncementHost^ NarratorAnnouncementHostFactory::s_hostProducer; -vector NarratorAnnouncementHostFactory::s_hosts; +INarratorAnnouncementHost ^ NarratorAnnouncementHostFactory::s_hostProducer; +vector NarratorAnnouncementHostFactory::s_hosts; // This static variable is used only to call the initialization function, to initialize the other static variables. int NarratorAnnouncementHostFactory::s_init = NarratorAnnouncementHostFactory::Initialize(); @@ -32,15 +32,12 @@ void NarratorAnnouncementHostFactory::RegisterHosts() { // The host that will be used is the first available host, // therefore, order of hosts is important here. - NarratorAnnouncementHostFactory::s_hosts = { - ref new NotificationHost(), - ref new LiveRegionHost() - }; + NarratorAnnouncementHostFactory::s_hosts = { ref new NotificationHost(), ref new LiveRegionHost() }; } -INarratorAnnouncementHost^ NarratorAnnouncementHostFactory::GetHostProducer() +INarratorAnnouncementHost ^ NarratorAnnouncementHostFactory::GetHostProducer() { - for (INarratorAnnouncementHost^ host : NarratorAnnouncementHostFactory::s_hosts) + for (INarratorAnnouncementHost ^ host : NarratorAnnouncementHostFactory::s_hosts) { if (host->IsHostAvailable()) { @@ -52,7 +49,7 @@ INarratorAnnouncementHost^ NarratorAnnouncementHostFactory::GetHostProducer() return nullptr; } -INarratorAnnouncementHost^ NarratorAnnouncementHostFactory::MakeHost() +INarratorAnnouncementHost ^ NarratorAnnouncementHostFactory::MakeHost() { if (NarratorAnnouncementHostFactory::s_hostProducer == nullptr) { diff --git a/src/CalcViewModel/Common/Automation/NarratorAnnouncementHostFactory.h b/src/CalcViewModel/Common/Automation/NarratorAnnouncementHostFactory.h index c11a894e..4b739a79 100644 --- a/src/CalcViewModel/Common/Automation/NarratorAnnouncementHostFactory.h +++ b/src/CalcViewModel/Common/Automation/NarratorAnnouncementHostFactory.h @@ -14,18 +14,20 @@ namespace CalculatorApp::Common::Automation class NarratorAnnouncementHostFactory { public: - static INarratorAnnouncementHost^ MakeHost(); + static INarratorAnnouncementHost ^ MakeHost(); private: - NarratorAnnouncementHostFactory() {} + NarratorAnnouncementHostFactory() + { + } static int Initialize(); static void RegisterHosts(); - static INarratorAnnouncementHost^ GetHostProducer(); + static INarratorAnnouncementHost ^ GetHostProducer(); private: static int s_init; - static INarratorAnnouncementHost^ s_hostProducer; - static std::vector s_hosts; + static INarratorAnnouncementHost ^ s_hostProducer; + static std::vector s_hosts; }; } diff --git a/src/CalcViewModel/Common/Automation/NarratorNotifier.cpp b/src/CalcViewModel/Common/Automation/NarratorNotifier.cpp index b17aaba4..0f3fb8d5 100644 --- a/src/CalcViewModel/Common/Automation/NarratorNotifier.cpp +++ b/src/CalcViewModel/Common/Automation/NarratorNotifier.cpp @@ -13,17 +13,16 @@ using namespace Windows::UI::Xaml; using namespace Windows::UI::Xaml::Automation; using namespace Windows::UI::Xaml::Automation::Peers; -DependencyProperty^ NarratorNotifier::s_announcementProperty; +DependencyProperty ^ NarratorNotifier::s_announcementProperty; NarratorNotifier::NarratorNotifier() { m_announcementHost = NarratorAnnouncementHostFactory::MakeHost(); } -void NarratorNotifier::Announce(NarratorAnnouncement^ announcement) +void NarratorNotifier::Announce(NarratorAnnouncement ^ announcement) { - if (NarratorAnnouncement::IsValid(announcement) - && m_announcementHost != nullptr) + if (NarratorAnnouncement::IsValid(announcement) && m_announcementHost != nullptr) { m_announcementHost->Announce(announcement); } @@ -31,20 +30,18 @@ void NarratorNotifier::Announce(NarratorAnnouncement^ announcement) void NarratorNotifier::RegisterDependencyProperties() { - s_announcementProperty = DependencyProperty::Register( - L"Announcement", // The name of the dependency property. - NarratorAnnouncement::typeid, // The type of the dependency property. - NarratorNotifier::typeid, // The owner of the dependency property. - ref new PropertyMetadata( - nullptr, // Default value of the dependency property. - ref new PropertyChangedCallback(OnAnnouncementChanged))); + s_announcementProperty = DependencyProperty::Register(L"Announcement", // The name of the dependency property. + NarratorAnnouncement::typeid, // The type of the dependency property. + NarratorNotifier::typeid, // The owner of the dependency property. + ref new PropertyMetadata(nullptr, // Default value of the dependency property. + ref new PropertyChangedCallback(OnAnnouncementChanged))); } -void NarratorNotifier::OnAnnouncementChanged(_In_ DependencyObject^ dependencyObject, _In_ DependencyPropertyChangedEventArgs^ e) +void NarratorNotifier::OnAnnouncementChanged(_In_ DependencyObject ^ dependencyObject, _In_ DependencyPropertyChangedEventArgs ^ e) { - auto instance = safe_cast(dependencyObject); + auto instance = safe_cast(dependencyObject); if (instance != nullptr) { - instance->Announce(safe_cast(e->NewValue)); + instance->Announce(safe_cast(e->NewValue)); } } diff --git a/src/CalcViewModel/Common/Automation/NarratorNotifier.h b/src/CalcViewModel/Common/Automation/NarratorNotifier.h index c12e2277..fda841ce 100644 --- a/src/CalcViewModel/Common/Automation/NarratorNotifier.h +++ b/src/CalcViewModel/Common/Automation/NarratorNotifier.h @@ -8,12 +8,13 @@ namespace CalculatorApp::Common::Automation { - public ref class NarratorNotifier sealed : public Windows::UI::Xaml::DependencyObject +public + ref class NarratorNotifier sealed : public Windows::UI::Xaml::DependencyObject { public: NarratorNotifier(); - void Announce(NarratorAnnouncement^ announcement); + void Announce(NarratorAnnouncement ^ announcement); property NarratorAnnouncement^ Announcement { @@ -26,32 +27,25 @@ namespace CalculatorApp::Common::Automation static void RegisterDependencyProperties(); - static property Windows::UI::Xaml::DependencyProperty^ AnnouncementProperty - { - Windows::UI::Xaml::DependencyProperty^ get() - { - return s_announcementProperty; - } - } + static property Windows::UI::Xaml::DependencyProperty + ^ AnnouncementProperty { Windows::UI::Xaml::DependencyProperty ^ get() { return s_announcementProperty; } } - static NarratorAnnouncement^ GetAnnouncement(Windows::UI::Xaml::DependencyObject^ element) - { - return safe_cast(element->GetValue(s_announcementProperty)); - } + static NarratorAnnouncement + ^ GetAnnouncement(Windows::UI::Xaml::DependencyObject + ^ element) { return safe_cast(element->GetValue(s_announcementProperty)); } - static void SetAnnouncement(Windows::UI::Xaml::DependencyObject^ element, NarratorAnnouncement^ value) + static void SetAnnouncement(Windows::UI::Xaml::DependencyObject ^ element, NarratorAnnouncement ^ value) { element->SetValue(s_announcementProperty, value); } private: - static void OnAnnouncementChanged( - _In_ Windows::UI::Xaml::DependencyObject^ dependencyObject, - _In_ Windows::UI::Xaml::DependencyPropertyChangedEventArgs^ eventArgs); + static void OnAnnouncementChanged(_In_ Windows::UI::Xaml::DependencyObject ^ dependencyObject, + _In_ Windows::UI::Xaml::DependencyPropertyChangedEventArgs ^ eventArgs); - static Windows::UI::Xaml::DependencyProperty^ s_announcementProperty; + static Windows::UI::Xaml::DependencyProperty ^ s_announcementProperty; private: - INarratorAnnouncementHost^ m_announcementHost; + INarratorAnnouncementHost ^ m_announcementHost; }; } diff --git a/src/CalcViewModel/Common/Automation/NotificationHost.cpp b/src/CalcViewModel/Common/Automation/NotificationHost.cpp index 77ddddb1..d3951846 100644 --- a/src/CalcViewModel/Common/Automation/NotificationHost.cpp +++ b/src/CalcViewModel/Common/Automation/NotificationHost.cpp @@ -10,23 +10,21 @@ using namespace Windows::UI::Xaml::Automation; using namespace Windows::UI::Xaml::Automation::Peers; using namespace Windows::UI::Xaml::Controls; -NotificationHost::NotificationHost() : - m_host(nullptr) -{} +NotificationHost::NotificationHost() : m_host(nullptr) +{ +} bool NotificationHost::IsHostAvailable() { - return ApiInformation::IsMethodPresent( - L"Windows.UI.Xaml.Automation.Peers.AutomationPeer", - L"RaiseNotificationEvent"); + return ApiInformation::IsMethodPresent(L"Windows.UI.Xaml.Automation.Peers.AutomationPeer", L"RaiseNotificationEvent"); } -INarratorAnnouncementHost^ NotificationHost::MakeHost() +INarratorAnnouncementHost ^ NotificationHost::MakeHost() { return ref new NotificationHost(); } -void NotificationHost::Announce(NarratorAnnouncement^ announcement) +void NotificationHost::Announce(NarratorAnnouncement ^ announcement) { if (m_host == nullptr) { @@ -36,16 +34,12 @@ void NotificationHost::Announce(NarratorAnnouncement^ announcement) auto peer = FrameworkElementAutomationPeer::FromElement(m_host); if (peer != nullptr) { - peer->RaiseNotificationEvent( - GetWindowsNotificationKind(announcement->Kind), - GetWindowsNotificationProcessing(announcement->Processing), - announcement->Announcement, - announcement->ActivityId); + peer->RaiseNotificationEvent(GetWindowsNotificationKind(announcement->Kind), GetWindowsNotificationProcessing(announcement->Processing), + announcement->Announcement, announcement->ActivityId); } } -StandardPeers::AutomationNotificationKind NotificationHost::GetWindowsNotificationKind( - CustomPeers::AutomationNotificationKind customKindType) +StandardPeers::AutomationNotificationKind NotificationHost::GetWindowsNotificationKind(CustomPeers::AutomationNotificationKind customKindType) { switch (customKindType) { @@ -71,8 +65,8 @@ StandardPeers::AutomationNotificationKind NotificationHost::GetWindowsNotificati return StandardPeers::AutomationNotificationKind::Other; } -StandardPeers::AutomationNotificationProcessing NotificationHost::GetWindowsNotificationProcessing( - CustomPeers::AutomationNotificationProcessing customProcessingType) +StandardPeers::AutomationNotificationProcessing +NotificationHost::GetWindowsNotificationProcessing(CustomPeers::AutomationNotificationProcessing customProcessingType) { switch (customProcessingType) { diff --git a/src/CalcViewModel/Common/Automation/NotificationHost.h b/src/CalcViewModel/Common/Automation/NotificationHost.h index 7bcd1e24..d0a929c6 100644 --- a/src/CalcViewModel/Common/Automation/NotificationHost.h +++ b/src/CalcViewModel/Common/Automation/NotificationHost.h @@ -10,25 +10,25 @@ namespace CalculatorApp::Common::Automation { - public ref class NotificationHost sealed : public INarratorAnnouncementHost +public + ref class NotificationHost sealed : public INarratorAnnouncementHost { public: NotificationHost(); virtual bool IsHostAvailable(); - virtual INarratorAnnouncementHost^ MakeHost(); + virtual INarratorAnnouncementHost ^ MakeHost(); - virtual void Announce(NarratorAnnouncement^ announcement); + virtual void Announce(NarratorAnnouncement ^ announcement); private: - static Windows::UI::Xaml::Automation::Peers::AutomationNotificationKind GetWindowsNotificationKind( - CalculatorApp::Common::Automation::AutomationNotificationKind customKindType); + static Windows::UI::Xaml::Automation::Peers::AutomationNotificationKind + GetWindowsNotificationKind(CalculatorApp::Common::Automation::AutomationNotificationKind customKindType); - static Windows::UI::Xaml::Automation::Peers::AutomationNotificationProcessing GetWindowsNotificationProcessing( - CalculatorApp::Common::Automation::AutomationNotificationProcessing customProcessingType); + static Windows::UI::Xaml::Automation::Peers::AutomationNotificationProcessing + GetWindowsNotificationProcessing(CalculatorApp::Common::Automation::AutomationNotificationProcessing customProcessingType); private: - Windows::UI::Xaml::UIElement^ m_host; + Windows::UI::Xaml::UIElement ^ m_host; }; } - diff --git a/src/CalcViewModel/Common/BindableBase.cpp b/src/CalcViewModel/Common/BindableBase.cpp index b1fdcc78..ccba7985 100644 --- a/src/CalcViewModel/Common/BindableBase.cpp +++ b/src/CalcViewModel/Common/BindableBase.cpp @@ -13,22 +13,22 @@ using namespace Windows::UI::Xaml::Data; /// Notifies listeners that a property value has changed. /// /// Name of the property used to notify listeners. -void BindableBase::OnPropertyChanged(String^ propertyName) +void BindableBase::OnPropertyChanged(String ^ propertyName) { PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName)); } -Windows::UI::Xaml::Data::ICustomProperty^ BindableBase::GetCustomProperty(Platform::String^ name) +Windows::UI::Xaml::Data::ICustomProperty ^ BindableBase::GetCustomProperty(Platform::String ^ name) { return nullptr; } -Windows::UI::Xaml::Data::ICustomProperty^ BindableBase::GetIndexedProperty(Platform::String^ name, Windows::UI::Xaml::Interop::TypeName type) +Windows::UI::Xaml::Data::ICustomProperty ^ BindableBase::GetIndexedProperty(Platform::String ^ name, Windows::UI::Xaml::Interop::TypeName type) { return nullptr; } -Platform::String^ BindableBase::GetStringRepresentation() +Platform::String ^ BindableBase::GetStringRepresentation() { return this->ToString(); } diff --git a/src/CalcViewModel/Common/BindableBase.h b/src/CalcViewModel/Common/BindableBase.h index b6a9f32e..d1f958f5 100644 --- a/src/CalcViewModel/Common/BindableBase.h +++ b/src/CalcViewModel/Common/BindableBase.h @@ -10,26 +10,29 @@ namespace CalculatorApp /// /// Implementation of to simplify models. /// - [Windows::Foundation::Metadata::WebHostHidden] - public ref class BindableBase : Windows::UI::Xaml::DependencyObject, Windows::UI::Xaml::Data::INotifyPropertyChanged, Windows::UI::Xaml::Data::ICustomPropertyProvider + [Windows::Foundation::Metadata::WebHostHidden] public ref class BindableBase : Windows::UI::Xaml::DependencyObject, + Windows::UI::Xaml::Data::INotifyPropertyChanged, + Windows::UI::Xaml::Data::ICustomPropertyProvider { public: - virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler^ PropertyChanged; + virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler ^ PropertyChanged; public: // ICustomPropertyProvider - virtual Windows::UI::Xaml::Data::ICustomProperty^ GetCustomProperty(Platform::String^ name); - virtual Windows::UI::Xaml::Data::ICustomProperty^ GetIndexedProperty(Platform::String^ name, Windows::UI::Xaml::Interop::TypeName type); - virtual Platform::String^ GetStringRepresentation(); + virtual Windows::UI::Xaml::Data::ICustomProperty ^ GetCustomProperty(Platform::String ^ name); + virtual Windows::UI::Xaml::Data::ICustomProperty ^ GetIndexedProperty(Platform::String ^ name, Windows::UI::Xaml::Interop::TypeName type); + virtual Platform::String ^ GetStringRepresentation(); property Windows::UI::Xaml::Interop::TypeName Type { - virtual Windows::UI::Xaml::Interop::TypeName get() { return this->GetType(); } + virtual Windows::UI::Xaml::Interop::TypeName get() + { + return this->GetType(); + } } - protected: - virtual void OnPropertyChanged(Platform::String^ propertyName); + virtual void OnPropertyChanged(Platform::String ^ propertyName); }; } } diff --git a/src/CalcViewModel/Common/CalculatorButtonPressedEventArgs.cpp b/src/CalcViewModel/Common/CalculatorButtonPressedEventArgs.cpp index 4dfd4bce..76c0d4c0 100644 --- a/src/CalcViewModel/Common/CalculatorButtonPressedEventArgs.cpp +++ b/src/CalcViewModel/Common/CalculatorButtonPressedEventArgs.cpp @@ -8,9 +8,9 @@ using namespace CalculatorApp; using namespace CalculatorApp::Common; using namespace Platform; -NumbersAndOperatorsEnum CalculatorButtonPressedEventArgs::GetOperationFromCommandParameter(_In_ Object^ commandParameter) +NumbersAndOperatorsEnum CalculatorButtonPressedEventArgs::GetOperationFromCommandParameter(_In_ Object ^ commandParameter) { - auto eventArgs = dynamic_cast(commandParameter); + auto eventArgs = dynamic_cast(commandParameter); if (eventArgs != nullptr) { return eventArgs->Operation; @@ -21,9 +21,9 @@ NumbersAndOperatorsEnum CalculatorButtonPressedEventArgs::GetOperationFromComman } } -String^ CalculatorButtonPressedEventArgs::GetAuditoryFeedbackFromCommandParameter(_In_ Object^ commandParameter) +String ^ CalculatorButtonPressedEventArgs::GetAuditoryFeedbackFromCommandParameter(_In_ Object ^ commandParameter) { - auto eventArgs = dynamic_cast(commandParameter); + auto eventArgs = dynamic_cast(commandParameter); if (eventArgs != nullptr) { return eventArgs->AuditoryFeedback; @@ -33,4 +33,3 @@ String^ CalculatorButtonPressedEventArgs::GetAuditoryFeedbackFromCommandParamete return nullptr; } } - diff --git a/src/CalcViewModel/Common/CalculatorButtonPressedEventArgs.h b/src/CalcViewModel/Common/CalculatorButtonPressedEventArgs.h index 69f0fee4..2f7bc721 100644 --- a/src/CalcViewModel/Common/CalculatorButtonPressedEventArgs.h +++ b/src/CalcViewModel/Common/CalculatorButtonPressedEventArgs.h @@ -10,18 +10,20 @@ namespace CalculatorApp { namespace Common { - public ref class CalculatorButtonPressedEventArgs sealed + public + ref class CalculatorButtonPressedEventArgs sealed { public: - PROPERTY_R(Platform::String^, AuditoryFeedback); + PROPERTY_R(Platform::String ^, AuditoryFeedback); PROPERTY_R(CalculatorApp::NumbersAndOperatorsEnum, Operation); - CalculatorButtonPressedEventArgs( - Platform::String^ feedback, CalculatorApp::NumbersAndOperatorsEnum operation) : - m_AuditoryFeedback(feedback), m_Operation(operation) {} + CalculatorButtonPressedEventArgs(Platform::String ^ feedback, CalculatorApp::NumbersAndOperatorsEnum operation) + : m_AuditoryFeedback(feedback), m_Operation(operation) + { + } - static CalculatorApp::NumbersAndOperatorsEnum GetOperationFromCommandParameter(_In_ Platform::Object^ commandParameter); - static Platform::String^ GetAuditoryFeedbackFromCommandParameter(_In_ Platform::Object^ commandParameter); + static CalculatorApp::NumbersAndOperatorsEnum GetOperationFromCommandParameter(_In_ Platform::Object ^ commandParameter); + static Platform::String ^ GetAuditoryFeedbackFromCommandParameter(_In_ Platform::Object ^ commandParameter); }; } } diff --git a/src/CalcViewModel/Common/CalculatorButtonUser.h b/src/CalcViewModel/Common/CalculatorButtonUser.h index cc6647d9..19fa4044 100644 --- a/src/CalcViewModel/Common/CalculatorButtonUser.h +++ b/src/CalcViewModel/Common/CalculatorButtonUser.h @@ -9,205 +9,207 @@ namespace CalculatorApp { namespace CM = CalculationManager; - public enum class NumbersAndOperatorsEnum +public + enum class NumbersAndOperatorsEnum { - Zero = (int) CM::Command::Command0, - One = (int) CM::Command::Command1, - Two = (int) CM::Command::Command2, - Three = (int) CM::Command::Command3, - Four = (int) CM::Command::Command4, - Five = (int) CM::Command::Command5, - Six = (int) CM::Command::Command6, - Seven = (int) CM::Command::Command7, - Eight = (int) CM::Command::Command8, - Nine = (int) CM::Command::Command9, - Add = (int) CM::Command::CommandADD, - Subtract = (int) CM::Command::CommandSUB, - Multiply = (int) CM::Command::CommandMUL, - Divide = (int) CM::Command::CommandDIV, - Invert = (int) CM::Command::CommandREC, - Equals = (int) CM::Command::CommandEQU, - Decimal = (int) CM::Command::CommandPNT, - Sqrt = (int) CM::Command::CommandSQRT, - Percent = (int) CM::Command::CommandPERCENT, - Negate = (int) CM::Command::CommandSIGN, - Backspace = (int) CM::Command::CommandBACK, - ClearEntry = (int) CM::Command::CommandCENTR, - Clear = (int) CM::Command::CommandCLEAR, - Degree = (int) CM::Command::CommandDEG, - Radians = (int) CM::Command::CommandRAD, - Grads = (int) CM::Command::CommandGRAD, - Degrees = (int) CM::Command::CommandDegrees, - OpenParenthesis = (int) CM::Command::CommandOPENP, - CloseParenthesis = (int) CM::Command::CommandCLOSEP, - Pi = (int) CM::Command::CommandPI, - Sin = (int) CM::Command::CommandSIN, - Cos = (int) CM::Command::CommandCOS, - Tan = (int) CM::Command::CommandTAN, - Factorial = (int) CM::Command::CommandFAC, - XPower2 = (int) CM::Command::CommandSQR, - Mod = (int) CM::Command::CommandMOD, - FToE = (int) CM::Command::CommandFE, - LogBaseE = (int) CM::Command::CommandLN, - InvSin = (int) CM::Command::CommandASIN, - InvCos = (int) CM::Command::CommandACOS, - InvTan = (int) CM::Command::CommandATAN, - LogBase10 = (int) CM::Command::CommandLOG, - XPowerY = (int) CM::Command::CommandPWR, - YRootX = (int) CM::Command::CommandROOT, - TenPowerX = (int) CM::Command::CommandPOW10, - EPowerX = (int) CM::Command::CommandPOWE, - Exp = (int) CM::Command::CommandEXP, - IsScientificMode = (int) CM::Command::ModeScientific, - IsStandardMode = (int) CM::Command::ModeBasic, - None = (int) CM::Command::CommandNULL, - IsProgrammerMode = (int) CM::Command::ModeProgrammer, - DecButton = (int) CM::Command::CommandDec, - OctButton = (int) CM::Command::CommandOct, - HexButton = (int) CM::Command::CommandHex, - BinButton = (int) CM::Command::CommandBin, - And = (int) CM::Command::CommandAnd, - Ror = (int) CM::Command::CommandROR, - Rol = (int) CM::Command::CommandROL, - Or = (int) CM::Command::CommandOR, - Lsh = (int) CM::Command::CommandLSHF, - Rsh = (int) CM::Command::CommandRSHF, - Xor = (int) CM::Command::CommandXor, - Not = (int) CM::Command::CommandNot, - A = (int) CM::Command::CommandA, - B = (int) CM::Command::CommandB, - C = (int) CM::Command::CommandC, - D = (int) CM::Command::CommandD, - E = (int) CM::Command::CommandE, - F = (int) CM::Command::CommandF, + Zero = (int)CM::Command::Command0, + One = (int)CM::Command::Command1, + Two = (int)CM::Command::Command2, + Three = (int)CM::Command::Command3, + Four = (int)CM::Command::Command4, + Five = (int)CM::Command::Command5, + Six = (int)CM::Command::Command6, + Seven = (int)CM::Command::Command7, + Eight = (int)CM::Command::Command8, + Nine = (int)CM::Command::Command9, + Add = (int)CM::Command::CommandADD, + Subtract = (int)CM::Command::CommandSUB, + Multiply = (int)CM::Command::CommandMUL, + Divide = (int)CM::Command::CommandDIV, + Invert = (int)CM::Command::CommandREC, + Equals = (int)CM::Command::CommandEQU, + Decimal = (int)CM::Command::CommandPNT, + Sqrt = (int)CM::Command::CommandSQRT, + Percent = (int)CM::Command::CommandPERCENT, + Negate = (int)CM::Command::CommandSIGN, + Backspace = (int)CM::Command::CommandBACK, + ClearEntry = (int)CM::Command::CommandCENTR, + Clear = (int)CM::Command::CommandCLEAR, + Degree = (int)CM::Command::CommandDEG, + Radians = (int)CM::Command::CommandRAD, + Grads = (int)CM::Command::CommandGRAD, + Degrees = (int)CM::Command::CommandDegrees, + OpenParenthesis = (int)CM::Command::CommandOPENP, + CloseParenthesis = (int)CM::Command::CommandCLOSEP, + Pi = (int)CM::Command::CommandPI, + Sin = (int)CM::Command::CommandSIN, + Cos = (int)CM::Command::CommandCOS, + Tan = (int)CM::Command::CommandTAN, + Factorial = (int)CM::Command::CommandFAC, + XPower2 = (int)CM::Command::CommandSQR, + Mod = (int)CM::Command::CommandMOD, + FToE = (int)CM::Command::CommandFE, + LogBaseE = (int)CM::Command::CommandLN, + InvSin = (int)CM::Command::CommandASIN, + InvCos = (int)CM::Command::CommandACOS, + InvTan = (int)CM::Command::CommandATAN, + LogBase10 = (int)CM::Command::CommandLOG, + XPowerY = (int)CM::Command::CommandPWR, + YRootX = (int)CM::Command::CommandROOT, + TenPowerX = (int)CM::Command::CommandPOW10, + EPowerX = (int)CM::Command::CommandPOWE, + Exp = (int)CM::Command::CommandEXP, + IsScientificMode = (int)CM::Command::ModeScientific, + IsStandardMode = (int)CM::Command::ModeBasic, + None = (int)CM::Command::CommandNULL, + IsProgrammerMode = (int)CM::Command::ModeProgrammer, + DecButton = (int)CM::Command::CommandDec, + OctButton = (int)CM::Command::CommandOct, + HexButton = (int)CM::Command::CommandHex, + BinButton = (int)CM::Command::CommandBin, + And = (int)CM::Command::CommandAnd, + Ror = (int)CM::Command::CommandROR, + Rol = (int)CM::Command::CommandROL, + Or = (int)CM::Command::CommandOR, + Lsh = (int)CM::Command::CommandLSHF, + Rsh = (int)CM::Command::CommandRSHF, + Xor = (int)CM::Command::CommandXor, + Not = (int)CM::Command::CommandNot, + A = (int)CM::Command::CommandA, + B = (int)CM::Command::CommandB, + C = (int)CM::Command::CommandC, + D = (int)CM::Command::CommandD, + E = (int)CM::Command::CommandE, + F = (int)CM::Command::CommandF, Memory, // This is the memory button. Doesn't have a direct mapping to the CalcEngine. - Sinh = (int) CM::Command::CommandSINH, - Cosh = (int) CM::Command::CommandCOSH, - Tanh = (int) CM::Command::CommandTANH, - InvSinh = (int) CM::Command::CommandASINH, - InvCosh = (int) CM::Command::CommandACOSH, - InvTanh = (int) CM::Command::CommandATANH, - Qword = (int) CM::Command::CommandQword, - Dword = (int) CM::Command::CommandDword, - Word = (int) CM::Command::CommandWord, - Byte = (int) CM::Command::CommandByte, - Cube = (int) CM::Command::CommandCUB, - DMS = (int) CM::Command::CommandDMS, + Sinh = (int)CM::Command::CommandSINH, + Cosh = (int)CM::Command::CommandCOSH, + Tanh = (int)CM::Command::CommandTANH, + InvSinh = (int)CM::Command::CommandASINH, + InvCosh = (int)CM::Command::CommandACOSH, + InvTanh = (int)CM::Command::CommandATANH, + Qword = (int)CM::Command::CommandQword, + Dword = (int)CM::Command::CommandDword, + Word = (int)CM::Command::CommandWord, + Byte = (int)CM::Command::CommandByte, + Cube = (int)CM::Command::CommandCUB, + DMS = (int)CM::Command::CommandDMS, - BINSTART = (int) CM::Command::CommandBINEDITSTART, - BINPOS0 = (int) CM::Command::CommandBINPOS0, - BINPOS1 = (int) CM::Command::CommandBINPOS1, - BINPOS2 = (int) CM::Command::CommandBINPOS2, - BINPOS3 = (int) CM::Command::CommandBINPOS3, - BINPOS4 = (int) CM::Command::CommandBINPOS4, - BINPOS5 = (int) CM::Command::CommandBINPOS5, - BINPOS6 = (int) CM::Command::CommandBINPOS6, - BINPOS7 = (int) CM::Command::CommandBINPOS7, - BINPOS8 = (int) CM::Command::CommandBINPOS8, - BINPOS9 = (int) CM::Command::CommandBINPOS9, - BINPOS10 = (int) CM::Command::CommandBINPOS10, - BINPOS11 = (int) CM::Command::CommandBINPOS11, - BINPOS12 = (int) CM::Command::CommandBINPOS12, - BINPOS13 = (int) CM::Command::CommandBINPOS13, - BINPOS14 = (int) CM::Command::CommandBINPOS14, - BINPOS15 = (int) CM::Command::CommandBINPOS15, - BINPOS16 = (int) CM::Command::CommandBINPOS16, - BINPOS17 = (int) CM::Command::CommandBINPOS17, - BINPOS18 = (int) CM::Command::CommandBINPOS18, - BINPOS19 = (int) CM::Command::CommandBINPOS19, - BINPOS20 = (int) CM::Command::CommandBINPOS20, - BINPOS21 = (int) CM::Command::CommandBINPOS21, - BINPOS22 = (int) CM::Command::CommandBINPOS22, - BINPOS23 = (int) CM::Command::CommandBINPOS23, - BINPOS24 = (int) CM::Command::CommandBINPOS24, - BINPOS25 = (int) CM::Command::CommandBINPOS25, - BINPOS26 = (int) CM::Command::CommandBINPOS26, - BINPOS27 = (int) CM::Command::CommandBINPOS27, - BINPOS28 = (int) CM::Command::CommandBINPOS28, - BINPOS29 = (int) CM::Command::CommandBINPOS29, - BINPOS30 = (int) CM::Command::CommandBINPOS30, - BINPOS31 = (int) CM::Command::CommandBINPOS31, - BINPOS32 = (int) CM::Command::CommandBINPOS32, - BINPOS33 = (int) CM::Command::CommandBINPOS33, - BINPOS34 = (int) CM::Command::CommandBINPOS34, - BINPOS35 = (int) CM::Command::CommandBINPOS35, - BINPOS36 = (int) CM::Command::CommandBINPOS36, - BINPOS37 = (int) CM::Command::CommandBINPOS37, - BINPOS38 = (int) CM::Command::CommandBINPOS38, - BINPOS39 = (int) CM::Command::CommandBINPOS39, - BINPOS40 = (int) CM::Command::CommandBINPOS40, - BINPOS41 = (int) CM::Command::CommandBINPOS41, - BINPOS42 = (int) CM::Command::CommandBINPOS42, - BINPOS43 = (int) CM::Command::CommandBINPOS43, - BINPOS44 = (int) CM::Command::CommandBINPOS44, - BINPOS45 = (int) CM::Command::CommandBINPOS45, - BINPOS46 = (int) CM::Command::CommandBINPOS46, - BINPOS47 = (int) CM::Command::CommandBINPOS47, - BINPOS48 = (int) CM::Command::CommandBINPOS48, - BINPOS49 = (int) CM::Command::CommandBINPOS49, - BINPOS50 = (int) CM::Command::CommandBINPOS50, - BINPOS51 = (int) CM::Command::CommandBINPOS51, - BINPOS52 = (int) CM::Command::CommandBINPOS52, - BINPOS53 = (int) CM::Command::CommandBINPOS53, - BINPOS54 = (int) CM::Command::CommandBINPOS54, - BINPOS55 = (int) CM::Command::CommandBINPOS55, - BINPOS56 = (int) CM::Command::CommandBINPOS56, - BINPOS57 = (int) CM::Command::CommandBINPOS57, - BINPOS58 = (int) CM::Command::CommandBINPOS58, - BINPOS59 = (int) CM::Command::CommandBINPOS59, - BINPOS60 = (int) CM::Command::CommandBINPOS60, - BINPOS61 = (int) CM::Command::CommandBINPOS61, - BINPOS62 = (int) CM::Command::CommandBINPOS62, - BINPOS63 = (int) CM::Command::CommandBINPOS63, - BINEND = (int) CM::Command::CommandBINEDITEND, - Hyp = (int) CM::Command::CommandHYP + BINSTART = (int)CM::Command::CommandBINEDITSTART, + BINPOS0 = (int)CM::Command::CommandBINPOS0, + BINPOS1 = (int)CM::Command::CommandBINPOS1, + BINPOS2 = (int)CM::Command::CommandBINPOS2, + BINPOS3 = (int)CM::Command::CommandBINPOS3, + BINPOS4 = (int)CM::Command::CommandBINPOS4, + BINPOS5 = (int)CM::Command::CommandBINPOS5, + BINPOS6 = (int)CM::Command::CommandBINPOS6, + BINPOS7 = (int)CM::Command::CommandBINPOS7, + BINPOS8 = (int)CM::Command::CommandBINPOS8, + BINPOS9 = (int)CM::Command::CommandBINPOS9, + BINPOS10 = (int)CM::Command::CommandBINPOS10, + BINPOS11 = (int)CM::Command::CommandBINPOS11, + BINPOS12 = (int)CM::Command::CommandBINPOS12, + BINPOS13 = (int)CM::Command::CommandBINPOS13, + BINPOS14 = (int)CM::Command::CommandBINPOS14, + BINPOS15 = (int)CM::Command::CommandBINPOS15, + BINPOS16 = (int)CM::Command::CommandBINPOS16, + BINPOS17 = (int)CM::Command::CommandBINPOS17, + BINPOS18 = (int)CM::Command::CommandBINPOS18, + BINPOS19 = (int)CM::Command::CommandBINPOS19, + BINPOS20 = (int)CM::Command::CommandBINPOS20, + BINPOS21 = (int)CM::Command::CommandBINPOS21, + BINPOS22 = (int)CM::Command::CommandBINPOS22, + BINPOS23 = (int)CM::Command::CommandBINPOS23, + BINPOS24 = (int)CM::Command::CommandBINPOS24, + BINPOS25 = (int)CM::Command::CommandBINPOS25, + BINPOS26 = (int)CM::Command::CommandBINPOS26, + BINPOS27 = (int)CM::Command::CommandBINPOS27, + BINPOS28 = (int)CM::Command::CommandBINPOS28, + BINPOS29 = (int)CM::Command::CommandBINPOS29, + BINPOS30 = (int)CM::Command::CommandBINPOS30, + BINPOS31 = (int)CM::Command::CommandBINPOS31, + BINPOS32 = (int)CM::Command::CommandBINPOS32, + BINPOS33 = (int)CM::Command::CommandBINPOS33, + BINPOS34 = (int)CM::Command::CommandBINPOS34, + BINPOS35 = (int)CM::Command::CommandBINPOS35, + BINPOS36 = (int)CM::Command::CommandBINPOS36, + BINPOS37 = (int)CM::Command::CommandBINPOS37, + BINPOS38 = (int)CM::Command::CommandBINPOS38, + BINPOS39 = (int)CM::Command::CommandBINPOS39, + BINPOS40 = (int)CM::Command::CommandBINPOS40, + BINPOS41 = (int)CM::Command::CommandBINPOS41, + BINPOS42 = (int)CM::Command::CommandBINPOS42, + BINPOS43 = (int)CM::Command::CommandBINPOS43, + BINPOS44 = (int)CM::Command::CommandBINPOS44, + BINPOS45 = (int)CM::Command::CommandBINPOS45, + BINPOS46 = (int)CM::Command::CommandBINPOS46, + BINPOS47 = (int)CM::Command::CommandBINPOS47, + BINPOS48 = (int)CM::Command::CommandBINPOS48, + BINPOS49 = (int)CM::Command::CommandBINPOS49, + BINPOS50 = (int)CM::Command::CommandBINPOS50, + BINPOS51 = (int)CM::Command::CommandBINPOS51, + BINPOS52 = (int)CM::Command::CommandBINPOS52, + BINPOS53 = (int)CM::Command::CommandBINPOS53, + BINPOS54 = (int)CM::Command::CommandBINPOS54, + BINPOS55 = (int)CM::Command::CommandBINPOS55, + BINPOS56 = (int)CM::Command::CommandBINPOS56, + BINPOS57 = (int)CM::Command::CommandBINPOS57, + BINPOS58 = (int)CM::Command::CommandBINPOS58, + BINPOS59 = (int)CM::Command::CommandBINPOS59, + BINPOS60 = (int)CM::Command::CommandBINPOS60, + BINPOS61 = (int)CM::Command::CommandBINPOS61, + BINPOS62 = (int)CM::Command::CommandBINPOS62, + BINPOS63 = (int)CM::Command::CommandBINPOS63, + BINEND = (int)CM::Command::CommandBINEDITEND, + Hyp = (int)CM::Command::CommandHYP }; // This contains list of functions whose usage we are tracelogging - public enum class FunctionLogEnum +public + enum class FunctionLogEnum { - Invert = (int) CM::Command::CommandREC, - Sqrt = (int) CM::Command::CommandSQRT, - Percent = (int) CM::Command::CommandPERCENT, - Negate = (int) CM::Command::CommandSIGN, - Degrees = (int) CM::Command::CommandDegrees, - Pi = (int) CM::Command::CommandPI, - Sin = (int) CM::Command::CommandSIN, - Cos = (int) CM::Command::CommandCOS, - Tan = (int) CM::Command::CommandTAN, - Factorial = (int) CM::Command::CommandFAC, - XPower2 = (int) CM::Command::CommandSQR, - Mod = (int) CM::Command::CommandMOD, - FToE = (int) CM::Command::CommandFE, - LogBaseE = (int) CM::Command::CommandLN, - InvSin = (int) CM::Command::CommandASIN, - InvCos = (int) CM::Command::CommandACOS, - InvTan = (int) CM::Command::CommandATAN, - LogBase10 = (int) CM::Command::CommandLOG, - XPowerY = (int) CM::Command::CommandPWR, - YRootX = (int) CM::Command::CommandROOT, - TenPowerX = (int) CM::Command::CommandPOW10, - EPowerX = (int) CM::Command::CommandPOWE, - Exp = (int) CM::Command::CommandEXP, - DecButton = (int) CM::Command::CommandDec, - OctButton = (int) CM::Command::CommandOct, - HexButton = (int) CM::Command::CommandHex, - BinButton = (int) CM::Command::CommandBin, - And = (int) CM::Command::CommandAnd, - Ror = (int) CM::Command::CommandROR, - Rol = (int) CM::Command::CommandROL, - Or = (int) CM::Command::CommandOR, - Lsh = (int) CM::Command::CommandLSHF, - Rsh = (int) CM::Command::CommandRSHF, - Xor = (int) CM::Command::CommandXor, - Not = (int) CM::Command::CommandNot, - Sinh = (int) CM::Command::CommandSINH, - Cosh = (int) CM::Command::CommandCOSH, - Tanh = (int) CM::Command::CommandTANH, - InvSinh = (int) CM::Command::CommandASINH, - InvCosh = (int) CM::Command::CommandACOSH, - InvTanh = (int) CM::Command::CommandATANH, - Cube = (int) CM::Command::CommandCUB, - DMS = (int) CM::Command::CommandDMS, + Invert = (int)CM::Command::CommandREC, + Sqrt = (int)CM::Command::CommandSQRT, + Percent = (int)CM::Command::CommandPERCENT, + Negate = (int)CM::Command::CommandSIGN, + Degrees = (int)CM::Command::CommandDegrees, + Pi = (int)CM::Command::CommandPI, + Sin = (int)CM::Command::CommandSIN, + Cos = (int)CM::Command::CommandCOS, + Tan = (int)CM::Command::CommandTAN, + Factorial = (int)CM::Command::CommandFAC, + XPower2 = (int)CM::Command::CommandSQR, + Mod = (int)CM::Command::CommandMOD, + FToE = (int)CM::Command::CommandFE, + LogBaseE = (int)CM::Command::CommandLN, + InvSin = (int)CM::Command::CommandASIN, + InvCos = (int)CM::Command::CommandACOS, + InvTan = (int)CM::Command::CommandATAN, + LogBase10 = (int)CM::Command::CommandLOG, + XPowerY = (int)CM::Command::CommandPWR, + YRootX = (int)CM::Command::CommandROOT, + TenPowerX = (int)CM::Command::CommandPOW10, + EPowerX = (int)CM::Command::CommandPOWE, + Exp = (int)CM::Command::CommandEXP, + DecButton = (int)CM::Command::CommandDec, + OctButton = (int)CM::Command::CommandOct, + HexButton = (int)CM::Command::CommandHex, + BinButton = (int)CM::Command::CommandBin, + And = (int)CM::Command::CommandAnd, + Ror = (int)CM::Command::CommandROR, + Rol = (int)CM::Command::CommandROL, + Or = (int)CM::Command::CommandOR, + Lsh = (int)CM::Command::CommandLSHF, + Rsh = (int)CM::Command::CommandRSHF, + Xor = (int)CM::Command::CommandXor, + Not = (int)CM::Command::CommandNot, + Sinh = (int)CM::Command::CommandSINH, + Cosh = (int)CM::Command::CommandCOSH, + Tanh = (int)CM::Command::CommandTANH, + InvSinh = (int)CM::Command::CommandASINH, + InvCosh = (int)CM::Command::CommandACOSH, + InvTanh = (int)CM::Command::CommandATANH, + Cube = (int)CM::Command::CommandCUB, + DMS = (int)CM::Command::CommandDMS, }; } diff --git a/src/CalcViewModel/Common/CalculatorDisplay.cpp b/src/CalcViewModel/Common/CalculatorDisplay.cpp index 4da98129..823d9bcb 100644 --- a/src/CalcViewModel/Common/CalculatorDisplay.cpp +++ b/src/CalcViewModel/Common/CalculatorDisplay.cpp @@ -69,11 +69,12 @@ void CalculatorDisplay::SetIsInError(bool isError) } } -void CalculatorDisplay::SetExpressionDisplay(_Inout_ std::shared_ptr>> const &tokens, _Inout_ std::shared_ptr>> const &commands) +void CalculatorDisplay::SetExpressionDisplay(_Inout_ std::shared_ptr>> const& tokens, + _Inout_ std::shared_ptr>> const& commands) { if (m_callbackReference != nullptr) { - if(auto calcVM = m_callbackReference.Resolve()) + if (auto calcVM = m_callbackReference.Resolve()) { calcVM->SetExpressionDisplay(tokens, commands); } diff --git a/src/CalcViewModel/Common/CalculatorDisplay.h b/src/CalcViewModel/Common/CalculatorDisplay.h index 877bdf06..1fef3d65 100644 --- a/src/CalcViewModel/Common/CalculatorDisplay.h +++ b/src/CalcViewModel/Common/CalculatorDisplay.h @@ -8,7 +8,7 @@ namespace CalculatorApp { // Callback interface to be implemented by the CalculatorManager - class CalculatorDisplay: public ICalcDisplay + class CalculatorDisplay : public ICalcDisplay { public: CalculatorDisplay(); @@ -18,7 +18,8 @@ namespace CalculatorApp private: void SetPrimaryDisplay(_In_ const std::wstring& displayString, _In_ bool isError) override; void SetIsInError(bool isError) override; - void SetExpressionDisplay(_Inout_ std::shared_ptr>> const &tokens, _Inout_ std::shared_ptr>> const &commands) override; + void SetExpressionDisplay(_Inout_ std::shared_ptr>> const& tokens, + _Inout_ std::shared_ptr>> const& commands) override; void SetMemorizedNumbers(_In_ const std::vector& memorizedNumbers) override; void OnHistoryItemAdded(_In_ unsigned int addedItemIndex) override; void SetParenthesisNumber(_In_ unsigned int parenthesisCount) override; diff --git a/src/CalcViewModel/Common/ConversionResultTaskHelper.cpp b/src/CalcViewModel/Common/ConversionResultTaskHelper.cpp index db943c5c..3f998e6f 100644 --- a/src/CalcViewModel/Common/ConversionResultTaskHelper.cpp +++ b/src/CalcViewModel/Common/ConversionResultTaskHelper.cpp @@ -8,19 +8,19 @@ using namespace CalculatorApp::Common; using namespace concurrency; using namespace std; -ConversionResultTaskHelper::ConversionResultTaskHelper(unsigned int delay, const function functionToRun) : - m_delay{ delay }, - m_storedFunction{ functionToRun } +ConversionResultTaskHelper::ConversionResultTaskHelper(unsigned int delay, const function functionToRun) + : m_delay{ delay }, m_storedFunction{ functionToRun } { auto token = m_cts.get_token(); auto delayTask = CompleteAfter(delay); - delayTask.then([this, token]() - { - if (!token.is_canceled()) - { - m_storedFunction(); - } - }, task_continuation_context::use_current()); + delayTask.then( + [this, token]() { + if (!token.is_canceled()) + { + m_storedFunction(); + } + }, + task_continuation_context::use_current()); } ConversionResultTaskHelper::~ConversionResultTaskHelper() diff --git a/src/CalcViewModel/Common/CopyPasteManager.cpp b/src/CalcViewModel/Common/CopyPasteManager.cpp index 6d6807ba..4325cad4 100644 --- a/src/CalcViewModel/Common/CopyPasteManager.cpp +++ b/src/CalcViewModel/Common/CopyPasteManager.cpp @@ -15,10 +15,7 @@ using namespace Windows::Foundation; using namespace Windows::System; using namespace Windows::ApplicationModel::DataTransfer; -String^ CopyPasteManager::supportedFormats[] = -{ - StandardDataFormats::Text -}; +String ^ CopyPasteManager::supportedFormats[] = { StandardDataFormats::Text }; static constexpr wstring_view c_validCharacterSet{ L"0123456789()+-*/.abcdefABCDEF" }; @@ -40,43 +37,26 @@ static const wstring c_binProgrammerChars = L"[0-1]+((_|'|`)[0-1]+)*"; static const wstring c_uIntSuffixes = L"[uU]?[lL]{0,2}"; // RegEx Patterns used by various modes -static const array standardModePatterns = -{ - wregex(c_wspc + c_signedDecFloat + c_wspc) -}; -static const array scientificModePatterns = -{ - wregex(L"(" + c_wspc + L"[-+]?)|(" + c_wspcLParenSigned + L")" + c_signedDecFloat + c_wspcRParens), - wregex(L"(" + c_wspc + L"[-+]?)|(" + c_wspcLParenSigned + L")" + c_signedDecFloat + L"[e]([+]|[-])+\\d+" + c_wspcRParens) -}; -static const array, 4> programmerModePatterns = -{ { - // Hex numbers like 5F, 4A0C, 0xa9, 0xFFull, 47CDh - { - wregex(c_wspcLParens + L"(0[xX])?" + c_hexProgrammerChars + c_uIntSuffixes + c_wspcRParens), - wregex(c_wspcLParens + c_hexProgrammerChars + L"[hH]?" + c_wspcRParens) - }, - // Decimal numbers like -145, 145, 0n145, 123ull etc - { - wregex(c_wspcLParens + L"[-+]?" + c_decProgrammerChars + L"[lL]{0,2}" +c_wspcRParens), - wregex(c_wspcLParens + L"(0[nN])?" + c_decProgrammerChars + c_uIntSuffixes + c_wspcRParens) - }, - // Octal numbers like 06, 010, 0t77, 0o77, 077ull etc - { - wregex(c_wspcLParens + L"(0[otOT])?" + c_octProgrammerChars + c_uIntSuffixes + c_wspcRParens) - }, - // Binary numbers like 011010110, 0010110, 10101001, 1001b, 0b1001, 0y1001, 0b1001ull - { - wregex(c_wspcLParens + L"(0[byBY])?" + c_binProgrammerChars + c_uIntSuffixes + c_wspcRParens), - wregex(c_wspcLParens + c_binProgrammerChars + L"[bB]?" + c_wspcRParens) - } - } }; -static const array unitConverterPatterns = -{ - wregex(c_wspc + L"[-+]?\\d*[.]?\\d*" + c_wspc) +static const array standardModePatterns = { wregex(c_wspc + c_signedDecFloat + c_wspc) }; +static const array scientificModePatterns = { wregex(L"(" + c_wspc + L"[-+]?)|(" + c_wspcLParenSigned + L")" + c_signedDecFloat + c_wspcRParens), + wregex(L"(" + c_wspc + L"[-+]?)|(" + c_wspcLParenSigned + L")" + c_signedDecFloat + + L"[e]([+]|[-])+\\d+" + c_wspcRParens) }; +static const array, 4> programmerModePatterns = { + { // Hex numbers like 5F, 4A0C, 0xa9, 0xFFull, 47CDh + { wregex(c_wspcLParens + L"(0[xX])?" + c_hexProgrammerChars + c_uIntSuffixes + c_wspcRParens), + wregex(c_wspcLParens + c_hexProgrammerChars + L"[hH]?" + c_wspcRParens) }, + // Decimal numbers like -145, 145, 0n145, 123ull etc + { wregex(c_wspcLParens + L"[-+]?" + c_decProgrammerChars + L"[lL]{0,2}" + c_wspcRParens), + wregex(c_wspcLParens + L"(0[nN])?" + c_decProgrammerChars + c_uIntSuffixes + c_wspcRParens) }, + // Octal numbers like 06, 010, 0t77, 0o77, 077ull etc + { wregex(c_wspcLParens + L"(0[otOT])?" + c_octProgrammerChars + c_uIntSuffixes + c_wspcRParens) }, + // Binary numbers like 011010110, 0010110, 10101001, 1001b, 0b1001, 0y1001, 0b1001ull + { wregex(c_wspcLParens + L"(0[byBY])?" + c_binProgrammerChars + c_uIntSuffixes + c_wspcRParens), + wregex(c_wspcLParens + c_binProgrammerChars + L"[bB]?" + c_wspcRParens) } } }; +static const array unitConverterPatterns = { wregex(c_wspc + L"[-+]?\\d*[.]?\\d*" + c_wspc) }; -void CopyPasteManager::CopyToClipboard(String^ stringToCopy) +void CopyPasteManager::CopyToClipboard(String ^ stringToCopy) { // Copy the string to the clipboard auto dataPackage = ref new DataPackage(); @@ -84,7 +64,7 @@ void CopyPasteManager::CopyToClipboard(String^ stringToCopy) Clipboard::SetContent(dataPackage); } -task CopyPasteManager::GetStringToPaste(ViewMode mode, CategoryGroupType modeType, int programmerNumberBase, int bitLengthType) +task CopyPasteManager::GetStringToPaste(ViewMode mode, CategoryGroupType modeType, int programmerNumberBase, int bitLengthType) { // Retrieve the text in the clipboard auto dataPackageView = Clipboard::GetContent(); @@ -95,11 +75,9 @@ task CopyPasteManager::GetStringToPaste(ViewMode mode, CategoryGroupTyp //-- add support to allow pasting for expressions like 1.3e12(as of now we allow 1.3e+12) return create_task((dataPackageView->GetTextAsync(::StandardDataFormats::Text))) - .then([mode, modeType, programmerNumberBase, bitLengthType](String^ pastedText) - { - return ValidatePasteExpression(pastedText, mode, modeType, programmerNumberBase, bitLengthType); - } - , task_continuation_context::use_arbitrary()); + .then([mode, modeType, programmerNumberBase, + bitLengthType](String ^ pastedText) { return ValidatePasteExpression(pastedText, mode, modeType, programmerNumberBase, bitLengthType); }, + task_continuation_context::use_arbitrary()); } int CopyPasteManager::ClipboardTextFormat() @@ -116,14 +94,14 @@ int CopyPasteManager::ClipboardTextFormat() return -1; } -String^ CopyPasteManager::ValidatePasteExpression(String^ pastedText, ViewMode mode, int programmerNumberBase, int bitLengthType) +String ^ CopyPasteManager::ValidatePasteExpression(String ^ pastedText, ViewMode mode, int programmerNumberBase, int bitLengthType) { return CopyPasteManager::ValidatePasteExpression(pastedText, mode, NavCategory::GetGroupType(mode), programmerNumberBase, bitLengthType); } // return "NoOp" if pastedText is invalid else return pastedText -String^ CopyPasteManager::ValidatePasteExpression(String^ pastedText, ViewMode mode, CategoryGroupType modeType, int programmerNumberBase, int bitLengthType) +String ^ CopyPasteManager::ValidatePasteExpression(String ^ pastedText, ViewMode mode, CategoryGroupType modeType, int programmerNumberBase, int bitLengthType) { if (pastedText->Length() > MaxPasteableLength) { @@ -135,7 +113,7 @@ String^ CopyPasteManager::ValidatePasteExpression(String^ pastedText, ViewMode m wstring pasteExpression = pastedText->Data(); // Get english translated expression - String^ englishString = LocalizationSettings::GetInstance().GetEnglishValueFromLocalizedDigits(pasteExpression); + String ^ englishString = LocalizationSettings::GetInstance().GetEnglishValueFromLocalizedDigits(pasteExpression); // Removing the spaces, comma separator from the pasteExpression to allow pasting of expressions like 1 + 2+1,333 pasteExpression = RemoveUnwantedCharsFromWstring(englishString->Data()); @@ -223,7 +201,8 @@ vector CopyPasteManager::ExtractOperands(const wstring& pasteExpression if ((pasteExpression.at(i) == L'+') || (pasteExpression.at(i) == L'-')) { // don't break the expression into operands if the encountered character corresponds to sign command(+-) - if (isPreviousOpenParen || startOfExpression || isPreviousOperator || ((mode != ViewMode::Programmer) && !((i != 0) && (pasteExpression.at(i - 1) != L'e')))) + if (isPreviousOpenParen || startOfExpression || isPreviousOperator + || ((mode != ViewMode::Programmer) && !((i != 0) && (pasteExpression.at(i - 1) != L'e')))) { isPreviousOperator = false; continue; @@ -267,7 +246,7 @@ bool CopyPasteManager::ExpressionRegExMatch(vector operands, ViewMode m } vector patterns{}; - + if (mode == ViewMode::Standard) { patterns.assign(standardModePatterns.begin(), standardModePatterns.end()); @@ -339,7 +318,7 @@ pair CopyPasteManager::GetMaxOperandLengthAndValue(ViewMode mo { constexpr size_t defaultMaxOperandLength = 0; constexpr uint64_t defaultMaxValue = 0; - + if (mode == ViewMode::Standard) { return make_pair(MaxStandardOperandLength, defaultMaxValue); @@ -452,26 +431,28 @@ bool CopyPasteManager::TryOperandToULL(const wstring& operand, int numberBase, u } size_t CopyPasteManager::OperandLength(const wstring& operand, ViewMode mode, CategoryGroupType modeType, int programmerNumberBase) -{ - if (modeType == CategoryGroupType::Converter) { +{ + if (modeType == CategoryGroupType::Converter) + { return operand.length(); } - switch(mode) { - case ViewMode::Standard: - case ViewMode::Scientific: - return StandardScientificOperandLength(operand); + switch (mode) + { + case ViewMode::Standard: + case ViewMode::Scientific: + return StandardScientificOperandLength(operand); - case ViewMode::Programmer: - return ProgrammerOperandLength(operand, programmerNumberBase); + case ViewMode::Programmer: + return ProgrammerOperandLength(operand, programmerNumberBase); - default: - return 0; + default: + return 0; } } size_t CopyPasteManager::StandardScientificOperandLength(const wstring& operand) -{ +{ const bool hasDecimal = operand.find('.') != wstring::npos; if (hasDecimal) @@ -494,7 +475,6 @@ size_t CopyPasteManager::StandardScientificOperandLength(const wstring& operand) size_t CopyPasteManager::ProgrammerOperandLength(const wstring& operand, int numberBase) { - vector prefixes{}; vector suffixes{}; switch (numberBase) @@ -515,7 +495,7 @@ size_t CopyPasteManager::ProgrammerOperandLength(const wstring& operand, int num break; default: // No defined prefixes/suffixes - return 0; + return 0; } // UInt suffixes are common across all modes diff --git a/src/CalcViewModel/Common/CopyPasteManager.h b/src/CalcViewModel/Common/CopyPasteManager.h index 9d6fd669..e4aa9a74 100644 --- a/src/CalcViewModel/Common/CopyPasteManager.h +++ b/src/CalcViewModel/Common/CopyPasteManager.h @@ -25,8 +25,9 @@ namespace CalculatorApp class CopyPasteManager { public: - static void CopyToClipboard(Platform::String^ stringToCopy); - static concurrency::task GetStringToPaste(CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType, int programmerNumberBase = -1, int bitLengthType = -1); + static void CopyToClipboard(Platform::String ^ stringToCopy); + static concurrency::task GetStringToPaste(CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType, + int programmerNumberBase = -1, int bitLengthType = -1); static bool HasStringToPaste() { return ClipboardTextFormat() >= 0; @@ -36,25 +37,23 @@ namespace CalculatorApp private: static int ClipboardTextFormat(); - static Platform::String^ ValidatePasteExpression( - Platform::String^ pastedText, - CalculatorApp::Common::ViewMode mode, - int programmerNumberBase, - int bitLengthType); - static Platform::String^ ValidatePasteExpression( - Platform::String^ pastedText, - CalculatorApp::Common::ViewMode mode, - CalculatorApp::Common::CategoryGroupType modeType, - int programmerNumberBase, - int bitLengthType); + static Platform::String + ^ ValidatePasteExpression(Platform::String ^ pastedText, CalculatorApp::Common::ViewMode mode, int programmerNumberBase, int bitLengthType); + static Platform::String + ^ ValidatePasteExpression(Platform::String ^ pastedText, CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType, + int programmerNumberBase, int bitLengthType); - static std::vector ExtractOperands(const std::wstring& pasteExpression, CalculatorApp::Common::ViewMode mode, int programmerNumberBase = -1, int bitLengthType = -1); - static bool ExpressionRegExMatch(std::vector operands, CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType, int programmerNumberBase = -1, int bitLengthType = -1); + static std::vector ExtractOperands(const std::wstring& pasteExpression, CalculatorApp::Common::ViewMode mode, + int programmerNumberBase = -1, int bitLengthType = -1); + static bool ExpressionRegExMatch(std::vector operands, CalculatorApp::Common::ViewMode mode, + CalculatorApp::Common::CategoryGroupType modeType, int programmerNumberBase = -1, int bitLengthType = -1); - static std::pair GetMaxOperandLengthAndValue(CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType, int programmerNumberBase = -1, int bitLengthType = -1); + static std::pair GetMaxOperandLengthAndValue(CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType, + int programmerNumberBase = -1, int bitLengthType = -1); static std::wstring SanitizeOperand(const std::wstring& operand); static bool TryOperandToULL(const std::wstring& operand, int numberBase, unsigned long long int& result); - static size_t OperandLength(const std::wstring& operand, CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType, int programmerNumberBase = -1); + static size_t OperandLength(const std::wstring& operand, CalculatorApp::Common::ViewMode mode, CalculatorApp::Common::CategoryGroupType modeType, + int programmerNumberBase = -1); static size_t StandardScientificOperandLength(const std::wstring& operand); static size_t ProgrammerOperandLength(const std::wstring& operand, int numberBase); static std::wstring RemoveUnwantedCharsFromWstring(const std::wstring& input); @@ -67,7 +66,7 @@ namespace CalculatorApp static constexpr size_t MaxExponentLength = 4; static constexpr size_t MaxProgrammerBitLength = 64; - static Platform::String^ supportedFormats[]; + static Platform::String ^ supportedFormats[]; friend class CalculatorUnitTests::CopyPasteManagerTest; }; diff --git a/src/CalcViewModel/Common/DateCalculator.cpp b/src/CalcViewModel/Common/DateCalculator.cpp index b18dde37..8d5bedb5 100644 --- a/src/CalcViewModel/Common/DateCalculator.cpp +++ b/src/CalcViewModel/Common/DateCalculator.cpp @@ -9,7 +9,7 @@ using namespace Windows::Foundation; using namespace Windows::Globalization; using namespace CalculatorApp::Common::DateCalculation; -DateCalculationEngine::DateCalculationEngine(_In_ String^ calendarIdentifier) +DateCalculationEngine::DateCalculationEngine(_In_ String ^ calendarIdentifier) { m_calendar = ref new Calendar(); m_calendar->ChangeTimeZone("UTC"); @@ -18,7 +18,7 @@ DateCalculationEngine::DateCalculationEngine(_In_ String^ calendarIdentifier) // Adding Duration to a Date // Returns: True if function succeeds to calculate the date else returns False -bool DateCalculationEngine::AddDuration(_In_ DateTime startDate, _In_ const DateDifference& duration, _Out_ DateTime *endDate) +bool DateCalculationEngine::AddDuration(_In_ DateTime startDate, _In_ const DateDifference& duration, _Out_ DateTime* endDate) { auto currentCalendarSystem = m_calendar->GetCalendarSystem(); @@ -28,9 +28,10 @@ bool DateCalculationEngine::AddDuration(_In_ DateTime startDate, _In_ const Date // The Japanese Era system can have multiple year partitions within the same year. // For example, April 30, 2019 is denoted April 30, Heisei 31; May 1, 2019 is denoted as May 1, Reiwa 1. - // The Calendar treats Heisei 31 and Reiwa 1 as separate years, which results in some unexpected behaviors where subtracting a year from Reiwa 1 results in a date in Heisei 31. - // To provide the expected result across era boundaries, we first convert the Japanese era system to a Gregorian system, do date math, and then convert back to the Japanese era system. - // This works because the Japanese era system maintains the same year/month boundaries and durations as the Gregorian system and is only different in display value. + // The Calendar treats Heisei 31 and Reiwa 1 as separate years, which results in some unexpected behaviors where subtracting a year from Reiwa 1 results + // in a date in Heisei 31. To provide the expected result across era boundaries, we first convert the Japanese era system to a Gregorian system, do date + // math, and then convert back to the Japanese era system. This works because the Japanese era system maintains the same year/month boundaries and + // durations as the Gregorian system and is only different in display value. if (currentCalendarSystem == CalendarIdentifiers::Japanese) { m_calendar->ChangeCalendarSystem(CalendarIdentifiers::Gregorian); @@ -51,7 +52,7 @@ bool DateCalculationEngine::AddDuration(_In_ DateTime startDate, _In_ const Date *endDate = m_calendar->GetDateTime(); } - catch (Platform::InvalidArgumentException^ ex) + catch (Platform::InvalidArgumentException ^ ex) { // ensure that we revert to the correct calendar system m_calendar->ChangeCalendarSystem(currentCalendarSystem); @@ -67,7 +68,7 @@ bool DateCalculationEngine::AddDuration(_In_ DateTime startDate, _In_ const Date // Subtracting Duration from a Date // Returns: True if function succeeds to calculate the date else returns False -bool DateCalculationEngine::SubtractDuration(_In_ DateTime startDate, _In_ const DateDifference& duration, _Out_ DateTime *endDate) +bool DateCalculationEngine::SubtractDuration(_In_ DateTime startDate, _In_ const DateDifference& duration, _Out_ DateTime* endDate) { auto currentCalendarSystem = m_calendar->GetCalendarSystem(); @@ -79,9 +80,10 @@ bool DateCalculationEngine::SubtractDuration(_In_ DateTime startDate, _In_ const // The Japanese Era system can have multiple year partitions within the same year. // For example, April 30, 2019 is denoted April 30, Heisei 31; May 1, 2019 is denoted as May 1, Reiwa 1. - // The Calendar treats Heisei 31 and Reiwa 1 as separate years, which results in some unexpected behaviors where subtracting a year from Reiwa 1 results in a date in Heisei 31. - // To provide the expected result across era boundaries, we first convert the Japanese era system to a Gregorian system, do date math, and then convert back to the Japanese era system. - // This works because the Japanese era system maintains the same year/month boundaries and durations as the Gregorian system and is only different in display value. + // The Calendar treats Heisei 31 and Reiwa 1 as separate years, which results in some unexpected behaviors where subtracting a year from Reiwa 1 results + // in a date in Heisei 31. To provide the expected result across era boundaries, we first convert the Japanese era system to a Gregorian system, do date + // math, and then convert back to the Japanese era system. This works because the Japanese era system maintains the same year/month boundaries and + // durations as the Gregorian system and is only different in display value. if (currentCalendarSystem == CalendarIdentifiers::Japanese) { m_calendar->ChangeCalendarSystem(CalendarIdentifiers::Gregorian); @@ -101,7 +103,7 @@ bool DateCalculationEngine::SubtractDuration(_In_ DateTime startDate, _In_ const } *endDate = m_calendar->GetDateTime(); } - catch (Platform::InvalidArgumentException^ ex) + catch (Platform::InvalidArgumentException ^ ex) { // ensure that we revert to the correct calendar system m_calendar->ChangeCalendarSystem(currentCalendarSystem); @@ -117,7 +119,7 @@ bool DateCalculationEngine::SubtractDuration(_In_ DateTime startDate, _In_ const } // Calculate the difference between two dates -void DateCalculationEngine::GetDateDifference(_In_ DateTime date1, _In_ DateTime date2, _In_ DateUnit outputFormat, _Out_ DateDifference *difference) +void DateCalculationEngine::GetDateDifference(_In_ DateTime date1, _In_ DateTime date2, _In_ DateUnit outputFormat, _Out_ DateDifference* difference) { DateTime startDate; DateTime endDate; @@ -149,8 +151,7 @@ void DateCalculationEngine::GetDateDifference(_In_ DateTime date1, _In_ DateTime UINT approximateDaysInYear; // If we're unable to calculate the days-in-month or days-in-year, we'll leave the values at 0. - if (TryGetCalendarDaysInMonth(startDate, daysInMonth) - && TryGetCalendarDaysInYear(endDate, approximateDaysInYear)) + if (TryGetCalendarDaysInMonth(startDate, daysInMonth) && TryGetCalendarDaysInYear(endDate, approximateDaysInYear)) { UINT daysIn[c_unitsOfDate] = { approximateDaysInYear, daysInMonth, c_daysInWeek, 1 }; @@ -172,7 +173,7 @@ void DateCalculationEngine::GetDateDifference(_In_ DateTime date1, _In_ DateTime { pivotDate = AdjustCalendarDate(pivotDate, dateUnit, static_cast(differenceInDates[unitIndex])); } - catch (Platform::InvalidArgumentException^) + catch (Platform::InvalidArgumentException ^) { // Operation failed due to out of bound result // Do nothing @@ -208,7 +209,7 @@ void DateCalculationEngine::GetDateDifference(_In_ DateTime date1, _In_ DateTime pivotDate = AdjustCalendarDate(pivotDate, dateUnit, 1); differenceInDates[unitIndex] += 1; } - catch (Platform::InvalidArgumentException^) + catch (Platform::InvalidArgumentException ^) { // handling for 31st Dec, 9999 last valid date // Do nothing - break out @@ -233,7 +234,6 @@ void DateCalculationEngine::GetDateDifference(_In_ DateTime date1, _In_ DateTime difference->day = differenceInDates[3]; } - // Private Methods // Gets number of days between the two date time values @@ -311,9 +311,10 @@ DateTime DateCalculationEngine::AdjustCalendarDate(Windows::Foundation::DateTime // The Japanese Era system can have multiple year partitions within the same year. // For example, April 30, 2019 is denoted April 30, Heisei 31; May 1, 2019 is denoted as May 1, Reiwa 1. - // The Calendar treats Heisei 31 and Reiwa 1 as separate years, which results in some unexpected behaviors where subtracting a year from Reiwa 1 results in a date in Heisei 31. - // To provide the expected result across era boundaries, we first convert the Japanese era system to a Gregorian system, do date math, and then convert back to the Japanese era system. - // This works because the Japanese era system maintains the same year/month boundaries and durations as the Gregorian system and is only different in display value. + // The Calendar treats Heisei 31 and Reiwa 1 as separate years, which results in some unexpected behaviors where subtracting a year from Reiwa 1 results in + // a date in Heisei 31. To provide the expected result across era boundaries, we first convert the Japanese era system to a Gregorian system, do date math, + // and then convert back to the Japanese era system. This works because the Japanese era system maintains the same year/month boundaries and durations as + // the Gregorian system and is only different in display value. auto currentCalendarSystem = m_calendar->GetCalendarSystem(); if (currentCalendarSystem == CalendarIdentifiers::Japanese) { @@ -322,15 +323,15 @@ DateTime DateCalculationEngine::AdjustCalendarDate(Windows::Foundation::DateTime switch (dateUnit) { - case DateUnit::Year: - m_calendar->AddYears(difference); - break; - case DateUnit::Month: - m_calendar->AddMonths(difference); - break; - case DateUnit::Week: - m_calendar->AddWeeks(difference); - break; + case DateUnit::Year: + m_calendar->AddYears(difference); + break; + case DateUnit::Month: + m_calendar->AddMonths(difference); + break; + case DateUnit::Week: + m_calendar->AddWeeks(difference); + break; } m_calendar->ChangeCalendarSystem(currentCalendarSystem); diff --git a/src/CalcViewModel/Common/DateCalculator.h b/src/CalcViewModel/Common/DateCalculator.h index 3e8a78a5..dbb057a7 100644 --- a/src/CalcViewModel/Common/DateCalculator.h +++ b/src/CalcViewModel/Common/DateCalculator.h @@ -9,8 +9,8 @@ const uint64_t c_minute = 60 * c_second; const uint64_t c_hour = 60 * c_minute; const uint64_t c_day = 24 * c_hour; -const int c_unitsOfDate = 4; // Units Year,Month,Week,Day -const int c_unitsGreaterThanDays = 3; // Units Greater than Days (Year/Month/Week) 3 +const int c_unitsOfDate = 4; // Units Year,Month,Week,Day +const int c_unitsGreaterThanDays = 3; // Units Greater than Days (Year/Month/Week) 3 const int c_daysInWeek = 7; namespace CalculatorApp @@ -19,7 +19,8 @@ namespace CalculatorApp { namespace DateCalculation { - public enum class _Enum_is_bitflag_ DateUnit + public + enum class _Enum_is_bitflag_ DateUnit { Year = 0x01, Month = 0x02, @@ -40,16 +41,19 @@ namespace CalculatorApp { public: // Constructor - DateCalculationEngine(_In_ Platform::String^ calendarIdentifier); + DateCalculationEngine(_In_ Platform::String ^ calendarIdentifier); // Public Methods - bool __nothrow AddDuration(_In_ Windows::Foundation::DateTime startDate, _In_ const DateDifference& duration, _Out_ Windows::Foundation::DateTime *endDate); - bool __nothrow SubtractDuration(_In_ Windows::Foundation::DateTime startDate, _In_ const DateDifference& duration, _Out_ Windows::Foundation::DateTime *endDate); - void __nothrow GetDateDifference(_In_ Windows::Foundation::DateTime date1, _In_ Windows::Foundation::DateTime date2, _In_ DateUnit outputFormat, _Out_ DateDifference *difference); + bool __nothrow AddDuration(_In_ Windows::Foundation::DateTime startDate, _In_ const DateDifference& duration, + _Out_ Windows::Foundation::DateTime* endDate); + bool __nothrow SubtractDuration(_In_ Windows::Foundation::DateTime startDate, _In_ const DateDifference& duration, + _Out_ Windows::Foundation::DateTime* endDate); + void __nothrow GetDateDifference(_In_ Windows::Foundation::DateTime date1, _In_ Windows::Foundation::DateTime date2, _In_ DateUnit outputFormat, + _Out_ DateDifference* difference); private: // Private Variables - Windows::Globalization::Calendar^ m_calendar; + Windows::Globalization::Calendar ^ m_calendar; // Private Methods int GetDifferenceInDays(Windows::Foundation::DateTime date1, Windows::Foundation::DateTime date2); diff --git a/src/CalcViewModel/Common/DelegateCommand.h b/src/CalcViewModel/Common/DelegateCommand.h index ba29bb7c..325138f6 100644 --- a/src/CalcViewModel/Common/DelegateCommand.h +++ b/src/CalcViewModel/Common/DelegateCommand.h @@ -8,33 +8,31 @@ namespace CalculatorApp namespace Common { template - ref class DelegateCommand: public Windows::UI::Xaml::Input::ICommand + ref class DelegateCommand : public Windows::UI::Xaml::Input::ICommand { - internal: + internal : - typedef void (TTarget::*CommandHandlerFunc)(Platform::Object^); + typedef void (TTarget::*CommandHandlerFunc)(Platform::Object ^); - DelegateCommand(TTarget^ target, CommandHandlerFunc func): - m_weakTarget(target), - m_function(func) - { } + DelegateCommand(TTarget ^ target, CommandHandlerFunc func) : m_weakTarget(target), m_function(func) + { + } private: - // Explicit, and private, implementation of ICommand, this way of programming makes it so // the ICommand methods will only be available if the ICommand interface is requested via a dynamic_cast // The ICommand interface is meant to be consumed by Xaml and not by the app, this is a defensive measure against // code in the app calling Execute. - virtual void ExecuteImpl(Platform::Object^ parameter) sealed = Windows::UI::Xaml::Input::ICommand::Execute + virtual void ExecuteImpl(Platform::Object ^ parameter) sealed = Windows::UI::Xaml::Input::ICommand::Execute { - TTarget^ target = m_weakTarget.Resolve(); + TTarget ^ target = m_weakTarget.Resolve(); if (target) { (target->*m_function)(parameter); } } - virtual bool CanExecuteImpl(Platform::Object^ parameter) sealed = Windows::UI::Xaml::Input::ICommand::CanExecute + virtual bool CanExecuteImpl(Platform::Object ^ parameter) sealed = Windows::UI::Xaml::Input::ICommand::CanExecute { return true; } @@ -57,14 +55,12 @@ namespace CalculatorApp CommandHandlerFunc m_function; Platform::WeakReference m_weakTarget; - }; template - DelegateCommand^ MakeDelegate(TTarget^ target, TFuncPtr&& function) - { - return ref new DelegateCommand(target, std::forward(function)); - } + DelegateCommand ^ MakeDelegate(TTarget ^ target, TFuncPtr&& function) { + return ref new DelegateCommand(target, std::forward(function)); + } } } diff --git a/src/CalcViewModel/Common/DisplayExpressionToken.h b/src/CalcViewModel/Common/DisplayExpressionToken.h index 7ba811c5..c0e7d9e8 100644 --- a/src/CalcViewModel/Common/DisplayExpressionToken.h +++ b/src/CalcViewModel/Common/DisplayExpressionToken.h @@ -7,30 +7,35 @@ namespace CalculatorApp::Common { - public enum class TokenType +public + enum class TokenType { Operator, Operand, Separator }; - [Windows::UI::Xaml::Data::Bindable] - public ref class DisplayExpressionToken sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged + [Windows::UI::Xaml::Data::Bindable] public ref class DisplayExpressionToken sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged { - internal: - DisplayExpressionToken(Platform::String^ token, int tokenPosition, bool fEditable, TokenType type) : - m_Token(token), m_TokenPosition(tokenPosition), m_IsTokenEditable(fEditable), m_Type(type), m_OriginalToken(token), m_InEditMode(false) - {} + internal : DisplayExpressionToken(Platform::String ^ token, int tokenPosition, bool fEditable, TokenType type) + : m_Token(token), m_TokenPosition(tokenPosition), m_IsTokenEditable(fEditable), m_Type(type), m_OriginalToken(token), m_InEditMode(false) + { + } + public: OBSERVABLE_OBJECT(); - OBSERVABLE_PROPERTY_RW(Platform::String^, Token); + OBSERVABLE_PROPERTY_RW(Platform::String ^, Token); OBSERVABLE_PROPERTY_RW(int, TokenPosition); OBSERVABLE_PROPERTY_RW(bool, IsTokenEditable); OBSERVABLE_PROPERTY_RW(int, CommandIndex); - OBSERVABLE_PROPERTY_R(Platform::String^, OriginalToken); + OBSERVABLE_PROPERTY_R(Platform::String ^, OriginalToken); - property bool IsTokenInEditMode { - bool get() { return m_InEditMode; } + property bool IsTokenInEditMode + { + bool get() + { + return m_InEditMode; + } void set(bool val) { if (!val) @@ -40,8 +45,8 @@ namespace CalculatorApp::Common m_InEditMode = val; } } - internal: - OBSERVABLE_PROPERTY_RW(TokenType, Type); + internal : OBSERVABLE_PROPERTY_RW(TokenType, Type); + private: bool m_InEditMode; }; diff --git a/src/CalcViewModel/Common/EngineResourceProvider.cpp b/src/CalcViewModel/Common/EngineResourceProvider.cpp index 657a2637..b65a2a31 100644 --- a/src/CalcViewModel/Common/EngineResourceProvider.cpp +++ b/src/CalcViewModel/Common/EngineResourceProvider.cpp @@ -44,7 +44,7 @@ namespace CalculatorApp } StringReference idRef(id.c_str()); - String^ str = m_resLoader->GetString(idRef); + String ^ str = m_resLoader->GetString(idRef); return str->Begin(); } } diff --git a/src/CalcViewModel/Common/EngineResourceProvider.h b/src/CalcViewModel/Common/EngineResourceProvider.h index 83b3f418..8b5bb479 100644 --- a/src/CalcViewModel/Common/EngineResourceProvider.h +++ b/src/CalcViewModel/Common/EngineResourceProvider.h @@ -14,6 +14,6 @@ namespace CalculatorApp virtual std::wstring GetCEngineString(const std::wstring& id) override; private: - Windows::ApplicationModel::Resources::ResourceLoader^ m_resLoader; + Windows::ApplicationModel::Resources::ResourceLoader ^ m_resLoader; }; } diff --git a/src/CalcViewModel/Common/ExpressionCommandDeserializer.cpp b/src/CalcViewModel/Common/ExpressionCommandDeserializer.cpp index 09bdcc31..70a39f9a 100644 --- a/src/CalcViewModel/Common/ExpressionCommandDeserializer.cpp +++ b/src/CalcViewModel/Common/ExpressionCommandDeserializer.cpp @@ -7,7 +7,9 @@ using namespace CalculatorApp::Common; using namespace Windows::Storage::Streams; -CommandDeserializer::CommandDeserializer(_In_ DataReader^ dataReader) :m_dataReader(dataReader){} +CommandDeserializer::CommandDeserializer(_In_ DataReader ^ dataReader) : m_dataReader(dataReader) +{ +} std::shared_ptr CommandDeserializer::Deserialize(_In_ CalculationManager::CommandType cmdType) { @@ -20,7 +22,7 @@ std::shared_ptr CommandDeserializer::Deserialize(_In_ Calcul case CalculationManager::CommandType::Parentheses: - return std::make_shared(DeserializeParentheses()); + return std::make_shared(DeserializeParentheses()); break; case CalculationManager::CommandType::UnaryCommand: diff --git a/src/CalcViewModel/Common/ExpressionCommandDeserializer.h b/src/CalcViewModel/Common/ExpressionCommandDeserializer.h index d48f7e29..833b6bf6 100644 --- a/src/CalcViewModel/Common/ExpressionCommandDeserializer.h +++ b/src/CalcViewModel/Common/ExpressionCommandDeserializer.h @@ -12,11 +12,11 @@ namespace CalculatorApp class CommandDeserializer { public: - CommandDeserializer(_In_ Windows::Storage::Streams::DataReader^ dataReader); + CommandDeserializer(_In_ Windows::Storage::Streams::DataReader ^ dataReader); std::shared_ptr Deserialize(_In_ CalculationManager::CommandType cmdType); private: - Windows::Storage::Streams::DataReader^ m_dataReader; + Windows::Storage::Streams::DataReader ^ m_dataReader; COpndCommand DeserializeOperand(); CParentheses DeserializeParentheses(); CUnaryCommand DeserializeUnary(); diff --git a/src/CalcViewModel/Common/ExpressionCommandSerializer.cpp b/src/CalcViewModel/Common/ExpressionCommandSerializer.cpp index 38bae50f..4dd97887 100644 --- a/src/CalcViewModel/Common/ExpressionCommandSerializer.cpp +++ b/src/CalcViewModel/Common/ExpressionCommandSerializer.cpp @@ -7,11 +7,11 @@ using namespace CalculatorApp::Common; using namespace Windows::Storage::Streams; -SerializeCommandVisitor::SerializeCommandVisitor(_In_ DataWriter^ dataWriter) :m_dataWriter(dataWriter) +SerializeCommandVisitor::SerializeCommandVisitor(_In_ DataWriter ^ dataWriter) : m_dataWriter(dataWriter) { } -void SerializeCommandVisitor::Visit(_In_ COpndCommand &opndCmd) +void SerializeCommandVisitor::Visit(_In_ COpndCommand& opndCmd) { m_dataWriter->WriteBoolean(opndCmd.IsNegative()); m_dataWriter->WriteBoolean(opndCmd.IsDecimalPresent()); @@ -29,7 +29,7 @@ void SerializeCommandVisitor::Visit(_In_ COpndCommand &opndCmd) } } -void SerializeCommandVisitor::Visit(_In_ CUnaryCommand &unaryCmd) +void SerializeCommandVisitor::Visit(_In_ CUnaryCommand& unaryCmd) { auto cmds = unaryCmd.GetCommands(); unsigned int cmdSize; @@ -43,13 +43,13 @@ void SerializeCommandVisitor::Visit(_In_ CUnaryCommand &unaryCmd) } } -void SerializeCommandVisitor::Visit(_In_ CBinaryCommand &binaryCmd) +void SerializeCommandVisitor::Visit(_In_ CBinaryCommand& binaryCmd) { int cmd = binaryCmd.GetCommand(); m_dataWriter->WriteInt32(cmd); } -void SerializeCommandVisitor::Visit(_In_ CParentheses ¶Cmd) +void SerializeCommandVisitor::Visit(_In_ CParentheses& paraCmd) { int parenthesisCmd = paraCmd.GetCommand(); m_dataWriter->WriteInt32(parenthesisCmd); diff --git a/src/CalcViewModel/Common/ExpressionCommandSerializer.h b/src/CalcViewModel/Common/ExpressionCommandSerializer.h index 36203cb7..23303fe7 100644 --- a/src/CalcViewModel/Common/ExpressionCommandSerializer.h +++ b/src/CalcViewModel/Common/ExpressionCommandSerializer.h @@ -12,15 +12,15 @@ namespace CalculatorApp class SerializeCommandVisitor : public ISerializeCommandVisitor { public: - SerializeCommandVisitor(_In_ Windows::Storage::Streams::DataWriter^ dataWriter); + SerializeCommandVisitor(_In_ Windows::Storage::Streams::DataWriter ^ dataWriter); - void Visit(_In_ COpndCommand &opndCmd); - void Visit(_In_ CUnaryCommand &unaryCmd); - void Visit(_In_ CBinaryCommand &binaryCmd); - void Visit(_In_ CParentheses ¶Cmd); + void Visit(_In_ COpndCommand& opndCmd); + void Visit(_In_ CUnaryCommand& unaryCmd); + void Visit(_In_ CBinaryCommand& binaryCmd); + void Visit(_In_ CParentheses& paraCmd); private: - Windows::Storage::Streams::DataWriter^ m_dataWriter; + Windows::Storage::Streams::DataWriter ^ m_dataWriter; }; } } diff --git a/src/CalcViewModel/Common/KeyboardShortcutManager.cpp b/src/CalcViewModel/Common/KeyboardShortcutManager.cpp index d7b87c96..e9895147 100644 --- a/src/CalcViewModel/Common/KeyboardShortcutManager.cpp +++ b/src/CalcViewModel/Common/KeyboardShortcutManager.cpp @@ -70,11 +70,11 @@ namespace CalculatorApp } } - void LightUpButton(ButtonBase^ button) + void LightUpButton(ButtonBase ^ button) { // If the button is a toggle button then we don't need // to change the UI of the button - if (dynamic_cast(button)) + if (dynamic_cast(button)) { return; } @@ -83,7 +83,7 @@ namespace CalculatorApp VisualStateManager::GoToState(button, "Pressed", true); // This timer will fire after lightUpTime and make the button - // go back to the normal state. + // go back to the normal state. // This timer will only fire once after which it will be destroyed auto timer = ref new DispatcherTimer(); TimeSpan lightUpTime{}; @@ -92,22 +92,20 @@ namespace CalculatorApp WeakReference timerWeakReference(timer); WeakReference buttonWeakReference(button); - timer->Tick += ref new EventHandler( - [buttonWeakReference, timerWeakReference](Object^, Object^) + timer->Tick += ref new EventHandler([buttonWeakReference, timerWeakReference](Object ^, Object ^) { + auto button = buttonWeakReference.Resolve(); + if (button) { - auto button = buttonWeakReference.Resolve(); - if (button) - { - VisualStateManager::GoToState(button, "Normal", true); - } + VisualStateManager::GoToState(button, "Normal", true); + } - // Cancel the timer after we're done so it only fires once - auto timer = timerWeakReference.Resolve(); - if (timer) - { - timer->Stop(); - } - }); + // Cancel the timer after we're done so it only fires once + auto timer = timerWeakReference.Resolve(); + if (timer) + { + timer->Stop(); + } + }); timer->Start(); } @@ -130,7 +128,7 @@ namespace CalculatorApp } } - void RunButtonCommand(ButtonBase^ button) + void RunButtonCommand(ButtonBase ^ button) { if (button->IsEnabled) { @@ -141,14 +139,14 @@ namespace CalculatorApp command->Execute(parameter); } - auto radio = dynamic_cast(button); + auto radio = dynamic_cast(button); if (radio) { radio->IsChecked = true; return; } - auto toggle = dynamic_cast(button); + auto toggle = dynamic_cast(button); if (toggle) { toggle->IsChecked = !toggle->IsChecked->Value; @@ -163,7 +161,7 @@ static multimap s_ignoreNextEscape; static multimap s_keepIgnoringEscape; static multimap s_fHonorShortcuts; static multimap s_fHandledEnter; -static multimap s_AboutFlyout; +static multimap s_AboutFlyout; void KeyboardShortcutManager::IgnoreEscape(bool onlyOnce) { @@ -205,15 +203,12 @@ void KeyboardShortcutManager::HonorEscape() } } -void KeyboardShortcutManager::OnCharacterPropertyChanged( - DependencyObject^ target, - String^ oldValue, - String^ newValue) +void KeyboardShortcutManager::OnCharacterPropertyChanged(DependencyObject ^ target, String ^ oldValue, String ^ newValue) { // Writer lock for the static maps reader_writer_lock::scoped_lock lock(s_keyboardShortcutMapLock); - auto button = safe_cast(target); + auto button = safe_cast(target); int viewId = Utils::GetWindowId(); auto iterViewMap = s_CharacterForButtons.find(viewId); @@ -254,15 +249,12 @@ void KeyboardShortcutManager::OnCharacterPropertyChanged( } } -void KeyboardShortcutManager::OnVirtualKeyPropertyChanged( - DependencyObject^ target, - MyVirtualKey /*oldValue*/, - MyVirtualKey newValue) +void KeyboardShortcutManager::OnVirtualKeyPropertyChanged(DependencyObject ^ target, MyVirtualKey /*oldValue*/, MyVirtualKey newValue) { // Writer lock for the static maps reader_writer_lock::scoped_lock lock(s_keyboardShortcutMapLock); - auto button = static_cast(target); + auto button = static_cast(target); int viewId = Utils::GetWindowId(); auto iterViewMap = s_VirtualKeysForButtons.find(viewId); @@ -280,20 +272,17 @@ void KeyboardShortcutManager::OnVirtualKeyPropertyChanged( } } -void KeyboardShortcutManager::OnVirtualKeyControlChordPropertyChanged( - DependencyObject^ target, - MyVirtualKey /*oldValue*/, - MyVirtualKey newValue) +void KeyboardShortcutManager::OnVirtualKeyControlChordPropertyChanged(DependencyObject ^ target, MyVirtualKey /*oldValue*/, MyVirtualKey newValue) { // Writer lock for the static maps reader_writer_lock::scoped_lock lock(s_keyboardShortcutMapLock); - Control^ control = dynamic_cast(target); + Control ^ control = dynamic_cast(target); if (control == nullptr) { // Handling Ctrl+E shortcut for Date Calc, target would be NavigationView^ in that case - control = safe_cast(target); + control = safe_cast(target); } int viewId = Utils::GetWindowId(); @@ -312,15 +301,12 @@ void KeyboardShortcutManager::OnVirtualKeyControlChordPropertyChanged( } } -void KeyboardShortcutManager::OnVirtualKeyShiftChordPropertyChanged( - DependencyObject^ target, - MyVirtualKey /*oldValue*/, - MyVirtualKey newValue) +void KeyboardShortcutManager::OnVirtualKeyShiftChordPropertyChanged(DependencyObject ^ target, MyVirtualKey /*oldValue*/, MyVirtualKey newValue) { // Writer lock for the static maps reader_writer_lock::scoped_lock lock(s_keyboardShortcutMapLock); - auto button = safe_cast(target); + auto button = safe_cast(target); int viewId = Utils::GetWindowId(); auto iterViewMap = s_VirtualKeyShiftChordsForButtons.find(viewId); @@ -338,15 +324,12 @@ void KeyboardShortcutManager::OnVirtualKeyShiftChordPropertyChanged( } } -void KeyboardShortcutManager::OnVirtualKeyAltChordPropertyChanged( - DependencyObject^ target, - MyVirtualKey /*oldValue*/, - MyVirtualKey newValue) +void KeyboardShortcutManager::OnVirtualKeyAltChordPropertyChanged(DependencyObject ^ target, MyVirtualKey /*oldValue*/, MyVirtualKey newValue) { // Writer lock for the static maps reader_writer_lock::scoped_lock lock(s_keyboardShortcutMapLock); - MUXC::NavigationView^ navView = safe_cast(target); + MUXC::NavigationView ^ navView = safe_cast(target); int viewId = Utils::GetWindowId(); auto iterViewMap = s_VirtualKeyAltChordsForButtons.find(viewId); @@ -364,15 +347,12 @@ void KeyboardShortcutManager::OnVirtualKeyAltChordPropertyChanged( } } -void KeyboardShortcutManager::OnVirtualKeyControlShiftChordPropertyChanged( - DependencyObject^ target, - MyVirtualKey /*oldValue*/, - MyVirtualKey newValue) +void KeyboardShortcutManager::OnVirtualKeyControlShiftChordPropertyChanged(DependencyObject ^ target, MyVirtualKey /*oldValue*/, MyVirtualKey newValue) { // Writer lock for the static maps reader_writer_lock::scoped_lock lock(s_keyboardShortcutMapLock); - auto button = safe_cast(target); + auto button = safe_cast(target); int viewId = Utils::GetWindowId(); auto iterViewMap = s_VirtualKeyControlShiftChordsForButtons.find(viewId); @@ -390,15 +370,12 @@ void KeyboardShortcutManager::OnVirtualKeyControlShiftChordPropertyChanged( } } -void KeyboardShortcutManager::OnVirtualKeyInverseChordPropertyChanged( - DependencyObject^ target, - MyVirtualKey /*oldValue*/, - MyVirtualKey newValue) +void KeyboardShortcutManager::OnVirtualKeyInverseChordPropertyChanged(DependencyObject ^ target, MyVirtualKey /*oldValue*/, MyVirtualKey newValue) { // Writer lock for the static maps reader_writer_lock::scoped_lock lock(s_keyboardShortcutMapLock); - auto button = safe_cast(target); + auto button = safe_cast(target); int viewId = Utils::GetWindowId(); auto iterViewMap = s_VirtualKeyInverseChordsForButtons.find(viewId); @@ -416,15 +393,12 @@ void KeyboardShortcutManager::OnVirtualKeyInverseChordPropertyChanged( } } -void KeyboardShortcutManager::OnVirtualKeyControlInverseChordPropertyChanged( - DependencyObject^ target, - MyVirtualKey /*oldValue*/, - MyVirtualKey newValue) +void KeyboardShortcutManager::OnVirtualKeyControlInverseChordPropertyChanged(DependencyObject ^ target, MyVirtualKey /*oldValue*/, MyVirtualKey newValue) { // Writer lock for the static maps reader_writer_lock::scoped_lock lock(s_keyboardShortcutMapLock); - auto button = safe_cast(target); + auto button = safe_cast(target); int viewId = Utils::GetWindowId(); auto iterViewMap = s_VirtualKeyControlInverseChordsForButtons.find(viewId); @@ -445,7 +419,7 @@ void KeyboardShortcutManager::OnVirtualKeyControlInverseChordPropertyChanged( // In the three event handlers below we will not mark the event as handled // because this is a supplemental operation and we don't want to interfere with // the normal keyboard handling. -void KeyboardShortcutManager::OnCharacterReceivedHandler(CoreWindow^ sender, CharacterReceivedEventArgs^ args) +void KeyboardShortcutManager::OnCharacterReceivedHandler(CoreWindow ^ sender, CharacterReceivedEventArgs ^ args) { int viewId = Utils::GetWindowId(); auto currentHonorShortcuts = s_fHonorShortcuts.find(viewId); @@ -472,7 +446,8 @@ const std::multimap& GetCurrentKeyDictionary(MyVirt { return s_VirtualKeyAltChordsForButtons.find(viewId)->second; } - else if ((s_ShiftKeyPressed.find(viewId)->second) && ((Window::Current->CoreWindow->GetKeyState(VirtualKey::Control) & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down)) + else if ((s_ShiftKeyPressed.find(viewId)->second) + && ((Window::Current->CoreWindow->GetKeyState(VirtualKey::Control) & CoreVirtualKeyStates::Down) == CoreVirtualKeyStates::Down)) { return s_VirtualKeyControlShiftChordsForButtons.find(viewId)->second; } @@ -521,7 +496,7 @@ const std::multimap& GetCurrentKeyDictionary(MyVirt } } -void KeyboardShortcutManager::OnKeyDownHandler(CoreWindow^ sender, KeyEventArgs^ args) +void KeyboardShortcutManager::OnKeyDownHandler(CoreWindow ^ sender, KeyEventArgs ^ args) { // If keyboard shortcuts like Ctrl+C or Ctrl+V are not handled if (!args->Handled) @@ -536,25 +511,23 @@ void KeyboardShortcutManager::OnKeyDownHandler(CoreWindow^ sender, KeyEventArgs^ bool isShiftKeyPressed = (currentShiftKeyPressed != s_ShiftKeyPressed.end()) && (currentShiftKeyPressed->second); // Handle Ctrl + E for DateCalculator - if ((key == VirtualKey::E) && - isControlKeyPressed && - !isShiftKeyPressed) + if ((key == VirtualKey::E) && isControlKeyPressed && !isShiftKeyPressed) { const auto& lookupMap = GetCurrentKeyDictionary(static_cast(key)); auto buttons = lookupMap.equal_range(static_cast(key)); auto navView = buttons.first->second.Resolve(); - auto appViewModel = safe_cast(navView->DataContext); + auto appViewModel = safe_cast(navView->DataContext); appViewModel->Mode = ViewMode::Date; auto categoryName = AppResourceProvider::GetInstance().GetResourceString(L"DateCalculationModeText"); appViewModel->CategoryName = categoryName; - auto menuItems = static_cast^>(navView->MenuItemsSource); + auto menuItems = static_cast ^>(navView->MenuItemsSource); auto flatIndex = NavCategory::GetFlatIndex(ViewMode::Date); navView->SelectedItem = menuItems->GetAt(flatIndex); return; } - auto currentHonorShortcuts = s_fHonorShortcuts.find(viewId); + auto currentHonorShortcuts = s_fHonorShortcuts.find(viewId); auto currentIgnoreNextEscape = s_ignoreNextEscape.find(viewId); @@ -615,9 +588,9 @@ void KeyboardShortcutManager::OnKeyDownHandler(CoreWindow^ sender, KeyEventArgs^ { RunFirstEnabledButtonCommand(buttons); - // Ctrl+C and Ctrl+V shifts focus to some button because of which enter doesn't work after copy/paste. So don't shift focus if Ctrl+C or Ctrl+V is pressed. - // When drop down is open, pressing escape shifts focus to clear button. So dont's shift focus if drop down is open. - // Ctrl+Insert is equivalent to Ctrl+C and Shift+Insert is equivalent to Ctrl+V + // Ctrl+C and Ctrl+V shifts focus to some button because of which enter doesn't work after copy/paste. So don't shift focus if Ctrl+C or Ctrl+V + // is pressed. When drop down is open, pressing escape shifts focus to clear button. So dont's shift focus if drop down is open. Ctrl+Insert is + // equivalent to Ctrl+C and Shift+Insert is equivalent to Ctrl+V if (currentIsDropDownOpen != s_IsDropDownOpen.end() && !currentIsDropDownOpen->second) { // Do not Light Up Buttons when Ctrl+C, Ctrl+V, Ctrl+Insert or Shift+Insert is pressed @@ -632,7 +605,7 @@ void KeyboardShortcutManager::OnKeyDownHandler(CoreWindow^ sender, KeyEventArgs^ } } -void KeyboardShortcutManager::OnKeyUpHandler(CoreWindow^ sender, KeyEventArgs^ args) +void KeyboardShortcutManager::OnKeyUpHandler(CoreWindow ^ sender, KeyEventArgs ^ args) { int viewId = Utils::GetWindowId(); auto key = args->VirtualKey; @@ -665,7 +638,7 @@ void KeyboardShortcutManager::OnKeyUpHandler(CoreWindow^ sender, KeyEventArgs^ a } } -void KeyboardShortcutManager::OnAcceleratorKeyActivated(CoreDispatcher^, AcceleratorKeyEventArgs^ args) +void KeyboardShortcutManager::OnAcceleratorKeyActivated(CoreDispatcher ^, AcceleratorKeyEventArgs ^ args) { if (args->KeyStatus.IsKeyReleased) { @@ -685,12 +658,12 @@ void KeyboardShortcutManager::OnAcceleratorKeyActivated(CoreDispatcher^, Acceler auto item = listIterator->second.Resolve(); if (item != nullptr) { - auto navView = safe_cast (item); + auto navView = safe_cast(item); - auto menuItems = static_cast^>(navView->MenuItemsSource); + auto menuItems = static_cast ^>(navView->MenuItemsSource); if (menuItems != nullptr) { - auto vm = safe_cast(navView->DataContext); + auto vm = safe_cast(navView->DataContext); if (nullptr != vm) { ViewMode toMode = NavCategory::GetViewModeForVirtualKey(static_cast(key)); @@ -722,13 +695,11 @@ void KeyboardShortcutManager::Initialize() { auto coreWindow = Window::Current->CoreWindow; coreWindow->CharacterReceived += - ref new TypedEventHandler(&KeyboardShortcutManager::OnCharacterReceivedHandler); - coreWindow->KeyDown += - ref new TypedEventHandler(&KeyboardShortcutManager::OnKeyDownHandler); - coreWindow->KeyUp += - ref new TypedEventHandler(&KeyboardShortcutManager::OnKeyUpHandler); + ref new TypedEventHandler(&KeyboardShortcutManager::OnCharacterReceivedHandler); + coreWindow->KeyDown += ref new TypedEventHandler(&KeyboardShortcutManager::OnKeyDownHandler); + coreWindow->KeyUp += ref new TypedEventHandler(&KeyboardShortcutManager::OnKeyUpHandler); coreWindow->Dispatcher->AcceleratorKeyActivated += - ref new TypedEventHandler(&KeyboardShortcutManager::OnAcceleratorKeyActivated); + ref new TypedEventHandler(&KeyboardShortcutManager::OnAcceleratorKeyActivated); KeyboardShortcutManager::RegisterNewAppViewId(); } @@ -755,7 +726,7 @@ void KeyboardShortcutManager::UpdateDropDownState(bool isOpen) } } -void KeyboardShortcutManager::UpdateDropDownState(Flyout^ aboutPageFlyout) +void KeyboardShortcutManager::UpdateDropDownState(Flyout ^ aboutPageFlyout) { int viewId = Utils::GetWindowId(); diff --git a/src/CalcViewModel/Common/KeyboardShortcutManager.h b/src/CalcViewModel/Common/KeyboardShortcutManager.h index 6e3f210b..30b1aa24 100644 --- a/src/CalcViewModel/Common/KeyboardShortcutManager.h +++ b/src/CalcViewModel/Common/KeyboardShortcutManager.h @@ -10,14 +10,17 @@ namespace CalculatorApp { namespace Common { - public ref class KeyboardShortcutManager sealed + public + ref class KeyboardShortcutManager sealed { public: - KeyboardShortcutManager() {} + KeyboardShortcutManager() + { + } DEPENDENCY_PROPERTY_OWNER(KeyboardShortcutManager); - DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(Platform::String^, Character); + DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(Platform::String ^, Character); DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(MyVirtualKey, VirtualKey); DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(MyVirtualKey, VirtualKeyControlChord); DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(MyVirtualKey, VirtualKeyShiftChord); @@ -26,9 +29,10 @@ namespace CalculatorApp DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(MyVirtualKey, VirtualKeyInverseChord); DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(MyVirtualKey, VirtualKeyControlInverseChord); - internal: + internal : - static void Initialize(); + static void + Initialize(); // Sometimes, like with popups, escape is treated as special and even // though it is handled we get it passed through to us. In those cases @@ -42,57 +46,34 @@ namespace CalculatorApp static void HandledEnter(bool ishandled); static void UpdateDropDownState(bool); static void ShiftButtonChecked(bool checked); - static void UpdateDropDownState(Windows::UI::Xaml::Controls::Flyout^ aboutPageFlyout); + static void UpdateDropDownState(Windows::UI::Xaml::Controls::Flyout ^ aboutPageFlyout); static void RegisterNewAppViewId(); static void OnWindowClosed(int viewId); private: + static void OnCharacterPropertyChanged(Windows::UI::Xaml::DependencyObject ^ target, Platform::String ^ oldValue, Platform::String ^ newValue); - static void OnCharacterPropertyChanged( - Windows::UI::Xaml::DependencyObject^ target, - Platform::String^ oldValue, - Platform::String^ newValue); + static void OnVirtualKeyPropertyChanged(Windows::UI::Xaml::DependencyObject ^ target, MyVirtualKey oldValue, MyVirtualKey newValue); - static void OnVirtualKeyPropertyChanged( - Windows::UI::Xaml::DependencyObject^ target, - MyVirtualKey oldValue, - MyVirtualKey newValue); + static void OnVirtualKeyControlChordPropertyChanged(Windows::UI::Xaml::DependencyObject ^ target, MyVirtualKey oldValue, MyVirtualKey newValue); - static void OnVirtualKeyControlChordPropertyChanged( - Windows::UI::Xaml::DependencyObject^ target, - MyVirtualKey oldValue, - MyVirtualKey newValue); + static void OnVirtualKeyShiftChordPropertyChanged(Windows::UI::Xaml::DependencyObject ^ target, MyVirtualKey oldValue, MyVirtualKey newValue); - static void OnVirtualKeyShiftChordPropertyChanged( - Windows::UI::Xaml::DependencyObject^ target, - MyVirtualKey oldValue, - MyVirtualKey newValue); + static void OnVirtualKeyInverseChordPropertyChanged(Windows::UI::Xaml::DependencyObject ^ target, MyVirtualKey oldValue, MyVirtualKey newValue); - static void OnVirtualKeyInverseChordPropertyChanged( - Windows::UI::Xaml::DependencyObject^ target, - MyVirtualKey oldValue, - MyVirtualKey newValue); + static void OnVirtualKeyControlInverseChordPropertyChanged(Windows::UI::Xaml::DependencyObject ^ target, MyVirtualKey oldValue, + MyVirtualKey newValue); - static void OnVirtualKeyControlInverseChordPropertyChanged( - Windows::UI::Xaml::DependencyObject^ target, - MyVirtualKey oldValue, - MyVirtualKey newValue); + static void OnVirtualKeyAltChordPropertyChanged(Windows::UI::Xaml::DependencyObject ^ target, MyVirtualKey oldValue, MyVirtualKey newValue); - static void OnVirtualKeyAltChordPropertyChanged( - Windows::UI::Xaml::DependencyObject^ target, - MyVirtualKey oldValue, - MyVirtualKey newValue); + static void OnVirtualKeyControlShiftChordPropertyChanged(Windows::UI::Xaml::DependencyObject ^ target, MyVirtualKey oldValue, + MyVirtualKey newValue); - static void OnVirtualKeyControlShiftChordPropertyChanged( - Windows::UI::Xaml::DependencyObject^ target, - MyVirtualKey oldValue, - MyVirtualKey newValue); - - static void OnCharacterReceivedHandler(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::CharacterReceivedEventArgs^ args); - static void OnKeyDownHandler(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args); - static void OnKeyUpHandler(Windows::UI::Core::CoreWindow^ sender, Windows::UI::Core::KeyEventArgs^ args); - static void OnAcceleratorKeyActivated(Windows::UI::Core::CoreDispatcher^, Windows::UI::Core::AcceleratorKeyEventArgs^ args); + static void OnCharacterReceivedHandler(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::CharacterReceivedEventArgs ^ args); + static void OnKeyDownHandler(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::KeyEventArgs ^ args); + static void OnKeyUpHandler(Windows::UI::Core::CoreWindow ^ sender, Windows::UI::Core::KeyEventArgs ^ args); + static void OnAcceleratorKeyActivated(Windows::UI::Core::CoreDispatcher ^, Windows::UI::Core::AcceleratorKeyEventArgs ^ args); }; } } diff --git a/src/CalcViewModel/Common/LocalizationService.cpp b/src/CalcViewModel/Common/LocalizationService.cpp index 25c2f8a6..6f429651 100644 --- a/src/CalcViewModel/Common/LocalizationService.cpp +++ b/src/CalcViewModel/Common/LocalizationService.cpp @@ -33,16 +33,15 @@ DEPENDENCY_PROPERTY_INITIALIZATION(LocalizationService, FontSize); static reader_writer_lock s_locServiceInstanceLock; -LocalizationService^ LocalizationService::s_singletonInstance = nullptr; +LocalizationService ^ LocalizationService::s_singletonInstance = nullptr; // Resources for the engine use numbers as keys. It's inconvenient, but also difficult to // change given that the engine heavily relies on perfect ordering of certain elements. // The key for open parenthesis, '(', is "48". static constexpr auto s_openParenResourceKey = L"48"; -LocalizationService^ LocalizationService::GetInstance() +LocalizationService ^ LocalizationService::GetInstance() { - if (s_singletonInstance == nullptr) { // Writer lock for the static maps @@ -59,20 +58,20 @@ LocalizationService^ LocalizationService::GetInstance() LocalizationService::LocalizationService() { m_language = ApplicationLanguages::Languages->GetAt(0); - m_flowDirection = ResourceContext::GetForCurrentView()->QualifierValues->Lookup(L"LayoutDirection") - != L"LTR" ? FlowDirection::RightToLeft : FlowDirection::LeftToRight; + m_flowDirection = + ResourceContext::GetForCurrentView()->QualifierValues->Lookup(L"LayoutDirection") != L"LTR" ? FlowDirection::RightToLeft : FlowDirection::LeftToRight; auto resourceLoader = AppResourceProvider::GetInstance(); m_fontFamilyOverride = resourceLoader.GetResourceString(L"LocalizedFontFamilyOverride"); - String^ reserved = L"RESERVED_FOR_FONTLOC"; + String ^ reserved = L"RESERVED_FOR_FONTLOC"; m_overrideFontApiValues = ((m_fontFamilyOverride != nullptr) && (m_fontFamilyOverride != reserved)); if (m_overrideFontApiValues) { - String^ localizedUICaptionFontSizeFactorOverride = resourceLoader.GetResourceString(L"LocalizedUICaptionFontSizeFactorOverride"); - String^ localizedUITextFontSizeFactorOverride = resourceLoader.GetResourceString(L"LocalizedUITextFontSizeFactorOverride"); - String^ localizedFontWeightOverride = resourceLoader.GetResourceString(L"LocalizedFontWeightOverride"); + String ^ localizedUICaptionFontSizeFactorOverride = resourceLoader.GetResourceString(L"LocalizedUICaptionFontSizeFactorOverride"); + String ^ localizedUITextFontSizeFactorOverride = resourceLoader.GetResourceString(L"LocalizedUITextFontSizeFactorOverride"); + String ^ localizedFontWeightOverride = resourceLoader.GetResourceString(L"LocalizedFontWeightOverride"); // If any of the font overrides are modified then all of them need to be modified assert(localizedFontWeightOverride != reserved); @@ -87,7 +86,7 @@ LocalizationService::LocalizationService() m_fontGroup = ref new LanguageFontGroup(m_language); } -FontWeight LocalizationService::ParseFontWeight(String^ fontWeight) +FontWeight LocalizationService::ParseFontWeight(String ^ fontWeight) { wstring weight = fontWeight->Data(); transform(weight.begin(), weight.end(), weight.begin(), towlower); @@ -153,7 +152,7 @@ bool LocalizationService::IsRtlLayout() return m_flowDirection == FlowDirection::RightToLeft; } -String^ LocalizationService::GetLanguage() +String ^ LocalizationService::GetLanguage() { return m_language; } @@ -163,7 +162,7 @@ bool LocalizationService::GetOverrideFontApiValues() return m_overrideFontApiValues; } -FontFamily^ LocalizationService::GetLanguageFontFamilyForType(LanguageFontType fontType) +FontFamily ^ LocalizationService::GetLanguageFontFamilyForType(LanguageFontType fontType) { if (m_overrideFontApiValues) { @@ -175,7 +174,7 @@ FontFamily^ LocalizationService::GetLanguageFontFamilyForType(LanguageFontType f } } -LanguageFont^ LocalizationService::GetLanguageFont(LanguageFontType fontType) +LanguageFont ^ LocalizationService::GetLanguageFont(LanguageFontType fontType) { assert(!m_overrideFontApiValues); assert(m_fontGroup); @@ -191,7 +190,7 @@ LanguageFont^ LocalizationService::GetLanguageFont(LanguageFontType fontType) } } -String^ LocalizationService::GetFontFamilyOverride() +String ^ LocalizationService::GetFontFamilyOverride() { assert(m_overrideFontApiValues); return m_fontFamilyOverride; @@ -218,24 +217,24 @@ double LocalizationService::GetFontScaleFactorOverride(LanguageFontType fontType } } -void LocalizationService::OnFontTypePropertyChanged(DependencyObject^ target, LanguageFontType /*oldValue*/, LanguageFontType /*newValue*/) +void LocalizationService::OnFontTypePropertyChanged(DependencyObject ^ target, LanguageFontType /*oldValue*/, LanguageFontType /*newValue*/) { UpdateFontFamilyAndSize(target); } -void LocalizationService::OnFontWeightPropertyChanged(DependencyObject^ target, FontWeight /*oldValue*/, FontWeight /*newValue*/) +void LocalizationService::OnFontWeightPropertyChanged(DependencyObject ^ target, FontWeight /*oldValue*/, FontWeight /*newValue*/) { UpdateFontFamilyAndSize(target); } -void LocalizationService::OnFontSizePropertyChanged(DependencyObject^ target, double /*oldValue*/, double /*newValue*/) +void LocalizationService::OnFontSizePropertyChanged(DependencyObject ^ target, double /*oldValue*/, double /*newValue*/) { UpdateFontFamilyAndSize(target); } -void LocalizationService::UpdateFontFamilyAndSize(DependencyObject^ target) +void LocalizationService::UpdateFontFamilyAndSize(DependencyObject ^ target) { - FontFamily^ fontFamily; + FontFamily ^ fontFamily; FontWeight fontWeight; bool fOverrideFontWeight = false; double scaleFactor; @@ -259,7 +258,7 @@ void LocalizationService::UpdateFontFamilyAndSize(DependencyObject^ target) double sizeToUse = LocalizationService::GetFontSize(target) * scaleFactor; - auto control = dynamic_cast(target); + auto control = dynamic_cast(target); if (control) { control->FontFamily = fontFamily; @@ -278,7 +277,7 @@ void LocalizationService::UpdateFontFamilyAndSize(DependencyObject^ target) } else { - auto textBlock = dynamic_cast(target); + auto textBlock = dynamic_cast(target); if (textBlock) { textBlock->FontFamily = fontFamily; @@ -297,7 +296,7 @@ void LocalizationService::UpdateFontFamilyAndSize(DependencyObject^ target) } else { - RichTextBlock^ richTextBlock = dynamic_cast(target); + RichTextBlock ^ richTextBlock = dynamic_cast(target); if (richTextBlock) { richTextBlock->FontFamily = fontFamily; @@ -316,7 +315,7 @@ void LocalizationService::UpdateFontFamilyAndSize(DependencyObject^ target) } else { - TextElement^ textElement = dynamic_cast(target); + TextElement ^ textElement = dynamic_cast(target); if (textElement) { textElement->FontFamily = fontFamily; @@ -340,9 +339,9 @@ void LocalizationService::UpdateFontFamilyAndSize(DependencyObject^ target) // If successful, returns a formatter that respects the user's regional format settings, // as configured by running intl.cpl. -DecimalFormatter^ LocalizationService::GetRegionalSettingsAwareDecimalFormatter() +DecimalFormatter ^ LocalizationService::GetRegionalSettingsAwareDecimalFormatter() { - IIterable^ languageIdentifiers = LocalizationService::GetLanguageIdentifiers(); + IIterable ^ languageIdentifiers = LocalizationService::GetLanguageIdentifiers(); if (languageIdentifiers != nullptr) { return ref new DecimalFormatter(languageIdentifiers, GlobalizationPreferences::HomeGeographicRegion); @@ -355,9 +354,9 @@ DecimalFormatter^ LocalizationService::GetRegionalSettingsAwareDecimalFormatter( // as configured by running intl.cpl. // // This helper function creates a DateTimeFormatter with a TwentyFour hour clock -DateTimeFormatter^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatter(_In_ String^ format) +DateTimeFormatter ^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatter(_In_ String ^ format) { - IIterable^ languageIdentifiers = LocalizationService::GetLanguageIdentifiers(); + IIterable ^ languageIdentifiers = LocalizationService::GetLanguageIdentifiers(); if (languageIdentifiers == nullptr) { languageIdentifiers = ApplicationLanguages::Languages; @@ -368,41 +367,30 @@ DateTimeFormatter^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatte // If successful, returns a formatter that respects the user's regional format settings, // as configured by running intl.cpl. -DateTimeFormatter^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatter( - _In_ String^ format, - _In_ String^ calendarIdentifier, - _In_ String^ clockIdentifier) +DateTimeFormatter + ^ LocalizationService::GetRegionalSettingsAwareDateTimeFormatter(_In_ String ^ format, _In_ String ^ calendarIdentifier, _In_ String ^ clockIdentifier) { - IIterable^ languageIdentifiers = LocalizationService::GetLanguageIdentifiers(); + IIterable ^ languageIdentifiers = LocalizationService::GetLanguageIdentifiers(); if (languageIdentifiers == nullptr) { languageIdentifiers = ApplicationLanguages::Languages; } - return ref new DateTimeFormatter( - format, - languageIdentifiers, - GlobalizationPreferences::HomeGeographicRegion, - calendarIdentifier, - clockIdentifier); + return ref new DateTimeFormatter(format, languageIdentifiers, GlobalizationPreferences::HomeGeographicRegion, calendarIdentifier, clockIdentifier); } -CurrencyFormatter^ LocalizationService::GetRegionalSettingsAwareCurrencyFormatter() +CurrencyFormatter ^ LocalizationService::GetRegionalSettingsAwareCurrencyFormatter() { - String^ userCurrency = (GlobalizationPreferences::Currencies->Size > 0) - ? GlobalizationPreferences::Currencies->GetAt(0) - : StringReference(DefaultCurrencyCode.data()); + String ^ userCurrency = + (GlobalizationPreferences::Currencies->Size > 0) ? GlobalizationPreferences::Currencies->GetAt(0) : StringReference(DefaultCurrencyCode.data()); - IIterable^ languageIdentifiers = LocalizationService::GetLanguageIdentifiers(); + IIterable ^ languageIdentifiers = LocalizationService::GetLanguageIdentifiers(); if (languageIdentifiers == nullptr) { languageIdentifiers = ApplicationLanguages::Languages; } - auto currencyFormatter = ref new CurrencyFormatter( - userCurrency, - languageIdentifiers, - GlobalizationPreferences::HomeGeographicRegion); + auto currencyFormatter = ref new CurrencyFormatter(userCurrency, languageIdentifiers, GlobalizationPreferences::HomeGeographicRegion); int fractionDigits = LocalizationSettings::GetInstance().GetCurrencyTrailingDigits(); currencyFormatter->FractionDigits = fractionDigits; @@ -410,7 +398,7 @@ CurrencyFormatter^ LocalizationService::GetRegionalSettingsAwareCurrencyFormatte return currencyFormatter; } -IIterable^ LocalizationService::GetLanguageIdentifiers() +IIterable ^ LocalizationService::GetLanguageIdentifiers() { WCHAR currentLocale[LOCALE_NAME_MAX_LENGTH] = {}; int result = GetUserDefaultLocaleName(currentLocale, LOCALE_NAME_MAX_LENGTH); @@ -426,12 +414,12 @@ IIterable^ LocalizationService::GetLanguageIdentifiers() *underscore = L'\0'; } - String^ localeString = ref new String(currentLocale); + String ^ localeString = ref new String(currentLocale); // validate if the locale we have is valid // otherwise we fallback to the default. if (Language::IsWellFormed(localeString)) { - auto languageList = ref new Vector(); + auto languageList = ref new Vector(); languageList->Append(localeString); return languageList; } @@ -448,49 +436,34 @@ unordered_map LocalizationService::GetTokenToReadableNameMap() // standard project resources. static vector> s_parenEngineKeyResourceMap = { // Sine permutations - make_pair(L"67", L"SineDegrees"), - make_pair(L"73", L"SineRadians"), - make_pair(L"79", L"SineGradians"), - make_pair(L"70", L"InverseSineDegrees"), - make_pair(L"76", L"InverseSineRadians"), - make_pair(L"82", L"InverseSineGradians"), - make_pair(L"25", L"HyperbolicSine"), - make_pair(L"85", L"InverseHyperbolicSine"), + make_pair(L"67", L"SineDegrees"), make_pair(L"73", L"SineRadians"), + make_pair(L"79", L"SineGradians"), make_pair(L"70", L"InverseSineDegrees"), + make_pair(L"76", L"InverseSineRadians"), make_pair(L"82", L"InverseSineGradians"), + make_pair(L"25", L"HyperbolicSine"), make_pair(L"85", L"InverseHyperbolicSine"), // Cosine permutations - make_pair(L"68", L"CosineDegrees"), - make_pair(L"74", L"CosineRadians"), - make_pair(L"80", L"CosineGradians"), - make_pair(L"71", L"InverseCosineDegrees"), - make_pair(L"77", L"InverseCosineRadians"), - make_pair(L"83", L"InverseCosineGradians"), - make_pair(L"26", L"HyperbolicCosine"), - make_pair(L"86", L"InverseHyperbolicCosine"), + make_pair(L"68", L"CosineDegrees"), make_pair(L"74", L"CosineRadians"), + make_pair(L"80", L"CosineGradians"), make_pair(L"71", L"InverseCosineDegrees"), + make_pair(L"77", L"InverseCosineRadians"), make_pair(L"83", L"InverseCosineGradians"), + make_pair(L"26", L"HyperbolicCosine"), make_pair(L"86", L"InverseHyperbolicCosine"), // Tangent permutations - make_pair(L"69", L"TangentDegrees"), - make_pair(L"75", L"TangentRadians"), - make_pair(L"81", L"TangentGradians"), - make_pair(L"72", L"InverseTangentDegrees"), - make_pair(L"78", L"InverseTangentRadians"), - make_pair(L"84", L"InverseTangentGradians"), - make_pair(L"27", L"HyperbolicTangent"), - make_pair(L"87", L"InverseHyperbolicTangent"), + make_pair(L"69", L"TangentDegrees"), make_pair(L"75", L"TangentRadians"), + make_pair(L"81", L"TangentGradians"), make_pair(L"72", L"InverseTangentDegrees"), + make_pair(L"78", L"InverseTangentRadians"), make_pair(L"84", L"InverseTangentGradians"), + make_pair(L"27", L"HyperbolicTangent"), make_pair(L"87", L"InverseHyperbolicTangent"), // Miscellaneous Scientific functions - make_pair(L"94", L"Factorial"), - make_pair(L"35", L"DegreeMinuteSecond"), - make_pair(L"28", L"NaturalLog"), - make_pair(L"91", L"Square") + make_pair(L"94", L"Factorial"), make_pair(L"35", L"DegreeMinuteSecond"), + make_pair(L"28", L"NaturalLog"), make_pair(L"91", L"Square") }; - static vector> s_noParenEngineKeyResourceMap = { - // Programmer mode functions - make_pair(L"9", L"LeftShift"), - make_pair(L"10", L"RightShift"), + static vector> s_noParenEngineKeyResourceMap = { // Programmer mode functions + make_pair(L"9", L"LeftShift"), + make_pair(L"10", L"RightShift"), - // Y Root scientific function - make_pair(L"16", L"YRoot") + // Y Root scientific function + make_pair(L"16", L"YRoot") }; unordered_map tokenToReadableNameMap{}; @@ -523,7 +496,7 @@ unordered_map LocalizationService::GetTokenToReadableNameMap() return tokenToReadableNameMap; } -String^ LocalizationService::GetNarratorReadableToken(String^ rawToken) +String ^ LocalizationService::GetNarratorReadableToken(String ^ rawToken) { static unordered_map s_tokenToReadableNameMap = GetTokenToReadableNameMap(); @@ -534,12 +507,12 @@ String^ LocalizationService::GetNarratorReadableToken(String^ rawToken) } else { - static const String^ openParen = AppResourceProvider::GetInstance().GetCEngineString(StringReference(s_openParenResourceKey)); + static const String ^ openParen = AppResourceProvider::GetInstance().GetCEngineString(StringReference(s_openParenResourceKey)); return ref new String(itr->second.c_str()) + L" " + openParen; } } -String^ LocalizationService::GetNarratorReadableString(String^ rawString) +String ^ LocalizationService::GetNarratorReadableString(String ^ rawString) { wstringstream readableString{}; readableString << L""; diff --git a/src/CalcViewModel/Common/LocalizationService.h b/src/CalcViewModel/Common/LocalizationService.h index 7560682d..f288d54e 100644 --- a/src/CalcViewModel/Common/LocalizationService.h +++ b/src/CalcViewModel/Common/LocalizationService.h @@ -5,81 +5,83 @@ #include "Utils.h" -namespace CalculatorApp { namespace Common +namespace CalculatorApp { - namespace LocalizationServiceProperties + namespace Common { - static constexpr std::wstring_view DefaultCurrencyCode{ L"USD" }; + namespace LocalizationServiceProperties + { + static constexpr std::wstring_view DefaultCurrencyCode{ L"USD" }; + } + + public + enum class LanguageFontType + { + UIText, + UICaption, + }; + + public + ref class LocalizationService sealed + { + public: + DEPENDENCY_PROPERTY_OWNER(LocalizationService); + + DEPENDENCY_PROPERTY_ATTACHED_WITH_DEFAULT_AND_CALLBACK(LanguageFontType, FontType, LanguageFontType::UIText); + DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(double, FontSize); + + internal : static LocalizationService ^ GetInstance(); + + Windows::UI::Xaml::FlowDirection GetFlowDirection(); + bool IsRtlLayout(); + bool GetOverrideFontApiValues(); + Platform::String ^ GetLanguage(); + Windows::UI::Xaml::Media::FontFamily ^ GetLanguageFontFamilyForType(LanguageFontType fontType); + Platform::String ^ GetFontFamilyOverride(); + Windows::UI::Text::FontWeight GetFontWeightOverride(); + double GetFontScaleFactorOverride(LanguageFontType fontType); + + static Windows::Globalization::NumberFormatting::DecimalFormatter ^ GetRegionalSettingsAwareDecimalFormatter(); + static Windows::Globalization::DateTimeFormatting::DateTimeFormatter ^ GetRegionalSettingsAwareDateTimeFormatter(_In_ Platform::String ^ format); + static Windows::Globalization::DateTimeFormatting::DateTimeFormatter + ^ GetRegionalSettingsAwareDateTimeFormatter(_In_ Platform::String ^ format, _In_ Platform::String ^ calendarIdentifier, + _In_ Platform::String ^ clockIdentifier); + + static Windows::Globalization::NumberFormatting::CurrencyFormatter ^ GetRegionalSettingsAwareCurrencyFormatter(); + + static Platform::String ^ GetNarratorReadableToken(Platform::String ^ rawToken); + static Platform::String ^ GetNarratorReadableString(Platform::String ^ rawString); + + private: + Windows::Globalization::Fonts::LanguageFont ^ GetLanguageFont(LanguageFontType fontType); + Windows::UI::Text::FontWeight ParseFontWeight(Platform::String ^ fontWeight); + + static Windows::Foundation::Collections::IIterable ^ GetLanguageIdentifiers(); + + // Attached property callbacks + static void OnFontTypePropertyChanged(Windows::UI::Xaml::DependencyObject ^ target, LanguageFontType oldValue, LanguageFontType newValue); + static void OnFontWeightPropertyChanged(Windows::UI::Xaml::DependencyObject ^ target, Windows::UI::Text::FontWeight oldValue, + Windows::UI::Text::FontWeight newValue); + static void OnFontSizePropertyChanged(Windows::UI::Xaml::DependencyObject ^ target, double oldValue, double newValue); + + static void UpdateFontFamilyAndSize(Windows::UI::Xaml::DependencyObject ^ target); + + static std::unordered_map GetTokenToReadableNameMap(); + + private: + LocalizationService(); + + static LocalizationService ^ s_singletonInstance; + + Windows::Globalization::Fonts::LanguageFontGroup ^ m_fontGroup; + Platform::String ^ m_language; + Windows::UI::Xaml::FlowDirection m_flowDirection; + bool m_overrideFontApiValues; + Platform::String ^ m_fontFamilyOverride; + Windows::UI::Text::FontWeight m_fontWeightOverride; + double m_uiTextFontScaleFactorOverride; + double m_uiCaptionFontScaleFactorOverride; + }; + } - - public enum class LanguageFontType - { - UIText, - UICaption, - }; - - public ref class LocalizationService sealed - { - public: - - DEPENDENCY_PROPERTY_OWNER(LocalizationService); - - DEPENDENCY_PROPERTY_ATTACHED_WITH_DEFAULT_AND_CALLBACK(LanguageFontType, FontType, LanguageFontType::UIText); - DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(double, FontSize); - - internal: - static LocalizationService^ GetInstance(); - - Windows::UI::Xaml::FlowDirection GetFlowDirection(); - bool IsRtlLayout(); - bool GetOverrideFontApiValues(); - Platform::String^ GetLanguage(); - Windows::UI::Xaml::Media::FontFamily^ GetLanguageFontFamilyForType(LanguageFontType fontType); - Platform::String^ GetFontFamilyOverride(); - Windows::UI::Text::FontWeight GetFontWeightOverride(); - double GetFontScaleFactorOverride(LanguageFontType fontType); - - static Windows::Globalization::NumberFormatting::DecimalFormatter^ GetRegionalSettingsAwareDecimalFormatter(); - static Windows::Globalization::DateTimeFormatting::DateTimeFormatter^ GetRegionalSettingsAwareDateTimeFormatter(_In_ Platform::String^ format); - static Windows::Globalization::DateTimeFormatting::DateTimeFormatter^ GetRegionalSettingsAwareDateTimeFormatter( - _In_ Platform::String^ format, - _In_ Platform::String^ calendarIdentifier, - _In_ Platform::String^ clockIdentifier); - - static Windows::Globalization::NumberFormatting::CurrencyFormatter^ GetRegionalSettingsAwareCurrencyFormatter(); - - static Platform::String^ GetNarratorReadableToken(Platform::String^ rawToken); - static Platform::String^ GetNarratorReadableString(Platform::String^ rawString); - - private: - Windows::Globalization::Fonts::LanguageFont^ GetLanguageFont(LanguageFontType fontType); - Windows::UI::Text::FontWeight ParseFontWeight(Platform::String^ fontWeight); - - static Windows::Foundation::Collections::IIterable^ GetLanguageIdentifiers(); - - // Attached property callbacks - static void OnFontTypePropertyChanged(Windows::UI::Xaml::DependencyObject^ target, LanguageFontType oldValue, LanguageFontType newValue); - static void OnFontWeightPropertyChanged(Windows::UI::Xaml::DependencyObject^ target, Windows::UI::Text::FontWeight oldValue, Windows::UI::Text::FontWeight newValue); - static void OnFontSizePropertyChanged(Windows::UI::Xaml::DependencyObject^ target, double oldValue, double newValue); - - static void UpdateFontFamilyAndSize(Windows::UI::Xaml::DependencyObject^ target); - - static std::unordered_map GetTokenToReadableNameMap(); - - private: - LocalizationService(); - - static LocalizationService^ s_singletonInstance; - - Windows::Globalization::Fonts::LanguageFontGroup^ m_fontGroup; - Platform::String^ m_language; - Windows::UI::Xaml::FlowDirection m_flowDirection; - bool m_overrideFontApiValues; - Platform::String^ m_fontFamilyOverride; - Windows::UI::Text::FontWeight m_fontWeightOverride; - double m_uiTextFontScaleFactorOverride; - double m_uiCaptionFontScaleFactorOverride; - }; - -}} - +} diff --git a/src/CalcViewModel/Common/LocalizationSettings.h b/src/CalcViewModel/Common/LocalizationSettings.h index d37e9647..881c592d 100644 --- a/src/CalcViewModel/Common/LocalizationSettings.h +++ b/src/CalcViewModel/Common/LocalizationSettings.h @@ -18,7 +18,7 @@ namespace CalculatorApp int result = 0; // Use DecimalFormatter as it respects the locale and the user setting - Windows::Globalization::NumberFormatting::DecimalFormatter^ formatter; + Windows::Globalization::NumberFormatting::DecimalFormatter ^ formatter; formatter = CalculatorApp::Common::LocalizationService::GetRegionalSettingsAwareDecimalFormatter(); formatter->FractionDigits = 0; formatter->IsDecimalPointAlwaysDisplayed = false; @@ -29,9 +29,7 @@ namespace CalculatorApp } wchar_t resolvedName[LOCALE_NAME_MAX_LENGTH]; - result = ResolveLocaleName(formatter->ResolvedLanguage->Data(), - resolvedName, - LOCALE_NAME_MAX_LENGTH); + result = ResolveLocaleName(formatter->ResolvedLanguage->Data(), resolvedName, LOCALE_NAME_MAX_LENGTH); if (result == 0) { throw std::runtime_error("Unexpected error resolving locale name"); @@ -40,30 +38,21 @@ namespace CalculatorApp { m_resolvedName = resolvedName; wchar_t decimalString[LocaleSettingBufferSize] = L""; - result = GetLocaleInfoEx(m_resolvedName.c_str(), - LOCALE_SDECIMAL, - decimalString, - static_cast(std::size(decimalString))); + result = GetLocaleInfoEx(m_resolvedName.c_str(), LOCALE_SDECIMAL, decimalString, static_cast(std::size(decimalString))); if (result == 0) { throw std::runtime_error("Unexpected error while getting locale info"); } wchar_t groupingSymbolString[LocaleSettingBufferSize] = L""; - result = GetLocaleInfoEx(m_resolvedName.c_str(), - LOCALE_STHOUSAND, - groupingSymbolString, - static_cast(std::size(groupingSymbolString))); + result = GetLocaleInfoEx(m_resolvedName.c_str(), LOCALE_STHOUSAND, groupingSymbolString, static_cast(std::size(groupingSymbolString))); if (result == 0) { throw std::runtime_error("Unexpected error while getting locale info"); } wchar_t numberGroupingString[LocaleSettingBufferSize] = L""; - result = GetLocaleInfoEx(m_resolvedName.c_str(), - LOCALE_SGROUPING, - numberGroupingString, - static_cast(std::size(numberGroupingString))); + result = GetLocaleInfoEx(m_resolvedName.c_str(), LOCALE_SGROUPING, numberGroupingString, static_cast(std::size(numberGroupingString))); if (result == 0) { throw std::runtime_error("Unexpected error while getting locale info"); @@ -71,20 +60,16 @@ namespace CalculatorApp // Get locale info for List Separator, eg. comma is used in many locales wchar_t listSeparatorString[4] = L""; - result = ::GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, - LOCALE_SLIST, - listSeparatorString, - static_cast(std::size(listSeparatorString))); // Max length of the expected return value is 4 + result = ::GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, LOCALE_SLIST, listSeparatorString, + static_cast(std::size(listSeparatorString))); // Max length of the expected return value is 4 if (result == 0) { throw std::runtime_error("Unexpected error while getting locale info"); } int currencyTrailingDigits = 0; - result = GetLocaleInfoEx(m_resolvedName.c_str(), - LOCALE_ICURRDIGITS | LOCALE_RETURN_NUMBER, - (LPWSTR)¤cyTrailingDigits, - sizeof(currencyTrailingDigits) / sizeof(WCHAR)); + result = GetLocaleInfoEx(m_resolvedName.c_str(), LOCALE_ICURRDIGITS | LOCALE_RETURN_NUMBER, (LPWSTR)¤cyTrailingDigits, + sizeof(currencyTrailingDigits) / sizeof(WCHAR)); if (result == 0) { throw std::runtime_error("Unexpected error while getting locale info"); @@ -93,10 +78,8 @@ namespace CalculatorApp // Currency symbol precedence is either 0 or 1. // A value of 0 indicates the symbol follows the currency value. int currencySymbolPrecedence = 1; - result = GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, - LOCALE_IPOSSYMPRECEDES | LOCALE_RETURN_NUMBER, - (LPWSTR)¤cySymbolPrecedence, - sizeof(currencySymbolPrecedence) / sizeof(WCHAR)); + result = GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, LOCALE_IPOSSYMPRECEDES | LOCALE_RETURN_NUMBER, (LPWSTR)¤cySymbolPrecedence, + sizeof(currencySymbolPrecedence) / sizeof(WCHAR)); // As CalcEngine only supports the first character of the decimal separator, // Only first character of the decimal separator string is supported. @@ -112,24 +95,21 @@ namespace CalculatorApp // Note: This function returns 0 on failure. // We'll ignore the failure in that case and the CalendarIdentifier would get set to GregorianCalendar. CALID calId; - ::GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, - LOCALE_ICALENDARTYPE | LOCALE_RETURN_NUMBER, - reinterpret_cast(&calId), - sizeof(calId)); + ::GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, LOCALE_ICALENDARTYPE | LOCALE_RETURN_NUMBER, reinterpret_cast(&calId), sizeof(calId)); m_calendarIdentifier = GetCalendarIdentifierFromCalid(calId); // Get FirstDayOfWeek Date and Time setting wchar_t day[80] = L""; ::GetLocaleInfoEx(LOCALE_NAME_USER_DEFAULT, - LOCALE_IFIRSTDAYOFWEEK, // The first day in a week - reinterpret_cast(day), // Argument is of type PWSTR - static_cast(std::size(day))); // Max return size are 80 characters + LOCALE_IFIRSTDAYOFWEEK, // The first day in a week + reinterpret_cast(day), // Argument is of type PWSTR + static_cast(std::size(day))); // Max return size are 80 characters // The LOCALE_IFIRSTDAYOFWEEK integer value varies from 0, 1, .. 6 for Monday, Tuesday, ... Sunday // DayOfWeek enum value varies from 0, 1, .. 6 for Sunday, Monday, ... Saturday // Hence, DayOfWeek = (valueof(LOCALE_IFIRSTDAYOFWEEK) + 1) % 7 - m_firstDayOfWeek = static_cast((_wtoi(day) + 1) % 7); // static cast int to DayOfWeek enum + m_firstDayOfWeek = static_cast((_wtoi(day) + 1) % 7); // static cast int to DayOfWeek enum } public: @@ -149,7 +129,7 @@ namespace CalculatorApp return localizationSettings; } - Platform::String^ GetLocaleName() const + Platform::String ^ GetLocaleName() const { return ref new Platform::String(m_resolvedName.c_str()); } @@ -179,7 +159,7 @@ namespace CalculatorApp } } - Platform::String^ GetEnglishValueFromLocalizedDigits(const std::wstring& localizedString) const + Platform::String ^ GetEnglishValueFromLocalizedDigits(const std::wstring& localizedString) const { if (m_resolvedName == L"en-US") { @@ -201,7 +181,7 @@ namespace CalculatorApp { ch = j.ToString()->Data()[0]; break; - //ch = val - L'0'; + // ch = val - L'0'; } } } @@ -305,7 +285,7 @@ namespace CalculatorApp } } - Platform::String^ GetCalendarIdentifier() const + Platform::String ^ GetCalendarIdentifier() const { return m_calendarIdentifier; } @@ -378,7 +358,7 @@ namespace CalculatorApp // Hexadecimal characters are not currently localized static constexpr std::array s_hexSymbols{ L'A', L'B', L'C', L'D', L'E', L'F' }; std::wstring m_listSeparator; - Platform::String^ m_calendarIdentifier; + Platform::String ^ m_calendarIdentifier; Windows::Globalization::DayOfWeek m_firstDayOfWeek; int m_currencySymbolPrecedence; std::wstring m_resolvedName; diff --git a/src/CalcViewModel/Common/LocalizationStringUtil.h b/src/CalcViewModel/Common/LocalizationStringUtil.h index 0516ae5a..1a360bdb 100644 --- a/src/CalcViewModel/Common/LocalizationStringUtil.h +++ b/src/CalcViewModel/Common/LocalizationStringUtil.h @@ -19,13 +19,7 @@ namespace CalculatorApp std::unique_ptr spBuffer = std::unique_ptr(new wchar_t[length]); va_list args = NULL; va_start(args, pMessage); - DWORD fmtReturnVal = FormatMessage(FORMAT_MESSAGE_FROM_STRING, - pMessage, - 0, - 0, - spBuffer.get(), - length, - &args); + DWORD fmtReturnVal = FormatMessage(FORMAT_MESSAGE_FROM_STRING, pMessage, 0, 0, spBuffer.get(), length, &args); va_end(args); if (fmtReturnVal != 0) diff --git a/src/CalcViewModel/Common/MyVirtualKey.h b/src/CalcViewModel/Common/MyVirtualKey.h index 4a69b95c..c530e816 100644 --- a/src/CalcViewModel/Common/MyVirtualKey.h +++ b/src/CalcViewModel/Common/MyVirtualKey.h @@ -7,7 +7,8 @@ namespace CalculatorApp { namespace Common { - public enum class MyVirtualKey + public + enum class MyVirtualKey { None = 0, LeftButton = 1, diff --git a/src/CalcViewModel/Common/NavCategory.cpp b/src/CalcViewModel/Common/NavCategory.cpp index e5247cff..da8de6e4 100644 --- a/src/CalcViewModel/Common/NavCategory.cpp +++ b/src/CalcViewModel/Common/NavCategory.cpp @@ -24,80 +24,89 @@ static constexpr bool POSITIVE_ONLY = false; // The order of items in this list determines the order of groups in the menu. static constexpr array s_categoryGroupManifest = { - NavCategoryGroupInitializer { CategoryGroupType::Calculator, L"CalculatorModeTextCaps", L"CalculatorModeText", L"CalculatorModePluralText"}, - NavCategoryGroupInitializer { CategoryGroupType::Converter, L"ConverterModeTextCaps", L"ConverterModeText", L"ConverterModePluralText" } + NavCategoryGroupInitializer{ CategoryGroupType::Calculator, L"CalculatorModeTextCaps", L"CalculatorModeText", L"CalculatorModePluralText" }, + NavCategoryGroupInitializer{ CategoryGroupType::Converter, L"ConverterModeTextCaps", L"ConverterModeText", L"ConverterModePluralText" } }; // vvv THESE CONSTANTS SHOULD NEVER CHANGE vvv -static constexpr int STANDARD_ID = 0; -static constexpr int SCIENTIFIC_ID = 1; -static constexpr int PROGRAMMER_ID = 2; -static constexpr int DATE_ID = 3; -static constexpr int VOLUME_ID = 4; -static constexpr int LENGTH_ID = 5; -static constexpr int WEIGHT_ID = 6; +static constexpr int STANDARD_ID = 0; +static constexpr int SCIENTIFIC_ID = 1; +static constexpr int PROGRAMMER_ID = 2; +static constexpr int DATE_ID = 3; +static constexpr int VOLUME_ID = 4; +static constexpr int LENGTH_ID = 5; +static constexpr int WEIGHT_ID = 6; static constexpr int TEMPERATURE_ID = 7; -static constexpr int ENERGY_ID = 8; -static constexpr int AREA_ID = 9; -static constexpr int SPEED_ID = 10; -static constexpr int TIME_ID = 11; -static constexpr int POWER_ID = 12; -static constexpr int DATA_ID = 13; -static constexpr int PRESSURE_ID = 14; -static constexpr int ANGLE_ID = 15; -static constexpr int CURRENCY_ID = 16; +static constexpr int ENERGY_ID = 8; +static constexpr int AREA_ID = 9; +static constexpr int SPEED_ID = 10; +static constexpr int TIME_ID = 11; +static constexpr int POWER_ID = 12; +static constexpr int DATA_ID = 13; +static constexpr int PRESSURE_ID = 14; +static constexpr int ANGLE_ID = 15; +static constexpr int CURRENCY_ID = 16; // ^^^ THESE CONSTANTS SHOULD NEVER CHANGE ^^^ // The order of items in this list determines the order of items in the menu. static constexpr array s_categoryManifest = { - NavCategoryInitializer { ViewMode::Standard, STANDARD_ID, L"Standard", L"StandardMode", L"\uE8EF", CategoryGroupType::Calculator, MyVirtualKey::Number1, SUPPORTS_ALL }, - NavCategoryInitializer { ViewMode::Scientific, SCIENTIFIC_ID, L"Scientific", L"ScientificMode", L"\uF196", CategoryGroupType::Calculator, MyVirtualKey::Number2, SUPPORTS_ALL }, - NavCategoryInitializer { ViewMode::Programmer, PROGRAMMER_ID, L"Programmer", L"ProgrammerMode", L"\uECCE", CategoryGroupType::Calculator, MyVirtualKey::Number3, SUPPORTS_ALL }, - NavCategoryInitializer { ViewMode::Date, DATE_ID, L"Date", L"DateCalculationMode", L"\uE787", CategoryGroupType::Calculator, MyVirtualKey::Number4, SUPPORTS_ALL }, - NavCategoryInitializer { ViewMode::Currency, CURRENCY_ID, L"Currency", L"CategoryName_Currency", L"\uEB0D", CategoryGroupType::Converter, MyVirtualKey::None, POSITIVE_ONLY }, - NavCategoryInitializer { ViewMode::Volume, VOLUME_ID, L"Volume", L"CategoryName_Volume", L"\uF1AA", CategoryGroupType::Converter, MyVirtualKey::None, POSITIVE_ONLY }, - NavCategoryInitializer { ViewMode::Length, LENGTH_ID, L"Length", L"CategoryName_Length", L"\uECC6", CategoryGroupType::Converter, MyVirtualKey::None, POSITIVE_ONLY }, - NavCategoryInitializer { ViewMode::Weight, WEIGHT_ID, L"Weight and Mass", L"CategoryName_Weight", L"\uF4C1", CategoryGroupType::Converter, MyVirtualKey::None, POSITIVE_ONLY }, - NavCategoryInitializer { ViewMode::Temperature, TEMPERATURE_ID, L"Temperature", L"CategoryName_Temperature", L"\uE7A3", CategoryGroupType::Converter, MyVirtualKey::None, SUPPORTS_NEGATIVE }, - NavCategoryInitializer { ViewMode::Energy, ENERGY_ID, L"Energy", L"CategoryName_Energy", L"\uECAD", CategoryGroupType::Converter, MyVirtualKey::None, POSITIVE_ONLY }, - NavCategoryInitializer { ViewMode::Area, AREA_ID, L"Area", L"CategoryName_Area", L"\uE809", CategoryGroupType::Converter, MyVirtualKey::None, POSITIVE_ONLY }, - NavCategoryInitializer { ViewMode::Speed, SPEED_ID, L"Speed", L"CategoryName_Speed", L"\uEADA", CategoryGroupType::Converter, MyVirtualKey::None, POSITIVE_ONLY }, - NavCategoryInitializer { ViewMode::Time, TIME_ID, L"Time", L"CategoryName_Time", L"\uE917", CategoryGroupType::Converter, MyVirtualKey::None, POSITIVE_ONLY }, - NavCategoryInitializer { ViewMode::Power, POWER_ID, L"Power", L"CategoryName_Power", L"\uE945", CategoryGroupType::Converter, MyVirtualKey::None, POSITIVE_ONLY }, - NavCategoryInitializer { ViewMode::Data, DATA_ID, L"Data", L"CategoryName_Data", L"\uF20F", CategoryGroupType::Converter, MyVirtualKey::None, POSITIVE_ONLY }, - NavCategoryInitializer { ViewMode::Pressure, PRESSURE_ID, L"Pressure", L"CategoryName_Pressure", L"\uEC4A", CategoryGroupType::Converter, MyVirtualKey::None, POSITIVE_ONLY }, - NavCategoryInitializer { ViewMode::Angle, ANGLE_ID, L"Angle", L"CategoryName_Angle", L"\uF515", CategoryGroupType::Converter, MyVirtualKey::None, POSITIVE_ONLY } + NavCategoryInitializer{ ViewMode::Standard, STANDARD_ID, L"Standard", L"StandardMode", L"\uE8EF", CategoryGroupType::Calculator, MyVirtualKey::Number1, + SUPPORTS_ALL }, + NavCategoryInitializer{ ViewMode::Scientific, SCIENTIFIC_ID, L"Scientific", L"ScientificMode", L"\uF196", CategoryGroupType::Calculator, + MyVirtualKey::Number2, SUPPORTS_ALL }, + NavCategoryInitializer{ ViewMode::Programmer, PROGRAMMER_ID, L"Programmer", L"ProgrammerMode", L"\uECCE", CategoryGroupType::Calculator, + MyVirtualKey::Number3, SUPPORTS_ALL }, + NavCategoryInitializer{ ViewMode::Date, DATE_ID, L"Date", L"DateCalculationMode", L"\uE787", CategoryGroupType::Calculator, MyVirtualKey::Number4, + SUPPORTS_ALL }, + NavCategoryInitializer{ ViewMode::Currency, CURRENCY_ID, L"Currency", L"CategoryName_Currency", L"\uEB0D", CategoryGroupType::Converter, MyVirtualKey::None, + POSITIVE_ONLY }, + NavCategoryInitializer{ ViewMode::Volume, VOLUME_ID, L"Volume", L"CategoryName_Volume", L"\uF1AA", CategoryGroupType::Converter, MyVirtualKey::None, + POSITIVE_ONLY }, + NavCategoryInitializer{ ViewMode::Length, LENGTH_ID, L"Length", L"CategoryName_Length", L"\uECC6", CategoryGroupType::Converter, MyVirtualKey::None, + POSITIVE_ONLY }, + NavCategoryInitializer{ ViewMode::Weight, WEIGHT_ID, L"Weight and Mass", L"CategoryName_Weight", L"\uF4C1", CategoryGroupType::Converter, + MyVirtualKey::None, POSITIVE_ONLY }, + NavCategoryInitializer{ ViewMode::Temperature, TEMPERATURE_ID, L"Temperature", L"CategoryName_Temperature", L"\uE7A3", CategoryGroupType::Converter, + MyVirtualKey::None, SUPPORTS_NEGATIVE }, + NavCategoryInitializer{ ViewMode::Energy, ENERGY_ID, L"Energy", L"CategoryName_Energy", L"\uECAD", CategoryGroupType::Converter, MyVirtualKey::None, + POSITIVE_ONLY }, + NavCategoryInitializer{ ViewMode::Area, AREA_ID, L"Area", L"CategoryName_Area", L"\uE809", CategoryGroupType::Converter, MyVirtualKey::None, + POSITIVE_ONLY }, + NavCategoryInitializer{ ViewMode::Speed, SPEED_ID, L"Speed", L"CategoryName_Speed", L"\uEADA", CategoryGroupType::Converter, MyVirtualKey::None, + POSITIVE_ONLY }, + NavCategoryInitializer{ ViewMode::Time, TIME_ID, L"Time", L"CategoryName_Time", L"\uE917", CategoryGroupType::Converter, MyVirtualKey::None, + POSITIVE_ONLY }, + NavCategoryInitializer{ ViewMode::Power, POWER_ID, L"Power", L"CategoryName_Power", L"\uE945", CategoryGroupType::Converter, MyVirtualKey::None, + POSITIVE_ONLY }, + NavCategoryInitializer{ ViewMode::Data, DATA_ID, L"Data", L"CategoryName_Data", L"\uF20F", CategoryGroupType::Converter, MyVirtualKey::None, + POSITIVE_ONLY }, + NavCategoryInitializer{ ViewMode::Pressure, PRESSURE_ID, L"Pressure", L"CategoryName_Pressure", L"\uEC4A", CategoryGroupType::Converter, MyVirtualKey::None, + POSITIVE_ONLY }, + NavCategoryInitializer{ ViewMode::Angle, ANGLE_ID, L"Angle", L"CategoryName_Angle", L"\uF515", CategoryGroupType::Converter, MyVirtualKey::None, + POSITIVE_ONLY } }; // This function should only be used when storing the mode to app data. int NavCategory::Serialize(ViewMode mode) { - auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), - [mode](const NavCategoryInitializer& initializer) - { - return initializer.viewMode == mode; - }); + auto iter = + find_if(begin(s_categoryManifest), end(s_categoryManifest), [mode](const NavCategoryInitializer& initializer) { return initializer.viewMode == mode; }); - return (iter != s_categoryManifest.end()) - ? iter->serializationId - : -1; + return (iter != s_categoryManifest.end()) ? iter->serializationId : -1; } // This function should only be used when restoring the mode from app data. -ViewMode NavCategory::Deserialize(Platform::Object^ obj) +ViewMode NavCategory::Deserialize(Platform::Object ^ obj) { // If we cast directly to ViewMode we will fail // because we technically store an int. // Need to cast to int, then ViewMode. - auto boxed = dynamic_cast^>(obj); + auto boxed = dynamic_cast ^>(obj); if (boxed != nullptr) { int serializationId = boxed->Value; auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), - [serializationId](const NavCategoryInitializer& initializer) - { - return initializer.serializationId == serializationId; - }); + [serializationId](const NavCategoryInitializer& initializer) { return initializer.serializationId == serializationId; }); if (iter != s_categoryManifest.end()) { @@ -110,11 +119,8 @@ ViewMode NavCategory::Deserialize(Platform::Object^ obj) bool NavCategory::IsValidViewMode(ViewMode mode) { - auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), - [mode](const NavCategoryInitializer& initializer) - { - return initializer.viewMode == mode; - }); + auto iter = + find_if(begin(s_categoryManifest), end(s_categoryManifest), [mode](const NavCategoryInitializer& initializer) { return initializer.viewMode == mode; }); return iter != s_categoryManifest.end(); } @@ -139,64 +145,41 @@ bool NavCategory::IsConverterViewMode(ViewMode mode) bool NavCategory::IsModeInCategoryGroup(ViewMode mode, CategoryGroupType type) { auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), - [mode, type](const NavCategoryInitializer& initializer) - { - return initializer.viewMode == mode && initializer.groupType == type; - }); + [mode, type](const NavCategoryInitializer& initializer) { return initializer.viewMode == mode && initializer.groupType == type; }); return iter != s_categoryManifest.end(); } -String^ NavCategory::GetFriendlyName(ViewMode mode) +String ^ NavCategory::GetFriendlyName(ViewMode mode) { - auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), - [mode](const NavCategoryInitializer& initializer) - { - return initializer.viewMode == mode; - }); + auto iter = + find_if(begin(s_categoryManifest), end(s_categoryManifest), [mode](const NavCategoryInitializer& initializer) { return initializer.viewMode == mode; }); - return (iter != s_categoryManifest.end()) - ? StringReference(iter->friendlyName) - : L"None"; + return (iter != s_categoryManifest.end()) ? StringReference(iter->friendlyName) : L"None"; } -ViewMode NavCategory::GetViewModeForFriendlyName(String^ name) +ViewMode NavCategory::GetViewModeForFriendlyName(String ^ name) { auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), - [name](const NavCategoryInitializer& initializer) - { - return wcscmp(initializer.friendlyName, name->Data()) == 0; - }); + [name](const NavCategoryInitializer& initializer) { return wcscmp(initializer.friendlyName, name->Data()) == 0; }); - return (iter != s_categoryManifest.end()) - ? iter->viewMode - : ViewMode::None; + return (iter != s_categoryManifest.end()) ? iter->viewMode : ViewMode::None; } -String^ NavCategory::GetNameResourceKey(ViewMode mode) +String ^ NavCategory::GetNameResourceKey(ViewMode mode) { - auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), - [mode](const NavCategoryInitializer& initializer) - { - return initializer.viewMode == mode; - }); + auto iter = + find_if(begin(s_categoryManifest), end(s_categoryManifest), [mode](const NavCategoryInitializer& initializer) { return initializer.viewMode == mode; }); - return (iter != s_categoryManifest.end()) - ? StringReference(iter->nameResourceKey) + "Text" - : nullptr; + return (iter != s_categoryManifest.end()) ? StringReference(iter->nameResourceKey) + "Text" : nullptr; } CategoryGroupType NavCategory::GetGroupType(ViewMode mode) { - auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), - [mode](const NavCategoryInitializer& initializer) - { - return initializer.viewMode == mode; - }); + auto iter = + find_if(begin(s_categoryManifest), end(s_categoryManifest), [mode](const NavCategoryInitializer& initializer) { return initializer.viewMode == mode; }); - return (iter != s_categoryManifest.end()) - ? iter->groupType - : CategoryGroupType::None; + return (iter != s_categoryManifest.end()) ? iter->groupType : CategoryGroupType::None; } // GetIndex is 0-based, GetPosition is 1-based @@ -210,9 +193,7 @@ int NavCategory::GetFlatIndex(ViewMode mode) { int index = -1; CategoryGroupType type = CategoryGroupType::None; - auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), - [mode, &type, &index](const NavCategoryInitializer& initializer) - { + auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), [mode, &type, &index](const NavCategoryInitializer& initializer) { index++; if (initializer.groupType != type) { @@ -223,18 +204,14 @@ int NavCategory::GetFlatIndex(ViewMode mode) return initializer.viewMode == mode; }); - return (iter != s_categoryManifest.end()) - ? index - : -1; + return (iter != s_categoryManifest.end()) ? index : -1; } // GetIndex is 0-based, GetPosition is 1-based int NavCategory::GetIndexInGroup(ViewMode mode, CategoryGroupType type) { int index = -1; - auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), - [mode, type, &index](const NavCategoryInitializer& initializer) - { + auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), [mode, type, &index](const NavCategoryInitializer& initializer) { if (initializer.groupType == type) { index++; @@ -244,38 +221,27 @@ int NavCategory::GetIndexInGroup(ViewMode mode, CategoryGroupType type) return false; }); - return (iter != s_categoryManifest.end()) - ? index - : -1; + return (iter != s_categoryManifest.end()) ? index : -1; } // GetIndex is 0-based, GetPosition is 1-based int NavCategory::GetPosition(ViewMode mode) { int position = 0; - auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), - [mode, &position](const NavCategoryInitializer& initializer) - { + auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), [mode, &position](const NavCategoryInitializer& initializer) { position++; return initializer.viewMode == mode; }); - return (iter != s_categoryManifest.end()) - ? position - : -1; + return (iter != s_categoryManifest.end()) ? position : -1; } ViewMode NavCategory::GetViewModeForVirtualKey(MyVirtualKey virtualKey) { auto iter = find_if(begin(s_categoryManifest), end(s_categoryManifest), - [virtualKey](const NavCategoryInitializer& initializer) - { - return initializer.virtualKey == virtualKey; - }); + [virtualKey](const NavCategoryInitializer& initializer) { return initializer.virtualKey == virtualKey; }); - return (iter != s_categoryManifest.end()) - ? iter->viewMode - : ViewMode::None; + return (iter != s_categoryManifest.end()) ? iter->viewMode : ViewMode::None; } vector NavCategory::GetCategoryAcceleratorKeys() @@ -292,63 +258,54 @@ vector NavCategory::GetCategoryAcceleratorKeys() return accelerators; } -NavCategoryGroup::NavCategoryGroup(const NavCategoryGroupInitializer& groupInitializer) : - m_Categories(ref new Vector()) +NavCategoryGroup::NavCategoryGroup(const NavCategoryGroupInitializer& groupInitializer) : m_Categories(ref new Vector()) { m_GroupType = groupInitializer.type; auto resProvider = AppResourceProvider::GetInstance(); - String^ headerResourceKey = StringReference(groupInitializer.headerResourceKey); - String^ modeResourceKey = StringReference(groupInitializer.modeResourceKey); - String^ automationResourceKey = StringReference(groupInitializer.automationResourceKey); + String ^ headerResourceKey = StringReference(groupInitializer.headerResourceKey); + String ^ modeResourceKey = StringReference(groupInitializer.modeResourceKey); + String ^ automationResourceKey = StringReference(groupInitializer.automationResourceKey); m_Name = resProvider.GetResourceString(headerResourceKey); - String^ groupMode = resProvider.GetResourceString(modeResourceKey); - String^ automationName = resProvider.GetResourceString(automationResourceKey); + String ^ groupMode = resProvider.GetResourceString(modeResourceKey); + String ^ automationName = resProvider.GetResourceString(automationResourceKey); - String^ navCategoryHeaderAutomationNameFormat = resProvider.GetResourceString(L"NavCategoryHeader_AutomationNameFormat"); - m_AutomationName = ref new String(LocalizationStringUtil::GetLocalizedString( - navCategoryHeaderAutomationNameFormat->Data(), - automationName->Data()).c_str()); + String ^ navCategoryHeaderAutomationNameFormat = resProvider.GetResourceString(L"NavCategoryHeader_AutomationNameFormat"); + m_AutomationName = + ref new String(LocalizationStringUtil::GetLocalizedString(navCategoryHeaderAutomationNameFormat->Data(), automationName->Data()).c_str()); - String^ navCategoryItemAutomationNameFormat = resProvider.GetResourceString(L"NavCategoryItem_AutomationNameFormat"); + String ^ navCategoryItemAutomationNameFormat = resProvider.GetResourceString(L"NavCategoryItem_AutomationNameFormat"); for (const NavCategoryInitializer& categoryInitializer : s_categoryManifest) { if (categoryInitializer.groupType == groupInitializer.type) { - String^ nameResourceKey = StringReference(categoryInitializer.nameResourceKey); - String^ categoryName = resProvider.GetResourceString(nameResourceKey + "Text"); - String^ categoryAutomationName = ref new String(LocalizationStringUtil::GetLocalizedString( - navCategoryItemAutomationNameFormat->Data(), - categoryName->Data(), - m_Name->Data()).c_str()); + String ^ nameResourceKey = StringReference(categoryInitializer.nameResourceKey); + String ^ categoryName = resProvider.GetResourceString(nameResourceKey + "Text"); + String ^ categoryAutomationName = ref new String( + LocalizationStringUtil::GetLocalizedString(navCategoryItemAutomationNameFormat->Data(), categoryName->Data(), m_Name->Data()).c_str()); - m_Categories->Append(ref new NavCategory( - categoryName, - categoryAutomationName, - StringReference(categoryInitializer.glyph), - resProvider.GetResourceString(nameResourceKey + "AccessKey"), - groupMode, - categoryInitializer.viewMode, - categoryInitializer.supportsNegative)); + m_Categories->Append(ref new NavCategory(categoryName, categoryAutomationName, StringReference(categoryInitializer.glyph), + resProvider.GetResourceString(nameResourceKey + "AccessKey"), groupMode, categoryInitializer.viewMode, + categoryInitializer.supportsNegative)); } } } -IObservableVector^ NavCategoryGroup::CreateMenuOptions() +IObservableVector ^ NavCategoryGroup::CreateMenuOptions() { - auto menuOptions = ref new Vector(); + auto menuOptions = ref new Vector(); menuOptions->Append(CreateCalculatorCategory()); menuOptions->Append(CreateConverterCategory()); return menuOptions; } -NavCategoryGroup^ NavCategoryGroup::CreateCalculatorCategory() +NavCategoryGroup ^ NavCategoryGroup::CreateCalculatorCategory() { return ref new NavCategoryGroup(s_categoryGroupManifest.at(0)); } -NavCategoryGroup^ NavCategoryGroup::CreateConverterCategory() +NavCategoryGroup ^ NavCategoryGroup::CreateConverterCategory() { return ref new NavCategoryGroup(s_categoryGroupManifest.at(1)); } @@ -357,23 +314,15 @@ vector NavCategoryGroup::GetInitializerCategoryGroup(Cat { vector initializers{}; copy_if(begin(s_categoryManifest), end(s_categoryManifest), back_inserter(initializers), - [groupType](const NavCategoryInitializer& initializer) - { - return initializer.groupType == groupType; - }); + [groupType](const NavCategoryInitializer& initializer) { return initializer.groupType == groupType; }); return initializers; } -String^ NavCategoryGroup::GetHeaderResourceKey(CategoryGroupType type) +String ^ NavCategoryGroup::GetHeaderResourceKey(CategoryGroupType type) { auto iter = find_if(begin(s_categoryGroupManifest), end(s_categoryGroupManifest), - [type](const NavCategoryGroupInitializer& initializer) - { - return initializer.type == type; - }); + [type](const NavCategoryGroupInitializer& initializer) { return initializer.type == type; }); - return (iter != s_categoryGroupManifest.end()) - ? StringReference(iter->headerResourceKey) - : nullptr; + return (iter != s_categoryGroupManifest.end()) ? StringReference(iter->headerResourceKey) : nullptr; } diff --git a/src/CalcViewModel/Common/NavCategory.h b/src/CalcViewModel/Common/NavCategory.h index 33e6915a..84cfb562 100644 --- a/src/CalcViewModel/Common/NavCategory.h +++ b/src/CalcViewModel/Common/NavCategory.h @@ -24,7 +24,8 @@ namespace CalculatorApp // Don't change the order of these enums // and definitely don't use int arithmetic // to change modes. - public enum class ViewMode + public + enum class ViewMode { None = -1, Standard = 0, @@ -46,81 +47,74 @@ namespace CalculatorApp Currency = 16 }; - public enum class CategoryGroupType + public + enum class CategoryGroupType { None = -1, Calculator = 0, Converter = 1 }; - private struct NavCategoryInitializer + private + struct NavCategoryInitializer { - constexpr NavCategoryInitializer( - ViewMode mode, - int id, - wchar_t const * name, - wchar_t const * nameKey, - wchar_t const * glyph, - CategoryGroupType group, - MyVirtualKey vKey, - bool categorySupportsNegative) - : - viewMode(mode), - serializationId(id), - friendlyName(name), - nameResourceKey(nameKey), - glyph(glyph), - groupType(group), - virtualKey(vKey), - supportsNegative(categorySupportsNegative) - {} + constexpr NavCategoryInitializer(ViewMode mode, int id, wchar_t const* name, wchar_t const* nameKey, wchar_t const* glyph, CategoryGroupType group, + MyVirtualKey vKey, bool categorySupportsNegative) + : viewMode(mode) + , serializationId(id) + , friendlyName(name) + , nameResourceKey(nameKey) + , glyph(glyph) + , groupType(group) + , virtualKey(vKey) + , supportsNegative(categorySupportsNegative) + { + } const ViewMode viewMode; const int serializationId; - const wchar_t * const friendlyName; - const wchar_t * const nameResourceKey; - const wchar_t * const glyph; + const wchar_t* const friendlyName; + const wchar_t* const nameResourceKey; + const wchar_t* const glyph; const CategoryGroupType groupType; const MyVirtualKey virtualKey; const bool supportsNegative; }; - private struct NavCategoryGroupInitializer + private + struct NavCategoryGroupInitializer { - constexpr NavCategoryGroupInitializer(CategoryGroupType t, wchar_t const * h, wchar_t const * n, wchar_t const * a) : - type(t), headerResourceKey(h), modeResourceKey(n), automationResourceKey(a) - {} + constexpr NavCategoryGroupInitializer(CategoryGroupType t, wchar_t const* h, wchar_t const* n, wchar_t const* a) + : type(t), headerResourceKey(h), modeResourceKey(n), automationResourceKey(a) + { + } const CategoryGroupType type; - const wchar_t *headerResourceKey; - const wchar_t *modeResourceKey; - const wchar_t *automationResourceKey; + const wchar_t* headerResourceKey; + const wchar_t* modeResourceKey; + const wchar_t* automationResourceKey; }; - [Windows::UI::Xaml::Data::Bindable] - public ref class NavCategory sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged + [Windows::UI::Xaml::Data::Bindable] public ref class NavCategory sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged { public: OBSERVABLE_OBJECT(); - property Platform::String^ Name - { - Platform::String^ get() { return m_name; } - } + property Platform::String + ^ Name { Platform::String ^ get() { return m_name; } } - property Platform::String^ AutomationName - { - Platform::String^ get() { return m_automationName; } - } + property Platform::String + ^ AutomationName { Platform::String ^ get() { return m_automationName; } } - property Platform::String^ Glyph - { - Platform::String^ get() { return m_glyph; } - } + property Platform::String + ^ Glyph { Platform::String ^ get() { return m_glyph; } } - property int Position + property int Position { - int get() { return m_position; } + int get() + { + return m_position; + } } property ViewMode Mode @@ -131,24 +125,13 @@ namespace CalculatorApp } } - property Platform::String^ AutomationId - { - Platform::String^ get() - { - return m_viewMode.ToString(); - } - } + property Platform::String + ^ AutomationId { Platform::String ^ get() { return m_viewMode.ToString(); } } - property Platform::String^ AccessKey - { - Platform::String^ get() - { - return m_accessKey; - } - } + property Platform::String + ^ AccessKey { Platform::String ^ get() { return m_accessKey; } } - - property bool SupportsNegative + property bool SupportsNegative { bool get() { @@ -158,16 +141,16 @@ namespace CalculatorApp // For saving/restoring last mode used. static int Serialize(ViewMode mode); - static ViewMode Deserialize(Platform::Object^ obj); - static ViewMode GetViewModeForFriendlyName(Platform::String^ name); + static ViewMode Deserialize(Platform::Object ^ obj); + static ViewMode GetViewModeForFriendlyName(Platform::String ^ name); static bool IsValidViewMode(ViewMode mode); static bool IsCalculatorViewMode(ViewMode mode); static bool IsDateCalculatorViewMode(ViewMode mode); static bool IsConverterViewMode(ViewMode mode); - static Platform::String^ GetFriendlyName(ViewMode mode); - static Platform::String^ GetNameResourceKey(ViewMode mode); + static Platform::String ^ GetFriendlyName(ViewMode mode); + static Platform::String ^ GetNameResourceKey(ViewMode mode); static CategoryGroupType GetGroupType(ViewMode mode); // GetIndex is 0-based, GetPosition is 1-based @@ -178,15 +161,15 @@ namespace CalculatorApp static ViewMode GetViewModeForVirtualKey(MyVirtualKey virtualKey); - internal: - NavCategory(Platform::String^ name, Platform::String^ automationName, Platform::String^ glyph, Platform::String^ accessKey, Platform::String^ mode, ViewMode viewMode, bool supportsNegative) : - m_name(name), - m_automationName(automationName), - m_glyph(glyph), - m_accessKey(accessKey), - m_mode(mode), - m_viewMode(viewMode), - m_supportsNegative(supportsNegative) + internal : NavCategory(Platform::String ^ name, Platform::String ^ automationName, Platform::String ^ glyph, Platform::String ^ accessKey, + Platform::String ^ mode, ViewMode viewMode, bool supportsNegative) + : m_name(name) + , m_automationName(automationName) + , m_glyph(glyph) + , m_accessKey(accessKey) + , m_mode(mode) + , m_viewMode(viewMode) + , m_supportsNegative(supportsNegative) { m_position = NavCategory::GetPosition(m_viewMode); } @@ -197,33 +180,30 @@ namespace CalculatorApp static bool IsModeInCategoryGroup(ViewMode mode, CategoryGroupType groupType); ViewMode m_viewMode; - Platform::String^ m_name; - Platform::String^ m_automationName; - Platform::String^ m_glyph; - Platform::String^ m_accessKey; - Platform::String^ m_mode; + Platform::String ^ m_name; + Platform::String ^ m_automationName; + Platform::String ^ m_glyph; + Platform::String ^ m_accessKey; + Platform::String ^ m_mode; int m_position; bool m_supportsNegative; }; - [Windows::UI::Xaml::Data::Bindable] - public ref class NavCategoryGroup sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged + [Windows::UI::Xaml::Data::Bindable] public ref class NavCategoryGroup sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged { - public: OBSERVABLE_OBJECT(); - OBSERVABLE_PROPERTY_R(Platform::String^, Name); - OBSERVABLE_PROPERTY_R(Platform::String^, AutomationName); + OBSERVABLE_PROPERTY_R(Platform::String ^, Name); + OBSERVABLE_PROPERTY_R(Platform::String ^, AutomationName); OBSERVABLE_PROPERTY_R(CategoryGroupType, GroupType); - OBSERVABLE_PROPERTY_R(Windows::Foundation::Collections::IObservableVector^, Categories); + OBSERVABLE_PROPERTY_R(Windows::Foundation::Collections::IObservableVector ^, Categories); - static Windows::Foundation::Collections::IObservableVector^ CreateMenuOptions(); + static Windows::Foundation::Collections::IObservableVector ^ CreateMenuOptions(); - static Platform::String^ GetHeaderResourceKey(CategoryGroupType type); + static Platform::String ^ GetHeaderResourceKey(CategoryGroupType type); - internal: - static NavCategoryGroup^ CreateCalculatorCategory(); - static NavCategoryGroup^ CreateConverterCategory(); + internal : static NavCategoryGroup ^ CreateCalculatorCategory(); + static NavCategoryGroup ^ CreateConverterCategory(); private: NavCategoryGroup(const NavCategoryGroupInitializer& groupInitializer); diff --git a/src/CalcViewModel/Common/NetworkManager.cpp b/src/CalcViewModel/Common/NetworkManager.cpp index 5e37a05d..8bf3835a 100644 --- a/src/CalcViewModel/Common/NetworkManager.cpp +++ b/src/CalcViewModel/Common/NetworkManager.cpp @@ -10,9 +10,8 @@ using namespace Windows::Networking::Connectivity; NetworkManager::NetworkManager() { - m_NetworkStatusChangedToken = - NetworkInformation::NetworkStatusChanged += ref new NetworkStatusChangedEventHandler( - this, &NetworkManager::OnNetworkStatusChange, CallbackContext::Same); + m_NetworkStatusChangedToken = NetworkInformation::NetworkStatusChanged += + ref new NetworkStatusChangedEventHandler(this, &NetworkManager::OnNetworkStatusChange, CallbackContext::Same); } NetworkManager::~NetworkManager() @@ -23,14 +22,13 @@ NetworkManager::~NetworkManager() NetworkAccessBehavior NetworkManager::GetNetworkAccessBehavior() { NetworkAccessBehavior behavior = NetworkAccessBehavior::Offline; - ConnectionProfile^ connectionProfile = NetworkInformation::GetInternetConnectionProfile(); + ConnectionProfile ^ connectionProfile = NetworkInformation::GetInternetConnectionProfile(); if (connectionProfile != nullptr) { NetworkConnectivityLevel connectivityLevel = connectionProfile->GetNetworkConnectivityLevel(); - if (connectivityLevel == NetworkConnectivityLevel::InternetAccess - || connectivityLevel == NetworkConnectivityLevel::ConstrainedInternetAccess) + if (connectivityLevel == NetworkConnectivityLevel::InternetAccess || connectivityLevel == NetworkConnectivityLevel::ConstrainedInternetAccess) { - ConnectionCost^ connectionCost = connectionProfile->GetConnectionCost(); + ConnectionCost ^ connectionCost = connectionProfile->GetConnectionCost(); behavior = ConvertCostInfoToBehavior(connectionCost); } } @@ -38,16 +36,15 @@ NetworkAccessBehavior NetworkManager::GetNetworkAccessBehavior() return behavior; } -void NetworkManager::OnNetworkStatusChange(_In_ Object^ /*sender*/) +void NetworkManager::OnNetworkStatusChange(_In_ Object ^ /*sender*/) { NetworkBehaviorChanged(GetNetworkAccessBehavior()); } // See app behavior guidelines at https://msdn.microsoft.com/en-us/library/windows/apps/xaml/jj835821(v=win.10).aspx -NetworkAccessBehavior NetworkManager::ConvertCostInfoToBehavior(_In_ ConnectionCost^ connectionCost) +NetworkAccessBehavior NetworkManager::ConvertCostInfoToBehavior(_In_ ConnectionCost ^ connectionCost) { - if (connectionCost->Roaming || connectionCost->OverDataLimit - || connectionCost->NetworkCostType == NetworkCostType::Variable + if (connectionCost->Roaming || connectionCost->OverDataLimit || connectionCost->NetworkCostType == NetworkCostType::Variable || connectionCost->NetworkCostType == NetworkCostType::Fixed) { return NetworkAccessBehavior::OptIn; diff --git a/src/CalcViewModel/Common/NetworkManager.h b/src/CalcViewModel/Common/NetworkManager.h index cb34ab9a..51903d94 100644 --- a/src/CalcViewModel/Common/NetworkManager.h +++ b/src/CalcViewModel/Common/NetworkManager.h @@ -5,29 +5,32 @@ namespace CalculatorApp { - public enum class NetworkAccessBehavior +public + enum class NetworkAccessBehavior { Normal = 0, OptIn = 1, Offline = 2 }; - public delegate void NetworkBehaviorChangedHandler(NetworkAccessBehavior behavior); +public + delegate void NetworkBehaviorChangedHandler(NetworkAccessBehavior behavior); - public ref class NetworkManager sealed +public + ref class NetworkManager sealed { public: NetworkManager(); static NetworkAccessBehavior GetNetworkAccessBehavior(); - event NetworkBehaviorChangedHandler^ NetworkBehaviorChanged; + event NetworkBehaviorChangedHandler ^ NetworkBehaviorChanged; private: ~NetworkManager(); - void OnNetworkStatusChange(_In_ Platform::Object^ sender); - static NetworkAccessBehavior ConvertCostInfoToBehavior(_In_ Windows::Networking::Connectivity::ConnectionCost^ connectionCost); + void OnNetworkStatusChange(_In_ Platform::Object ^ sender); + static NetworkAccessBehavior ConvertCostInfoToBehavior(_In_ Windows::Networking::Connectivity::ConnectionCost ^ connectionCost); private: Windows::Foundation::EventRegistrationToken m_NetworkStatusChangedToken; diff --git a/src/CalcViewModel/Common/TraceActivity.h b/src/CalcViewModel/Common/TraceActivity.h index 120dc25c..cb0d481a 100644 --- a/src/CalcViewModel/Common/TraceActivity.h +++ b/src/CalcViewModel/Common/TraceActivity.h @@ -11,30 +11,19 @@ namespace CalculatorApp class TraceActivity { public: - TraceActivity() : - m_channel(nullptr), - m_activity(nullptr), - m_fields(nullptr) - { } + TraceActivity() : m_channel(nullptr), m_activity(nullptr), m_fields(nullptr) + { + } - TraceActivity( - winrt::Windows::Foundation::Diagnostics::LoggingChannel channel, - std::wstring_view activityName, - winrt::Windows::Foundation::Diagnostics::LoggingFields fields) : - m_channel(channel), - m_activityName(activityName), - m_fields(fields), - m_activity(nullptr) + TraceActivity(winrt::Windows::Foundation::Diagnostics::LoggingChannel channel, std::wstring_view activityName, + winrt::Windows::Foundation::Diagnostics::LoggingFields fields) + : m_channel(channel), m_activityName(activityName), m_fields(fields), m_activity(nullptr) { // Write the activity's START event. Note that you must not specify keyword // or level for START and STOP events because they always use the activity's // keyword and level. - m_activity = m_channel.StartActivity( - m_activityName, - m_fields, - winrt::Windows::Foundation::Diagnostics::LoggingLevel::Verbose, - winrt::Windows::Foundation::Diagnostics::LoggingOptions(WINEVENT_KEYWORD_RESPONSE_TIME) - ); + m_activity = m_channel.StartActivity(m_activityName, m_fields, winrt::Windows::Foundation::Diagnostics::LoggingLevel::Verbose, + winrt::Windows::Foundation::Diagnostics::LoggingOptions(WINEVENT_KEYWORD_RESPONSE_TIME)); } ~TraceActivity() diff --git a/src/CalcViewModel/Common/TraceLogger.cpp b/src/CalcViewModel/Common/TraceLogger.cpp index bbf6e605..47da9511 100644 --- a/src/CalcViewModel/Common/TraceLogger.cpp +++ b/src/CalcViewModel/Common/TraceLogger.cpp @@ -21,74 +21,72 @@ namespace CalculatorApp { static multimap> s_memoryMap; - static constexpr array s_programmerType{ - L"N/A", L"QwordType", L"DwordType", - L"WordType", L"ByteType", L"HexBase", - L"DecBase", L"OctBase", L"BinBase" }; + static constexpr array s_programmerType{ L"N/A", L"QwordType", L"DwordType", L"WordType", L"ByteType", + L"HexBase", L"DecBase", L"OctBase", L"BinBase" }; static reader_writer_lock s_traceLoggerLock; // Telemetry events. Uploaded to asimov. - constexpr auto EVENT_NAME_DEBUG = L"Debug"; - constexpr auto EVENT_NAME_ERROR = L"ErrorMessage"; - constexpr auto EVENT_NAME_APP_PRELAUNCHED_BY_SYSTEM = L"AppPrelaunchedBySystem"; - constexpr auto EVENT_NAME_PRELAUNCHED_APP_ACTIVATED_BY_USER = L"PrelaunchedAppActivatedByUser"; - constexpr auto EVENT_NAME_APP_LAUNCH_BEGIN = L"AppLaunchBegin"; - constexpr auto EVENT_NAME_APP_LAUNCH_END = L"AppLaunchEnd"; - constexpr auto EVENT_NAME_APP_RESUME_END = L"AppResumeEnd"; - constexpr auto EVENT_NAME_PREVIOUS_STATE_WINDOW_ON_CREATION = L"PreviousStateOnWindowCreation"; - constexpr auto EVENT_NAME_SIZE_ON_SUSPENSION = L"CalculatorSizeOnSuspension"; - constexpr auto EVENT_NAME_CALCULATOR_VIEWED_IN_SESSION = L"CalculatorViewedInSession"; - constexpr auto EVENT_NAME_DATE_CALCULATOR_VIEWED_IN_SESSION = L"DateCalculatorViewedInSession"; - constexpr auto EVENT_NAME_CONVERTER_VIEWED_IN_SESSION = L"ConverterViewedInSession"; - constexpr auto EVENT_NAME_MODE_CHANGE_BEGIN = L"ModeChangeBegin"; - constexpr auto EVENT_NAME_MODE_CHANGE_END = L"ModeChangeEnd"; - constexpr auto EVENT_NAME_HISTORY_BODY_OPENED = L"HistoryBodyOpened"; - constexpr auto EVENT_NAME_HISTORY_ITEM_LOAD_BEGIN = L"HistoryItemLoadBegin"; - constexpr auto EVENT_NAME_HISTORY_ITEM_LOAD_END = L"HistoryItemLoadEnd"; - constexpr auto EVENT_NAME_HISTORY_FLYOUT_OPEN_BEGIN = L"HistoryFlyoutOpenBegin"; - constexpr auto EVENT_NAME_HISTORY_FLYOUT_OPEN_END = L"HistoryFlyoutOpenEnd"; - constexpr auto EVENT_NAME_NEW_WINDOW_CREATION_BEGIN = L"NewWindowCreationBegin"; - constexpr auto EVENT_NAME_NEW_WINDOW_CREATION_END = L"NewWindowCreationEnd"; - constexpr auto EVENT_NAME_HISTORY_CLEAR = L"HistoryClearBegin"; - constexpr auto EVENT_NAME_MULTIPLE_MEMORY_USED = L"MultipleMemoryUsed"; - constexpr auto EVENT_NAME_SINGLE_MEMORY_USED = L"SingleMemoryUsed"; - constexpr auto EVENT_NAME_SHARED_MEMORY_USED = L"SharedMemoryUsed"; - constexpr auto EVENT_NAME_MEMORY_BODY_OPENED = L"MemoryBodyOpened"; - constexpr auto EVENT_NAME_MEMORY_FLYOUT_OPEN_BEGIN = L"MemoryFlyoutOpenBegin"; - constexpr auto EVENT_NAME_MEMORY_FLYOUT_OPEN_END = L"MemoryFlyoutOpenEnd"; - constexpr auto EVENT_NAME_MEMORY_CLEAR_ALL = L"MemoryClearAll"; - constexpr auto EVENT_NAME_INVALID_PASTED_INPUT_OCCURRED = L"InvalidPastedInputOccurred"; - constexpr auto EVENT_NAME_VALID_INPUT_PASTED = L"ValidInputPasted"; - constexpr auto EVENT_NAME_BITFLIP_PANE_CLICKED = L"BitFlipPaneClicked"; - constexpr auto EVENT_NAME_BITFLIP_BUTTONS_USED = L"BitFlipToggleButtonUsed"; - constexpr auto EVENT_NAME_ANGLE_BUTTONS_USED = L"AngleButtonUsedInSession"; - constexpr auto EVENT_NAME_HYP_BUTTON_USED = L"HypButtonUsedInSession"; - constexpr auto EVENT_NAME_FUNCTION_USAGE = L"FunctionUsageInSession"; - constexpr auto EVENT_NAME_BITLENGTH_BUTTON_USED = L"BitLengthButtonUsed"; - constexpr auto EVENT_NAME_RADIX_BUTTON_USED = L"RadixButtonUsed"; - constexpr auto EVENT_NAME_MAX_WINDOW_COUNT = L"MaxWindowCountInSession"; - constexpr auto EVENT_NAME_WINDOW_LAUNCHED_PROTOCOL = L"WindowActivatedThroughProtocol"; - constexpr auto EVENT_NAME_WINDOW_LAUNCHED_TILESEARCH = L"WindowLaunchedThroughTile"; - constexpr auto EVENT_NAME_DATE_DIFFERENCE_USED = L"DateDifferenceModeUsed"; - constexpr auto EVENT_NAME_DATE_ADD_SUBTRACT_USED = L"DateAddSubtractModeUsed"; - constexpr auto EVENT_NAME_DATE_DIFFERENCE_FOUND = L"DateDifferenceFound"; - constexpr auto EVENT_NAME_HIDE_IF_SHOWN = L"HideIfShown"; - constexpr auto EVENT_NAME_ABOUT_FLYOUT_OPENED = L"AboutFlyoutOpened"; - constexpr auto EVENT_NAME_NAV_BAR_OPENED = L"NavBarOpened"; - constexpr auto EVENT_NAME_CORE_WINDOW_WAS_NULL = L"CoreWindowWasNull"; + constexpr auto EVENT_NAME_DEBUG = L"Debug"; + constexpr auto EVENT_NAME_ERROR = L"ErrorMessage"; + constexpr auto EVENT_NAME_APP_PRELAUNCHED_BY_SYSTEM = L"AppPrelaunchedBySystem"; + constexpr auto EVENT_NAME_PRELAUNCHED_APP_ACTIVATED_BY_USER = L"PrelaunchedAppActivatedByUser"; + constexpr auto EVENT_NAME_APP_LAUNCH_BEGIN = L"AppLaunchBegin"; + constexpr auto EVENT_NAME_APP_LAUNCH_END = L"AppLaunchEnd"; + constexpr auto EVENT_NAME_APP_RESUME_END = L"AppResumeEnd"; + constexpr auto EVENT_NAME_PREVIOUS_STATE_WINDOW_ON_CREATION = L"PreviousStateOnWindowCreation"; + constexpr auto EVENT_NAME_SIZE_ON_SUSPENSION = L"CalculatorSizeOnSuspension"; + constexpr auto EVENT_NAME_CALCULATOR_VIEWED_IN_SESSION = L"CalculatorViewedInSession"; + constexpr auto EVENT_NAME_DATE_CALCULATOR_VIEWED_IN_SESSION = L"DateCalculatorViewedInSession"; + constexpr auto EVENT_NAME_CONVERTER_VIEWED_IN_SESSION = L"ConverterViewedInSession"; + constexpr auto EVENT_NAME_MODE_CHANGE_BEGIN = L"ModeChangeBegin"; + constexpr auto EVENT_NAME_MODE_CHANGE_END = L"ModeChangeEnd"; + constexpr auto EVENT_NAME_HISTORY_BODY_OPENED = L"HistoryBodyOpened"; + constexpr auto EVENT_NAME_HISTORY_ITEM_LOAD_BEGIN = L"HistoryItemLoadBegin"; + constexpr auto EVENT_NAME_HISTORY_ITEM_LOAD_END = L"HistoryItemLoadEnd"; + constexpr auto EVENT_NAME_HISTORY_FLYOUT_OPEN_BEGIN = L"HistoryFlyoutOpenBegin"; + constexpr auto EVENT_NAME_HISTORY_FLYOUT_OPEN_END = L"HistoryFlyoutOpenEnd"; + constexpr auto EVENT_NAME_NEW_WINDOW_CREATION_BEGIN = L"NewWindowCreationBegin"; + constexpr auto EVENT_NAME_NEW_WINDOW_CREATION_END = L"NewWindowCreationEnd"; + constexpr auto EVENT_NAME_HISTORY_CLEAR = L"HistoryClearBegin"; + constexpr auto EVENT_NAME_MULTIPLE_MEMORY_USED = L"MultipleMemoryUsed"; + constexpr auto EVENT_NAME_SINGLE_MEMORY_USED = L"SingleMemoryUsed"; + constexpr auto EVENT_NAME_SHARED_MEMORY_USED = L"SharedMemoryUsed"; + constexpr auto EVENT_NAME_MEMORY_BODY_OPENED = L"MemoryBodyOpened"; + constexpr auto EVENT_NAME_MEMORY_FLYOUT_OPEN_BEGIN = L"MemoryFlyoutOpenBegin"; + constexpr auto EVENT_NAME_MEMORY_FLYOUT_OPEN_END = L"MemoryFlyoutOpenEnd"; + constexpr auto EVENT_NAME_MEMORY_CLEAR_ALL = L"MemoryClearAll"; + constexpr auto EVENT_NAME_INVALID_PASTED_INPUT_OCCURRED = L"InvalidPastedInputOccurred"; + constexpr auto EVENT_NAME_VALID_INPUT_PASTED = L"ValidInputPasted"; + constexpr auto EVENT_NAME_BITFLIP_PANE_CLICKED = L"BitFlipPaneClicked"; + constexpr auto EVENT_NAME_BITFLIP_BUTTONS_USED = L"BitFlipToggleButtonUsed"; + constexpr auto EVENT_NAME_ANGLE_BUTTONS_USED = L"AngleButtonUsedInSession"; + constexpr auto EVENT_NAME_HYP_BUTTON_USED = L"HypButtonUsedInSession"; + constexpr auto EVENT_NAME_FUNCTION_USAGE = L"FunctionUsageInSession"; + constexpr auto EVENT_NAME_BITLENGTH_BUTTON_USED = L"BitLengthButtonUsed"; + constexpr auto EVENT_NAME_RADIX_BUTTON_USED = L"RadixButtonUsed"; + constexpr auto EVENT_NAME_MAX_WINDOW_COUNT = L"MaxWindowCountInSession"; + constexpr auto EVENT_NAME_WINDOW_LAUNCHED_PROTOCOL = L"WindowActivatedThroughProtocol"; + constexpr auto EVENT_NAME_WINDOW_LAUNCHED_TILESEARCH = L"WindowLaunchedThroughTile"; + constexpr auto EVENT_NAME_DATE_DIFFERENCE_USED = L"DateDifferenceModeUsed"; + constexpr auto EVENT_NAME_DATE_ADD_SUBTRACT_USED = L"DateAddSubtractModeUsed"; + constexpr auto EVENT_NAME_DATE_DIFFERENCE_FOUND = L"DateDifferenceFound"; + constexpr auto EVENT_NAME_HIDE_IF_SHOWN = L"HideIfShown"; + constexpr auto EVENT_NAME_ABOUT_FLYOUT_OPENED = L"AboutFlyoutOpened"; + constexpr auto EVENT_NAME_NAV_BAR_OPENED = L"NavBarOpened"; + constexpr auto EVENT_NAME_CORE_WINDOW_WAS_NULL = L"CoreWindowWasNull"; - constexpr auto EVENT_NAME_EXCEPTION = L"Exception"; + constexpr auto EVENT_NAME_EXCEPTION = L"Exception"; - constexpr auto PDT_PRIVACY_DATA_TAG = L"PartA_PrivTags"; - constexpr auto PDT_PRODUCT_AND_SERVICE_USAGE = 0x0000'0000'0200'0000u; + constexpr auto PDT_PRIVACY_DATA_TAG = L"PartA_PrivTags"; + constexpr auto PDT_PRODUCT_AND_SERVICE_USAGE = 0x0000'0000'0200'0000u; #ifdef SEND_TELEMETRY // c.f. WINEVENT_KEYWORD_RESERVED_63-56 0xFF00000000000000 // Bits 63-56 - channel keywords // c.f. WINEVENT_KEYWORD_* 0x00FF000000000000 // Bits 55-48 - system-reserved keywords constexpr int64_t MICROSOFT_KEYWORD_CRITICAL_DATA = 0x0000800000000000; // Bit 47 - constexpr int64_t MICROSOFT_KEYWORD_MEASURES = 0x0000400000000000; // Bit 46 - constexpr int64_t MICROSOFT_KEYWORD_TELEMETRY = 0x0000200000000000; // Bit 45 - constexpr int64_t MICROSOFT_KEYWORD_RESERVED_44 = 0x0000100000000000; // Bit 44 (reserved for future assignment) + constexpr int64_t MICROSOFT_KEYWORD_MEASURES = 0x0000400000000000; // Bit 46 + constexpr int64_t MICROSOFT_KEYWORD_TELEMETRY = 0x0000200000000000; // Bit 45 + constexpr int64_t MICROSOFT_KEYWORD_RESERVED_44 = 0x0000100000000000; // Bit 44 (reserved for future assignment) #else // define all Keyword options as 0 when we do not want to upload app telemetry constexpr int64_t MICROSOFT_KEYWORD_CRITICAL_DATA = 0; @@ -99,11 +97,12 @@ namespace CalculatorApp #pragma region TraceLogger setup and cleanup - TraceLogger::TraceLogger() : - g_calculatorProvider( + TraceLogger::TraceLogger() + : g_calculatorProvider( L"MicrosoftCalculator", LoggingChannelOptions(GUID{ 0x4f50731a, 0x89cf, 0x4782, 0xb3, 0xe0, 0xdc, 0xe8, 0xc9, 0x4, 0x76, 0xba }), // Microsoft Telemetry group - GUID{ 0x905ca09, 0x610e, 0x401e, 0xb6, 0x50, 0x2f, 0x21, 0x29, 0x80, 0xb9, 0xe0 }), // Unique providerID {0905CA09-610E-401E-B650-2F212980B9E0} + GUID{ 0x905ca09, 0x610e, 0x401e, 0xb6, 0x50, 0x2f, 0x21, 0x29, 0x80, 0xb9, 0xe0 }) + , // Unique providerID {0905CA09-610E-401E-B650-2F212980B9E0} m_appLaunchActivity{ nullptr } { // initialize the function array @@ -307,7 +306,8 @@ namespace CalculatorApp void TraceLogger::LogSharedMemoryUsed(wstring_view fromMode, wstring_view toMode, unsigned int memorySize) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; fields.AddString(L"FromMode", fromMode); @@ -318,7 +318,8 @@ namespace CalculatorApp void TraceLogger::LogBitFlipPaneClicked() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; LogTelemetryEvent(EVENT_NAME_BITFLIP_PANE_CLICKED, fields); @@ -326,7 +327,8 @@ namespace CalculatorApp void TraceLogger::LogBitFlipUsed() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; LogTelemetryEvent(EVENT_NAME_BITFLIP_BUTTONS_USED, fields); @@ -339,11 +341,8 @@ namespace CalculatorApp if (!isAppLaunchBeginLogged) { - m_appLaunchActivity = g_calculatorProvider.StartActivity( - EVENT_NAME_APP_LAUNCH_BEGIN, - nullptr, - LoggingLevel::Verbose, - LoggingOptions(MICROSOFT_KEYWORD_TELEMETRY)); + m_appLaunchActivity = + g_calculatorProvider.StartActivity(EVENT_NAME_APP_LAUNCH_BEGIN, nullptr, LoggingLevel::Verbose, LoggingOptions(MICROSOFT_KEYWORD_TELEMETRY)); isAppLaunchBeginLogged = true; } @@ -376,7 +375,8 @@ namespace CalculatorApp void TraceLogger::LogDebug(wstring_view debugData) { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; fields.AddString(L"DebugData", debugData); @@ -385,7 +385,8 @@ namespace CalculatorApp void TraceLogger::LogOnAppLaunch(wstring_view previousExecutionState) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; fields.AddString(L"PreviousExecutionState", previousExecutionState); @@ -394,7 +395,8 @@ namespace CalculatorApp void TraceLogger::LogAboutFlyoutOpened() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; LogTelemetryEvent(EVENT_NAME_ABOUT_FLYOUT_OPENED, fields); @@ -402,7 +404,8 @@ namespace CalculatorApp void TraceLogger::LogNavBarOpened() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; LogTelemetryEvent(EVENT_NAME_NAV_BAR_OPENED, fields); @@ -410,7 +413,8 @@ namespace CalculatorApp void TraceLogger::LogClearHistory() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; LogTelemetryEvent(EVENT_NAME_HISTORY_CLEAR, fields); @@ -418,7 +422,8 @@ namespace CalculatorApp void TraceLogger::LogHistoryFlyoutOpenBegin(unsigned int historyItemCount) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; // we want to record the event only when history item count is atleast 20 if (historyItemCount >= 20) @@ -431,7 +436,8 @@ namespace CalculatorApp void TraceLogger::LogHistoryFlyoutOpenEnd(int historyItemCount) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; if (historyItemCount >= 20) { @@ -443,7 +449,8 @@ namespace CalculatorApp void TraceLogger::LogHistoryBodyOpened() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; LogTelemetryEvent(EVENT_NAME_HISTORY_BODY_OPENED, fields); @@ -451,7 +458,8 @@ namespace CalculatorApp void TraceLogger::LogMemoryFlyoutOpenBegin(unsigned int memoryItemCount) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; // we want to record the event only when memory item count is atleast 4 if (memoryItemCount >= 4) @@ -464,7 +472,8 @@ namespace CalculatorApp void TraceLogger::LogMemoryFlyoutOpenEnd(unsigned int memoryItemCount) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; if (memoryItemCount >= 4) { @@ -476,7 +485,8 @@ namespace CalculatorApp void TraceLogger::LogMemoryBodyOpened() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; LogTelemetryEvent(EVENT_NAME_MEMORY_BODY_OPENED, fields); @@ -487,7 +497,8 @@ namespace CalculatorApp // Use of this function is to analyze perf of mode change. void TraceLogger::LogModeChangeBegin(ViewMode fromMode, ViewMode toMode, int windowId) { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; if (NavCategory::IsValidViewMode(fromMode) && NavCategory::IsValidViewMode(toMode)) { @@ -502,7 +513,8 @@ namespace CalculatorApp // comment: same as LogModeChangeBegin void TraceLogger::LogModeChangeEnd(ViewMode toMode, int windowId) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; if (NavCategory::IsValidViewMode(toMode)) { @@ -515,7 +527,8 @@ namespace CalculatorApp void TraceLogger::LogHistoryItemLoadBegin() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; LogTelemetryEvent(EVENT_NAME_HISTORY_ITEM_LOAD_BEGIN, fields); @@ -523,7 +536,8 @@ namespace CalculatorApp void TraceLogger::LogHistoryItemLoadEnd(unsigned int historyTokenCount) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; fields.AddUInt32(L"HistoryTokenCount", historyTokenCount); @@ -532,7 +546,8 @@ namespace CalculatorApp void TraceLogger::LogNewWindowCreationBegin(int windowId) { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; fields.AddUInt32(L"WindowId", windowId); @@ -541,7 +556,8 @@ namespace CalculatorApp void TraceLogger::LogNewWindowCreationEnd(int windowId) { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; fields.AddUInt32(L"WindowId", windowId); @@ -550,7 +566,8 @@ namespace CalculatorApp void TraceLogger::LogError(wstring_view errorString) { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; fields.AddString(L"ErrorString", errorString); @@ -559,7 +576,8 @@ namespace CalculatorApp void TraceLogger::LogPrelaunchedAppActivatedByUser() { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; LogTelemetryEvent(EVENT_NAME_PRELAUNCHED_APP_ACTIVATED_BY_USER, fields); @@ -567,7 +585,8 @@ namespace CalculatorApp void TraceLogger::LogAppPrelaunchedBySystem() { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; LogTelemetryEvent(EVENT_NAME_APP_PRELAUNCHED_BY_SYSTEM, fields); @@ -588,9 +607,11 @@ namespace CalculatorApp } } - void TraceLogger::LogMemoryUsed(int windowId, unsigned int slotPosition, bool isStandard, bool isScientific, bool isProgrammer, unsigned int memorySize) const + void TraceLogger::LogMemoryUsed(int windowId, unsigned int slotPosition, bool isStandard, bool isScientific, bool isProgrammer, + unsigned int memorySize) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; // Reader lock for the static resources reader_writer_lock::scoped_lock_read lock(s_traceLoggerLock); @@ -625,7 +646,8 @@ namespace CalculatorApp void TraceLogger::LogMultipleMemoryUsed(unsigned int slotPosition, unsigned int memorySize) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; fields.AddUInt32(L"MemoryIndex", slotPosition); @@ -635,7 +657,8 @@ namespace CalculatorApp void TraceLogger::LogSingleMemoryUsed(unsigned int memorySize) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; fields.AddUInt32(L"MemoryListSize", memorySize); @@ -644,7 +667,8 @@ namespace CalculatorApp void TraceLogger::LogInvalidPastedInputOccurred(wstring_view reason, ViewMode mode, int programmerNumberBase, int bitLengthType) { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; fields.AddString(L"Mode", NavCategory::GetFriendlyName(mode)->Data()); @@ -657,7 +681,8 @@ namespace CalculatorApp void TraceLogger::LogValidInputPasted(ViewMode mode) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; fields.AddString(L"Mode", NavCategory::GetFriendlyName(mode)->Data()); @@ -666,7 +691,8 @@ namespace CalculatorApp void TraceLogger::LogStandardException(wstring_view functionName, const exception& e) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; fields.AddString(L"FunctionName", functionName); @@ -678,7 +704,8 @@ namespace CalculatorApp void TraceLogger::LogWinRTException(wstring_view functionName, hresult_error const& e) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; fields.AddString(L"FunctionName", functionName); @@ -687,9 +714,10 @@ namespace CalculatorApp LogMeasureEvent(EVENT_NAME_EXCEPTION, fields); } - void TraceLogger::LogPlatformException(wstring_view functionName, Platform::Exception^ e) const + void TraceLogger::LogPlatformException(wstring_view functionName, Platform::Exception ^ e) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; fields.AddString(L"FunctionName", functionName); @@ -733,11 +761,11 @@ namespace CalculatorApp { return s_programmerType[index]; } - //return "N/A" + // return "N/A" return s_programmerType[0]; } - bool TraceLogger::GetIndex(int &index) + bool TraceLogger::GetIndex(int& index) { if (findIndex[index] > 0) { @@ -755,7 +783,8 @@ namespace CalculatorApp void TraceLogger::LogMaxWindowCount() { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; fields.AddUInt32(L"WindowCount", (unsigned int)maxWindowCount); @@ -764,7 +793,8 @@ namespace CalculatorApp void TraceLogger::LogWindowActivated() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; LogTelemetryEvent(EVENT_NAME_WINDOW_LAUNCHED_PROTOCOL, fields); @@ -772,7 +802,8 @@ namespace CalculatorApp void TraceLogger::LogWindowLaunched() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; LogTelemetryEvent(EVENT_NAME_WINDOW_LAUNCHED_TILESEARCH, fields); @@ -840,7 +871,8 @@ namespace CalculatorApp void TraceLogger::LogFunctionUsage(int windowId) { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; for (int i = 0; i < functionCount; i++) { @@ -897,8 +929,7 @@ namespace CalculatorApp // Ignore first 3 calls during the initialization of the combo box selected items for Add mode int firstChangeEventCount = isAddMode ? 4 : 1; - if (((*usageMap)[windowId] == firstChangeEventCount) - && (!(*isLoggedInSession))) + if (((*usageMap)[windowId] == firstChangeEventCount) && (!(*isLoggedInSession))) { LoggingFields fields{}; fields.AddString(L"AddSubtractMode", isAddMode ? L"Add" : L"Subtract"); @@ -910,16 +941,12 @@ namespace CalculatorApp void TraceLogger::LogDateClippedTimeDifferenceFound(Calendar const& today, DateTime const& clippedTime) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; auto calendarSystem = today.GetCalendarSystem(); auto clock = today.GetClock(); - DateTimeFormatter dtFormatter{ - L"longdate shorttime", - { L"en-US" }, - GlobalizationPreferences::HomeGeographicRegion(), - calendarSystem, - clock }; + DateTimeFormatter dtFormatter{ L"longdate shorttime", { L"en-US" }, GlobalizationPreferences::HomeGeographicRegion(), calendarSystem, clock }; LoggingFields fields{}; fields.AddString(L"ResolvedCalendarLanguage", today.ResolvedLanguage()); @@ -934,7 +961,8 @@ namespace CalculatorApp void TraceLogger::LogUserRequestedRefreshFailed() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; LogTelemetryEvent(L"UserRequestedRefreshFailed", fields); @@ -942,7 +970,8 @@ namespace CalculatorApp void TraceLogger::LogConversionResult(wstring_view fromValue, wstring_view fromUnit, wstring_view toValue, wstring_view toUnit) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; wstring behaviorString{}; NetworkAccessBehavior behavior = NetworkManager::GetNetworkAccessBehavior(); @@ -979,10 +1008,10 @@ namespace CalculatorApp void TraceLogger::LogCoreWindowWasNull() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; LogTelemetryEvent(EVENT_NAME_CORE_WINDOW_WAS_NULL, fields); } } - diff --git a/src/CalcViewModel/Common/TraceLogger.h b/src/CalcViewModel/Common/TraceLogger.h index 2b659047..3ae91ed5 100644 --- a/src/CalcViewModel/Common/TraceLogger.h +++ b/src/CalcViewModel/Common/TraceLogger.h @@ -18,7 +18,10 @@ namespace CalculatorApp public: int count; std::wstring funcName; - FuncLog() { count = 0; } + FuncLog() + { + count = 0; + } FuncLog(std::wstring fName) { funcName = fName; @@ -30,7 +33,7 @@ namespace CalculatorApp { public: TraceLogger(_In_ TraceLogger const&) = delete; - TraceLogger const & operator= (_In_ TraceLogger const&) = delete; + TraceLogger const& operator=(_In_ TraceLogger const&) = delete; ~TraceLogger(); static TraceLogger& GetInstance(); bool GetTraceLoggingProviderEnabled() const; @@ -93,21 +96,22 @@ namespace CalculatorApp // Trace methods for Date Calculator usage void LogDateDifferenceModeUsed(int windowId); void LogDateAddSubtractModeUsed(int windowId, bool isAddMode); - void LogDateClippedTimeDifferenceFound(winrt::Windows::Globalization::Calendar const& today, winrt::Windows::Foundation::DateTime const& clippedTime) const; + void LogDateClippedTimeDifferenceFound(winrt::Windows::Globalization::Calendar const& today, + winrt::Windows::Foundation::DateTime const& clippedTime) const; void LogStandardException(std::wstring_view functionName, _In_ const std::exception& e) const; void LogWinRTException(std::wstring_view functionName, _In_ winrt::hresult_error const& e) const; - void LogPlatformException(std::wstring_view functionName, _In_ Platform::Exception^ e) const; + void LogPlatformException(std::wstring_view functionName, _In_ Platform::Exception ^ e) const; private: // Create an instance of TraceLogger TraceLogger(); // Any new Log method should - // a) decide the level of logging. This will help us in limiting recording of events only up to a certain level. See this link for guidance https://msdn.microsoft.com/en-us/library/windows/desktop/aa363742(v=vs.85).aspx - // We're using Verbose level for events that are called frequently and needed only for debugging or capturing perf for specific scenarios - // b) should decide whether or not to log to telemetry and pass TraceLoggingKeyword(MICROSOFT_KEYWORD_TELEMETRY) accordingly - // c) Should accept a variable number of additional data arguments if needed + // a) decide the level of logging. This will help us in limiting recording of events only up to a certain level. See this link for guidance + // https://msdn.microsoft.com/en-us/library/windows/desktop/aa363742(v=vs.85).aspx We're using Verbose level for events that are called frequently and + // needed only for debugging or capturing perf for specific scenarios b) should decide whether or not to log to telemetry and pass + // TraceLoggingKeyword(MICROSOFT_KEYWORD_TELEMETRY) accordingly c) Should accept a variable number of additional data arguments if needed void LogTelemetryEvent(std::wstring_view eventName, winrt::Windows::Foundation::Diagnostics::LoggingFields fields) const; void LogMeasureEvent(std::wstring_view eventName, winrt::Windows::Foundation::Diagnostics::LoggingFields fields) const; void LogCriticalDataEvent(std::wstring_view eventName, winrt::Windows::Foundation::Diagnostics::LoggingFields fields) const; @@ -133,7 +137,7 @@ namespace CalculatorApp bool isHypButtonLogged = false; bool isAngleButtonInitialized = false; unsigned int findIndex[maxFunctionSize] = { 0 }; - bool GetIndex(int &index); + bool GetIndex(int& index); std::wstring GetProgrammerType(int index); size_t maxWindowCount = 0; bool isAppLaunchBeginLogged = false; diff --git a/src/CalcViewModel/Common/Utils.cpp b/src/CalcViewModel/Common/Utils.cpp index 6aad5f52..45d55e89 100644 --- a/src/CalcViewModel/Common/Utils.cpp +++ b/src/CalcViewModel/Common/Utils.cpp @@ -30,12 +30,12 @@ void Utils::IFTPlatformException(HRESULT hr) { if (FAILED(hr)) { - Platform::Exception^ exception = ref new Platform::Exception(hr); + Platform::Exception ^ exception = ref new Platform::Exception(hr); throw(exception); } } -String^ Utils::GetStringValue(String^ input) +String ^ Utils::GetStringValue(String ^ input) { // Remove first and last " characters if (input->Length() >= 3) @@ -68,20 +68,16 @@ int Utils::GetWindowId() return windowId; } -void Utils::RunOnUIThreadNonblocking(std::function&& function, _In_ CoreDispatcher^ currentDispatcher) +void Utils::RunOnUIThreadNonblocking(std::function&& function, _In_ CoreDispatcher ^ currentDispatcher) { if (currentDispatcher != nullptr) { - auto task = create_task(currentDispatcher->RunAsync(CoreDispatcherPriority::Normal, - ref new DispatchedHandler([function]() - { - function(); - }))); + auto task = create_task(currentDispatcher->RunAsync(CoreDispatcherPriority::Normal, ref new DispatchedHandler([function]() { function(); }))); } } // Returns if the last character of a wstring is the target wchar_t -bool Utils::IsLastCharacterTarget(_In_ wstring const &input, _In_ wchar_t target) +bool Utils::IsLastCharacterTarget(_In_ wstring const& input, _In_ wchar_t target) { return !input.empty() && input.back() == target; } @@ -96,9 +92,8 @@ wstring Utils::RemoveUnwantedCharsFromWstring(wstring input, wchar_t* unwantedCh return input; } -void Utils::SerializeCommandsAndTokens(_In_ shared_ptr>> const &tokens, - _In_ shared_ptr>> const &commands, - DataWriter^ writer) +void Utils::SerializeCommandsAndTokens(_In_ shared_ptr>> const& tokens, + _In_ shared_ptr>> const& commands, DataWriter ^ writer) { unsigned int commandsSize; IFTPlatformException(commands->GetSize(&commandsSize)); @@ -134,7 +129,7 @@ void Utils::SerializeCommandsAndTokens(_In_ shared_ptr>> Utils::DeserializeCommands(DataReader^ reader) +const shared_ptr>> Utils::DeserializeCommands(DataReader ^ reader) { shared_ptr>> commandVector = make_shared>>(); auto commandVectorSize = reader->ReadUInt32(); @@ -151,9 +146,9 @@ const shared_ptr>> Utils::Deseri return commandVector; } -const shared_ptr>> Utils::DeserializeTokens(DataReader^ reader) +const shared_ptr>> Utils::DeserializeTokens(DataReader ^ reader) { - shared_ptr>> tokenVector = make_shared>>(); + shared_ptr>> tokenVector = make_shared>>(); auto tokensSize = reader->ReadUInt32(); for (unsigned int i = 0; i < tokensSize; ++i) @@ -193,14 +188,14 @@ bool Utils::IsDateTimeOlderThan(DateTime dateTime, const long long duration) return dateTime.UniversalTime + duration < now.UniversalTime; } -task Utils::WriteFileToFolder(IStorageFolder^ folder, String^ fileName, String^ contents, CreationCollisionOption collisionOption) +task Utils::WriteFileToFolder(IStorageFolder ^ folder, String ^ fileName, String ^ contents, CreationCollisionOption collisionOption) { if (folder == nullptr) { co_return; } - StorageFile^ file = co_await folder->CreateFileAsync(fileName, collisionOption); + StorageFile ^ file = co_await folder->CreateFileAsync(fileName, collisionOption); if (file == nullptr) { co_return; @@ -209,19 +204,19 @@ task Utils::WriteFileToFolder(IStorageFolder^ folder, String^ fileName, St co_await FileIO::WriteTextAsync(file, contents); } -task Utils::ReadFileFromFolder(IStorageFolder^ folder, String^ fileName) +task Utils::ReadFileFromFolder(IStorageFolder ^ folder, String ^ fileName) { if (folder == nullptr) { co_return nullptr; } - StorageFile^ file = co_await folder->GetFileAsync(fileName); + StorageFile ^ file = co_await folder->GetFileAsync(fileName); if (file == nullptr) { co_return nullptr; } - String^ contents = co_await FileIO::ReadTextAsync(file); + String ^ contents = co_await FileIO::ReadTextAsync(file); co_return contents; } diff --git a/src/CalcViewModel/Common/Utils.h b/src/CalcViewModel/Common/Utils.h index a6b773af..4aefcc36 100644 --- a/src/CalcViewModel/Common/Utils.h +++ b/src/CalcViewModel/Common/Utils.h @@ -9,92 +9,187 @@ // Utility macros to make Models easier to write // generates a member variable called m_ -#define PROPERTY_R(t, n)\ - property t n {\ - t get() { return m_##n; }\ - private: void set(t value) { m_##n = value; }\ - } private: t m_##n; public: +#define PROPERTY_R(t, n) \ + property t n \ + { \ + t get() \ + { \ + return m_##n; \ + } \ + \ + private: \ + void set(t value) \ + { \ + m_##n = value; \ + } \ + } \ + \ +private: \ + t m_##n; \ + \ +public: -#define PROPERTY_RW(t, n)\ - property t n {\ - t get() { return m_##n; }\ - void set(t value) { m_##n = value; }\ - } private: t m_##n; public: +#define PROPERTY_RW(t, n) \ + property t n \ + { \ + t get() \ + { \ + return m_##n; \ + } \ + void set(t value) \ + { \ + m_##n = value; \ + } \ + } \ + \ +private: \ + t m_##n; \ + \ +public: -#define OBSERVABLE_PROPERTY_R(t, n)\ - property t n {\ - t get() { return m_##n; }\ - private: void set(t value) {\ - if (m_##n != value) {\ - m_##n = value;\ - RaisePropertyChanged(L#n);\ - }}\ - } private: t m_##n; public: +#define OBSERVABLE_PROPERTY_R(t, n) \ + property t n \ + { \ + t get() \ + { \ + return m_##n; \ + } \ + \ + private: \ + void set(t value) \ + { \ + if (m_##n != value) \ + { \ + m_##n = value; \ + RaisePropertyChanged(L#n); \ + } \ + } \ + } \ + \ +private: \ + t m_##n; \ + \ +public: -#define OBSERVABLE_PROPERTY_RW(t, n)\ - property t n {\ - t get() { return m_##n; }\ - void set(t value) {\ - if (m_##n != value) {\ - m_##n = value;\ - RaisePropertyChanged(L#n);\ - }\ - }\ - } private: t m_##n; public: +#define OBSERVABLE_PROPERTY_RW(t, n) \ + property t n \ + { \ + t get() \ + { \ + return m_##n; \ + } \ + void set(t value) \ + { \ + if (m_##n != value) \ + { \ + m_##n = value; \ + RaisePropertyChanged(L#n); \ + } \ + } \ + } \ + \ +private: \ + t m_##n; \ + \ +public: -#define OBSERVABLE_NAMED_PROPERTY_R(t, n)\ - OBSERVABLE_PROPERTY_R(t, n)\ - internal: static property Platform::String^ n##PropertyName {\ - Platform::String^ get() { return Platform::StringReference(L#n); }\ - } public: +#define OBSERVABLE_NAMED_PROPERTY_R(t, n) \ + OBSERVABLE_PROPERTY_R(t, n) \ + internal: \ + static property Platform::String ^ n##PropertyName \ + { \ + Platform::String ^ get() { return Platform::StringReference(L#n); } \ + } \ + \ +public: -#define OBSERVABLE_NAMED_PROPERTY_RW(t, n)\ - OBSERVABLE_PROPERTY_RW(t, n)\ - internal: static property Platform::String^ n##PropertyName {\ - Platform::String^ get() { return Platform::StringReference(L#n); }\ - } public: +#define OBSERVABLE_NAMED_PROPERTY_RW(t, n) \ + OBSERVABLE_PROPERTY_RW(t, n) \ + internal: \ + static property Platform::String ^ n##PropertyName \ + { \ + Platform::String ^ get() { return Platform::StringReference(L#n); } \ + } \ + \ +public: #define OBSERVABLE_PROPERTY_FIELD(n) m_##n // This variant of the observable object is for objects that don't want to react to property changes #ifndef UNIT_TESTS -#define OBSERVABLE_OBJECT() virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler^ PropertyChanged;\ - internal: void RaisePropertyChanged(Platform::String^ p) {\ - PropertyChanged(this, ref new Windows::UI::Xaml::Data::PropertyChangedEventArgs(p)); } public: +#define OBSERVABLE_OBJECT() \ + virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler ^ PropertyChanged; \ + internal: \ + void RaisePropertyChanged(Platform::String ^ p) \ + { \ + PropertyChanged(this, ref new Windows::UI::Xaml::Data::PropertyChangedEventArgs(p)); \ + } \ + \ +public: #else -#define OBSERVABLE_OBJECT() virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler^ PropertyChanged;\ - internal: void RaisePropertyChanged(Platform::String^ p) {\ - } public: +#define OBSERVABLE_OBJECT() \ + virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler ^ PropertyChanged; \ + internal: \ + void RaisePropertyChanged(Platform::String ^ p) \ + { \ + } \ + \ +public: #endif // The callback specified in the macro is a method in the class that will be called every time the object changes // the callback is supposed to be have a single parameter of type Platform::String^ #ifndef UNIT_TESTS -#define OBSERVABLE_OBJECT_CALLBACK(c) virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler^ PropertyChanged;\ - internal: void RaisePropertyChanged(Platform::String^ p) {\ - PropertyChanged(this, ref new Windows::UI::Xaml::Data::PropertyChangedEventArgs(p));\ - c(p);\ - } public: +#define OBSERVABLE_OBJECT_CALLBACK(c) \ + virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler ^ PropertyChanged; \ + internal: \ + void RaisePropertyChanged(Platform::String ^ p) \ + { \ + PropertyChanged(this, ref new Windows::UI::Xaml::Data::PropertyChangedEventArgs(p)); \ + c(p); \ + } \ + \ +public: #else -#define OBSERVABLE_OBJECT_CALLBACK(c) virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler^ PropertyChanged;\ - internal: void RaisePropertyChanged(Platform::String^ p) {\ - c(p);\ - } public: +#define OBSERVABLE_OBJECT_CALLBACK(c) \ + virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler ^ PropertyChanged; \ + internal: \ + void RaisePropertyChanged(Platform::String ^ p) \ + { \ + c(p); \ + } \ + \ +public: #endif // The variable member generated by this macro should not be used in the class code, use the // property getter instead. -#define COMMAND_FOR_METHOD(p, m) property Windows::UI::Xaml::Input::ICommand^ p {\ +#define COMMAND_FOR_METHOD(p, m) \ + property Windows::UI::Xaml::Input::ICommand^ p {\ Windows::UI::Xaml::Input::ICommand^ get() {\ if (!donotuse_##p) {\ donotuse_##p = CalculatorApp::Common::MakeDelegate(this, &m);\ - } return donotuse_##p; }} private: Windows::UI::Xaml::Input::ICommand^ donotuse_##p; public: + } return donotuse_##p; }} private: Windows::UI::Xaml::Input::ICommand^ donotuse_##p; \ + \ +public: -#define DEPENDENCY_PROPERTY_DECLARATION(t, n)\ - property t n {\ - t get() { return safe_cast(GetValue(s_##n##Property)); }\ - void set(t value) { SetValue(s_##n##Property, value); } }\ - private: static Windows::UI::Xaml::DependencyProperty^ s_##n##Property; public: +#define DEPENDENCY_PROPERTY_DECLARATION(t, n) \ + property t n \ + { \ + t get() \ + { \ + return safe_cast(GetValue(s_##n##Property)); \ + } \ + void set(t value) \ + { \ + SetValue(s_##n##Property, value); \ + } \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ s_##n##Property; \ + \ +public: // Utilities for DependencyProperties namespace Utils @@ -114,13 +209,13 @@ namespace Utils }; template - struct RemoveHat + struct RemoveHat { typedef T type; }; template - typename std::enable_if::value, T^>::type MakeDefault() + typename std::enable_if::value, T ^>::type MakeDefault() { return nullptr; } @@ -283,140 +378,317 @@ namespace Utils } void IFTPlatformException(HRESULT hr); - Platform::String^ GetStringValue(Platform::String^ input); - bool IsLastCharacterTarget(std::wstring const &input, wchar_t target); + Platform::String ^ GetStringValue(Platform::String ^ input); + bool IsLastCharacterTarget(std::wstring const& input, wchar_t target); std::wstring RemoveUnwantedCharsFromWstring(std::wstring inputString, wchar_t* unwantedChars, unsigned int size); double GetDoubleFromWstring(std::wstring input); int GetWindowId(); - void RunOnUIThreadNonblocking(std::function&& function, _In_ Windows::UI::Core::CoreDispatcher^ currentDispatcher); - void SerializeCommandsAndTokens(_In_ std::shared_ptr>> const &tokens, - _In_ std::shared_ptr>> const &commands, - Windows::Storage::Streams::DataWriter^ writer); + void RunOnUIThreadNonblocking(std::function&& function, _In_ Windows::UI::Core::CoreDispatcher ^ currentDispatcher); + void SerializeCommandsAndTokens(_In_ std::shared_ptr>> const& tokens, + _In_ std::shared_ptr>> const& commands, + Windows::Storage::Streams::DataWriter ^ writer); - const std::shared_ptr>> DeserializeCommands(Windows::Storage::Streams::DataReader^ reader); - const std::shared_ptr>> DeserializeTokens(Windows::Storage::Streams::DataReader^ reader); + const std::shared_ptr>> DeserializeCommands(Windows::Storage::Streams::DataReader ^ reader); + const std::shared_ptr>> DeserializeTokens(Windows::Storage::Streams::DataReader ^ reader); Windows::Foundation::DateTime GetUniversalSystemTime(); bool IsDateTimeOlderThan(Windows::Foundation::DateTime dateTime, const long long duration); - concurrency::task WriteFileToFolder(Windows::Storage::IStorageFolder^ folder, Platform::String^ fileName, Platform::String^ contents, Windows::Storage::CreationCollisionOption collisionOption); - concurrency::task ReadFileFromFolder(Windows::Storage::IStorageFolder^ folder, Platform::String^ fileName); + concurrency::task WriteFileToFolder(Windows::Storage::IStorageFolder ^ folder, Platform::String ^ fileName, Platform::String ^ contents, + Windows::Storage::CreationCollisionOption collisionOption); + concurrency::task ReadFileFromFolder(Windows::Storage::IStorageFolder ^ folder, Platform::String ^ fileName); } // This goes into the header to define the property, in the public: section of the class -#define DEPENDENCY_PROPERTY_OWNER(owner)\ - private: typedef owner DependencyPropertiesOwner; public: +#define DEPENDENCY_PROPERTY_OWNER(owner) \ +private: \ + typedef owner DependencyPropertiesOwner; \ + \ +public: // Normal DependencyProperty -#define DEPENDENCY_PROPERTY(type, name)\ - property type name {\ - type get() { return safe_cast(GetValue(s_##name##Property)); }\ - void set(type value) { SetValue(s_##name##Property, value); }\ - } private: static Windows::UI::Xaml::DependencyProperty^ s_##name##Property;\ - public: static property Windows::UI::Xaml::DependencyProperty^ name##Property {\ - Windows::UI::Xaml::DependencyProperty^ get() { assert(s_##name##Property); return s_##name##Property; }\ - }\ - private: static Windows::UI::Xaml::DependencyProperty^ Initialize##name##Property() {\ - return Utils::RegisterDependencyProperty(L#name); } public: +#define DEPENDENCY_PROPERTY(type, name) \ + property type name \ + { \ + type get() \ + { \ + return safe_cast(GetValue(s_##name##Property)); \ + } \ + void set(type value) \ + { \ + SetValue(s_##name##Property, value); \ + } \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \ + \ +public: \ + static property Windows::UI::Xaml::DependencyProperty ^ name##Property \ + { \ + Windows::UI::Xaml::DependencyProperty ^ get() { \ + assert(s_##name##Property); \ + return s_##name##Property; \ + } \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ Initialize##name##Property() \ + { \ + return Utils::RegisterDependencyProperty(L#name); \ + } \ + \ +public: -#define DEPENDENCY_PROPERTY_WITH_DEFAULT(type, name, defaultValue)\ - property type name {\ - type get() { return safe_cast(GetValue(s_##name##Property)); }\ - void set(type value) { SetValue(s_##name##Property, value); }\ - } private: static Windows::UI::Xaml::DependencyProperty^ s_##name##Property;\ - public: static property Windows::UI::Xaml::DependencyProperty^ name##Property {\ - Windows::UI::Xaml::DependencyProperty^ get() { assert(s_##name##Property); return s_##name##Property; }\ - }\ - private: static Windows::UI::Xaml::DependencyProperty^ Initialize##name##Property() {\ - return Utils::RegisterDependencyProperty(L#name, defaultValue); } public: +#define DEPENDENCY_PROPERTY_WITH_DEFAULT(type, name, defaultValue) \ + property type name \ + { \ + type get() \ + { \ + return safe_cast(GetValue(s_##name##Property)); \ + } \ + void set(type value) \ + { \ + SetValue(s_##name##Property, value); \ + } \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \ + \ +public: \ + static property Windows::UI::Xaml::DependencyProperty ^ name##Property \ + { \ + Windows::UI::Xaml::DependencyProperty ^ get() { \ + assert(s_##name##Property); \ + return s_##name##Property; \ + } \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ Initialize##name##Property() \ + { \ + return Utils::RegisterDependencyProperty(L#name, defaultValue); \ + } \ + \ +public: -#define DEPENDENCY_PROPERTY_WITH_CALLBACK(type, name)\ - property type name {\ - type get() { return safe_cast(GetValue(s_##name##Property)); }\ - void set(type value) { SetValue(s_##name##Property, value); }\ - } private: static Windows::UI::Xaml::DependencyProperty^ s_##name##Property;\ - public: static property Windows::UI::Xaml::DependencyProperty^ name##Property {\ - Windows::UI::Xaml::DependencyProperty^ get() { assert(s_##name##Property); return s_##name##Property; }\ - }\ - private: static Windows::UI::Xaml::DependencyProperty^ Initialize##name##Property() {\ - return Utils::RegisterDependencyPropertyWithCallback(L#name, &On##name##PropertyChangedImpl); }\ - static void On##name##PropertyChangedImpl(Windows::UI::Xaml::DependencyObject^ sender, Windows::UI::Xaml::DependencyPropertyChangedEventArgs^ args) {\ - auto self = safe_cast(sender);\ - self->On##name##PropertyChanged(safe_cast(args->OldValue), safe_cast(args->NewValue)); } public: +#define DEPENDENCY_PROPERTY_WITH_CALLBACK(type, name) \ + property type name \ + { \ + type get() \ + { \ + return safe_cast(GetValue(s_##name##Property)); \ + } \ + void set(type value) \ + { \ + SetValue(s_##name##Property, value); \ + } \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \ + \ +public: \ + static property Windows::UI::Xaml::DependencyProperty ^ name##Property \ + { \ + Windows::UI::Xaml::DependencyProperty ^ get() { \ + assert(s_##name##Property); \ + return s_##name##Property; \ + } \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ Initialize##name##Property() \ + { \ + return Utils::RegisterDependencyPropertyWithCallback(L#name, &On##name##PropertyChangedImpl); \ + } \ + static void On##name##PropertyChangedImpl(Windows::UI::Xaml::DependencyObject ^ sender, Windows::UI::Xaml::DependencyPropertyChangedEventArgs ^ args) \ + { \ + auto self = safe_cast(sender); \ + self->On##name##PropertyChanged(safe_cast(args->OldValue), safe_cast(args->NewValue)); \ + } \ + \ +public: -#define DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(type, name, defaultValue)\ - property type name {\ - type get() { return safe_cast(GetValue(s_##name##Property)); }\ - void set(type value) { SetValue(s_##name##Property, value); }\ - } private: static Windows::UI::Xaml::DependencyProperty^ s_##name##Property;\ - public: static property Windows::UI::Xaml::DependencyProperty^ name##Property {\ - Windows::UI::Xaml::DependencyProperty^ get() { assert(s_##name##Property); return s_##name##Property; }\ - }\ - private: static Windows::UI::Xaml::DependencyProperty^ Initialize##name##Property() {\ - return Utils::RegisterDependencyPropertyWithCallback(L#name, defaultValue, &On##name##PropertyChangedImpl); }\ - static void On##name##PropertyChangedImpl(Windows::UI::Xaml::DependencyObject^ sender, Windows::UI::Xaml::DependencyPropertyChangedEventArgs^ args) {\ - auto self = safe_cast(sender);\ - self->On##name##PropertyChanged(safe_cast(args->OldValue), safe_cast(args->NewValue)); } public: +#define DEPENDENCY_PROPERTY_WITH_DEFAULT_AND_CALLBACK(type, name, defaultValue) \ + property type name \ + { \ + type get() \ + { \ + return safe_cast(GetValue(s_##name##Property)); \ + } \ + void set(type value) \ + { \ + SetValue(s_##name##Property, value); \ + } \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \ + \ +public: \ + static property Windows::UI::Xaml::DependencyProperty ^ name##Property \ + { \ + Windows::UI::Xaml::DependencyProperty ^ get() { \ + assert(s_##name##Property); \ + return s_##name##Property; \ + } \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ Initialize##name##Property() \ + { \ + return Utils::RegisterDependencyPropertyWithCallback(L#name, defaultValue, &On##name##PropertyChangedImpl); \ + } \ + static void On##name##PropertyChangedImpl(Windows::UI::Xaml::DependencyObject ^ sender, Windows::UI::Xaml::DependencyPropertyChangedEventArgs ^ args) \ + { \ + auto self = safe_cast(sender); \ + self->On##name##PropertyChanged(safe_cast(args->OldValue), safe_cast(args->NewValue)); \ + } \ + \ +public: // Attached DependencyProperty -#define DEPENDENCY_PROPERTY_ATTACHED(type, name)\ - static type Get##name(Windows::UI::Xaml::DependencyObject^ target) { return safe_cast(target->GetValue(s_##name##Property)); }\ - static void Set##name(Windows::UI::Xaml::DependencyObject^ target, type value) { target->SetValue(s_##name##Property, value); }\ - private: static Windows::UI::Xaml::DependencyProperty^ s_##name##Property;\ - public: static property Windows::UI::Xaml::DependencyProperty^ name##Property {\ - Windows::UI::Xaml::DependencyProperty^ get() { assert(s_##name##Property); return s_##name##Property; }\ - }\ - private: static Windows::UI::Xaml::DependencyProperty^ Initialize##name##Property() {\ - return Utils::RegisterDependencyPropertyAttached(L#name); } public: +#define DEPENDENCY_PROPERTY_ATTACHED(type, name) \ + static type Get##name(Windows::UI::Xaml::DependencyObject ^ target) \ + { \ + return safe_cast(target->GetValue(s_##name##Property)); \ + } \ + static void Set##name(Windows::UI::Xaml::DependencyObject ^ target, type value) \ + { \ + target->SetValue(s_##name##Property, value); \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \ + \ +public: \ + static property Windows::UI::Xaml::DependencyProperty ^ name##Property \ + { \ + Windows::UI::Xaml::DependencyProperty ^ get() { \ + assert(s_##name##Property); \ + return s_##name##Property; \ + } \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ Initialize##name##Property() \ + { \ + return Utils::RegisterDependencyPropertyAttached(L#name); \ + } \ + \ +public: -#define DEPENDENCY_PROPERTY_ATTACHED_WITH_DEFAULT(type, name, defaultValue)\ - static type Get##name(Windows::UI::Xaml::DependencyObject^ target) { return safe_cast(target->GetValue(s_##name##Property)); }\ - static void Set##name(Windows::UI::Xaml::DependencyObject^ target, type value) { target->SetValue(s_##name##Property, value); }\ - private: static Windows::UI::Xaml::DependencyProperty^ s_##name##Property;\ - public: static property Windows::UI::Xaml::DependencyProperty^ name##Property {\ - Windows::UI::Xaml::DependencyProperty^ get() { assert(s_##name##Property); return s_##name##Property; }\ - }\ - private: static Windows::UI::Xaml::DependencyProperty^ Initialize##name##Property() {\ - return Utils::RegisterDependencyPropertyAttached(L#name, defaultValue); } public: +#define DEPENDENCY_PROPERTY_ATTACHED_WITH_DEFAULT(type, name, defaultValue) \ + static type Get##name(Windows::UI::Xaml::DependencyObject ^ target) \ + { \ + return safe_cast(target->GetValue(s_##name##Property)); \ + } \ + static void Set##name(Windows::UI::Xaml::DependencyObject ^ target, type value) \ + { \ + target->SetValue(s_##name##Property, value); \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \ + \ +public: \ + static property Windows::UI::Xaml::DependencyProperty ^ name##Property \ + { \ + Windows::UI::Xaml::DependencyProperty ^ get() { \ + assert(s_##name##Property); \ + return s_##name##Property; \ + } \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ Initialize##name##Property() \ + { \ + return Utils::RegisterDependencyPropertyAttached(L#name, defaultValue); \ + } \ + \ +public: -#define DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(type, name)\ - static type Get##name(Windows::UI::Xaml::DependencyObject^ target) { return safe_cast(target->GetValue(s_##name##Property)); }\ - static void Set##name(Windows::UI::Xaml::DependencyObject^ target, type value) { target->SetValue(s_##name##Property, value); }\ - private: static Windows::UI::Xaml::DependencyProperty^ s_##name##Property;\ - public: static property Windows::UI::Xaml::DependencyProperty^ name##Property {\ - Windows::UI::Xaml::DependencyProperty^ get() { assert(s_##name##Property); return s_##name##Property; }\ - }\ - private: static Windows::UI::Xaml::DependencyProperty^ Initialize##name##Property() {\ - return Utils::RegisterDependencyPropertyAttachedWithCallback(L#name, &On##name##PropertyChangedImpl); }\ - static void On##name##PropertyChangedImpl(Windows::UI::Xaml::DependencyObject^ sender, Windows::UI::Xaml::DependencyPropertyChangedEventArgs^ args) {\ - On##name##PropertyChanged(sender, safe_cast(args->OldValue), safe_cast(args->NewValue)); } public: +#define DEPENDENCY_PROPERTY_ATTACHED_WITH_CALLBACK(type, name) \ + static type Get##name(Windows::UI::Xaml::DependencyObject ^ target) \ + { \ + return safe_cast(target->GetValue(s_##name##Property)); \ + } \ + static void Set##name(Windows::UI::Xaml::DependencyObject ^ target, type value) \ + { \ + target->SetValue(s_##name##Property, value); \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \ + \ +public: \ + static property Windows::UI::Xaml::DependencyProperty ^ name##Property \ + { \ + Windows::UI::Xaml::DependencyProperty ^ get() { \ + assert(s_##name##Property); \ + return s_##name##Property; \ + } \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ Initialize##name##Property() \ + { \ + return Utils::RegisterDependencyPropertyAttachedWithCallback(L#name, &On##name##PropertyChangedImpl); \ + } \ + static void On##name##PropertyChangedImpl(Windows::UI::Xaml::DependencyObject ^ sender, Windows::UI::Xaml::DependencyPropertyChangedEventArgs ^ args) \ + { \ + On##name##PropertyChanged(sender, safe_cast(args->OldValue), safe_cast(args->NewValue)); \ + } \ + \ +public: -#define DEPENDENCY_PROPERTY_ATTACHED_WITH_DEFAULT_AND_CALLBACK(type, name, defaultValue)\ - static type Get##name(Windows::UI::Xaml::DependencyObject^ target) { return safe_cast(target->GetValue(s_##name##Property)); }\ - static void Set##name(Windows::UI::Xaml::DependencyObject^ target, type value) { target->SetValue(s_##name##Property, value); }\ - private: static Windows::UI::Xaml::DependencyProperty^ s_##name##Property;\ - public: static property Windows::UI::Xaml::DependencyProperty^ name##Property {\ - Windows::UI::Xaml::DependencyProperty^ get() { assert(s_##name##Property); return s_##name##Property; }\ - }\ - private: static Windows::UI::Xaml::DependencyProperty^ Initialize##name##Property() {\ - return Utils::RegisterDependencyPropertyAttachedWithCallback(L#name, defaultValue, &On##name##PropertyChangedImpl); }\ - static void On##name##PropertyChangedImpl(Windows::UI::Xaml::DependencyObject^ sender, Windows::UI::Xaml::DependencyPropertyChangedEventArgs^ args) {\ - On##name##PropertyChanged(sender, safe_cast(args->OldValue), safe_cast(args->NewValue)); } public: +#define DEPENDENCY_PROPERTY_ATTACHED_WITH_DEFAULT_AND_CALLBACK(type, name, defaultValue) \ + static type Get##name(Windows::UI::Xaml::DependencyObject ^ target) \ + { \ + return safe_cast(target->GetValue(s_##name##Property)); \ + } \ + static void Set##name(Windows::UI::Xaml::DependencyObject ^ target, type value) \ + { \ + target->SetValue(s_##name##Property, value); \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ s_##name##Property; \ + \ +public: \ + static property Windows::UI::Xaml::DependencyProperty ^ name##Property \ + { \ + Windows::UI::Xaml::DependencyProperty ^ get() { \ + assert(s_##name##Property); \ + return s_##name##Property; \ + } \ + } \ + \ +private: \ + static Windows::UI::Xaml::DependencyProperty ^ Initialize##name##Property() \ + { \ + return Utils::RegisterDependencyPropertyAttachedWithCallback(L#name, defaultValue, &On##name##PropertyChangedImpl); \ + } \ + static void On##name##PropertyChangedImpl(Windows::UI::Xaml::DependencyObject ^ sender, Windows::UI::Xaml::DependencyPropertyChangedEventArgs ^ args) \ + { \ + On##name##PropertyChanged(sender, safe_cast(args->OldValue), safe_cast(args->NewValue)); \ + } \ + \ +public: // This goes into the cpp to initialize the static variable -#define DEPENDENCY_PROPERTY_INITIALIZATION(owner, name)\ - Windows::UI::Xaml::DependencyProperty^ owner::s_##name##Property =\ - owner::Initialize##name##Property(); +#define DEPENDENCY_PROPERTY_INITIALIZATION(owner, name) Windows::UI::Xaml::DependencyProperty ^ owner::s_##name##Property = owner::Initialize##name##Property(); namespace CalculatorApp { template - T from_cx(Platform::Object^ from) + T from_cx(Platform::Object ^ from) { T to{ nullptr }; - winrt::check_hresult(reinterpret_cast<::IUnknown*>(from)->QueryInterface(winrt::guid_of(), - reinterpret_cast(winrt::put_abi(to)))); + winrt::check_hresult(reinterpret_cast<::IUnknown*>(from)->QueryInterface(winrt::guid_of(), reinterpret_cast(winrt::put_abi(to)))); return to; } diff --git a/src/CalcViewModel/Common/ValidatingConverters.h b/src/CalcViewModel/Common/ValidatingConverters.h index b33c148f..b8f3f979 100644 --- a/src/CalcViewModel/Common/ValidatingConverters.h +++ b/src/CalcViewModel/Common/ValidatingConverters.h @@ -3,81 +3,78 @@ #pragma once -namespace CalculatorApp { namespace Common +namespace CalculatorApp { - public ref class ValidSelectedItemConverter sealed: public Windows::UI::Xaml::Data::IValueConverter + namespace Common { - public: - ValidSelectedItemConverter() - { } - - private: - - virtual Platform::Object^ Convert( - Platform::Object^ value, - Windows::UI::Xaml::Interop::TypeName /*targetType*/, - Platform::Object^ /*parameter*/, - Platform::String^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::Convert + public + ref class ValidSelectedItemConverter sealed : public Windows::UI::Xaml::Data::IValueConverter { - // Pass through as we don't want to change the value from the source - return value; - } - - virtual Platform::Object^ ConvertBack( - Platform::Object^ value, - Windows::UI::Xaml::Interop::TypeName /*targetType*/, - Platform::Object^ /*parameter*/, - Platform::String^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::ConvertBack - { - if (value) + public: + ValidSelectedItemConverter() { + } + + private: + virtual Platform::Object + ^ Convert(Platform::Object ^ value, Windows::UI::Xaml::Interop::TypeName /*targetType*/, Platform::Object ^ /*parameter*/, + Platform::String ^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::Convert + { + // Pass through as we don't want to change the value from the source return value; } - // Stop the binding if the object is nullptr - return Windows::UI::Xaml::DependencyProperty::UnsetValue; - } - }; - public ref class ValidSelectedIndexConverter sealed: public Windows::UI::Xaml::Data::IValueConverter - { - public: - ValidSelectedIndexConverter() - { } - - private: - - virtual Platform::Object^ Convert( - Platform::Object^ value, - Windows::UI::Xaml::Interop::TypeName /*targetType*/, - Platform::Object^ /*parameter*/, - Platform::String^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::Convert - { - // Pass through as we don't want to change the value from the source - return value; - } - - virtual Platform::Object^ ConvertBack( - Platform::Object^ value, - Windows::UI::Xaml::Interop::TypeName /*targetType*/, - Platform::Object^ /*parameter*/, - Platform::String^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::ConvertBack - { - // The value to be valid has to be a boxed int32 value - // extract that value and ensure it is valid, ie >= 0 - if (value) + virtual Platform::Object + ^ ConvertBack(Platform::Object ^ value, Windows::UI::Xaml::Interop::TypeName /*targetType*/, Platform::Object ^ /*parameter*/, + Platform::String ^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::ConvertBack { - auto box = dynamic_cast(value); - if (box && box->Type == Windows::Foundation::PropertyType::Int32) + if (value) { - int index = box->GetInt32(); - if (index >= 0) + return value; + } + // Stop the binding if the object is nullptr + return Windows::UI::Xaml::DependencyProperty::UnsetValue; + } + }; + + public + ref class ValidSelectedIndexConverter sealed : public Windows::UI::Xaml::Data::IValueConverter + { + public: + ValidSelectedIndexConverter() + { + } + + private: + virtual Platform::Object + ^ Convert(Platform::Object ^ value, Windows::UI::Xaml::Interop::TypeName /*targetType*/, Platform::Object ^ /*parameter*/, + Platform::String ^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::Convert + { + // Pass through as we don't want to change the value from the source + return value; + } + + virtual Platform::Object + ^ ConvertBack(Platform::Object ^ value, Windows::UI::Xaml::Interop::TypeName /*targetType*/, Platform::Object ^ /*parameter*/, + Platform::String ^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::ConvertBack + { + // The value to be valid has to be a boxed int32 value + // extract that value and ensure it is valid, ie >= 0 + if (value) + { + auto box = dynamic_cast(value); + if (box && box->Type == Windows::Foundation::PropertyType::Int32) { - return value; + int index = box->GetInt32(); + if (index >= 0) + { + return value; + } } } + // The value is not valid therefore stop the binding right here + return Windows::UI::Xaml::DependencyProperty::UnsetValue; } - // The value is not valid therefore stop the binding right here - return Windows::UI::Xaml::DependencyProperty::UnsetValue; - } - }; -}} + }; + } +} diff --git a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp index 48c64d42..211605fe 100644 --- a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp +++ b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.cpp @@ -46,21 +46,14 @@ static constexpr auto CACHE_LANGCODE_KEY = L"CURRENCY_CONVERTER_LANGCODE"; static constexpr auto CACHE_DELIMITER = L"%"; static constexpr auto STATIC_DATA_FILENAME = L"CURRENCY_CONVERTER_STATIC_DATA.txt"; -static constexpr array STATIC_DATA_PROPERTIES = { - wstring_view{ L"CountryCode", 11 }, - wstring_view{ L"CountryName", 11 }, - wstring_view{ L"CurrencyCode", 12 }, - wstring_view{ L"CurrencyName", 12 }, - wstring_view{ L"CurrencySymbol", 14 } -}; +static constexpr array STATIC_DATA_PROPERTIES = { wstring_view{ L"CountryCode", 11 }, wstring_view{ L"CountryName", 11 }, + wstring_view{ L"CurrencyCode", 12 }, wstring_view{ L"CurrencyName", 12 }, + wstring_view{ L"CurrencySymbol", 14 } }; static constexpr auto ALL_RATIOS_DATA_FILENAME = L"CURRENCY_CONVERTER_ALL_RATIOS_DATA.txt"; static constexpr auto RATIO_KEY = L"Rt"; static constexpr auto CURRENCY_CODE_KEY = L"An"; -static constexpr array ALL_RATIOS_DATA_PROPERTIES = { - wstring_view{ RATIO_KEY, 2 }, - wstring_view{ CURRENCY_CODE_KEY, 2 } -}; +static constexpr array ALL_RATIOS_DATA_PROPERTIES = { wstring_view{ RATIO_KEY, 2 }, wstring_view{ CURRENCY_CODE_KEY, 2 } }; static constexpr auto DEFAULT_FROM_TO_CURRENCY_FILE_URI = L"ms-appx:///DataLoaders/DefaultFromToCurrency.json"; static constexpr auto FROM_KEY = L"from"; @@ -92,14 +85,14 @@ namespace CalculatorApp } } -CurrencyDataLoader::CurrencyDataLoader(_In_ unique_ptr client) : - m_client(move(client)), - m_loadStatus(CurrencyLoadStatus::NotLoaded), - m_responseLanguage(L"en-US"), - m_ratioFormat(L""), - m_timestampFormat(L""), - m_networkManager(ref new NetworkManager()), - m_meteredOverrideSet(false) +CurrencyDataLoader::CurrencyDataLoader(_In_ unique_ptr client) + : m_client(move(client)) + , m_loadStatus(CurrencyLoadStatus::NotLoaded) + , m_responseLanguage(L"en-US") + , m_ratioFormat(L"") + , m_timestampFormat(L"") + , m_networkManager(ref new NetworkManager()) + , m_meteredOverrideSet(false) { if (GlobalizationPreferences::Languages->Size > 0) { @@ -141,11 +134,8 @@ void CurrencyDataLoader::RegisterForNetworkBehaviorChanges() { UnregisterForNetworkBehaviorChanges(); - m_networkBehaviorToken = - m_networkManager->NetworkBehaviorChanged += ref new NetworkBehaviorChangedHandler([this](NetworkAccessBehavior newBehavior) - { - this->OnNetworkBehaviorChanged(newBehavior); - }); + m_networkBehaviorToken = m_networkManager->NetworkBehaviorChanged += + ref new NetworkBehaviorChangedHandler([this](NetworkAccessBehavior newBehavior) { this->OnNetworkBehaviorChanged(newBehavior); }); OnNetworkBehaviorChanged(NetworkManager::GetNetworkAccessBehavior()); } @@ -186,8 +176,7 @@ void CurrencyDataLoader::LoadData() if (!LoadFinished()) { - create_task([this]() -> task - { + create_task([this]() -> task { vector()>> loadFunctions = { [this]() { return TryLoadDataFromCacheAsync(); }, [this]() { return TryLoadDataFromWebAsync(); }, @@ -204,11 +193,13 @@ void CurrencyDataLoader::LoadData() } co_return didLoad; - }).then([this](bool didLoad) - { - UpdateDisplayedTimestamp(); - NotifyDataLoadFinished(didLoad); - }, task_continuation_context::use_current()); + }) + .then( + [this](bool didLoad) { + UpdateDisplayedTimestamp(); + NotifyDataLoadFinished(didLoad); + }, + task_continuation_context::use_current()); } }; #pragma optimize("", on) @@ -284,27 +275,19 @@ pair CurrencyDataLoader::GetCurrencyRatioEquality(_In_ const U wstring digitSymbol = wstring{ LocalizationSettings::GetInstance().GetDigitSymbolFromEnUsDigit(L'1') }; wstring roundedFormat = m_ratioFormatter->Format(rounded)->Data(); - wstring ratioString = LocalizationStringUtil::GetLocalizedString( - m_ratioFormat.c_str(), - digitSymbol.c_str(), - unit1.abbreviation.c_str(), - roundedFormat.c_str(), - unit2.abbreviation.c_str() - ); + wstring ratioString = LocalizationStringUtil::GetLocalizedString(m_ratioFormat.c_str(), digitSymbol.c_str(), unit1.abbreviation.c_str(), + roundedFormat.c_str(), unit2.abbreviation.c_str()); wstring accessibleRatioString = LocalizationStringUtil::GetLocalizedString( - m_ratioFormat.c_str(), - digitSymbol.c_str(), - unit1.accessibleName.c_str(), - roundedFormat.c_str(), - unit2.accessibleName.c_str() - ); + m_ratioFormat.c_str(), digitSymbol.c_str(), unit1.accessibleName.c_str(), roundedFormat.c_str(), unit2.accessibleName.c_str()); return make_pair(ratioString, accessibleRatioString); } } } - catch (...) {} + catch (...) + { + } return make_pair(L"", L""); } @@ -324,8 +307,7 @@ task CurrencyDataLoader::TryLoadDataFromCacheAsync() bool loadComplete = false; m_cacheTimestamp = static_cast(localSettings->Values->Lookup(CacheTimestampKey)); - if (Utils::IsDateTimeOlderThan(m_cacheTimestamp, DAY_DURATION) - && m_networkAccessBehavior == NetworkAccessBehavior::Normal) + if (Utils::IsDateTimeOlderThan(m_cacheTimestamp, DAY_DURATION) && m_networkAccessBehavior == NetworkAccessBehavior::Normal) { loadComplete = co_await TryLoadDataFromWebAsync(); } @@ -337,7 +319,7 @@ task CurrencyDataLoader::TryLoadDataFromCacheAsync() co_return loadComplete; } - catch (Exception^ ex) + catch (Exception ^ ex) { TraceLogger::GetInstance().LogPlatformException(__FUNCTIONW__, ex); co_return false; @@ -361,29 +343,24 @@ task CurrencyDataLoader::TryFinishLoadFromCacheAsync() co_return false; } - if (!localSettings->Values->HasKey(CacheLangcodeKey) - || !static_cast(localSettings->Values->Lookup(CacheLangcodeKey))->Equals(m_responseLanguage)) + if (!localSettings->Values->HasKey(CacheLangcodeKey) || !static_cast(localSettings->Values->Lookup(CacheLangcodeKey))->Equals(m_responseLanguage)) { co_return false; } - StorageFolder^ localCacheFolder = ApplicationData::Current->LocalCacheFolder; + StorageFolder ^ localCacheFolder = ApplicationData::Current->LocalCacheFolder; if (localCacheFolder == nullptr) { co_return false; } - String^ staticDataResponse = co_await Utils::ReadFileFromFolder(localCacheFolder, StaticDataFilename); - String^ allRatiosResponse = co_await Utils::ReadFileFromFolder(localCacheFolder, AllRatiosDataFilename); + String ^ staticDataResponse = co_await Utils::ReadFileFromFolder(localCacheFolder, StaticDataFilename); + String ^ allRatiosResponse = co_await Utils::ReadFileFromFolder(localCacheFolder, AllRatiosDataFilename); vector staticData{}; CurrencyRatioMap ratioMap{}; - bool didParse = TryParseWebResponses( - staticDataResponse, - allRatiosResponse, - staticData, - ratioMap); + bool didParse = TryParseWebResponses(staticDataResponse, allRatiosResponse, staticData, ratioMap); if (!didParse) { co_return false; @@ -406,14 +383,13 @@ task CurrencyDataLoader::TryLoadDataFromWebAsync() co_return false; } - if (m_networkAccessBehavior == NetworkAccessBehavior::Offline || - (m_networkAccessBehavior == NetworkAccessBehavior::OptIn && !m_meteredOverrideSet)) + if (m_networkAccessBehavior == NetworkAccessBehavior::Offline || (m_networkAccessBehavior == NetworkAccessBehavior::OptIn && !m_meteredOverrideSet)) { co_return false; } - String^ staticDataResponse = co_await m_client->GetCurrencyMetadata(); - String^ allRatiosResponse = co_await m_client->GetCurrencyRatios(); + String ^ staticDataResponse = co_await m_client->GetCurrencyMetadata(); + String ^ allRatiosResponse = co_await m_client->GetCurrencyRatios(); if (staticDataResponse == nullptr || allRatiosResponse == nullptr) { co_return false; @@ -422,11 +398,7 @@ task CurrencyDataLoader::TryLoadDataFromWebAsync() vector staticData{}; CurrencyRatioMap ratioMap{}; - bool didParse = TryParseWebResponses( - staticDataResponse, - allRatiosResponse, - staticData, - ratioMap); + bool didParse = TryParseWebResponses(staticDataResponse, allRatiosResponse, staticData, ratioMap); if (!didParse) { co_return false; @@ -437,19 +409,12 @@ task CurrencyDataLoader::TryLoadDataFromWebAsync() try { - const vector> cachedFiles = { - { StaticDataFilename, staticDataResponse }, - { AllRatiosDataFilename, allRatiosResponse } - }; + const vector> cachedFiles = { { StaticDataFilename, staticDataResponse }, { AllRatiosDataFilename, allRatiosResponse } }; - StorageFolder^ localCacheFolder = ApplicationData::Current->LocalCacheFolder; + StorageFolder ^ localCacheFolder = ApplicationData::Current->LocalCacheFolder; for (const auto& fileInfo : cachedFiles) { - co_await Utils::WriteFileToFolder( - localCacheFolder, - fileInfo.first, - fileInfo.second, - CreationCollisionOption::ReplaceExisting); + co_await Utils::WriteFileToFolder(localCacheFolder, fileInfo.first, fileInfo.second, CreationCollisionOption::ReplaceExisting); } SaveLangCodeAndTimestamp(); @@ -464,7 +429,7 @@ task CurrencyDataLoader::TryLoadDataFromWebAsync() co_return true; } - catch (Exception^ ex) + catch (Exception ^ ex) { TraceLogger::GetInstance().LogPlatformException(__FUNCTIONW__, ex); co_return false; @@ -494,19 +459,15 @@ task CurrencyDataLoader::TryLoadDataFromWebOverrideAsync() }; #pragma optimize("", on) -bool CurrencyDataLoader::TryParseWebResponses( - _In_ String^ staticDataJson, - _In_ String^ allRatiosJson, - _Inout_ vector& staticData, - _Inout_ CurrencyRatioMap& allRatiosData) +bool CurrencyDataLoader::TryParseWebResponses(_In_ String ^ staticDataJson, _In_ String ^ allRatiosJson, _Inout_ vector& staticData, + _Inout_ CurrencyRatioMap& allRatiosData) { - return TryParseStaticData(staticDataJson, staticData) - && TryParseAllRatiosData(allRatiosJson, allRatiosData); + return TryParseStaticData(staticDataJson, staticData) && TryParseAllRatiosData(allRatiosJson, allRatiosData); } -bool CurrencyDataLoader::TryParseStaticData(_In_ String^ rawJson, _Inout_ vector& staticData) +bool CurrencyDataLoader::TryParseStaticData(_In_ String ^ rawJson, _Inout_ vector& staticData) { - JsonArray^ data = nullptr; + JsonArray ^ data = nullptr; if (!JsonArray::TryParse(rawJson, &data)) { return false; @@ -518,46 +479,31 @@ bool CurrencyDataLoader::TryParseStaticData(_In_ String^ rawJson, _Inout_ vector wstring currencyName{ L"" }; wstring currencySymbol{ L"" }; - vector values = { - &countryCode, - &countryName, - ¤cyCode, - ¤cyName, - ¤cySymbol - }; + vector values = { &countryCode, &countryName, ¤cyCode, ¤cyName, ¤cySymbol }; assert(values.size() == STATIC_DATA_PROPERTIES.size()); staticData.resize(size_t{ data->Size }); for (unsigned int i = 0; i < data->Size; i++) { - JsonObject^ obj = data->GetAt(i)->GetObject(); + JsonObject ^ obj = data->GetAt(i)->GetObject(); for (size_t j = 0; j < values.size(); j++) { (*values[j]) = obj->GetNamedString(StringReference(STATIC_DATA_PROPERTIES[j].data()))->Data(); } - staticData[i] = CurrencyStaticData{ - countryCode, - countryName, - currencyCode, - currencyName, - currencySymbol - }; + staticData[i] = CurrencyStaticData{ countryCode, countryName, currencyCode, currencyName, currencySymbol }; } // TODO - MSFT 8533667: this sort will be replaced by a WinRT call to sort localized strings - sort(begin(staticData), end(staticData), [](CurrencyStaticData unit1, CurrencyStaticData unit2) - { - return unit1.countryName < unit2.countryName; - }); + sort(begin(staticData), end(staticData), [](CurrencyStaticData unit1, CurrencyStaticData unit2) { return unit1.countryName < unit2.countryName; }); return true; } -bool CurrencyDataLoader::TryParseAllRatiosData(_In_ String^ rawJson, _Inout_ CurrencyRatioMap& allRatios) +bool CurrencyDataLoader::TryParseAllRatiosData(_In_ String ^ rawJson, _Inout_ CurrencyRatioMap& allRatios) { - JsonArray^ data = nullptr; + JsonArray ^ data = nullptr; if (!JsonArray::TryParse(rawJson, &data)) { return false; @@ -568,17 +514,13 @@ bool CurrencyDataLoader::TryParseAllRatiosData(_In_ String^ rawJson, _Inout_ Cur allRatios.clear(); for (unsigned int i = 0; i < data->Size; i++) { - JsonObject^ obj = data->GetAt(i)->GetObject(); + JsonObject ^ obj = data->GetAt(i)->GetObject(); // Rt is ratio, An is target currency ISO code. double relativeRatio = obj->GetNamedNumber(StringReference(RATIO_KEY)); wstring targetCurrencyCode = obj->GetNamedString(StringReference(CURRENCY_CODE_KEY))->Data(); - allRatios.emplace(targetCurrencyCode, CurrencyRatio{ - relativeRatio, - sourceCurrencyCode, - targetCurrencyCode - }); + allRatios.emplace(targetCurrencyCode, CurrencyRatio{ relativeRatio, sourceCurrencyCode, targetCurrencyCode }); } return true; @@ -702,7 +644,7 @@ void CurrencyDataLoader::NotifyDataLoadFinished(bool didLoad) void CurrencyDataLoader::SaveLangCodeAndTimestamp() { - ApplicationDataContainer^ localSettings = ApplicationData::Current->LocalSettings; + ApplicationDataContainer ^ localSettings = ApplicationData::Current->LocalSettings; if (localSettings == nullptr) { return; @@ -729,17 +671,13 @@ wstring CurrencyDataLoader::GetCurrencyTimestamp() DateTime epoch{}; if (m_cacheTimestamp.UniversalTime != epoch.UniversalTime) { - DateTimeFormatter^ dateFormatter = ref new DateTimeFormatter(L"{month.abbreviated} {day.integer}, {year.full}"); + DateTimeFormatter ^ dateFormatter = ref new DateTimeFormatter(L"{month.abbreviated} {day.integer}, {year.full}"); wstring date = dateFormatter->Format(m_cacheTimestamp)->Data(); - DateTimeFormatter^ timeFormatter = ref new DateTimeFormatter(L"shorttime"); + DateTimeFormatter ^ timeFormatter = ref new DateTimeFormatter(L"shorttime"); wstring time = timeFormatter->Format(m_cacheTimestamp)->Data(); - timestamp = LocalizationStringUtil::GetLocalizedString( - m_timestampFormat.c_str(), - date.c_str(), - time.c_str() - ); + timestamp = LocalizationStringUtil::GetLocalizedString(m_timestampFormat.c_str(), date.c_str(), time.c_str()); } return timestamp; @@ -758,23 +696,25 @@ task CurrencyDataLoader::GetDefaultFromToCurrency() try { // Second, see if the current locale has preset defaults in DefaultFromToCurrency.json. - Uri^ fileUri = ref new Uri(StringReference(DEFAULT_FROM_TO_CURRENCY_FILE_URI)); - StorageFile^ defaultFromToCurrencyFile = co_await StorageFile::GetFileFromApplicationUriAsync(fileUri); + Uri ^ fileUri = ref new Uri(StringReference(DEFAULT_FROM_TO_CURRENCY_FILE_URI)); + StorageFile ^ defaultFromToCurrencyFile = co_await StorageFile::GetFileFromApplicationUriAsync(fileUri); if (defaultFromToCurrencyFile != nullptr) { - String^ fileContents = co_await FileIO::ReadTextAsync(defaultFromToCurrencyFile); - JsonObject^ fromToObject = JsonObject::Parse(fileContents); - JsonObject^ regionalDefaults = fromToObject->GetNamedObject(m_responseLanguage); + String ^ fileContents = co_await FileIO::ReadTextAsync(defaultFromToCurrencyFile); + JsonObject ^ fromToObject = JsonObject::Parse(fileContents); + JsonObject ^ regionalDefaults = fromToObject->GetNamedObject(m_responseLanguage); // Get both values before assignment in-case either fails. - String^ selectedFrom = regionalDefaults->GetNamedString(StringReference(FROM_KEY)); - String^ selectedTo = regionalDefaults->GetNamedString(StringReference(TO_KEY)); + String ^ selectedFrom = regionalDefaults->GetNamedString(StringReference(FROM_KEY)); + String ^ selectedTo = regionalDefaults->GetNamedString(StringReference(TO_KEY)); fromCurrency = selectedFrom->Data(); toCurrency = selectedTo->Data(); } } - catch (...) {} + catch (...) + { + } } co_return make_pair(fromCurrency, toCurrency); @@ -783,16 +723,16 @@ task CurrencyDataLoader::GetDefaultFromToCurrency() bool CurrencyDataLoader::TryGetLastUsedCurrenciesFromLocalSettings(_Out_ wstring* const fromCurrency, _Out_ wstring* const toCurrency) { - String^ fromKey = UnitConverterResourceKeys::CurrencyUnitFromKey; - String^ toKey = UnitConverterResourceKeys::CurrencyUnitToKey; - ApplicationDataContainer^ localSettings = ApplicationData::Current->LocalSettings; + String ^ fromKey = UnitConverterResourceKeys::CurrencyUnitFromKey; + String ^ toKey = UnitConverterResourceKeys::CurrencyUnitToKey; + ApplicationDataContainer ^ localSettings = ApplicationData::Current->LocalSettings; if (localSettings != nullptr && localSettings->Values != nullptr) { - IPropertySet^ values = localSettings->Values; + IPropertySet ^ values = localSettings->Values; if (values->HasKey(fromKey) && values->HasKey(toKey)) { - *fromCurrency = static_cast(values->Lookup(fromKey))->Data(); - *toCurrency = static_cast(values->Lookup(toKey))->Data(); + *fromCurrency = static_cast(values->Lookup(fromKey))->Data(); + *toCurrency = static_cast(values->Lookup(toKey))->Data(); return true; } @@ -803,12 +743,12 @@ bool CurrencyDataLoader::TryGetLastUsedCurrenciesFromLocalSettings(_Out_ wstring void CurrencyDataLoader::SaveSelectedUnitsToLocalSettings(_In_ const SelectedUnits& selectedUnits) { - String^ fromKey = UnitConverterResourceKeys::CurrencyUnitFromKey; - String^ toKey = UnitConverterResourceKeys::CurrencyUnitToKey; - ApplicationDataContainer^ localSettings = ApplicationData::Current->LocalSettings; + String ^ fromKey = UnitConverterResourceKeys::CurrencyUnitFromKey; + String ^ toKey = UnitConverterResourceKeys::CurrencyUnitToKey; + ApplicationDataContainer ^ localSettings = ApplicationData::Current->LocalSettings; if (localSettings != nullptr && localSettings->Values != nullptr) { - IPropertySet^ values = localSettings->Values; + IPropertySet ^ values = localSettings->Values; values->Insert(fromKey, StringReference(selectedUnits.first.c_str())); values->Insert(toKey, StringReference(selectedUnits.second.c_str())); } diff --git a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.h b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.h index eba76641..cfd1468d 100644 --- a/src/CalcViewModel/DataLoaders/CurrencyDataLoader.h +++ b/src/CalcViewModel/DataLoaders/CurrencyDataLoader.h @@ -11,7 +11,8 @@ namespace CalculatorApp { namespace ViewModel { - public enum class CurrencyLoadStatus + public + enum class CurrencyLoadStatus { NotLoaded = 0, FailedToLoad = 1, @@ -42,13 +43,14 @@ namespace CalculatorApp struct CurrencyUnitMetadata { - CurrencyUnitMetadata(const std::wstring& s) : symbol(s) {} + CurrencyUnitMetadata(const std::wstring& s) : symbol(s) + { + } const std::wstring symbol; }; - class CurrencyDataLoader : public UCM::IConverterDataLoader, - public UCM::ICurrencyConverterDataLoader + class CurrencyDataLoader : public UCM::IConverterDataLoader, public UCM::ICurrencyConverterDataLoader { public: CurrencyDataLoader(_In_ std::unique_ptr client); @@ -69,7 +71,8 @@ namespace CalculatorApp // ICurrencyConverterDataLoader void SetViewModelCallback(const std::shared_ptr& callback) override; std::pair GetCurrencySymbols(const UCM::Unit& unit1, const UCM::Unit& unit2) override; - std::pair GetCurrencyRatioEquality(_In_ const UnitConversionManager::Unit& unit1, _In_ const UnitConversionManager::Unit& unit2) override; + std::pair GetCurrencyRatioEquality(_In_ const UnitConversionManager::Unit& unit1, + _In_ const UnitConversionManager::Unit& unit2) override; std::wstring GetCurrencyTimestamp() override; concurrency::task TryLoadDataFromCacheAsync() override; @@ -85,13 +88,10 @@ namespace CalculatorApp concurrency::task TryFinishLoadFromCacheAsync(); - bool TryParseWebResponses( - _In_ Platform::String^ staticDataJson, - _In_ Platform::String^ allRatiosJson, - _Inout_ std::vector& staticData, - _Inout_ CurrencyRatioMap& allRatiosData); - bool TryParseStaticData(_In_ Platform::String^ rawJson, _Inout_ std::vector& staticData); - bool TryParseAllRatiosData(_In_ Platform::String^ rawJson, _Inout_ CurrencyRatioMap& allRatiosData); + bool TryParseWebResponses(_In_ Platform::String ^ staticDataJson, _In_ Platform::String ^ allRatiosJson, + _Inout_ std::vector& staticData, _Inout_ CurrencyRatioMap& allRatiosData); + bool TryParseStaticData(_In_ Platform::String ^ rawJson, _Inout_ std::vector& staticData); + bool TryParseAllRatiosData(_In_ Platform::String ^ rawJson, _Inout_ CurrencyRatioMap& allRatiosData); concurrency::task FinalizeUnits(_In_ const std::vector& staticData, _In_ const CurrencyRatioMap& ratioMap); void GuaranteeSelectedUnits(); @@ -106,7 +106,7 @@ namespace CalculatorApp void SaveSelectedUnitsToLocalSettings(_In_ const SelectedUnits& selectedUnits); private: - Platform::String^ m_responseLanguage; + Platform::String ^ m_responseLanguage; std::unique_ptr m_client; bool m_isRtlLanguage; @@ -118,14 +118,14 @@ namespace CalculatorApp std::shared_ptr m_vmCallback; - Windows::Globalization::NumberFormatting::DecimalFormatter^ m_ratioFormatter; + Windows::Globalization::NumberFormatting::DecimalFormatter ^ m_ratioFormatter; std::wstring m_ratioFormat; Windows::Foundation::DateTime m_cacheTimestamp; std::wstring m_timestampFormat; CurrencyLoadStatus m_loadStatus; - CalculatorApp::NetworkManager^ m_networkManager; + CalculatorApp::NetworkManager ^ m_networkManager; CalculatorApp::NetworkAccessBehavior m_networkAccessBehavior; Windows::Foundation::EventRegistrationToken m_networkBehaviorToken; bool m_meteredOverrideSet; diff --git a/src/CalcViewModel/DataLoaders/CurrencyHttpClient.cpp b/src/CalcViewModel/DataLoaders/CurrencyHttpClient.cpp index 7a2658a3..649ba171 100644 --- a/src/CalcViewModel/DataLoaders/CurrencyHttpClient.cpp +++ b/src/CalcViewModel/DataLoaders/CurrencyHttpClient.cpp @@ -13,23 +13,21 @@ using namespace Windows::Web::Http; static constexpr auto sc_MetadataUriLocalizeFor = L"https://go.microsoft.com/fwlink/?linkid=2041093&localizeFor="; static constexpr auto sc_RatiosUriRelativeTo = L"https://go.microsoft.com/fwlink/?linkid=2041339&localCurrency="; -CurrencyHttpClient::CurrencyHttpClient() : - m_client(ref new HttpClient()), - m_responseLanguage(L"en-US") +CurrencyHttpClient::CurrencyHttpClient() : m_client(ref new HttpClient()), m_responseLanguage(L"en-US") { } -void CurrencyHttpClient::SetSourceCurrencyCode(String^ sourceCurrencyCode) +void CurrencyHttpClient::SetSourceCurrencyCode(String ^ sourceCurrencyCode) { m_sourceCurrencyCode = sourceCurrencyCode; } -void CurrencyHttpClient::SetResponseLanguage(String^ responseLanguage) +void CurrencyHttpClient::SetResponseLanguage(String ^ responseLanguage) { m_responseLanguage = responseLanguage; } -IAsyncOperationWithProgress^ CurrencyHttpClient::GetCurrencyMetadata() +IAsyncOperationWithProgress ^ CurrencyHttpClient::GetCurrencyMetadata() { wstring uri = wstring{ sc_MetadataUriLocalizeFor } + m_responseLanguage->Data(); auto metadataUri = ref new Uri(StringReference(uri.c_str())); @@ -37,7 +35,7 @@ IAsyncOperationWithProgress^ CurrencyHttpClient::GetCurre return m_client->GetStringAsync(metadataUri); } -IAsyncOperationWithProgress^ CurrencyHttpClient::GetCurrencyRatios() +IAsyncOperationWithProgress ^ CurrencyHttpClient::GetCurrencyRatios() { wstring uri = wstring{ sc_RatiosUriRelativeTo } + m_sourceCurrencyCode->Data(); auto ratiosUri = ref new Uri(StringReference(uri.c_str())); diff --git a/src/CalcViewModel/DataLoaders/CurrencyHttpClient.h b/src/CalcViewModel/DataLoaders/CurrencyHttpClient.h index 8187c74a..cfd10e7d 100644 --- a/src/CalcViewModel/DataLoaders/CurrencyHttpClient.h +++ b/src/CalcViewModel/DataLoaders/CurrencyHttpClient.h @@ -14,16 +14,16 @@ namespace CalculatorApp public: CurrencyHttpClient(); - void SetSourceCurrencyCode(Platform::String^ sourceCurrencyCode) override; - void SetResponseLanguage(Platform::String^ responseLanguage) override; + void SetSourceCurrencyCode(Platform::String ^ sourceCurrencyCode) override; + void SetResponseLanguage(Platform::String ^ responseLanguage) override; - Windows::Foundation::IAsyncOperationWithProgress^ GetCurrencyMetadata() override; - Windows::Foundation::IAsyncOperationWithProgress^ GetCurrencyRatios() override; + Windows::Foundation::IAsyncOperationWithProgress ^ GetCurrencyMetadata() override; + Windows::Foundation::IAsyncOperationWithProgress ^ GetCurrencyRatios() override; private: - Windows::Web::Http::HttpClient^ m_client; - Platform::String^ m_responseLanguage; - Platform::String^ m_sourceCurrencyCode; + Windows::Web::Http::HttpClient ^ m_client; + Platform::String ^ m_responseLanguage; + Platform::String ^ m_sourceCurrencyCode; }; } } diff --git a/src/CalcViewModel/DataLoaders/ICurrencyHttpClient.h b/src/CalcViewModel/DataLoaders/ICurrencyHttpClient.h index 50ec8571..69f23f52 100644 --- a/src/CalcViewModel/DataLoaders/ICurrencyHttpClient.h +++ b/src/CalcViewModel/DataLoaders/ICurrencyHttpClient.h @@ -10,13 +10,15 @@ namespace CalculatorApp class ICurrencyHttpClient { public: - virtual ~ICurrencyHttpClient() {} + virtual ~ICurrencyHttpClient() + { + } - virtual void SetSourceCurrencyCode(Platform::String^ sourceCurrencyCode) = 0; - virtual void SetResponseLanguage(Platform::String^ responseLanguage) = 0; + virtual void SetSourceCurrencyCode(Platform::String ^ sourceCurrencyCode) = 0; + virtual void SetResponseLanguage(Platform::String ^ responseLanguage) = 0; - virtual Windows::Foundation::IAsyncOperationWithProgress^ GetCurrencyMetadata() = 0; - virtual Windows::Foundation::IAsyncOperationWithProgress^ GetCurrencyRatios() = 0; + virtual Windows::Foundation::IAsyncOperationWithProgress ^ GetCurrencyMetadata() = 0; + virtual Windows::Foundation::IAsyncOperationWithProgress ^ GetCurrencyRatios() = 0; }; } } diff --git a/src/CalcViewModel/DataLoaders/UnitConverterDataConstants.h b/src/CalcViewModel/DataLoaders/UnitConverterDataConstants.h index 7032b250..0d22a14a 100644 --- a/src/CalcViewModel/DataLoaders/UnitConverterDataConstants.h +++ b/src/CalcViewModel/DataLoaders/UnitConverterDataConstants.h @@ -5,7 +5,8 @@ namespace CalculatorApp { namespace ViewModel { - private enum UnitConverterUnits + private + enum UnitConverterUnits { UnitStart = 0, Area_Acre = UnitStart + 1, diff --git a/src/CalcViewModel/DataLoaders/UnitConverterDataLoader.cpp b/src/CalcViewModel/DataLoaders/UnitConverterDataLoader.cpp index c95fda5a..24c3518e 100644 --- a/src/CalcViewModel/DataLoaders/UnitConverterDataLoader.cpp +++ b/src/CalcViewModel/DataLoaders/UnitConverterDataLoader.cpp @@ -18,8 +18,7 @@ using namespace Windows::Globalization; static constexpr bool CONVERT_WITH_OFFSET_FIRST = true; -UnitConverterDataLoader::UnitConverterDataLoader(GeographicRegion^ region) : - m_currentRegionCode(region->CodeTwoLetter) +UnitConverterDataLoader::UnitConverterDataLoader(GeographicRegion ^ region) : m_currentRegionCode(region->CodeTwoLetter) { m_categoryList = make_shared>(); m_categoryToUnits = make_shared(); @@ -55,10 +54,7 @@ bool UnitConverterDataLoader::SupportsCategory(const UCM::Category& target) static int currencyId = NavCategory::Serialize(ViewMode::Currency); auto itr = find_if(supportedCategories->begin(), supportedCategories->end(), - [&](const UCM::Category& category) - { - return currencyId != category.id && target.id == category.id; - }); + [&](const UCM::Category& category) { return currencyId != category.id && target.id == category.id; }); return itr != supportedCategories->end(); } @@ -96,7 +92,7 @@ void UnitConverterDataLoader::LoadData() vector unitList; // Sort the units by order - sort(orderedUnits.begin(), orderedUnits.end(), [](const OrderedUnit& first, const OrderedUnit& second){ return first.order < second.order; }); + sort(orderedUnits.begin(), orderedUnits.end(), [](const OrderedUnit& first, const OrderedUnit& second) { return first.order < second.order; }); for (OrderedUnit u : orderedUnits) { @@ -118,7 +114,7 @@ void UnitConverterDataLoader::LoadData() unordered_map unitConversions = categoryToUnitConversionDataMap.at(categoryViewMode); double unitFactor = unitConversions[unit.id]; - for (const auto&[id, conversionFactor] : unitConversions) + for (const auto& [id, conversionFactor] : unitConversions) { if (idToUnit.find(id) == idToUnit.end()) { @@ -154,20 +150,15 @@ void UnitConverterDataLoader::GetCategories(_In_ shared_ptrCategories) { /* Id, CategoryName, SupportsNegative */ - categoriesList->emplace_back( - NavCategory::Serialize(category->Mode), - category->Name->Data(), - category->SupportsNegative); + categoriesList->emplace_back(NavCategory::Serialize(category->Mode), category->Name->Data(), category->SupportsNegative); } } void UnitConverterDataLoader::GetUnits(_In_ unordered_map>& unitMap) { // US + Federated States of Micronesia, Marshall Islands, Palau - bool useUSCustomaryAndFahrenheit = m_currentRegionCode == L"US" || - m_currentRegionCode == L"FM" || - m_currentRegionCode == L"MH" || - m_currentRegionCode == L"PW"; + bool useUSCustomaryAndFahrenheit = + m_currentRegionCode == L"US" || m_currentRegionCode == L"FM" || m_currentRegionCode == L"MH" || m_currentRegionCode == L"PW"; // useUSCustomaryAndFahrenheit + Liberia // Source: https://en.wikipedia.org/wiki/Metrication @@ -185,369 +176,522 @@ void UnitConverterDataLoader::GetUnits(_In_ unordered_map areaUnits; - areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_Acre, GetLocalizedStringName(L"UnitName_Acre"), GetLocalizedStringName(L"UnitAbbreviation_Acre"), 9 }); - areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_Hectare, GetLocalizedStringName(L"UnitName_Hectare"), GetLocalizedStringName(L"UnitAbbreviation_Hectare"), 4 }); - areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareCentimeter, GetLocalizedStringName(L"UnitName_SquareCentimeter"), GetLocalizedStringName(L"UnitAbbreviation_SquareCentimeter"), 2 }); - areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareFoot, GetLocalizedStringName(L"UnitName_SquareFoot"), GetLocalizedStringName(L"UnitAbbreviation_SquareFoot"), 7, useSI, useUSCustomary, false }); - areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareInch, GetLocalizedStringName(L"UnitName_SquareInch"), GetLocalizedStringName(L"UnitAbbreviation_SquareInch"), 6 }); - areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareKilometer, GetLocalizedStringName(L"UnitName_SquareKilometer"), GetLocalizedStringName(L"UnitAbbreviation_SquareKilometer"), 5 }); - areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareMeter, GetLocalizedStringName(L"UnitName_SquareMeter"), GetLocalizedStringName(L"UnitAbbreviation_SquareMeter"), 3, useUSCustomary, useSI, false}); - areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareMile, GetLocalizedStringName(L"UnitName_SquareMile"), GetLocalizedStringName(L"UnitAbbreviation_SquareMile"), 10 }); - areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareMillimeter, GetLocalizedStringName(L"UnitName_SquareMillimeter"), GetLocalizedStringName(L"UnitAbbreviation_SquareMillimeter"), 1 }); - areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareYard, GetLocalizedStringName(L"UnitName_SquareYard"), GetLocalizedStringName(L"UnitAbbreviation_SquareYard"), 8 }); - areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_Hand, GetLocalizedStringName(L"UnitName_Hand"), GetLocalizedStringName(L"UnitAbbreviation_Hand"), 11, false, false, true}); - areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_Paper, GetLocalizedStringName(L"UnitName_Paper"), GetLocalizedStringName(L"UnitAbbreviation_Paper"), 12, false, false, true }); - areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SoccerField, GetLocalizedStringName(L"UnitName_SoccerField"), GetLocalizedStringName(L"UnitAbbreviation_SoccerField"),13, false, false, true }); - areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_Castle, GetLocalizedStringName(L"UnitName_Castle"), GetLocalizedStringName(L"UnitAbbreviation_Castle"), 14, false, false, true }); + areaUnits.push_back( + OrderedUnit{ UnitConverterUnits::Area_Acre, GetLocalizedStringName(L"UnitName_Acre"), GetLocalizedStringName(L"UnitAbbreviation_Acre"), 9 }); + areaUnits.push_back( + OrderedUnit{ UnitConverterUnits::Area_Hectare, GetLocalizedStringName(L"UnitName_Hectare"), GetLocalizedStringName(L"UnitAbbreviation_Hectare"), 4 }); + areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareCentimeter, GetLocalizedStringName(L"UnitName_SquareCentimeter"), + GetLocalizedStringName(L"UnitAbbreviation_SquareCentimeter"), 2 }); + areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareFoot, GetLocalizedStringName(L"UnitName_SquareFoot"), + GetLocalizedStringName(L"UnitAbbreviation_SquareFoot"), 7, useSI, useUSCustomary, false }); + areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareInch, GetLocalizedStringName(L"UnitName_SquareInch"), + GetLocalizedStringName(L"UnitAbbreviation_SquareInch"), 6 }); + areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareKilometer, GetLocalizedStringName(L"UnitName_SquareKilometer"), + GetLocalizedStringName(L"UnitAbbreviation_SquareKilometer"), 5 }); + areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareMeter, GetLocalizedStringName(L"UnitName_SquareMeter"), + GetLocalizedStringName(L"UnitAbbreviation_SquareMeter"), 3, useUSCustomary, useSI, false }); + areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareMile, GetLocalizedStringName(L"UnitName_SquareMile"), + GetLocalizedStringName(L"UnitAbbreviation_SquareMile"), 10 }); + areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareMillimeter, GetLocalizedStringName(L"UnitName_SquareMillimeter"), + GetLocalizedStringName(L"UnitAbbreviation_SquareMillimeter"), 1 }); + areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SquareYard, GetLocalizedStringName(L"UnitName_SquareYard"), + GetLocalizedStringName(L"UnitAbbreviation_SquareYard"), 8 }); + areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_Hand, GetLocalizedStringName(L"UnitName_Hand"), GetLocalizedStringName(L"UnitAbbreviation_Hand"), + 11, false, false, true }); + areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_Paper, GetLocalizedStringName(L"UnitName_Paper"), + GetLocalizedStringName(L"UnitAbbreviation_Paper"), 12, false, false, true }); + areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_SoccerField, GetLocalizedStringName(L"UnitName_SoccerField"), + GetLocalizedStringName(L"UnitAbbreviation_SoccerField"), 13, false, false, true }); + areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_Castle, GetLocalizedStringName(L"UnitName_Castle"), + GetLocalizedStringName(L"UnitAbbreviation_Castle"), 14, false, false, true }); if (usePyeong) { - areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_Pyeong, GetLocalizedStringName(L"UnitName_Pyeong"), GetLocalizedStringName(L"UnitAbbreviation_Pyeong"), 15, false, false, false }); + areaUnits.push_back(OrderedUnit{ UnitConverterUnits::Area_Pyeong, GetLocalizedStringName(L"UnitName_Pyeong"), + GetLocalizedStringName(L"UnitAbbreviation_Pyeong"), 15, false, false, false }); } unitMap.emplace(ViewMode::Area, areaUnits); vector dataUnits; - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Bit, GetLocalizedStringName(L"UnitName_Bit"), GetLocalizedStringName(L"UnitAbbreviation_Bit"), 1 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Byte, GetLocalizedStringName(L"UnitName_Byte"), GetLocalizedStringName(L"UnitAbbreviation_Byte"), 2 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Exabits, GetLocalizedStringName(L"UnitName_Exabits"), GetLocalizedStringName(L"UnitAbbreviation_Exabits"), 23 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Exabytes, GetLocalizedStringName(L"UnitName_Exabytes"), GetLocalizedStringName(L"UnitAbbreviation_Exabytes"), 25 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Exbibits, GetLocalizedStringName(L"UnitName_Exbibits"), GetLocalizedStringName(L"UnitAbbreviation_Exbibits"), 24 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Exbibytes, GetLocalizedStringName(L"UnitName_Exbibytes"), GetLocalizedStringName(L"UnitAbbreviation_Exbibytes"), 26 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Gibibits, GetLocalizedStringName(L"UnitName_Gibibits"), GetLocalizedStringName(L"UnitAbbreviation_Gibibits"), 12 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Gibibytes, GetLocalizedStringName(L"UnitName_Gibibytes"), GetLocalizedStringName(L"UnitAbbreviation_Gibibytes"), 14 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Gigabit, GetLocalizedStringName(L"UnitName_Gigabit"), GetLocalizedStringName(L"UnitAbbreviation_Gigabit"), 11 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Gigabyte, GetLocalizedStringName(L"UnitName_Gigabyte"), GetLocalizedStringName(L"UnitAbbreviation_Gigabyte"),13, true, false, false}); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Kibibits, GetLocalizedStringName(L"UnitName_Kibibits"), GetLocalizedStringName(L"UnitAbbreviation_Kibibits"), 4 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Kibibytes, GetLocalizedStringName(L"UnitName_Kibibytes"), GetLocalizedStringName(L"UnitAbbreviation_Kibibytes"),6 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Kilobit, GetLocalizedStringName(L"UnitName_Kilobit"), GetLocalizedStringName(L"UnitAbbreviation_Kilobit"), 3 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Kilobyte, GetLocalizedStringName(L"UnitName_Kilobyte"), GetLocalizedStringName(L"UnitAbbreviation_Kilobyte"), 5 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Mebibits, GetLocalizedStringName(L"UnitName_Mebibits"), GetLocalizedStringName(L"UnitAbbreviation_Mebibits"), 8 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Mebibytes, GetLocalizedStringName(L"UnitName_Mebibytes"), GetLocalizedStringName(L"UnitAbbreviation_Mebibytes"), 10 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Megabit, GetLocalizedStringName(L"UnitName_Megabit"), GetLocalizedStringName(L"UnitAbbreviation_Megabit"), 7 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Megabyte, GetLocalizedStringName(L"UnitName_Megabyte"), GetLocalizedStringName(L"UnitAbbreviation_Megabyte"), 9, false, true, false}); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Pebibits, GetLocalizedStringName(L"UnitName_Pebibits"), GetLocalizedStringName(L"UnitAbbreviation_Pebibits"), 20 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Pebibytes, GetLocalizedStringName(L"UnitName_Pebibytes"), GetLocalizedStringName(L"UnitAbbreviation_Pebibytes"), 22 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Petabit, GetLocalizedStringName(L"UnitName_Petabit"), GetLocalizedStringName(L"UnitAbbreviation_Petabit"), 19 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Petabyte, GetLocalizedStringName(L"UnitName_Petabyte"), GetLocalizedStringName(L"UnitAbbreviation_Petabyte"), 21 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Tebibits, GetLocalizedStringName(L"UnitName_Tebibits"), GetLocalizedStringName(L"UnitAbbreviation_Tebibits"), 16 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Tebibytes, GetLocalizedStringName(L"UnitName_Tebibytes"), GetLocalizedStringName(L"UnitAbbreviation_Tebibytes"), 18 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Terabit, GetLocalizedStringName(L"UnitName_Terabit"), GetLocalizedStringName(L"UnitAbbreviation_Terabit"), 15 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Terabyte, GetLocalizedStringName(L"UnitName_Terabyte"), GetLocalizedStringName(L"UnitAbbreviation_Terabyte"), 17 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Yobibits, GetLocalizedStringName(L"UnitName_Yobibits"), GetLocalizedStringName(L"UnitAbbreviation_Yobibits"), 32 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Yobibytes, GetLocalizedStringName(L"UnitName_Yobibytes"), GetLocalizedStringName(L"UnitAbbreviation_Yobibytes"), 34 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Yottabit, GetLocalizedStringName(L"UnitName_Yottabit"), GetLocalizedStringName(L"UnitAbbreviation_Yottabit"), 31 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Yottabyte, GetLocalizedStringName(L"UnitName_Yottabyte"), GetLocalizedStringName(L"UnitAbbreviation_Yottabyte"), 33 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Zebibits, GetLocalizedStringName(L"UnitName_Zebibits"), GetLocalizedStringName(L"UnitAbbreviation_Zebibits"), 28 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Zebibytes, GetLocalizedStringName(L"UnitName_Zebibytes"), GetLocalizedStringName(L"UnitAbbreviation_Zebibytes"), 30 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Zetabits, GetLocalizedStringName(L"UnitName_Zetabits"), GetLocalizedStringName(L"UnitAbbreviation_Zetabits"), 27 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Zetabytes, GetLocalizedStringName(L"UnitName_Zetabytes"), GetLocalizedStringName(L"UnitAbbreviation_Zetabytes"),29 }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_FloppyDisk, GetLocalizedStringName(L"UnitName_FloppyDisk"), GetLocalizedStringName(L"UnitAbbreviation_FloppyDisk"), 13, false, false, true }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_CD, GetLocalizedStringName(L"UnitName_CD"), GetLocalizedStringName(L"UnitAbbreviation_CD"), 14, false, false, true }); - dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_DVD, GetLocalizedStringName(L"UnitName_DVD"), GetLocalizedStringName(L"UnitAbbreviation_DVD"), 15, false, false, true }); + dataUnits.push_back( + OrderedUnit{ UnitConverterUnits::Data_Bit, GetLocalizedStringName(L"UnitName_Bit"), GetLocalizedStringName(L"UnitAbbreviation_Bit"), 1 }); + dataUnits.push_back( + OrderedUnit{ UnitConverterUnits::Data_Byte, GetLocalizedStringName(L"UnitName_Byte"), GetLocalizedStringName(L"UnitAbbreviation_Byte"), 2 }); + dataUnits.push_back( + OrderedUnit{ UnitConverterUnits::Data_Exabits, GetLocalizedStringName(L"UnitName_Exabits"), GetLocalizedStringName(L"UnitAbbreviation_Exabits"), 23 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Exabytes, GetLocalizedStringName(L"UnitName_Exabytes"), + GetLocalizedStringName(L"UnitAbbreviation_Exabytes"), 25 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Exbibits, GetLocalizedStringName(L"UnitName_Exbibits"), + GetLocalizedStringName(L"UnitAbbreviation_Exbibits"), 24 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Exbibytes, GetLocalizedStringName(L"UnitName_Exbibytes"), + GetLocalizedStringName(L"UnitAbbreviation_Exbibytes"), 26 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Gibibits, GetLocalizedStringName(L"UnitName_Gibibits"), + GetLocalizedStringName(L"UnitAbbreviation_Gibibits"), 12 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Gibibytes, GetLocalizedStringName(L"UnitName_Gibibytes"), + GetLocalizedStringName(L"UnitAbbreviation_Gibibytes"), 14 }); + dataUnits.push_back( + OrderedUnit{ UnitConverterUnits::Data_Gigabit, GetLocalizedStringName(L"UnitName_Gigabit"), GetLocalizedStringName(L"UnitAbbreviation_Gigabit"), 11 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Gigabyte, GetLocalizedStringName(L"UnitName_Gigabyte"), + GetLocalizedStringName(L"UnitAbbreviation_Gigabyte"), 13, true, false, false }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Kibibits, GetLocalizedStringName(L"UnitName_Kibibits"), + GetLocalizedStringName(L"UnitAbbreviation_Kibibits"), 4 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Kibibytes, GetLocalizedStringName(L"UnitName_Kibibytes"), + GetLocalizedStringName(L"UnitAbbreviation_Kibibytes"), 6 }); + dataUnits.push_back( + OrderedUnit{ UnitConverterUnits::Data_Kilobit, GetLocalizedStringName(L"UnitName_Kilobit"), GetLocalizedStringName(L"UnitAbbreviation_Kilobit"), 3 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Kilobyte, GetLocalizedStringName(L"UnitName_Kilobyte"), + GetLocalizedStringName(L"UnitAbbreviation_Kilobyte"), 5 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Mebibits, GetLocalizedStringName(L"UnitName_Mebibits"), + GetLocalizedStringName(L"UnitAbbreviation_Mebibits"), 8 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Mebibytes, GetLocalizedStringName(L"UnitName_Mebibytes"), + GetLocalizedStringName(L"UnitAbbreviation_Mebibytes"), 10 }); + dataUnits.push_back( + OrderedUnit{ UnitConverterUnits::Data_Megabit, GetLocalizedStringName(L"UnitName_Megabit"), GetLocalizedStringName(L"UnitAbbreviation_Megabit"), 7 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Megabyte, GetLocalizedStringName(L"UnitName_Megabyte"), + GetLocalizedStringName(L"UnitAbbreviation_Megabyte"), 9, false, true, false }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Pebibits, GetLocalizedStringName(L"UnitName_Pebibits"), + GetLocalizedStringName(L"UnitAbbreviation_Pebibits"), 20 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Pebibytes, GetLocalizedStringName(L"UnitName_Pebibytes"), + GetLocalizedStringName(L"UnitAbbreviation_Pebibytes"), 22 }); + dataUnits.push_back( + OrderedUnit{ UnitConverterUnits::Data_Petabit, GetLocalizedStringName(L"UnitName_Petabit"), GetLocalizedStringName(L"UnitAbbreviation_Petabit"), 19 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Petabyte, GetLocalizedStringName(L"UnitName_Petabyte"), + GetLocalizedStringName(L"UnitAbbreviation_Petabyte"), 21 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Tebibits, GetLocalizedStringName(L"UnitName_Tebibits"), + GetLocalizedStringName(L"UnitAbbreviation_Tebibits"), 16 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Tebibytes, GetLocalizedStringName(L"UnitName_Tebibytes"), + GetLocalizedStringName(L"UnitAbbreviation_Tebibytes"), 18 }); + dataUnits.push_back( + OrderedUnit{ UnitConverterUnits::Data_Terabit, GetLocalizedStringName(L"UnitName_Terabit"), GetLocalizedStringName(L"UnitAbbreviation_Terabit"), 15 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Terabyte, GetLocalizedStringName(L"UnitName_Terabyte"), + GetLocalizedStringName(L"UnitAbbreviation_Terabyte"), 17 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Yobibits, GetLocalizedStringName(L"UnitName_Yobibits"), + GetLocalizedStringName(L"UnitAbbreviation_Yobibits"), 32 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Yobibytes, GetLocalizedStringName(L"UnitName_Yobibytes"), + GetLocalizedStringName(L"UnitAbbreviation_Yobibytes"), 34 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Yottabit, GetLocalizedStringName(L"UnitName_Yottabit"), + GetLocalizedStringName(L"UnitAbbreviation_Yottabit"), 31 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Yottabyte, GetLocalizedStringName(L"UnitName_Yottabyte"), + GetLocalizedStringName(L"UnitAbbreviation_Yottabyte"), 33 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Zebibits, GetLocalizedStringName(L"UnitName_Zebibits"), + GetLocalizedStringName(L"UnitAbbreviation_Zebibits"), 28 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Zebibytes, GetLocalizedStringName(L"UnitName_Zebibytes"), + GetLocalizedStringName(L"UnitAbbreviation_Zebibytes"), 30 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Zetabits, GetLocalizedStringName(L"UnitName_Zetabits"), + GetLocalizedStringName(L"UnitAbbreviation_Zetabits"), 27 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_Zetabytes, GetLocalizedStringName(L"UnitName_Zetabytes"), + GetLocalizedStringName(L"UnitAbbreviation_Zetabytes"), 29 }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_FloppyDisk, GetLocalizedStringName(L"UnitName_FloppyDisk"), + GetLocalizedStringName(L"UnitAbbreviation_FloppyDisk"), 13, false, false, true }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_CD, GetLocalizedStringName(L"UnitName_CD"), GetLocalizedStringName(L"UnitAbbreviation_CD"), 14, + false, false, true }); + dataUnits.push_back(OrderedUnit{ UnitConverterUnits::Data_DVD, GetLocalizedStringName(L"UnitName_DVD"), GetLocalizedStringName(L"UnitAbbreviation_DVD"), 15, + false, false, true }); unitMap.emplace(ViewMode::Data, dataUnits); vector energyUnits; - energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_BritishThermalUnit, GetLocalizedStringName(L"UnitName_BritishThermalUnit"), GetLocalizedStringName(L"UnitAbbreviation_BritishThermalUnit"), 7 }); - energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_Calorie, GetLocalizedStringName(L"UnitName_Calorie"), GetLocalizedStringName(L"UnitAbbreviation_Calorie"), 4 }); - energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_ElectronVolt, GetLocalizedStringName(L"UnitName_Electron-Volt"), GetLocalizedStringName(L"UnitAbbreviation_Electron-Volt"), 1 }); - energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_FootPound, GetLocalizedStringName(L"UnitName_Foot-Pound"), GetLocalizedStringName(L"UnitAbbreviation_Foot-Pound"), 6 }); - energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_Joule, GetLocalizedStringName(L"UnitName_Joule"), GetLocalizedStringName(L"UnitAbbreviation_Joule"), 2, true, false, false}); - energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_Kilocalorie, GetLocalizedStringName(L"UnitName_Kilocalorie"), GetLocalizedStringName(L"UnitAbbreviation_Kilocalorie"), 5, false, true, false }); - energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_Kilojoule, GetLocalizedStringName(L"UnitName_Kilojoule"), GetLocalizedStringName(L"UnitAbbreviation_Kilojoule"), 3 }); - energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_Battery, GetLocalizedStringName(L"UnitName_Battery"), GetLocalizedStringName(L"UnitAbbreviation_Battery"), 8, false, false, true }); - energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_Banana, GetLocalizedStringName(L"UnitName_Banana"), GetLocalizedStringName(L"UnitAbbreviation_Banana"), 9, false, false, true }); - energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_SliceOfCake, GetLocalizedStringName(L"UnitName_SliceOfCake"), GetLocalizedStringName(L"UnitAbbreviation_SliceOfCake"),10, false, false, true }); + energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_BritishThermalUnit, GetLocalizedStringName(L"UnitName_BritishThermalUnit"), + GetLocalizedStringName(L"UnitAbbreviation_BritishThermalUnit"), 7 }); + energyUnits.push_back( + OrderedUnit{ UnitConverterUnits::Energy_Calorie, GetLocalizedStringName(L"UnitName_Calorie"), GetLocalizedStringName(L"UnitAbbreviation_Calorie"), 4 }); + energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_ElectronVolt, GetLocalizedStringName(L"UnitName_Electron-Volt"), + GetLocalizedStringName(L"UnitAbbreviation_Electron-Volt"), 1 }); + energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_FootPound, GetLocalizedStringName(L"UnitName_Foot-Pound"), + GetLocalizedStringName(L"UnitAbbreviation_Foot-Pound"), 6 }); + energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_Joule, GetLocalizedStringName(L"UnitName_Joule"), + GetLocalizedStringName(L"UnitAbbreviation_Joule"), 2, true, false, false }); + energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_Kilocalorie, GetLocalizedStringName(L"UnitName_Kilocalorie"), + GetLocalizedStringName(L"UnitAbbreviation_Kilocalorie"), 5, false, true, false }); + energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_Kilojoule, GetLocalizedStringName(L"UnitName_Kilojoule"), + GetLocalizedStringName(L"UnitAbbreviation_Kilojoule"), 3 }); + energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_Battery, GetLocalizedStringName(L"UnitName_Battery"), + GetLocalizedStringName(L"UnitAbbreviation_Battery"), 8, false, false, true }); + energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_Banana, GetLocalizedStringName(L"UnitName_Banana"), + GetLocalizedStringName(L"UnitAbbreviation_Banana"), 9, false, false, true }); + energyUnits.push_back(OrderedUnit{ UnitConverterUnits::Energy_SliceOfCake, GetLocalizedStringName(L"UnitName_SliceOfCake"), + GetLocalizedStringName(L"UnitAbbreviation_SliceOfCake"), 10, false, false, true }); unitMap.emplace(ViewMode::Energy, energyUnits); vector lengthUnits; - lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Centimeter, GetLocalizedStringName(L"UnitName_Centimeter"), GetLocalizedStringName(L"UnitAbbreviation_Centimeter"), 4, useUSCustomary, useSI, false}); - lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Foot, GetLocalizedStringName(L"UnitName_Foot"), GetLocalizedStringName(L"UnitAbbreviation_Foot"), 8 }); - lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Inch, GetLocalizedStringName(L"UnitName_Inch"), GetLocalizedStringName(L"UnitAbbreviation_Inch"), 7 , useSI, useUSCustomary, false }); - lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Kilometer, GetLocalizedStringName(L"UnitName_Kilometer"), GetLocalizedStringName(L"UnitAbbreviation_Kilometer"), 6 }); - lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Meter, GetLocalizedStringName(L"UnitName_Meter"), GetLocalizedStringName(L"UnitAbbreviation_Meter"), 5 }); - lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Micron, GetLocalizedStringName(L"UnitName_Micron"), GetLocalizedStringName(L"UnitAbbreviation_Micron"), 2 }); - lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Mile, GetLocalizedStringName(L"UnitName_Mile"), GetLocalizedStringName(L"UnitAbbreviation_Mile"), 10 }); - lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Millimeter, GetLocalizedStringName(L"UnitName_Millimeter"), GetLocalizedStringName(L"UnitAbbreviation_Millimeter"), 3 }); - lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Nanometer, GetLocalizedStringName(L"UnitName_Nanometer"), GetLocalizedStringName(L"UnitAbbreviation_Nanometer"), 1 }); - lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_NauticalMile, GetLocalizedStringName(L"UnitName_NauticalMile"), GetLocalizedStringName(L"UnitAbbreviation_NauticalMile"), 11 }); - lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Yard, GetLocalizedStringName(L"UnitName_Yard"), GetLocalizedStringName(L"UnitAbbreviation_Yard"), 9 }); - lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Paperclip, GetLocalizedStringName(L"UnitName_Paperclip"), GetLocalizedStringName(L"UnitAbbreviation_Paperclip"), 12 ,false, false, true }); - lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Hand, GetLocalizedStringName(L"UnitName_Hand"), GetLocalizedStringName(L"UnitAbbreviation_Hand"), 13 ,false, false, true }); - lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_JumboJet, GetLocalizedStringName(L"UnitName_JumboJet"), GetLocalizedStringName(L"UnitAbbreviation_JumboJet"), 14 , false, false, true }); + lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Centimeter, GetLocalizedStringName(L"UnitName_Centimeter"), + GetLocalizedStringName(L"UnitAbbreviation_Centimeter"), 4, useUSCustomary, useSI, false }); + lengthUnits.push_back( + OrderedUnit{ UnitConverterUnits::Length_Foot, GetLocalizedStringName(L"UnitName_Foot"), GetLocalizedStringName(L"UnitAbbreviation_Foot"), 8 }); + lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Inch, GetLocalizedStringName(L"UnitName_Inch"), + GetLocalizedStringName(L"UnitAbbreviation_Inch"), 7, useSI, useUSCustomary, false }); + lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Kilometer, GetLocalizedStringName(L"UnitName_Kilometer"), + GetLocalizedStringName(L"UnitAbbreviation_Kilometer"), 6 }); + lengthUnits.push_back( + OrderedUnit{ UnitConverterUnits::Length_Meter, GetLocalizedStringName(L"UnitName_Meter"), GetLocalizedStringName(L"UnitAbbreviation_Meter"), 5 }); + lengthUnits.push_back( + OrderedUnit{ UnitConverterUnits::Length_Micron, GetLocalizedStringName(L"UnitName_Micron"), GetLocalizedStringName(L"UnitAbbreviation_Micron"), 2 }); + lengthUnits.push_back( + OrderedUnit{ UnitConverterUnits::Length_Mile, GetLocalizedStringName(L"UnitName_Mile"), GetLocalizedStringName(L"UnitAbbreviation_Mile"), 10 }); + lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Millimeter, GetLocalizedStringName(L"UnitName_Millimeter"), + GetLocalizedStringName(L"UnitAbbreviation_Millimeter"), 3 }); + lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Nanometer, GetLocalizedStringName(L"UnitName_Nanometer"), + GetLocalizedStringName(L"UnitAbbreviation_Nanometer"), 1 }); + lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_NauticalMile, GetLocalizedStringName(L"UnitName_NauticalMile"), + GetLocalizedStringName(L"UnitAbbreviation_NauticalMile"), 11 }); + lengthUnits.push_back( + OrderedUnit{ UnitConverterUnits::Length_Yard, GetLocalizedStringName(L"UnitName_Yard"), GetLocalizedStringName(L"UnitAbbreviation_Yard"), 9 }); + lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Paperclip, GetLocalizedStringName(L"UnitName_Paperclip"), + GetLocalizedStringName(L"UnitAbbreviation_Paperclip"), 12, false, false, true }); + lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_Hand, GetLocalizedStringName(L"UnitName_Hand"), + GetLocalizedStringName(L"UnitAbbreviation_Hand"), 13, false, false, true }); + lengthUnits.push_back(OrderedUnit{ UnitConverterUnits::Length_JumboJet, GetLocalizedStringName(L"UnitName_JumboJet"), + GetLocalizedStringName(L"UnitAbbreviation_JumboJet"), 14, false, false, true }); unitMap.emplace(ViewMode::Length, lengthUnits); vector powerUnits; - powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_BritishThermalUnitPerMinute, GetLocalizedStringName(L"UnitName_BTUPerMinute"), GetLocalizedStringName(L"UnitAbbreviation_BTUPerMinute"), 5 }); - powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_FootPoundPerMinute, GetLocalizedStringName(L"UnitName_Foot-PoundPerMinute"), GetLocalizedStringName(L"UnitAbbreviation_Foot-PoundPerMinute"), 4 }); - powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_Horsepower, GetLocalizedStringName(L"UnitName_Horsepower"), GetLocalizedStringName(L"UnitAbbreviation_Horsepower") , 3 , false, true, false }); - powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_Kilowatt, GetLocalizedStringName(L"UnitName_Kilowatt"), GetLocalizedStringName(L"UnitAbbreviation_Kilowatt"), 2 , !useWattInsteadOfKilowatt}); - powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_Watt, GetLocalizedStringName(L"UnitName_Watt"), GetLocalizedStringName(L"UnitAbbreviation_Watt"), 1, useWattInsteadOfKilowatt}); - powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_LightBulb, GetLocalizedStringName(L"UnitName_LightBulb"), GetLocalizedStringName(L"UnitAbbreviation_LightBulb"), 6 ,false, false, true}); - powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_Horse, GetLocalizedStringName(L"UnitName_Horse"), GetLocalizedStringName(L"UnitAbbreviation_Horse"), 7 ,false, false, true}); - powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_TrainEngine, GetLocalizedStringName(L"UnitName_TrainEngine"), GetLocalizedStringName(L"UnitAbbreviation_TrainEngine"), 8 ,false, false, true }); + powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_BritishThermalUnitPerMinute, GetLocalizedStringName(L"UnitName_BTUPerMinute"), + GetLocalizedStringName(L"UnitAbbreviation_BTUPerMinute"), 5 }); + powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_FootPoundPerMinute, GetLocalizedStringName(L"UnitName_Foot-PoundPerMinute"), + GetLocalizedStringName(L"UnitAbbreviation_Foot-PoundPerMinute"), 4 }); + powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_Horsepower, GetLocalizedStringName(L"UnitName_Horsepower"), + GetLocalizedStringName(L"UnitAbbreviation_Horsepower"), 3, false, true, false }); + powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_Kilowatt, GetLocalizedStringName(L"UnitName_Kilowatt"), + GetLocalizedStringName(L"UnitAbbreviation_Kilowatt"), 2, !useWattInsteadOfKilowatt }); + powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_Watt, GetLocalizedStringName(L"UnitName_Watt"), + GetLocalizedStringName(L"UnitAbbreviation_Watt"), 1, useWattInsteadOfKilowatt }); + powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_LightBulb, GetLocalizedStringName(L"UnitName_LightBulb"), + GetLocalizedStringName(L"UnitAbbreviation_LightBulb"), 6, false, false, true }); + powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_Horse, GetLocalizedStringName(L"UnitName_Horse"), + GetLocalizedStringName(L"UnitAbbreviation_Horse"), 7, false, false, true }); + powerUnits.push_back(OrderedUnit{ UnitConverterUnits::Power_TrainEngine, GetLocalizedStringName(L"UnitName_TrainEngine"), + GetLocalizedStringName(L"UnitAbbreviation_TrainEngine"), 8, false, false, true }); unitMap.emplace(ViewMode::Power, powerUnits); vector tempUnits; - tempUnits.push_back(OrderedUnit{ UnitConverterUnits::Temperature_DegreesCelsius, GetLocalizedStringName(L"UnitName_DegreesCelsius"), GetLocalizedStringName(L"UnitAbbreviation_DegreesCelsius"), 1, useFahrenheit, !useFahrenheit, false }); - tempUnits.push_back(OrderedUnit{ UnitConverterUnits::Temperature_DegreesFahrenheit, GetLocalizedStringName(L"UnitName_DegreesFahrenheit"), GetLocalizedStringName(L"UnitAbbreviation_DegreesFahrenheit"), 2 , !useFahrenheit, useFahrenheit, false }); - tempUnits.push_back(OrderedUnit{ UnitConverterUnits::Temperature_Kelvin, GetLocalizedStringName(L"UnitName_Kelvin"), GetLocalizedStringName(L"UnitAbbreviation_Kelvin"), 3 }); + tempUnits.push_back(OrderedUnit{ UnitConverterUnits::Temperature_DegreesCelsius, GetLocalizedStringName(L"UnitName_DegreesCelsius"), + GetLocalizedStringName(L"UnitAbbreviation_DegreesCelsius"), 1, useFahrenheit, !useFahrenheit, false }); + tempUnits.push_back(OrderedUnit{ UnitConverterUnits::Temperature_DegreesFahrenheit, GetLocalizedStringName(L"UnitName_DegreesFahrenheit"), + GetLocalizedStringName(L"UnitAbbreviation_DegreesFahrenheit"), 2, !useFahrenheit, useFahrenheit, false }); + tempUnits.push_back(OrderedUnit{ UnitConverterUnits::Temperature_Kelvin, GetLocalizedStringName(L"UnitName_Kelvin"), + GetLocalizedStringName(L"UnitAbbreviation_Kelvin"), 3 }); unitMap.emplace(ViewMode::Temperature, tempUnits); vector timeUnits; - timeUnits.push_back(OrderedUnit{ UnitConverterUnits::Time_Day, GetLocalizedStringName(L"UnitName_Day"), GetLocalizedStringName(L"UnitAbbreviation_Day"), 6 }); - timeUnits.push_back(OrderedUnit{ UnitConverterUnits::Time_Hour, GetLocalizedStringName(L"UnitName_Hour"), GetLocalizedStringName(L"UnitAbbreviation_Hour"), 5 ,true, false, false }); - timeUnits.push_back(OrderedUnit{ UnitConverterUnits::Time_Microsecond, GetLocalizedStringName(L"UnitName_Microsecond"), GetLocalizedStringName(L"UnitAbbreviation_Microsecond"), 1 }); - timeUnits.push_back(OrderedUnit{ UnitConverterUnits::Time_Millisecond, GetLocalizedStringName(L"UnitName_Millisecond"), GetLocalizedStringName(L"UnitAbbreviation_Millisecond"), 2 }); - timeUnits.push_back(OrderedUnit{ UnitConverterUnits::Time_Minute, GetLocalizedStringName(L"UnitName_Minute"), GetLocalizedStringName(L"UnitAbbreviation_Minute"), 4 ,false, true, false }); - timeUnits.push_back(OrderedUnit{ UnitConverterUnits::Time_Second, GetLocalizedStringName(L"UnitName_Second"), GetLocalizedStringName(L"UnitAbbreviation_Second"), 3 }); - timeUnits.push_back(OrderedUnit{ UnitConverterUnits::Time_Week, GetLocalizedStringName(L"UnitName_Week"), GetLocalizedStringName(L"UnitAbbreviation_Week"), 7 }); - timeUnits.push_back(OrderedUnit{ UnitConverterUnits::Time_Year, GetLocalizedStringName(L"UnitName_Year"), GetLocalizedStringName(L"UnitAbbreviation_Year"), 8 }); + timeUnits.push_back( + OrderedUnit{ UnitConverterUnits::Time_Day, GetLocalizedStringName(L"UnitName_Day"), GetLocalizedStringName(L"UnitAbbreviation_Day"), 6 }); + timeUnits.push_back(OrderedUnit{ UnitConverterUnits::Time_Hour, GetLocalizedStringName(L"UnitName_Hour"), GetLocalizedStringName(L"UnitAbbreviation_Hour"), + 5, true, false, false }); + timeUnits.push_back(OrderedUnit{ UnitConverterUnits::Time_Microsecond, GetLocalizedStringName(L"UnitName_Microsecond"), + GetLocalizedStringName(L"UnitAbbreviation_Microsecond"), 1 }); + timeUnits.push_back(OrderedUnit{ UnitConverterUnits::Time_Millisecond, GetLocalizedStringName(L"UnitName_Millisecond"), + GetLocalizedStringName(L"UnitAbbreviation_Millisecond"), 2 }); + timeUnits.push_back(OrderedUnit{ UnitConverterUnits::Time_Minute, GetLocalizedStringName(L"UnitName_Minute"), + GetLocalizedStringName(L"UnitAbbreviation_Minute"), 4, false, true, false }); + timeUnits.push_back( + OrderedUnit{ UnitConverterUnits::Time_Second, GetLocalizedStringName(L"UnitName_Second"), GetLocalizedStringName(L"UnitAbbreviation_Second"), 3 }); + timeUnits.push_back( + OrderedUnit{ UnitConverterUnits::Time_Week, GetLocalizedStringName(L"UnitName_Week"), GetLocalizedStringName(L"UnitAbbreviation_Week"), 7 }); + timeUnits.push_back( + OrderedUnit{ UnitConverterUnits::Time_Year, GetLocalizedStringName(L"UnitName_Year"), GetLocalizedStringName(L"UnitAbbreviation_Year"), 8 }); unitMap.emplace(ViewMode::Time, timeUnits); vector speedUnits; - speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_CentimetersPerSecond, GetLocalizedStringName(L"UnitName_CentimetersPerSecond"), GetLocalizedStringName(L"UnitAbbreviation_CentimetersPerSecond"), 1 }); - speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_FeetPerSecond, GetLocalizedStringName(L"UnitName_FeetPerSecond"), GetLocalizedStringName(L"UnitAbbreviation_FeetPerSecond"), 4 }); - speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_KilometersPerHour, GetLocalizedStringName(L"UnitName_KilometersPerHour"), GetLocalizedStringName(L"UnitAbbreviation_KilometersPerHour"), 3 , useUSCustomary, useSI, false }); - speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_Knot, GetLocalizedStringName(L"UnitName_Knot"), GetLocalizedStringName(L"UnitAbbreviation_Knot"), 6 }); - speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_Mach, GetLocalizedStringName(L"UnitName_Mach"), GetLocalizedStringName(L"UnitAbbreviation_Mach"), 7 }); - speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_MetersPerSecond, GetLocalizedStringName(L"UnitName_MetersPerSecond"), GetLocalizedStringName(L"UnitAbbreviation_MetersPerSecond"), 2 }); - speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_MilesPerHour, GetLocalizedStringName(L"UnitName_MilesPerHour"), GetLocalizedStringName(L"UnitAbbreviation_MilesPerHour"), 5, useSI, useUSCustomary, false }); - speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_Turtle, GetLocalizedStringName(L"UnitName_Turtle"), GetLocalizedStringName(L"UnitAbbreviation_Turtle"), 8 ,false, false, true }); - speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_Horse, GetLocalizedStringName(L"UnitName_Horse"), GetLocalizedStringName(L"UnitAbbreviation_Horse"),9 , false, false, true }); - speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_Jet, GetLocalizedStringName(L"UnitName_Jet"), GetLocalizedStringName(L"UnitAbbreviation_Jet"), 10, false, false, true }); + speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_CentimetersPerSecond, GetLocalizedStringName(L"UnitName_CentimetersPerSecond"), + GetLocalizedStringName(L"UnitAbbreviation_CentimetersPerSecond"), 1 }); + speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_FeetPerSecond, GetLocalizedStringName(L"UnitName_FeetPerSecond"), + GetLocalizedStringName(L"UnitAbbreviation_FeetPerSecond"), 4 }); + speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_KilometersPerHour, GetLocalizedStringName(L"UnitName_KilometersPerHour"), + GetLocalizedStringName(L"UnitAbbreviation_KilometersPerHour"), 3, useUSCustomary, useSI, false }); + speedUnits.push_back( + OrderedUnit{ UnitConverterUnits::Speed_Knot, GetLocalizedStringName(L"UnitName_Knot"), GetLocalizedStringName(L"UnitAbbreviation_Knot"), 6 }); + speedUnits.push_back( + OrderedUnit{ UnitConverterUnits::Speed_Mach, GetLocalizedStringName(L"UnitName_Mach"), GetLocalizedStringName(L"UnitAbbreviation_Mach"), 7 }); + speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_MetersPerSecond, GetLocalizedStringName(L"UnitName_MetersPerSecond"), + GetLocalizedStringName(L"UnitAbbreviation_MetersPerSecond"), 2 }); + speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_MilesPerHour, GetLocalizedStringName(L"UnitName_MilesPerHour"), + GetLocalizedStringName(L"UnitAbbreviation_MilesPerHour"), 5, useSI, useUSCustomary, false }); + speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_Turtle, GetLocalizedStringName(L"UnitName_Turtle"), + GetLocalizedStringName(L"UnitAbbreviation_Turtle"), 8, false, false, true }); + speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_Horse, GetLocalizedStringName(L"UnitName_Horse"), + GetLocalizedStringName(L"UnitAbbreviation_Horse"), 9, false, false, true }); + speedUnits.push_back(OrderedUnit{ UnitConverterUnits::Speed_Jet, GetLocalizedStringName(L"UnitName_Jet"), GetLocalizedStringName(L"UnitAbbreviation_Jet"), + 10, false, false, true }); unitMap.emplace(ViewMode::Speed, speedUnits); vector volumeUnits; - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_CubicCentimeter, GetLocalizedStringName(L"UnitName_CubicCentimeter"), GetLocalizedStringName(L"UnitAbbreviation_CubicCentimeter"), 2 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_CubicFoot, GetLocalizedStringName(L"UnitName_CubicFoot"), GetLocalizedStringName(L"UnitAbbreviation_CubicFoot"), 13 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_CubicInch, GetLocalizedStringName(L"UnitName_CubicInch"), GetLocalizedStringName(L"UnitAbbreviation_CubicInch"), 12 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_CubicMeter, GetLocalizedStringName(L"UnitName_CubicMeter"), GetLocalizedStringName(L"UnitAbbreviation_CubicMeter"), 4 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_CubicYard, GetLocalizedStringName(L"UnitName_CubicYard"), GetLocalizedStringName(L"UnitAbbreviation_CubicYard"), 14 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_CupUS, GetLocalizedStringName(L"UnitName_CupUS"), GetLocalizedStringName(L"UnitAbbreviation_CupUS"), 8 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_FluidOunceUK, GetLocalizedStringName(L"UnitName_FluidOunceUK"), GetLocalizedStringName(L"UnitAbbreviation_FluidOunceUK"), 17 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_FluidOunceUS, GetLocalizedStringName(L"UnitName_FluidOunceUS"), GetLocalizedStringName(L"UnitAbbreviation_FluidOunceUS"), 7 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_GallonUK, GetLocalizedStringName(L"UnitName_GallonUK"), GetLocalizedStringName(L"UnitAbbreviation_GallonUK"), 20 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_GallonUS, GetLocalizedStringName(L"UnitName_GallonUS"), GetLocalizedStringName(L"UnitAbbreviation_GallonUS"), 11 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_Liter, GetLocalizedStringName(L"UnitName_Liter"), GetLocalizedStringName(L"UnitAbbreviation_Liter"), 3 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_Milliliter, GetLocalizedStringName(L"UnitName_Milliliter"), GetLocalizedStringName(L"UnitAbbreviation_Milliliter"), 1, useUSCustomary, useSI}); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_PintUK, GetLocalizedStringName(L"UnitName_PintUK"), GetLocalizedStringName(L"UnitAbbreviation_PintUK"), 18 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_PintUS, GetLocalizedStringName(L"UnitName_PintUS"), GetLocalizedStringName(L"UnitAbbreviation_PintUS"), 9 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_TablespoonUS, GetLocalizedStringName(L"UnitName_TablespoonUS"), GetLocalizedStringName(L"UnitAbbreviation_TablespoonUS"), 6 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_TeaspoonUS, GetLocalizedStringName(L"UnitName_TeaspoonUS"), GetLocalizedStringName(L"UnitAbbreviation_TeaspoonUS"), 5, useSI, useUSCustomary && m_currentRegionCode != "GB" }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_QuartUK, GetLocalizedStringName(L"UnitName_QuartUK"), GetLocalizedStringName(L"UnitAbbreviation_QuartUK"), 19 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_QuartUS, GetLocalizedStringName(L"UnitName_QuartUS"), GetLocalizedStringName(L"UnitAbbreviation_QuartUS"), 10 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_TeaspoonUK, GetLocalizedStringName(L"UnitName_TeaspoonUK"), GetLocalizedStringName(L"UnitAbbreviation_TeaspoonUK"), 15, false, useUSCustomary && m_currentRegionCode == "GB"}); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_TablespoonUK, GetLocalizedStringName(L"UnitName_TablespoonUK"), GetLocalizedStringName(L"UnitAbbreviation_TablespoonUK"), 16 }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_CoffeeCup, GetLocalizedStringName(L"UnitName_CoffeeCup"), GetLocalizedStringName(L"UnitAbbreviation_CoffeeCup"), 22 ,false, false, true }); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_Bathtub, GetLocalizedStringName(L"UnitName_Bathtub"), GetLocalizedStringName(L"UnitAbbreviation_Bathtub"), 23 ,false, false, true}); - volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_SwimmingPool, GetLocalizedStringName(L"UnitName_SwimmingPool"), GetLocalizedStringName(L"UnitAbbreviation_SwimmingPool"), 24 ,false, false, true }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_CubicCentimeter, GetLocalizedStringName(L"UnitName_CubicCentimeter"), + GetLocalizedStringName(L"UnitAbbreviation_CubicCentimeter"), 2 }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_CubicFoot, GetLocalizedStringName(L"UnitName_CubicFoot"), + GetLocalizedStringName(L"UnitAbbreviation_CubicFoot"), 13 }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_CubicInch, GetLocalizedStringName(L"UnitName_CubicInch"), + GetLocalizedStringName(L"UnitAbbreviation_CubicInch"), 12 }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_CubicMeter, GetLocalizedStringName(L"UnitName_CubicMeter"), + GetLocalizedStringName(L"UnitAbbreviation_CubicMeter"), 4 }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_CubicYard, GetLocalizedStringName(L"UnitName_CubicYard"), + GetLocalizedStringName(L"UnitAbbreviation_CubicYard"), 14 }); + volumeUnits.push_back( + OrderedUnit{ UnitConverterUnits::Volume_CupUS, GetLocalizedStringName(L"UnitName_CupUS"), GetLocalizedStringName(L"UnitAbbreviation_CupUS"), 8 }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_FluidOunceUK, GetLocalizedStringName(L"UnitName_FluidOunceUK"), + GetLocalizedStringName(L"UnitAbbreviation_FluidOunceUK"), 17 }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_FluidOunceUS, GetLocalizedStringName(L"UnitName_FluidOunceUS"), + GetLocalizedStringName(L"UnitAbbreviation_FluidOunceUS"), 7 }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_GallonUK, GetLocalizedStringName(L"UnitName_GallonUK"), + GetLocalizedStringName(L"UnitAbbreviation_GallonUK"), 20 }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_GallonUS, GetLocalizedStringName(L"UnitName_GallonUS"), + GetLocalizedStringName(L"UnitAbbreviation_GallonUS"), 11 }); + volumeUnits.push_back( + OrderedUnit{ UnitConverterUnits::Volume_Liter, GetLocalizedStringName(L"UnitName_Liter"), GetLocalizedStringName(L"UnitAbbreviation_Liter"), 3 }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_Milliliter, GetLocalizedStringName(L"UnitName_Milliliter"), + GetLocalizedStringName(L"UnitAbbreviation_Milliliter"), 1, useUSCustomary, useSI }); + volumeUnits.push_back( + OrderedUnit{ UnitConverterUnits::Volume_PintUK, GetLocalizedStringName(L"UnitName_PintUK"), GetLocalizedStringName(L"UnitAbbreviation_PintUK"), 18 }); + volumeUnits.push_back( + OrderedUnit{ UnitConverterUnits::Volume_PintUS, GetLocalizedStringName(L"UnitName_PintUS"), GetLocalizedStringName(L"UnitAbbreviation_PintUS"), 9 }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_TablespoonUS, GetLocalizedStringName(L"UnitName_TablespoonUS"), + GetLocalizedStringName(L"UnitAbbreviation_TablespoonUS"), 6 }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_TeaspoonUS, GetLocalizedStringName(L"UnitName_TeaspoonUS"), + GetLocalizedStringName(L"UnitAbbreviation_TeaspoonUS"), 5, useSI, useUSCustomary && m_currentRegionCode != "GB" }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_QuartUK, GetLocalizedStringName(L"UnitName_QuartUK"), + GetLocalizedStringName(L"UnitAbbreviation_QuartUK"), 19 }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_QuartUS, GetLocalizedStringName(L"UnitName_QuartUS"), + GetLocalizedStringName(L"UnitAbbreviation_QuartUS"), 10 }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_TeaspoonUK, GetLocalizedStringName(L"UnitName_TeaspoonUK"), + GetLocalizedStringName(L"UnitAbbreviation_TeaspoonUK"), 15, false, useUSCustomary && m_currentRegionCode == "GB" }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_TablespoonUK, GetLocalizedStringName(L"UnitName_TablespoonUK"), + GetLocalizedStringName(L"UnitAbbreviation_TablespoonUK"), 16 }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_CoffeeCup, GetLocalizedStringName(L"UnitName_CoffeeCup"), + GetLocalizedStringName(L"UnitAbbreviation_CoffeeCup"), 22, false, false, true }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_Bathtub, GetLocalizedStringName(L"UnitName_Bathtub"), + GetLocalizedStringName(L"UnitAbbreviation_Bathtub"), 23, false, false, true }); + volumeUnits.push_back(OrderedUnit{ UnitConverterUnits::Volume_SwimmingPool, GetLocalizedStringName(L"UnitName_SwimmingPool"), + GetLocalizedStringName(L"UnitAbbreviation_SwimmingPool"), 24, false, false, true }); unitMap.emplace(ViewMode::Volume, volumeUnits); vector weightUnits; - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Carat, GetLocalizedStringName(L"UnitName_Carat"), GetLocalizedStringName(L"UnitAbbreviation_Carat"), 1 }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Centigram, GetLocalizedStringName(L"UnitName_Centigram"), GetLocalizedStringName(L"UnitAbbreviation_Centigram"), 3 }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Decigram, GetLocalizedStringName(L"UnitName_Decigram"), GetLocalizedStringName(L"UnitAbbreviation_Decigram"), 4 }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Decagram, GetLocalizedStringName(L"UnitName_Decagram"), GetLocalizedStringName(L"UnitAbbreviation_Decagram"), 6 }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Gram, GetLocalizedStringName(L"UnitName_Gram"), GetLocalizedStringName(L"UnitAbbreviation_Gram"), 5 }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Hectogram, GetLocalizedStringName(L"UnitName_Hectogram"), GetLocalizedStringName(L"UnitAbbreviation_Hectogram"), 7 }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Kilogram, GetLocalizedStringName(L"UnitName_Kilogram"), GetLocalizedStringName(L"UnitAbbreviation_Kilogram"), 8 , useUSCustomary, useSI}); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_LongTon, GetLocalizedStringName(L"UnitName_LongTon"), GetLocalizedStringName(L"UnitAbbreviation_LongTon"), 14 }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Milligram, GetLocalizedStringName(L"UnitName_Milligram"), GetLocalizedStringName(L"UnitAbbreviation_Milligram"), 2 }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Ounce, GetLocalizedStringName(L"UnitName_Ounce"), GetLocalizedStringName(L"UnitAbbreviation_Ounce"), 10 }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Pound, GetLocalizedStringName(L"UnitName_Pound"), GetLocalizedStringName(L"UnitAbbreviation_Pound"), 11 , useSI, useUSCustomary }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_ShortTon, GetLocalizedStringName(L"UnitName_ShortTon"), GetLocalizedStringName(L"UnitAbbreviation_ShortTon"), 13 }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Stone, GetLocalizedStringName(L"UnitName_Stone"), GetLocalizedStringName(L"UnitAbbreviation_Stone"), 12 }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Tonne, GetLocalizedStringName(L"UnitName_Tonne"), GetLocalizedStringName(L"UnitAbbreviation_Tonne"), 9 }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Snowflake, GetLocalizedStringName(L"UnitName_Snowflake"), GetLocalizedStringName(L"UnitAbbreviation_Snowflake"), 15 ,false, false, true }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_SoccerBall, GetLocalizedStringName(L"UnitName_SoccerBall"), GetLocalizedStringName(L"UnitAbbreviation_SoccerBall"), 16 , false, false, true }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Elephant, GetLocalizedStringName(L"UnitName_Elephant"), GetLocalizedStringName(L"UnitAbbreviation_Elephant"), 17 ,false, false, true }); - weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Whale, GetLocalizedStringName(L"UnitName_Whale"), GetLocalizedStringName(L"UnitAbbreviation_Whale"), 18 ,false, false, true }); + weightUnits.push_back( + OrderedUnit{ UnitConverterUnits::Weight_Carat, GetLocalizedStringName(L"UnitName_Carat"), GetLocalizedStringName(L"UnitAbbreviation_Carat"), 1 }); + weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Centigram, GetLocalizedStringName(L"UnitName_Centigram"), + GetLocalizedStringName(L"UnitAbbreviation_Centigram"), 3 }); + weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Decigram, GetLocalizedStringName(L"UnitName_Decigram"), + GetLocalizedStringName(L"UnitAbbreviation_Decigram"), 4 }); + weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Decagram, GetLocalizedStringName(L"UnitName_Decagram"), + GetLocalizedStringName(L"UnitAbbreviation_Decagram"), 6 }); + weightUnits.push_back( + OrderedUnit{ UnitConverterUnits::Weight_Gram, GetLocalizedStringName(L"UnitName_Gram"), GetLocalizedStringName(L"UnitAbbreviation_Gram"), 5 }); + weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Hectogram, GetLocalizedStringName(L"UnitName_Hectogram"), + GetLocalizedStringName(L"UnitAbbreviation_Hectogram"), 7 }); + weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Kilogram, GetLocalizedStringName(L"UnitName_Kilogram"), + GetLocalizedStringName(L"UnitAbbreviation_Kilogram"), 8, useUSCustomary, useSI }); + weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_LongTon, GetLocalizedStringName(L"UnitName_LongTon"), + GetLocalizedStringName(L"UnitAbbreviation_LongTon"), 14 }); + weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Milligram, GetLocalizedStringName(L"UnitName_Milligram"), + GetLocalizedStringName(L"UnitAbbreviation_Milligram"), 2 }); + weightUnits.push_back( + OrderedUnit{ UnitConverterUnits::Weight_Ounce, GetLocalizedStringName(L"UnitName_Ounce"), GetLocalizedStringName(L"UnitAbbreviation_Ounce"), 10 }); + weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Pound, GetLocalizedStringName(L"UnitName_Pound"), + GetLocalizedStringName(L"UnitAbbreviation_Pound"), 11, useSI, useUSCustomary }); + weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_ShortTon, GetLocalizedStringName(L"UnitName_ShortTon"), + GetLocalizedStringName(L"UnitAbbreviation_ShortTon"), 13 }); + weightUnits.push_back( + OrderedUnit{ UnitConverterUnits::Weight_Stone, GetLocalizedStringName(L"UnitName_Stone"), GetLocalizedStringName(L"UnitAbbreviation_Stone"), 12 }); + weightUnits.push_back( + OrderedUnit{ UnitConverterUnits::Weight_Tonne, GetLocalizedStringName(L"UnitName_Tonne"), GetLocalizedStringName(L"UnitAbbreviation_Tonne"), 9 }); + weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Snowflake, GetLocalizedStringName(L"UnitName_Snowflake"), + GetLocalizedStringName(L"UnitAbbreviation_Snowflake"), 15, false, false, true }); + weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_SoccerBall, GetLocalizedStringName(L"UnitName_SoccerBall"), + GetLocalizedStringName(L"UnitAbbreviation_SoccerBall"), 16, false, false, true }); + weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Elephant, GetLocalizedStringName(L"UnitName_Elephant"), + GetLocalizedStringName(L"UnitAbbreviation_Elephant"), 17, false, false, true }); + weightUnits.push_back(OrderedUnit{ UnitConverterUnits::Weight_Whale, GetLocalizedStringName(L"UnitName_Whale"), + GetLocalizedStringName(L"UnitAbbreviation_Whale"), 18, false, false, true }); unitMap.emplace(ViewMode::Weight, weightUnits); vector pressureUnits; - pressureUnits.push_back(OrderedUnit{ UnitConverterUnits::Pressure_Atmosphere, GetLocalizedStringName(L"UnitName_Atmosphere"), GetLocalizedStringName(L"UnitAbbreviation_Atmosphere"), 1 , true, false, false }); - pressureUnits.push_back(OrderedUnit{ UnitConverterUnits::Pressure_Bar, GetLocalizedStringName(L"UnitName_Bar"), GetLocalizedStringName(L"UnitAbbreviation_Bar"), 2, false, true, false}); - pressureUnits.push_back(OrderedUnit{ UnitConverterUnits::Pressure_KiloPascal, GetLocalizedStringName(L"UnitName_KiloPascal"), GetLocalizedStringName(L"UnitAbbreviation_KiloPascal"), 3 }); - pressureUnits.push_back(OrderedUnit{ UnitConverterUnits::Pressure_MillimeterOfMercury, GetLocalizedStringName(L"UnitName_MillimeterOfMercury "), GetLocalizedStringName(L"UnitAbbreviation_MillimeterOfMercury "), 4 }); - pressureUnits.push_back(OrderedUnit{ UnitConverterUnits::Pressure_Pascal, GetLocalizedStringName(L"UnitName_Pascal"), GetLocalizedStringName(L"UnitAbbreviation_Pascal"), 5 }); - pressureUnits.push_back(OrderedUnit{ UnitConverterUnits::Pressure_PSI, GetLocalizedStringName(L"UnitName_PSI"), GetLocalizedStringName(L"UnitAbbreviation_PSI"), 6, false, false, false }); + pressureUnits.push_back(OrderedUnit{ UnitConverterUnits::Pressure_Atmosphere, GetLocalizedStringName(L"UnitName_Atmosphere"), + GetLocalizedStringName(L"UnitAbbreviation_Atmosphere"), 1, true, false, false }); + pressureUnits.push_back(OrderedUnit{ UnitConverterUnits::Pressure_Bar, GetLocalizedStringName(L"UnitName_Bar"), + GetLocalizedStringName(L"UnitAbbreviation_Bar"), 2, false, true, false }); + pressureUnits.push_back(OrderedUnit{ UnitConverterUnits::Pressure_KiloPascal, GetLocalizedStringName(L"UnitName_KiloPascal"), + GetLocalizedStringName(L"UnitAbbreviation_KiloPascal"), 3 }); + pressureUnits.push_back(OrderedUnit{ UnitConverterUnits::Pressure_MillimeterOfMercury, GetLocalizedStringName(L"UnitName_MillimeterOfMercury "), + GetLocalizedStringName(L"UnitAbbreviation_MillimeterOfMercury "), 4 }); + pressureUnits.push_back( + OrderedUnit{ UnitConverterUnits::Pressure_Pascal, GetLocalizedStringName(L"UnitName_Pascal"), GetLocalizedStringName(L"UnitAbbreviation_Pascal"), 5 }); + pressureUnits.push_back(OrderedUnit{ UnitConverterUnits::Pressure_PSI, GetLocalizedStringName(L"UnitName_PSI"), + GetLocalizedStringName(L"UnitAbbreviation_PSI"), 6, false, false, false }); unitMap.emplace(ViewMode::Pressure, pressureUnits); vector angleUnits; - angleUnits.push_back(OrderedUnit{ UnitConverterUnits::Angle_Degree, GetLocalizedStringName(L"UnitName_Degree"), GetLocalizedStringName(L"UnitAbbreviation_Degree"), 1, true, false, false }); - angleUnits.push_back(OrderedUnit{ UnitConverterUnits::Angle_Radian, GetLocalizedStringName(L"UnitName_Radian"), GetLocalizedStringName(L"UnitAbbreviation_Radian"), 2, false, true, false }); - angleUnits.push_back(OrderedUnit{ UnitConverterUnits::Angle_Gradian, GetLocalizedStringName(L"UnitName_Gradian"), GetLocalizedStringName(L"UnitAbbreviation_Gradian"), 3}); + angleUnits.push_back(OrderedUnit{ UnitConverterUnits::Angle_Degree, GetLocalizedStringName(L"UnitName_Degree"), + GetLocalizedStringName(L"UnitAbbreviation_Degree"), 1, true, false, false }); + angleUnits.push_back(OrderedUnit{ UnitConverterUnits::Angle_Radian, GetLocalizedStringName(L"UnitName_Radian"), + GetLocalizedStringName(L"UnitAbbreviation_Radian"), 2, false, true, false }); + angleUnits.push_back( + OrderedUnit{ UnitConverterUnits::Angle_Gradian, GetLocalizedStringName(L"UnitName_Gradian"), GetLocalizedStringName(L"UnitAbbreviation_Gradian"), 3 }); unitMap.emplace(ViewMode::Angle, angleUnits); } void UnitConverterDataLoader::GetConversionData(_In_ unordered_map>& categoryToUnitConversionMap) { /*categoryId, UnitId, factor*/ - static const vector unitDataList = { - { ViewMode::Area, UnitConverterUnits::Area_Acre, 4046.8564224 }, - { ViewMode::Area, UnitConverterUnits::Area_SquareMeter, 1 }, - { ViewMode::Area, UnitConverterUnits::Area_SquareFoot, 0.09290304 }, - { ViewMode::Area, UnitConverterUnits::Area_SquareYard, 0.83612736 }, - { ViewMode::Area, UnitConverterUnits::Area_SquareMillimeter, 0.000001 }, - { ViewMode::Area, UnitConverterUnits::Area_SquareCentimeter, 0.0001 }, - { ViewMode::Area, UnitConverterUnits::Area_SquareInch, 0.00064516 }, - { ViewMode::Area, UnitConverterUnits::Area_SquareMile, 2589988.110336 }, - { ViewMode::Area, UnitConverterUnits::Area_SquareKilometer, 1000000 }, - { ViewMode::Area, UnitConverterUnits::Area_Hectare, 10000 }, - { ViewMode::Area, UnitConverterUnits::Area_Hand, 0.012516104 }, - { ViewMode::Area, UnitConverterUnits::Area_Paper, 0.06032246 }, - { ViewMode::Area, UnitConverterUnits::Area_SoccerField, 10869.66 }, - { ViewMode::Area, UnitConverterUnits::Area_Castle, 100000 }, - { ViewMode::Area, UnitConverterUnits::Area_Pyeong, 400.0 / 121.0 }, + static const vector unitDataList = { { ViewMode::Area, UnitConverterUnits::Area_Acre, 4046.8564224 }, + { ViewMode::Area, UnitConverterUnits::Area_SquareMeter, 1 }, + { ViewMode::Area, UnitConverterUnits::Area_SquareFoot, 0.09290304 }, + { ViewMode::Area, UnitConverterUnits::Area_SquareYard, 0.83612736 }, + { ViewMode::Area, UnitConverterUnits::Area_SquareMillimeter, 0.000001 }, + { ViewMode::Area, UnitConverterUnits::Area_SquareCentimeter, 0.0001 }, + { ViewMode::Area, UnitConverterUnits::Area_SquareInch, 0.00064516 }, + { ViewMode::Area, UnitConverterUnits::Area_SquareMile, 2589988.110336 }, + { ViewMode::Area, UnitConverterUnits::Area_SquareKilometer, 1000000 }, + { ViewMode::Area, UnitConverterUnits::Area_Hectare, 10000 }, + { ViewMode::Area, UnitConverterUnits::Area_Hand, 0.012516104 }, + { ViewMode::Area, UnitConverterUnits::Area_Paper, 0.06032246 }, + { ViewMode::Area, UnitConverterUnits::Area_SoccerField, 10869.66 }, + { ViewMode::Area, UnitConverterUnits::Area_Castle, 100000 }, + { ViewMode::Area, UnitConverterUnits::Area_Pyeong, 400.0 / 121.0 }, - { ViewMode::Data, UnitConverterUnits::Data_Bit, 0.000000125 }, - { ViewMode::Data, UnitConverterUnits::Data_Byte, 0.000001 }, - { ViewMode::Data, UnitConverterUnits::Data_Kilobyte, 0.001 }, - { ViewMode::Data, UnitConverterUnits::Data_Megabyte, 1 }, - { ViewMode::Data, UnitConverterUnits::Data_Gigabyte, 1000 }, - { ViewMode::Data, UnitConverterUnits::Data_Terabyte, 1000000 }, - { ViewMode::Data, UnitConverterUnits::Data_Petabyte, 1000000000 }, - { ViewMode::Data, UnitConverterUnits::Data_Exabytes, 1000000000000 }, - { ViewMode::Data, UnitConverterUnits::Data_Zetabytes, 1000000000000000 }, - { ViewMode::Data, UnitConverterUnits::Data_Yottabyte, 1000000000000000000 }, - { ViewMode::Data, UnitConverterUnits::Data_Kilobit, 0.000125 }, - { ViewMode::Data, UnitConverterUnits::Data_Megabit, 0.125 }, - { ViewMode::Data, UnitConverterUnits::Data_Gigabit, 125 }, - { ViewMode::Data, UnitConverterUnits::Data_Terabit, 125000 }, - { ViewMode::Data, UnitConverterUnits::Data_Petabit, 125000000 }, - { ViewMode::Data, UnitConverterUnits::Data_Exabits, 125000000000 }, - { ViewMode::Data, UnitConverterUnits::Data_Zetabits, 125000000000000 }, - { ViewMode::Data, UnitConverterUnits::Data_Yottabit, 125000000000000000 }, - { ViewMode::Data, UnitConverterUnits::Data_Gibibits, 134.217728 }, - { ViewMode::Data, UnitConverterUnits::Data_Gibibytes, 1073.741824 }, - { ViewMode::Data, UnitConverterUnits::Data_Kibibits, 0.000128 }, - { ViewMode::Data, UnitConverterUnits::Data_Kibibytes, 0.001024 }, - { ViewMode::Data, UnitConverterUnits::Data_Mebibits, 0.131072 }, - { ViewMode::Data, UnitConverterUnits::Data_Mebibytes, 1.048576 }, - { ViewMode::Data, UnitConverterUnits::Data_Pebibits, 140737488.355328 }, - { ViewMode::Data, UnitConverterUnits::Data_Pebibytes, 1125899906.842624 }, - { ViewMode::Data, UnitConverterUnits::Data_Tebibits, 137438.953472 }, - { ViewMode::Data, UnitConverterUnits::Data_Tebibytes, 1099511.627776 }, - { ViewMode::Data, UnitConverterUnits::Data_Exbibits, 144115188075.855872 }, - { ViewMode::Data, UnitConverterUnits::Data_Exbibytes, 1152921504606.846976 }, - { ViewMode::Data, UnitConverterUnits::Data_Zebibits, 147573952589676.412928 }, - { ViewMode::Data, UnitConverterUnits::Data_Zebibytes, 1180591620717411.303424 }, - { ViewMode::Data, UnitConverterUnits::Data_Yobibits, 151115727451828646.838272 }, - { ViewMode::Data, UnitConverterUnits::Data_Yobibytes, 1208925819614629174.706176 }, - { ViewMode::Data, UnitConverterUnits::Data_FloppyDisk, 1.509949 }, - { ViewMode::Data, UnitConverterUnits::Data_CD, 734.003200 }, - { ViewMode::Data, UnitConverterUnits::Data_DVD, 5046.586573 }, + { ViewMode::Data, UnitConverterUnits::Data_Bit, 0.000000125 }, + { ViewMode::Data, UnitConverterUnits::Data_Byte, 0.000001 }, + { ViewMode::Data, UnitConverterUnits::Data_Kilobyte, 0.001 }, + { ViewMode::Data, UnitConverterUnits::Data_Megabyte, 1 }, + { ViewMode::Data, UnitConverterUnits::Data_Gigabyte, 1000 }, + { ViewMode::Data, UnitConverterUnits::Data_Terabyte, 1000000 }, + { ViewMode::Data, UnitConverterUnits::Data_Petabyte, 1000000000 }, + { ViewMode::Data, UnitConverterUnits::Data_Exabytes, 1000000000000 }, + { ViewMode::Data, UnitConverterUnits::Data_Zetabytes, 1000000000000000 }, + { ViewMode::Data, UnitConverterUnits::Data_Yottabyte, 1000000000000000000 }, + { ViewMode::Data, UnitConverterUnits::Data_Kilobit, 0.000125 }, + { ViewMode::Data, UnitConverterUnits::Data_Megabit, 0.125 }, + { ViewMode::Data, UnitConverterUnits::Data_Gigabit, 125 }, + { ViewMode::Data, UnitConverterUnits::Data_Terabit, 125000 }, + { ViewMode::Data, UnitConverterUnits::Data_Petabit, 125000000 }, + { ViewMode::Data, UnitConverterUnits::Data_Exabits, 125000000000 }, + { ViewMode::Data, UnitConverterUnits::Data_Zetabits, 125000000000000 }, + { ViewMode::Data, UnitConverterUnits::Data_Yottabit, 125000000000000000 }, + { ViewMode::Data, UnitConverterUnits::Data_Gibibits, 134.217728 }, + { ViewMode::Data, UnitConverterUnits::Data_Gibibytes, 1073.741824 }, + { ViewMode::Data, UnitConverterUnits::Data_Kibibits, 0.000128 }, + { ViewMode::Data, UnitConverterUnits::Data_Kibibytes, 0.001024 }, + { ViewMode::Data, UnitConverterUnits::Data_Mebibits, 0.131072 }, + { ViewMode::Data, UnitConverterUnits::Data_Mebibytes, 1.048576 }, + { ViewMode::Data, UnitConverterUnits::Data_Pebibits, 140737488.355328 }, + { ViewMode::Data, UnitConverterUnits::Data_Pebibytes, 1125899906.842624 }, + { ViewMode::Data, UnitConverterUnits::Data_Tebibits, 137438.953472 }, + { ViewMode::Data, UnitConverterUnits::Data_Tebibytes, 1099511.627776 }, + { ViewMode::Data, UnitConverterUnits::Data_Exbibits, 144115188075.855872 }, + { ViewMode::Data, UnitConverterUnits::Data_Exbibytes, 1152921504606.846976 }, + { ViewMode::Data, UnitConverterUnits::Data_Zebibits, 147573952589676.412928 }, + { ViewMode::Data, UnitConverterUnits::Data_Zebibytes, 1180591620717411.303424 }, + { ViewMode::Data, UnitConverterUnits::Data_Yobibits, 151115727451828646.838272 }, + { ViewMode::Data, UnitConverterUnits::Data_Yobibytes, 1208925819614629174.706176 }, + { ViewMode::Data, UnitConverterUnits::Data_FloppyDisk, 1.509949 }, + { ViewMode::Data, UnitConverterUnits::Data_CD, 734.003200 }, + { ViewMode::Data, UnitConverterUnits::Data_DVD, 5046.586573 }, - { ViewMode::Energy, UnitConverterUnits::Energy_Calorie, 4.184 }, - { ViewMode::Energy, UnitConverterUnits::Energy_Kilocalorie, 4184}, - { ViewMode::Energy, UnitConverterUnits::Energy_BritishThermalUnit, 1055.056 }, - { ViewMode::Energy, UnitConverterUnits::Energy_Kilojoule, 1000 }, - { ViewMode::Energy, UnitConverterUnits::Energy_ElectronVolt, 0.0000000000000000001602176565 }, - { ViewMode::Energy, UnitConverterUnits::Energy_Joule, 1 }, - { ViewMode::Energy, UnitConverterUnits::Energy_FootPound, 1.3558179483314 }, - { ViewMode::Energy, UnitConverterUnits::Energy_Battery, 9000 }, - { ViewMode::Energy, UnitConverterUnits::Energy_Banana, 439614 }, - { ViewMode::Energy, UnitConverterUnits::Energy_SliceOfCake, 1046700 }, + { ViewMode::Energy, UnitConverterUnits::Energy_Calorie, 4.184 }, + { ViewMode::Energy, UnitConverterUnits::Energy_Kilocalorie, 4184 }, + { ViewMode::Energy, UnitConverterUnits::Energy_BritishThermalUnit, 1055.056 }, + { ViewMode::Energy, UnitConverterUnits::Energy_Kilojoule, 1000 }, + { ViewMode::Energy, UnitConverterUnits::Energy_ElectronVolt, 0.0000000000000000001602176565 }, + { ViewMode::Energy, UnitConverterUnits::Energy_Joule, 1 }, + { ViewMode::Energy, UnitConverterUnits::Energy_FootPound, 1.3558179483314 }, + { ViewMode::Energy, UnitConverterUnits::Energy_Battery, 9000 }, + { ViewMode::Energy, UnitConverterUnits::Energy_Banana, 439614 }, + { ViewMode::Energy, UnitConverterUnits::Energy_SliceOfCake, 1046700 }, - { ViewMode::Length, UnitConverterUnits::Length_Inch, 0.0254 }, - { ViewMode::Length, UnitConverterUnits::Length_Foot, 0.3048 }, - { ViewMode::Length, UnitConverterUnits::Length_Yard, 0.9144 }, - { ViewMode::Length, UnitConverterUnits::Length_Mile, 1609.344 }, - { ViewMode::Length, UnitConverterUnits::Length_Micron, 0.000001 }, - { ViewMode::Length, UnitConverterUnits::Length_Millimeter, 0.001 }, - { ViewMode::Length, UnitConverterUnits::Length_Nanometer, 0.000000001 }, - { ViewMode::Length, UnitConverterUnits::Length_Centimeter, 0.01 }, - { ViewMode::Length, UnitConverterUnits::Length_Meter, 1 }, - { ViewMode::Length, UnitConverterUnits::Length_Kilometer, 1000 }, - { ViewMode::Length, UnitConverterUnits::Length_NauticalMile, 1852 }, - { ViewMode::Length, UnitConverterUnits::Length_Paperclip, 0.035052 }, - { ViewMode::Length, UnitConverterUnits::Length_Hand, 0.18669 }, - { ViewMode::Length, UnitConverterUnits::Length_JumboJet, 76 }, + { ViewMode::Length, UnitConverterUnits::Length_Inch, 0.0254 }, + { ViewMode::Length, UnitConverterUnits::Length_Foot, 0.3048 }, + { ViewMode::Length, UnitConverterUnits::Length_Yard, 0.9144 }, + { ViewMode::Length, UnitConverterUnits::Length_Mile, 1609.344 }, + { ViewMode::Length, UnitConverterUnits::Length_Micron, 0.000001 }, + { ViewMode::Length, UnitConverterUnits::Length_Millimeter, 0.001 }, + { ViewMode::Length, UnitConverterUnits::Length_Nanometer, 0.000000001 }, + { ViewMode::Length, UnitConverterUnits::Length_Centimeter, 0.01 }, + { ViewMode::Length, UnitConverterUnits::Length_Meter, 1 }, + { ViewMode::Length, UnitConverterUnits::Length_Kilometer, 1000 }, + { ViewMode::Length, UnitConverterUnits::Length_NauticalMile, 1852 }, + { ViewMode::Length, UnitConverterUnits::Length_Paperclip, 0.035052 }, + { ViewMode::Length, UnitConverterUnits::Length_Hand, 0.18669 }, + { ViewMode::Length, UnitConverterUnits::Length_JumboJet, 76 }, - { ViewMode::Power, UnitConverterUnits::Power_BritishThermalUnitPerMinute, 17.58426666666667 }, - { ViewMode::Power, UnitConverterUnits::Power_FootPoundPerMinute, 0.0225969658055233 }, - { ViewMode::Power, UnitConverterUnits::Power_Watt, 1 }, - { ViewMode::Power, UnitConverterUnits::Power_Kilowatt, 1000 }, - { ViewMode::Power, UnitConverterUnits::Power_Horsepower, 745.69987158227022 }, - { ViewMode::Power, UnitConverterUnits::Power_LightBulb, 60 }, - { ViewMode::Power, UnitConverterUnits::Power_Horse, 745.7 }, - { ViewMode::Power, UnitConverterUnits::Power_TrainEngine, 2982799.486329081 }, + { ViewMode::Power, UnitConverterUnits::Power_BritishThermalUnitPerMinute, 17.58426666666667 }, + { ViewMode::Power, UnitConverterUnits::Power_FootPoundPerMinute, 0.0225969658055233 }, + { ViewMode::Power, UnitConverterUnits::Power_Watt, 1 }, + { ViewMode::Power, UnitConverterUnits::Power_Kilowatt, 1000 }, + { ViewMode::Power, UnitConverterUnits::Power_Horsepower, 745.69987158227022 }, + { ViewMode::Power, UnitConverterUnits::Power_LightBulb, 60 }, + { ViewMode::Power, UnitConverterUnits::Power_Horse, 745.7 }, + { ViewMode::Power, UnitConverterUnits::Power_TrainEngine, 2982799.486329081 }, - { ViewMode::Time, UnitConverterUnits::Time_Day, 86400 }, - { ViewMode::Time, UnitConverterUnits::Time_Second, 1 }, - { ViewMode::Time, UnitConverterUnits::Time_Week, 604800 }, - { ViewMode::Time, UnitConverterUnits::Time_Year, 31557600 }, - { ViewMode::Time, UnitConverterUnits::Time_Millisecond, 0.001 }, - { ViewMode::Time, UnitConverterUnits::Time_Microsecond, 0.000001 }, - { ViewMode::Time, UnitConverterUnits::Time_Minute, 60 }, - { ViewMode::Time, UnitConverterUnits::Time_Hour, 3600 }, + { ViewMode::Time, UnitConverterUnits::Time_Day, 86400 }, + { ViewMode::Time, UnitConverterUnits::Time_Second, 1 }, + { ViewMode::Time, UnitConverterUnits::Time_Week, 604800 }, + { ViewMode::Time, UnitConverterUnits::Time_Year, 31557600 }, + { ViewMode::Time, UnitConverterUnits::Time_Millisecond, 0.001 }, + { ViewMode::Time, UnitConverterUnits::Time_Microsecond, 0.000001 }, + { ViewMode::Time, UnitConverterUnits::Time_Minute, 60 }, + { ViewMode::Time, UnitConverterUnits::Time_Hour, 3600 }, - { ViewMode::Volume, UnitConverterUnits::Volume_CupUS, 236.588237 }, - { ViewMode::Volume, UnitConverterUnits::Volume_PintUS, 473.176473 }, - { ViewMode::Volume, UnitConverterUnits::Volume_PintUK, 568.26125 }, - { ViewMode::Volume, UnitConverterUnits::Volume_QuartUS, 946.352946 }, - { ViewMode::Volume, UnitConverterUnits::Volume_QuartUK, 1136.5225 }, - { ViewMode::Volume, UnitConverterUnits::Volume_GallonUS, 3785.411784 }, - { ViewMode::Volume, UnitConverterUnits::Volume_GallonUK, 4546.09 }, - { ViewMode::Volume, UnitConverterUnits::Volume_Liter, 1000 }, - { ViewMode::Volume, UnitConverterUnits::Volume_TeaspoonUS, 4.92892159375 }, - { ViewMode::Volume, UnitConverterUnits::Volume_TablespoonUS, 14.78676478125 }, - { ViewMode::Volume, UnitConverterUnits::Volume_CubicCentimeter, 1 }, - { ViewMode::Volume, UnitConverterUnits::Volume_CubicYard, 764554.857984 }, - { ViewMode::Volume, UnitConverterUnits::Volume_CubicMeter, 1000000 }, - { ViewMode::Volume, UnitConverterUnits::Volume_Milliliter, 1 }, - { ViewMode::Volume, UnitConverterUnits::Volume_CubicInch, 16.387064 }, - { ViewMode::Volume, UnitConverterUnits::Volume_CubicFoot, 28316.846592 }, - { ViewMode::Volume, UnitConverterUnits::Volume_FluidOunceUS, 29.5735295625 }, - { ViewMode::Volume, UnitConverterUnits::Volume_FluidOunceUK, 28.4130625 }, - { ViewMode::Volume, UnitConverterUnits::Volume_TeaspoonUK, 5.91938802083333333333 }, - { ViewMode::Volume, UnitConverterUnits::Volume_TablespoonUK, 17.7581640625 }, - { ViewMode::Volume, UnitConverterUnits::Volume_CoffeeCup, 236.5882 }, - { ViewMode::Volume, UnitConverterUnits::Volume_Bathtub, 378541.2 }, - { ViewMode::Volume, UnitConverterUnits::Volume_SwimmingPool, 3750000000 }, + { ViewMode::Volume, UnitConverterUnits::Volume_CupUS, 236.588237 }, + { ViewMode::Volume, UnitConverterUnits::Volume_PintUS, 473.176473 }, + { ViewMode::Volume, UnitConverterUnits::Volume_PintUK, 568.26125 }, + { ViewMode::Volume, UnitConverterUnits::Volume_QuartUS, 946.352946 }, + { ViewMode::Volume, UnitConverterUnits::Volume_QuartUK, 1136.5225 }, + { ViewMode::Volume, UnitConverterUnits::Volume_GallonUS, 3785.411784 }, + { ViewMode::Volume, UnitConverterUnits::Volume_GallonUK, 4546.09 }, + { ViewMode::Volume, UnitConverterUnits::Volume_Liter, 1000 }, + { ViewMode::Volume, UnitConverterUnits::Volume_TeaspoonUS, 4.92892159375 }, + { ViewMode::Volume, UnitConverterUnits::Volume_TablespoonUS, 14.78676478125 }, + { ViewMode::Volume, UnitConverterUnits::Volume_CubicCentimeter, 1 }, + { ViewMode::Volume, UnitConverterUnits::Volume_CubicYard, 764554.857984 }, + { ViewMode::Volume, UnitConverterUnits::Volume_CubicMeter, 1000000 }, + { ViewMode::Volume, UnitConverterUnits::Volume_Milliliter, 1 }, + { ViewMode::Volume, UnitConverterUnits::Volume_CubicInch, 16.387064 }, + { ViewMode::Volume, UnitConverterUnits::Volume_CubicFoot, 28316.846592 }, + { ViewMode::Volume, UnitConverterUnits::Volume_FluidOunceUS, 29.5735295625 }, + { ViewMode::Volume, UnitConverterUnits::Volume_FluidOunceUK, 28.4130625 }, + { ViewMode::Volume, UnitConverterUnits::Volume_TeaspoonUK, 5.91938802083333333333 }, + { ViewMode::Volume, UnitConverterUnits::Volume_TablespoonUK, 17.7581640625 }, + { ViewMode::Volume, UnitConverterUnits::Volume_CoffeeCup, 236.5882 }, + { ViewMode::Volume, UnitConverterUnits::Volume_Bathtub, 378541.2 }, + { ViewMode::Volume, UnitConverterUnits::Volume_SwimmingPool, 3750000000 }, - { ViewMode::Weight, UnitConverterUnits::Weight_Kilogram, 1 }, - { ViewMode::Weight, UnitConverterUnits::Weight_Hectogram, 0.1 }, - { ViewMode::Weight, UnitConverterUnits::Weight_Decagram, 0.01 }, - { ViewMode::Weight, UnitConverterUnits::Weight_Gram, 0.001 }, - { ViewMode::Weight, UnitConverterUnits::Weight_Pound, 0.45359237 }, - { ViewMode::Weight, UnitConverterUnits::Weight_Ounce, 0.028349523125 }, - { ViewMode::Weight, UnitConverterUnits::Weight_Milligram, 0.000001 }, - { ViewMode::Weight, UnitConverterUnits::Weight_Centigram, 0.00001 }, - { ViewMode::Weight, UnitConverterUnits::Weight_Decigram, 0.0001 }, - { ViewMode::Weight, UnitConverterUnits::Weight_LongTon, 1016.0469088 }, - { ViewMode::Weight, UnitConverterUnits::Weight_Tonne, 1000 }, - { ViewMode::Weight, UnitConverterUnits::Weight_Stone, 6.35029318 }, - { ViewMode::Weight, UnitConverterUnits::Weight_Carat, 0.0002 }, - { ViewMode::Weight, UnitConverterUnits::Weight_ShortTon, 907.18474 }, - { ViewMode::Weight, UnitConverterUnits::Weight_Snowflake, 0.000002 }, - { ViewMode::Weight, UnitConverterUnits::Weight_SoccerBall, 0.4325 }, - { ViewMode::Weight, UnitConverterUnits::Weight_Elephant, 4000 }, - { ViewMode::Weight, UnitConverterUnits::Weight_Whale, 90000 }, + { ViewMode::Weight, UnitConverterUnits::Weight_Kilogram, 1 }, + { ViewMode::Weight, UnitConverterUnits::Weight_Hectogram, 0.1 }, + { ViewMode::Weight, UnitConverterUnits::Weight_Decagram, 0.01 }, + { ViewMode::Weight, UnitConverterUnits::Weight_Gram, 0.001 }, + { ViewMode::Weight, UnitConverterUnits::Weight_Pound, 0.45359237 }, + { ViewMode::Weight, UnitConverterUnits::Weight_Ounce, 0.028349523125 }, + { ViewMode::Weight, UnitConverterUnits::Weight_Milligram, 0.000001 }, + { ViewMode::Weight, UnitConverterUnits::Weight_Centigram, 0.00001 }, + { ViewMode::Weight, UnitConverterUnits::Weight_Decigram, 0.0001 }, + { ViewMode::Weight, UnitConverterUnits::Weight_LongTon, 1016.0469088 }, + { ViewMode::Weight, UnitConverterUnits::Weight_Tonne, 1000 }, + { ViewMode::Weight, UnitConverterUnits::Weight_Stone, 6.35029318 }, + { ViewMode::Weight, UnitConverterUnits::Weight_Carat, 0.0002 }, + { ViewMode::Weight, UnitConverterUnits::Weight_ShortTon, 907.18474 }, + { ViewMode::Weight, UnitConverterUnits::Weight_Snowflake, 0.000002 }, + { ViewMode::Weight, UnitConverterUnits::Weight_SoccerBall, 0.4325 }, + { ViewMode::Weight, UnitConverterUnits::Weight_Elephant, 4000 }, + { ViewMode::Weight, UnitConverterUnits::Weight_Whale, 90000 }, - { ViewMode::Speed, UnitConverterUnits::Speed_CentimetersPerSecond, 1 }, - { ViewMode::Speed, UnitConverterUnits::Speed_FeetPerSecond, 30.48 }, - { ViewMode::Speed, UnitConverterUnits::Speed_KilometersPerHour, 27.777777777777777777778 }, - { ViewMode::Speed, UnitConverterUnits::Speed_Knot, 51.44 }, - { ViewMode::Speed, UnitConverterUnits::Speed_Mach, 34030 }, - { ViewMode::Speed, UnitConverterUnits::Speed_MetersPerSecond, 100 }, - { ViewMode::Speed, UnitConverterUnits::Speed_MilesPerHour, 44.7 }, - { ViewMode::Speed, UnitConverterUnits::Speed_Turtle, 8.94 }, - { ViewMode::Speed, UnitConverterUnits::Speed_Horse, 2011.5 }, - { ViewMode::Speed, UnitConverterUnits::Speed_Jet, 24585 }, + { ViewMode::Speed, UnitConverterUnits::Speed_CentimetersPerSecond, 1 }, + { ViewMode::Speed, UnitConverterUnits::Speed_FeetPerSecond, 30.48 }, + { ViewMode::Speed, UnitConverterUnits::Speed_KilometersPerHour, 27.777777777777777777778 }, + { ViewMode::Speed, UnitConverterUnits::Speed_Knot, 51.44 }, + { ViewMode::Speed, UnitConverterUnits::Speed_Mach, 34030 }, + { ViewMode::Speed, UnitConverterUnits::Speed_MetersPerSecond, 100 }, + { ViewMode::Speed, UnitConverterUnits::Speed_MilesPerHour, 44.7 }, + { ViewMode::Speed, UnitConverterUnits::Speed_Turtle, 8.94 }, + { ViewMode::Speed, UnitConverterUnits::Speed_Horse, 2011.5 }, + { ViewMode::Speed, UnitConverterUnits::Speed_Jet, 24585 }, - { ViewMode::Angle, UnitConverterUnits::Angle_Degree, 1 }, - { ViewMode::Angle, UnitConverterUnits::Angle_Radian, 57.29577951308233 }, - { ViewMode::Angle, UnitConverterUnits::Angle_Gradian, 0.9 }, + { ViewMode::Angle, UnitConverterUnits::Angle_Degree, 1 }, + { ViewMode::Angle, UnitConverterUnits::Angle_Radian, 57.29577951308233 }, + { ViewMode::Angle, UnitConverterUnits::Angle_Gradian, 0.9 }, - { ViewMode::Pressure, UnitConverterUnits::Pressure_Atmosphere, 1 }, - { ViewMode::Pressure, UnitConverterUnits::Pressure_Bar, 0.9869232667160128 }, - { ViewMode::Pressure, UnitConverterUnits::Pressure_KiloPascal, 0.0098692326671601 }, - { ViewMode::Pressure, UnitConverterUnits::Pressure_MillimeterOfMercury, 0.0013155687145324 }, - { ViewMode::Pressure, UnitConverterUnits::Pressure_Pascal, 9.869232667160128e-6 }, - { ViewMode::Pressure, UnitConverterUnits::Pressure_PSI, 0.068045961016531 } - }; + { ViewMode::Pressure, UnitConverterUnits::Pressure_Atmosphere, 1 }, + { ViewMode::Pressure, UnitConverterUnits::Pressure_Bar, 0.9869232667160128 }, + { ViewMode::Pressure, UnitConverterUnits::Pressure_KiloPascal, 0.0098692326671601 }, + { ViewMode::Pressure, UnitConverterUnits::Pressure_MillimeterOfMercury, 0.0013155687145324 }, + { ViewMode::Pressure, UnitConverterUnits::Pressure_Pascal, 9.869232667160128e-6 }, + { ViewMode::Pressure, UnitConverterUnits::Pressure_PSI, 0.068045961016531 } }; // Populate the hash map and return; for (UnitData unitdata : unitDataList) @@ -563,40 +707,43 @@ void UnitConverterDataLoader::GetConversionData(_In_ unordered_map(unitdata.unitId, unitdata.factor)); } } - } +} - wstring UnitConverterDataLoader::GetLocalizedStringName(String^ stringId) - { - return AppResourceProvider::GetInstance().GetResourceString(stringId)->Data(); - } +wstring UnitConverterDataLoader::GetLocalizedStringName(String ^ stringId) +{ + return AppResourceProvider::GetInstance().GetResourceString(stringId)->Data(); +} - void UnitConverterDataLoader::GetExplicitConversionData(_In_ unordered_map>& unitToUnitConversionList) - { - /* categoryId, ParentUnitId, UnitId, ratio, offset, offsetfirst*/ - ExplicitUnitConversionData conversionDataList[] = { - { ViewMode::Temperature, UnitConverterUnits::Temperature_DegreesCelsius, UnitConverterUnits::Temperature_DegreesCelsius , 1, 0 }, - { ViewMode::Temperature, UnitConverterUnits::Temperature_DegreesCelsius, UnitConverterUnits::Temperature_DegreesFahrenheit, 1.8, 32 }, - { ViewMode::Temperature, UnitConverterUnits::Temperature_DegreesCelsius, UnitConverterUnits::Temperature_Kelvin, 1, 273.15 }, - { ViewMode::Temperature, UnitConverterUnits::Temperature_DegreesFahrenheit, UnitConverterUnits::Temperature_DegreesCelsius, 0.55555555555555555555555555555556, -32, CONVERT_WITH_OFFSET_FIRST }, - { ViewMode::Temperature, UnitConverterUnits::Temperature_DegreesFahrenheit, UnitConverterUnits::Temperature_DegreesFahrenheit, 1, 0 }, - { ViewMode::Temperature, UnitConverterUnits::Temperature_DegreesFahrenheit, UnitConverterUnits::Temperature_Kelvin, 0.55555555555555555555555555555556, 459.67, CONVERT_WITH_OFFSET_FIRST }, - { ViewMode::Temperature, UnitConverterUnits::Temperature_Kelvin, UnitConverterUnits::Temperature_DegreesCelsius, 1, -273.15, CONVERT_WITH_OFFSET_FIRST }, - { ViewMode::Temperature, UnitConverterUnits::Temperature_Kelvin, UnitConverterUnits::Temperature_DegreesFahrenheit, 1.8, -459.67 }, - { ViewMode::Temperature, UnitConverterUnits::Temperature_Kelvin, UnitConverterUnits::Temperature_Kelvin, 1, 0 } - }; +void UnitConverterDataLoader::GetExplicitConversionData(_In_ unordered_map>& unitToUnitConversionList) +{ + /* categoryId, ParentUnitId, UnitId, ratio, offset, offsetfirst*/ + ExplicitUnitConversionData conversionDataList[] = { + { ViewMode::Temperature, UnitConverterUnits::Temperature_DegreesCelsius, UnitConverterUnits::Temperature_DegreesCelsius, 1, 0 }, + { ViewMode::Temperature, UnitConverterUnits::Temperature_DegreesCelsius, UnitConverterUnits::Temperature_DegreesFahrenheit, 1.8, 32 }, + { ViewMode::Temperature, UnitConverterUnits::Temperature_DegreesCelsius, UnitConverterUnits::Temperature_Kelvin, 1, 273.15 }, + { ViewMode::Temperature, UnitConverterUnits::Temperature_DegreesFahrenheit, UnitConverterUnits::Temperature_DegreesCelsius, + 0.55555555555555555555555555555556, -32, CONVERT_WITH_OFFSET_FIRST }, + { ViewMode::Temperature, UnitConverterUnits::Temperature_DegreesFahrenheit, UnitConverterUnits::Temperature_DegreesFahrenheit, 1, 0 }, + { ViewMode::Temperature, UnitConverterUnits::Temperature_DegreesFahrenheit, UnitConverterUnits::Temperature_Kelvin, 0.55555555555555555555555555555556, + 459.67, CONVERT_WITH_OFFSET_FIRST }, + { ViewMode::Temperature, UnitConverterUnits::Temperature_Kelvin, UnitConverterUnits::Temperature_DegreesCelsius, 1, -273.15, + CONVERT_WITH_OFFSET_FIRST }, + { ViewMode::Temperature, UnitConverterUnits::Temperature_Kelvin, UnitConverterUnits::Temperature_DegreesFahrenheit, 1.8, -459.67 }, + { ViewMode::Temperature, UnitConverterUnits::Temperature_Kelvin, UnitConverterUnits::Temperature_Kelvin, 1, 0 } + }; - // Populate the hash map and return; - for (ExplicitUnitConversionData data : conversionDataList) - { - if (unitToUnitConversionList.find(data.parentUnitId) == unitToUnitConversionList.end()) - { - unordered_map conversionData; - conversionData.insert(pair(data.unitId, static_cast(data))); - unitToUnitConversionList.insert(pair>(data.parentUnitId, conversionData)); - } - else - { - unitToUnitConversionList.at(data.parentUnitId).insert(pair(data.unitId, static_cast(data))); - } - } - } + // Populate the hash map and return; + for (ExplicitUnitConversionData data : conversionDataList) + { + if (unitToUnitConversionList.find(data.parentUnitId) == unitToUnitConversionList.end()) + { + unordered_map conversionData; + conversionData.insert(pair(data.unitId, static_cast(data))); + unitToUnitConversionList.insert(pair>(data.parentUnitId, conversionData)); + } + else + { + unitToUnitConversionList.at(data.parentUnitId).insert(pair(data.unitId, static_cast(data))); + } + } +} diff --git a/src/CalcViewModel/DataLoaders/UnitConverterDataLoader.h b/src/CalcViewModel/DataLoaders/UnitConverterDataLoader.h index 519ffda9..31a4bdf1 100644 --- a/src/CalcViewModel/DataLoaders/UnitConverterDataLoader.h +++ b/src/CalcViewModel/DataLoaders/UnitConverterDataLoader.h @@ -12,9 +12,12 @@ namespace CalculatorApp { struct OrderedUnit : UnitConversionManager::Unit { - OrderedUnit(){} + OrderedUnit() + { + } - OrderedUnit(int id, std::wstring name, std::wstring abbreviation, int order, bool isConversionSource = false, bool isConversionTarget = false, bool isWhimsical = false) + OrderedUnit(int id, std::wstring name, std::wstring abbreviation, int order, bool isConversionSource = false, bool isConversionTarget = false, + bool isWhimsical = false) : UnitConversionManager::Unit(id, name, abbreviation, isConversionSource, isConversionTarget, isWhimsical), order(order) { } @@ -31,11 +34,13 @@ namespace CalculatorApp struct ExplicitUnitConversionData : UnitConversionManager::ConversionData { - ExplicitUnitConversionData(){} - ExplicitUnitConversionData(CalculatorApp::Common::ViewMode categoryId, int parentUnitId, int unitId, double ratio, double offset, bool offsetFirst = false) : - categoryId(categoryId), parentUnitId(parentUnitId), unitId(unitId), UnitConversionManager::ConversionData(ratio, offset, offsetFirst) + ExplicitUnitConversionData() + { + } + ExplicitUnitConversionData(CalculatorApp::Common::ViewMode categoryId, int parentUnitId, int unitId, double ratio, double offset, + bool offsetFirst = false) + : categoryId(categoryId), parentUnitId(parentUnitId), unitId(unitId), UnitConversionManager::ConversionData(ratio, offset, offsetFirst) { - } CalculatorApp::Common::ViewMode categoryId; @@ -43,32 +48,33 @@ namespace CalculatorApp int unitId; }; - class UnitConverterDataLoader : public UnitConversionManager::IConverterDataLoader, - public std::enable_shared_from_this + class UnitConverterDataLoader : public UnitConversionManager::IConverterDataLoader, public std::enable_shared_from_this { public: - UnitConverterDataLoader(Windows::Globalization::GeographicRegion^ region); + UnitConverterDataLoader(Windows::Globalization::GeographicRegion ^ region); private: // IConverterDataLoader void LoadData() override; std::vector LoadOrderedCategories() override; std::vector LoadOrderedUnits(const UnitConversionManager::Category& c) override; - std::unordered_map LoadOrderedRatios(const UnitConversionManager::Unit& unit) override; + std::unordered_map + LoadOrderedRatios(const UnitConversionManager::Unit& unit) override; bool SupportsCategory(const UnitConversionManager::Category& target) override; // IConverterDataLoader void GetCategories(_In_ std::shared_ptr> categoriesList); void GetUnits(_In_ std::unordered_map>& unitMap); void GetConversionData(_In_ std::unordered_map>& categoryToUnitConversionMap); - void GetExplicitConversionData(_In_ std::unordered_map>& unitToUnitConversionList); + void + GetExplicitConversionData(_In_ std::unordered_map>& unitToUnitConversionList); - std::wstring GetLocalizedStringName(_In_ Platform::String^ stringId); + std::wstring GetLocalizedStringName(_In_ Platform::String ^ stringId); std::shared_ptr> m_categoryList; std::shared_ptr m_categoryToUnits; std::shared_ptr m_ratioMap; - Platform::String^ m_currentRegionCode; + Platform::String ^ m_currentRegionCode; }; } } diff --git a/src/CalcViewModel/DateCalculatorViewModel.cpp b/src/CalcViewModel/DateCalculatorViewModel.cpp index fd4bb71b..d7c325f8 100644 --- a/src/CalcViewModel/DateCalculatorViewModel.cpp +++ b/src/CalcViewModel/DateCalculatorViewModel.cpp @@ -32,18 +32,18 @@ namespace StringReference IsDiffInDaysPropertyName(L"IsDiffInDays"); } -DateCalculatorViewModel::DateCalculatorViewModel() : - m_IsDateDiffMode(true), - m_IsAddMode(true), - m_isOutOfBound(false), - m_DaysOffset(0), - m_MonthsOffset(0), - m_YearsOffset(0), - m_StrDateDiffResult(L""), - m_StrDateDiffResultAutomationName(L""), - m_StrDateDiffResultInDays(L""), - m_StrDateResult(L""), - m_StrDateResultAutomationName(L"") +DateCalculatorViewModel::DateCalculatorViewModel() + : m_IsDateDiffMode(true) + , m_IsAddMode(true) + , m_isOutOfBound(false) + , m_DaysOffset(0) + , m_MonthsOffset(0) + , m_YearsOffset(0) + , m_StrDateDiffResult(L"") + , m_StrDateDiffResultAutomationName(L"") + , m_StrDateDiffResultInDays(L"") + , m_StrDateResult(L"") + , m_StrDateResultAutomationName(L"") { const auto& localizationSettings = LocalizationSettings::GetInstance(); @@ -55,7 +55,7 @@ DateCalculatorViewModel::DateCalculatorViewModel() : // Initialize dates of DatePicker controls to today's date auto calendar = ref new Calendar(); // We force the timezone to UTC, in order to avoid being affected by Daylight Saving Time - // when we calculate the difference between 2 dates. + // when we calculate the difference between 2 dates. calendar->ChangeTimeZone("UTC"); auto today = calendar->GetDateTime(); @@ -74,7 +74,7 @@ DateCalculatorViewModel::DateCalculatorViewModel() : // Initialize the output results UpdateDisplayResult(); - m_offsetValues = ref new Vector(); + m_offsetValues = ref new Vector(); for (int i = 0; i <= c_maxOffsetValue; i++) { wstring numberStr(to_wstring(i)); @@ -95,7 +95,7 @@ DateCalculatorViewModel::DateCalculatorViewModel() : } } -void DateCalculatorViewModel::OnPropertyChanged(_In_ String^ prop) +void DateCalculatorViewModel::OnPropertyChanged(_In_ String ^ prop) { if (prop == StrDateDiffResultPropertyName) { @@ -105,10 +105,8 @@ void DateCalculatorViewModel::OnPropertyChanged(_In_ String^ prop) { UpdateStrDateResultAutomationName(); } - else if (prop != StrDateDiffResultAutomationNamePropertyName - && prop != StrDateDiffResultInDaysPropertyName - && prop != StrDateResultAutomationNamePropertyName - && prop != IsDiffInDaysPropertyName) + else if (prop != StrDateDiffResultAutomationNamePropertyName && prop != StrDateDiffResultInDaysPropertyName + && prop != StrDateResultAutomationNamePropertyName && prop != IsDiffInDaysPropertyName) { OnInputsChanged(); } @@ -167,9 +165,7 @@ void DateCalculatorViewModel::UpdateDisplayResult() StrDateDiffResultInDays = L""; StrDateDiffResult = AppResourceProvider::GetInstance().GetResourceString(L"Date_SameDates"); } - else if ((m_dateDiffResult.year == 0) && - (m_dateDiffResult.month == 0) && - (m_dateDiffResult.week == 0)) + else if ((m_dateDiffResult.year == 0) && (m_dateDiffResult.month == 0) && (m_dateDiffResult.week == 0)) { IsDiffInDays = true; StrDateDiffResultInDays = L""; @@ -205,32 +201,30 @@ void DateCalculatorViewModel::UpdateDisplayResult() void DateCalculatorViewModel::UpdateStrDateDiffResultAutomationName() { - String^ automationFormat = AppResourceProvider::GetInstance().GetResourceString(L"Date_DifferenceResultAutomationName"); + String ^ automationFormat = AppResourceProvider::GetInstance().GetResourceString(L"Date_DifferenceResultAutomationName"); wstring localizedAutomationName = LocalizationStringUtil::GetLocalizedString(automationFormat->Data(), StrDateDiffResult->Data()); StrDateDiffResultAutomationName = ref new String(localizedAutomationName.c_str()); } void DateCalculatorViewModel::UpdateStrDateResultAutomationName() { - String^ automationFormat = AppResourceProvider::GetInstance().GetResourceString(L"Date_ResultingDateAutomationName"); + String ^ automationFormat = AppResourceProvider::GetInstance().GetResourceString(L"Date_ResultingDateAutomationName"); wstring localizedAutomationName = LocalizationStringUtil::GetLocalizedString(automationFormat->Data(), StrDateResult->Data()); StrDateResultAutomationName = ref new String(localizedAutomationName.c_str()); } -void DateCalculatorViewModel::InitializeDateOutputFormats(_In_ String^ calendarIdentifier) +void DateCalculatorViewModel::InitializeDateOutputFormats(_In_ String ^ calendarIdentifier) { // Format for Add/Subtract days - m_dateTimeFormatter = LocalizationService::GetRegionalSettingsAwareDateTimeFormatter( - L"longdate", - calendarIdentifier, - ClockIdentifiers::TwentyFourHour); // Clock Identifier is not used + m_dateTimeFormatter = LocalizationService::GetRegionalSettingsAwareDateTimeFormatter(L"longdate", calendarIdentifier, + ClockIdentifiers::TwentyFourHour); // Clock Identifier is not used // Format for Date Difference m_allDateUnitsOutputFormat = DateUnit::Year | DateUnit::Month | DateUnit::Week | DateUnit::Day; m_daysOutputFormat = DateUnit::Day; } -String^ DateCalculatorViewModel::GetDateDiffString() const +String ^ DateCalculatorViewModel::GetDateDiffString() const { wstring result; bool addDelimiter = false; @@ -333,7 +327,7 @@ String^ DateCalculatorViewModel::GetDateDiffString() const return ref new String(result.data()); } -String^ DateCalculatorViewModel::GetDateDiffStringInDays() const +String ^ DateCalculatorViewModel::GetDateDiffStringInDays() const { wstring result = GetLocalizedNumberString(m_dateDiffResultInDays.day)->Data(); result += L" "; @@ -351,7 +345,7 @@ String^ DateCalculatorViewModel::GetDateDiffStringInDays() const return ref new String(result.data()); } -void DateCalculatorViewModel::OnCopyCommand(Platform::Object^ parameter) +void DateCalculatorViewModel::OnCopyCommand(Platform::Object ^ parameter) { if (m_IsDateDiffMode) { @@ -363,7 +357,7 @@ void DateCalculatorViewModel::OnCopyCommand(Platform::Object^ parameter) } } -String^ DateCalculatorViewModel::GetLocalizedNumberString(int value) const +String ^ DateCalculatorViewModel::GetLocalizedNumberString(int value) const { wstring numberStr(to_wstring(value)); LocalizationSettings::GetInstance().LocalizeDisplayValue(&numberStr); diff --git a/src/CalcViewModel/DateCalculatorViewModel.h b/src/CalcViewModel/DateCalculatorViewModel.h index 2fffa1cc..9423a105 100644 --- a/src/CalcViewModel/DateCalculatorViewModel.h +++ b/src/CalcViewModel/DateCalculatorViewModel.h @@ -12,8 +12,7 @@ namespace CalculatorApp { namespace ViewModel { - [Windows::UI::Xaml::Data::Bindable] - public ref class DateCalculatorViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged + [Windows::UI::Xaml::Data::Bindable] public ref class DateCalculatorViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged { public: DateCalculatorViewModel(); @@ -23,8 +22,8 @@ namespace CalculatorApp // Input Properties OBSERVABLE_PROPERTY_RW(bool, IsDateDiffMode); OBSERVABLE_PROPERTY_RW(bool, IsAddMode); - OBSERVABLE_PROPERTY_R(bool, IsDiffInDays); // If diff is only in days or the dates are the same, - // then show only one result and avoid redundancy + OBSERVABLE_PROPERTY_R(bool, IsDiffInDays); // If diff is only in days or the dates are the same, + // then show only one result and avoid redundancy OBSERVABLE_PROPERTY_RW(int, DaysOffset); OBSERVABLE_PROPERTY_RW(int, MonthsOffset); @@ -39,7 +38,10 @@ namespace CalculatorApp // From date for Date Diff property Windows::Foundation::DateTime FromDate { - Windows::Foundation::DateTime get() { return m_fromDate; } + Windows::Foundation::DateTime get() + { + return m_fromDate; + } void set(Windows::Foundation::DateTime value) { @@ -54,7 +56,10 @@ namespace CalculatorApp // To date for Date Diff property Windows::Foundation::DateTime ToDate { - Windows::Foundation::DateTime get() { return m_toDate; } + Windows::Foundation::DateTime get() + { + return m_toDate; + } void set(Windows::Foundation::DateTime value) { @@ -69,7 +74,10 @@ namespace CalculatorApp // Start date for Add/Subtract date property Windows::Foundation::DateTime StartDate { - Windows::Foundation::DateTime get() { return m_startDate; } + Windows::Foundation::DateTime get() + { + return m_startDate; + } void set(Windows::Foundation::DateTime value) { @@ -82,56 +90,84 @@ namespace CalculatorApp } // Output Properties - OBSERVABLE_PROPERTY_R(Platform::String^, StrDateDiffResult); - OBSERVABLE_PROPERTY_R(Platform::String^, StrDateDiffResultAutomationName); - OBSERVABLE_PROPERTY_R(Platform::String^, StrDateDiffResultInDays); - OBSERVABLE_PROPERTY_R(Platform::String^, StrDateResult); - OBSERVABLE_PROPERTY_R(Platform::String^, StrDateResultAutomationName); + OBSERVABLE_PROPERTY_R(Platform::String ^, StrDateDiffResult); + OBSERVABLE_PROPERTY_R(Platform::String ^, StrDateDiffResultAutomationName); + OBSERVABLE_PROPERTY_R(Platform::String ^, StrDateDiffResultInDays); + OBSERVABLE_PROPERTY_R(Platform::String ^, StrDateResult); + OBSERVABLE_PROPERTY_R(Platform::String ^, StrDateResultAutomationName); COMMAND_FOR_METHOD(CopyCommand, DateCalculatorViewModel::OnCopyCommand); - void OnCopyCommand(Platform::Object^ parameter); + void OnCopyCommand(Platform::Object ^ parameter); private: - void OnPropertyChanged(_In_ Platform::String^ prop); + void OnPropertyChanged(_In_ Platform::String ^ prop); void OnInputsChanged(); void UpdateDisplayResult(); void UpdateStrDateDiffResultAutomationName(); void UpdateStrDateResultAutomationName(); - void InitializeDateOutputFormats(Platform::String^ calendarIdentifier); - Platform::String^ GetDateDiffString() const; - Platform::String^ GetDateDiffStringInDays() const; - Platform::String^ GetLocalizedNumberString(int value) const; + void InitializeDateOutputFormats(Platform::String ^ calendarIdentifier); + Platform::String ^ GetDateDiffString() const; + Platform::String ^ GetDateDiffStringInDays() const; + Platform::String ^ GetLocalizedNumberString(int value) const; static Windows::Foundation::DateTime ClipTime(Windows::Foundation::DateTime dateTime); property bool IsOutOfBound { - bool get() { return m_isOutOfBound; } - void set(bool value) { m_isOutOfBound = value; UpdateDisplayResult(); } + bool get() + { + return m_isOutOfBound; + } + void set(bool value) + { + m_isOutOfBound = value; + UpdateDisplayResult(); + } } property CalculatorApp::Common::DateCalculation::DateDifference DateDiffResult { - CalculatorApp::Common::DateCalculation::DateDifference get() { return m_dateDiffResult; } - void set(CalculatorApp::Common::DateCalculation::DateDifference value) { m_dateDiffResult = value; UpdateDisplayResult(); } + CalculatorApp::Common::DateCalculation::DateDifference get() + { + return m_dateDiffResult; + } + void set(CalculatorApp::Common::DateCalculation::DateDifference value) + { + m_dateDiffResult = value; + UpdateDisplayResult(); + } } property CalculatorApp::Common::DateCalculation::DateDifference DateDiffResultInDays { - CalculatorApp::Common::DateCalculation::DateDifference get() { return m_dateDiffResultInDays; } - void set(CalculatorApp::Common::DateCalculation::DateDifference value) { m_dateDiffResultInDays = value; UpdateDisplayResult(); } + CalculatorApp::Common::DateCalculation::DateDifference get() + { + return m_dateDiffResultInDays; + } + void set(CalculatorApp::Common::DateCalculation::DateDifference value) + { + m_dateDiffResultInDays = value; + UpdateDisplayResult(); + } } property Windows::Foundation::DateTime DateResult { - Windows::Foundation::DateTime get() { return m_dateResult; } - void set(Windows::Foundation::DateTime value) { m_dateResult = value; UpdateDisplayResult();} + Windows::Foundation::DateTime get() + { + return m_dateResult; + } + void set(Windows::Foundation::DateTime value) + { + m_dateResult = value; + UpdateDisplayResult(); + } } private: // Property variables bool m_isOutOfBound; - Platform::Collections::Vector^ m_offsetValues; + Platform::Collections::Vector ^ m_offsetValues; Windows::Foundation::DateTime m_fromDate; Windows::Foundation::DateTime m_toDate; Windows::Foundation::DateTime m_startDate; @@ -143,7 +179,7 @@ namespace CalculatorApp std::shared_ptr m_dateCalcEngine; CalculatorApp::Common::DateCalculation::DateUnit m_daysOutputFormat; CalculatorApp::Common::DateCalculation::DateUnit m_allDateUnitsOutputFormat; - Windows::Globalization::DateTimeFormatting::DateTimeFormatter^ m_dateTimeFormatter; + Windows::Globalization::DateTimeFormatting::DateTimeFormatter ^ m_dateTimeFormatter; std::wstring m_listSeparator; }; } diff --git a/src/CalcViewModel/HistoryItemViewModel.cpp b/src/CalcViewModel/HistoryItemViewModel.cpp index c5cd0784..d4fbde77 100644 --- a/src/CalcViewModel/HistoryItemViewModel.cpp +++ b/src/CalcViewModel/HistoryItemViewModel.cpp @@ -10,17 +10,18 @@ using namespace CalculatorApp::ViewModel; using namespace std; using namespace Platform; - -HistoryItemViewModel::HistoryItemViewModel(String^ expression, String^ result, - _In_ const shared_ptr>> &spTokens, - _In_ const shared_ptr>> &spCommands) :m_expression(expression), m_result(result), m_spTokens(spTokens), m_spCommands(spCommands) +HistoryItemViewModel::HistoryItemViewModel(String ^ expression, String ^ result, _In_ const shared_ptr>>& spTokens, + _In_ const shared_ptr>>& spCommands) + : m_expression(expression), m_result(result), m_spTokens(spTokens), m_spCommands(spCommands) { // updating accessibility names for expression and result m_accExpression = HistoryItemViewModel::GetAccessibleExpressionFromTokens(spTokens, m_expression); m_accResult = LocalizationService::GetNarratorReadableString(m_result); } -String^ HistoryItemViewModel::GetAccessibleExpressionFromTokens(_In_ shared_ptr< CalculatorVector< pair< wstring, int > > > const &spTokens, _In_ String^ fallbackExpression) +String + ^ HistoryItemViewModel::GetAccessibleExpressionFromTokens(_In_ shared_ptr>> const& spTokens, + _In_ String ^ fallbackExpression) { // updating accessibility names for expression and result wstringstream accExpression{}; diff --git a/src/CalcViewModel/HistoryItemViewModel.h b/src/CalcViewModel/HistoryItemViewModel.h index 25822488..3d7e5888 100644 --- a/src/CalcViewModel/HistoryItemViewModel.h +++ b/src/CalcViewModel/HistoryItemViewModel.h @@ -10,18 +10,15 @@ namespace CalculatorApp { namespace ViewModel { - [Windows::UI::Xaml::Data::Bindable] - public ref class HistoryItemViewModel sealed : Windows::UI::Xaml::Data::ICustomPropertyProvider + [Windows::UI::Xaml::Data::Bindable] public ref class HistoryItemViewModel sealed : Windows::UI::Xaml::Data::ICustomPropertyProvider { + internal : - internal: + HistoryItemViewModel(Platform::String ^ expression, Platform::String ^ result, + _In_ std::shared_ptr>> const& spTokens, + _In_ std::shared_ptr>> const& spCommands); - HistoryItemViewModel(Platform::String^ expression, - Platform::String^ result, - _In_ std::shared_ptr>> const &spTokens, - _In_ std::shared_ptr>> const &spCommands); - - std::shared_ptr>> const& GetTokens() + std::shared_ptr>> const& GetTokens() { return m_spTokens; } @@ -32,38 +29,25 @@ namespace CalculatorApp } public: + property Platform::String + ^ Expression { Platform::String ^ get() { return m_expression; } } - property Platform::String^ Expression - { - Platform::String^ get() { return m_expression; } - } + property Platform::String + ^ AccExpression { Platform::String ^ get() { return m_accExpression; } } - property Platform::String^ AccExpression - { - Platform::String^ get() { return m_accExpression; } - } + property Platform::String + ^ Result { Platform::String ^ get() { return m_result; } } - property Platform::String^ Result - { - Platform::String^ get() { return m_result; } - } + property Platform::String + ^ AccResult { Platform::String ^ get() { return m_accResult; } } - property Platform::String^ AccResult - { - Platform::String^ get() { return m_accResult; } - } + virtual Windows::UI::Xaml::Data::ICustomProperty + ^ GetCustomProperty(Platform::String ^ name) { return nullptr; } - virtual Windows::UI::Xaml::Data::ICustomProperty^ GetCustomProperty(Platform::String^ name) - { - return nullptr; - } + virtual Windows::UI::Xaml::Data::ICustomProperty + ^ GetIndexedProperty(Platform::String ^ name, Windows::UI::Xaml::Interop::TypeName type) { return nullptr; } - virtual Windows::UI::Xaml::Data::ICustomProperty^ GetIndexedProperty(Platform::String^ name, Windows::UI::Xaml::Interop::TypeName type) - { - return nullptr; - } - - virtual property Windows::UI::Xaml::Interop::TypeName Type + virtual property Windows::UI::Xaml::Interop::TypeName Type { Windows::UI::Xaml::Interop::TypeName get() { @@ -71,22 +55,19 @@ namespace CalculatorApp } } - virtual Platform::String^ GetStringRepresentation() - { - return m_accExpression + " " + m_accResult; - } + virtual Platform::String + ^ GetStringRepresentation() { return m_accExpression + " " + m_accResult; } + + private : static Platform::String + ^ GetAccessibleExpressionFromTokens(_In_ std::shared_ptr>> const& spTokens, + _In_ Platform::String ^ fallbackExpression); private: - static Platform::String^ GetAccessibleExpressionFromTokens( - _In_ std::shared_ptr>> const &spTokens, - _In_ Platform::String^ fallbackExpression); - - private: - Platform::String^ m_expression; - Platform::String^ m_accExpression; - Platform::String^ m_accResult; - Platform::String^ m_result; - std::shared_ptr>> m_spTokens; + Platform::String ^ m_expression; + Platform::String ^ m_accExpression; + Platform::String ^ m_accResult; + Platform::String ^ m_result; + std::shared_ptr>> m_spTokens; std::shared_ptr>> m_spCommands; }; } diff --git a/src/CalcViewModel/HistoryViewModel.cpp b/src/CalcViewModel/HistoryViewModel.cpp index e3cda23e..6e0b9814 100644 --- a/src/CalcViewModel/HistoryViewModel.cpp +++ b/src/CalcViewModel/HistoryViewModel.cpp @@ -26,13 +26,12 @@ namespace CalculatorApp::ViewModel::HistoryResourceKeys StringReference HistoryCleared(L"HistoryList_Cleared"); } -HistoryViewModel::HistoryViewModel(_In_ CalculationManager::CalculatorManager* calculatorManager) : - m_calculatorManager(calculatorManager), - m_localizedHistoryCleared(nullptr) +HistoryViewModel::HistoryViewModel(_In_ CalculationManager::CalculatorManager* calculatorManager) + : m_calculatorManager(calculatorManager), m_localizedHistoryCleared(nullptr) { AreHistoryShortcutsEnabled = true; - Items = ref new Platform::Collections::Vector(); + Items = ref new Platform::Collections::Vector(); ItemSize = 0; } @@ -59,7 +58,7 @@ void HistoryViewModel::ReloadHistory(_In_ ViewMode currentMode) } auto historyListModel = m_calculatorManager->GetHistoryItems(m_currentMode); - auto historyListVM = ref new Platform::Collections::Vector(); + auto historyListVM = ref new Platform::Collections::Vector(); const auto& localizer = LocalizationSettings::GetInstance(); if (historyListModel.size() > 0) { @@ -70,9 +69,8 @@ void HistoryViewModel::ReloadHistory(_In_ ViewMode currentMode) localizer.LocalizeDisplayValue(&expression); localizer.LocalizeDisplayValue(&result); - auto item = ref new HistoryItemViewModel(ref new Platform::String( expression.c_str()), - ref new Platform::String(result.c_str()), - (*ritr)->historyItemVector.spTokens, (*ritr)->historyItemVector.spCommands); + auto item = ref new HistoryItemViewModel(ref new Platform::String(expression.c_str()), ref new Platform::String(result.c_str()), + (*ritr)->historyItemVector.spTokens, (*ritr)->historyItemVector.spCommands); historyListVM->Append(item); } } @@ -89,15 +87,14 @@ void HistoryViewModel::OnHistoryItemAdded(_In_ unsigned int addedItemIndex) wstring result = newItem->historyItemVector.result; localizer.LocalizeDisplayValue(&expression); localizer.LocalizeDisplayValue(&result); - auto item = ref new HistoryItemViewModel(ref new Platform::String(expression.c_str()), - ref new Platform::String(result.c_str()), - newItem->historyItemVector.spTokens, newItem->historyItemVector.spCommands ); + auto item = ref new HistoryItemViewModel(ref new Platform::String(expression.c_str()), ref new Platform::String(result.c_str()), + newItem->historyItemVector.spTokens, newItem->historyItemVector.spCommands); // check if we have not hit the max items if (Items->Size >= m_calculatorManager->MaxHistorySize()) { // this means the item already exists - Items->RemoveAt(Items->Size -1); + Items->RemoveAt(Items->Size - 1); } assert(addedItemIndex <= m_calculatorManager->MaxHistorySize() && addedItemIndex >= 0); @@ -106,18 +103,18 @@ void HistoryViewModel::OnHistoryItemAdded(_In_ unsigned int addedItemIndex) SaveHistory(); } -void HistoryViewModel::SetCalculatorDisplay(CalculatorDisplay &calculatorDisplay) +void HistoryViewModel::SetCalculatorDisplay(CalculatorDisplay& calculatorDisplay) { WeakReference historyViewModel(this); calculatorDisplay.SetHistoryCallback(historyViewModel); } -void HistoryViewModel::ShowItem(_In_ HistoryItemViewModel^ e) +void HistoryViewModel::ShowItem(_In_ HistoryItemViewModel ^ e) { HistoryItemClicked(e); } -void HistoryViewModel::DeleteItem(_In_ HistoryItemViewModel^ e) +void HistoryViewModel::DeleteItem(_In_ HistoryItemViewModel ^ e) { uint32_t itemIndex; if (Items->IndexOf(e, &itemIndex)) @@ -127,7 +124,7 @@ void HistoryViewModel::DeleteItem(_In_ HistoryItemViewModel^ e) // Keys for the history container are index based. // SaveHistory() re-inserts the items anyway, so it's faster to just clear out the container. CalculationManager::CALCULATOR_MODE currentMode = m_currentMode; - ApplicationDataContainer^ historyContainer = GetHistoryContainer(currentMode); + ApplicationDataContainer ^ historyContainer = GetHistoryContainer(currentMode); historyContainer->Values->Clear(); Items->RemoveAt(itemIndex); @@ -137,13 +134,13 @@ void HistoryViewModel::DeleteItem(_In_ HistoryItemViewModel^ e) } } -void HistoryViewModel::OnHideCommand(_In_ Platform::Object^ e) +void HistoryViewModel::OnHideCommand(_In_ Platform::Object ^ e) { // added at VM layer so that the views do not have to individually raise events HideHistoryClicked(); } -void HistoryViewModel::OnClearCommand(_In_ Platform::Object^ e) +void HistoryViewModel::OnClearCommand(_In_ Platform::Object ^ e) { TraceLogger::GetInstance().LogClearHistory(); if (AreHistoryShortcutsEnabled == true) @@ -165,8 +162,9 @@ void HistoryViewModel::OnClearCommand(_In_ Platform::Object^ e) // this method restores history vector per mode void HistoryViewModel::RestoreHistory(_In_ CalculationManager::CALCULATOR_MODE cMode) { - ApplicationDataContainer^ historyContainer = GetHistoryContainer(cMode); - std::shared_ptr>> historyVector = std::make_shared>>(); + ApplicationDataContainer ^ historyContainer = GetHistoryContainer(cMode); + std::shared_ptr>> historyVector = + std::make_shared>>(); auto historyVectorLength = static_cast(historyContainer->Values->Lookup(HistoryVectorLengthKey)); bool failure = false; @@ -181,7 +179,7 @@ void HistoryViewModel::RestoreHistory(_In_ CalculationManager::CALCULATOR_MODE c std::shared_ptr Item = std::make_shared(item); historyVector->push_back(Item); } - catch (Platform::Exception^ e) + catch (Platform::Exception ^ e) { failure = true; break; @@ -204,19 +202,19 @@ void HistoryViewModel::RestoreHistory(_In_ CalculationManager::CALCULATOR_MODE c } } -Platform::String^ HistoryViewModel::GetHistoryContainerKey(_In_ CalculationManager::CALCULATOR_MODE cMode) +Platform::String ^ HistoryViewModel::GetHistoryContainerKey(_In_ CalculationManager::CALCULATOR_MODE cMode) { - Platform::ValueType^ modeValue = static_cast(cMode); + Platform::ValueType ^ modeValue = static_cast(cMode); return Platform::String::Concat(modeValue->ToString(), L"_History"); } -ApplicationDataContainer^ HistoryViewModel::GetHistoryContainer(_In_ CalculationManager::CALCULATOR_MODE cMode) +ApplicationDataContainer ^ HistoryViewModel::GetHistoryContainer(_In_ CalculationManager::CALCULATOR_MODE cMode) { - ApplicationDataContainer^ localSettings = ApplicationData::Current->LocalSettings; - ApplicationDataContainer^ historyContainer; + ApplicationDataContainer ^ localSettings = ApplicationData::Current->LocalSettings; + ApplicationDataContainer ^ historyContainer; // naming container based on mode - Platform::String^ historyContainerKey = GetHistoryContainerKey(cMode); + Platform::String ^ historyContainerKey = GetHistoryContainerKey(cMode); if (localSettings->Containers->HasKey(historyContainerKey)) { @@ -235,14 +233,14 @@ ApplicationDataContainer^ HistoryViewModel::GetHistoryContainer(_In_ Calculation void HistoryViewModel::ClearHistoryContainer(_In_ CalculationManager::CALCULATOR_MODE cMode) { - ApplicationDataContainer^ localSettings = ApplicationData::Current->LocalSettings; + ApplicationDataContainer ^ localSettings = ApplicationData::Current->LocalSettings; localSettings->DeleteContainer(GetHistoryContainerKey(cMode)); } // this method will be used to update the history item length void HistoryViewModel::UpdateHistoryVectorLength(_In_ int newValue, _In_ CalculationManager::CALCULATOR_MODE cMode) { - ApplicationDataContainer^ historyContainer = GetHistoryContainer(cMode); + ApplicationDataContainer ^ historyContainer = GetHistoryContainer(cMode); historyContainer->Values->Remove(HistoryVectorLengthKey); historyContainer->Values->Insert(HistoryVectorLengthKey, newValue); } @@ -255,11 +253,11 @@ void HistoryViewModel::ClearHistory() void HistoryViewModel::SaveHistory() { - ApplicationDataContainer^ historyContainer = GetHistoryContainer(m_currentMode); + ApplicationDataContainer ^ historyContainer = GetHistoryContainer(m_currentMode); auto currentHistoryVector = m_calculatorManager->GetHistoryItems(m_currentMode); bool failure = false; int index = 0; - Platform::String^ serializedHistoryItem; + Platform::String ^ serializedHistoryItem; for (auto iter = currentHistoryVector.begin(); iter != currentHistoryVector.end(); ++iter) { @@ -268,7 +266,7 @@ void HistoryViewModel::SaveHistory() serializedHistoryItem = SerializeHistoryItem(*iter); historyContainer->Values->Insert(index.ToString(), serializedHistoryItem); } - catch (Platform::Exception^) + catch (Platform::Exception ^) { failure = true; break; @@ -289,9 +287,9 @@ void HistoryViewModel::SaveHistory() } // this serializes a history item into a base64 encoded string -Platform::String^ HistoryViewModel::SerializeHistoryItem(_In_ std::shared_ptr const &item) +Platform::String ^ HistoryViewModel::SerializeHistoryItem(_In_ std::shared_ptr const& item) { - DataWriter^ writer = ref new DataWriter(); + DataWriter ^ writer = ref new DataWriter(); auto expr = item->historyItemVector.expression; auto result = item->historyItemVector.result; auto platformExpr = ref new Platform::String(expr.c_str()); @@ -303,7 +301,7 @@ Platform::String^ HistoryViewModel::SerializeHistoryItem(_In_ std::shared_ptrhistoryItemVector.spTokens, item->historyItemVector.spCommands, writer); - IBuffer^ buffer = writer->DetachBuffer(); + IBuffer ^ buffer = writer->DetachBuffer(); if (buffer == nullptr) { throw ref new Platform::Exception(E_POINTER, ref new Platform::String(L"History Item is NULL")); @@ -312,27 +310,28 @@ Platform::String^ HistoryViewModel::SerializeHistoryItem(_In_ std::shared_ptrValues->HasKey(historyItemKey)) { - Object^ historyItemValues = historyContainer->Values->Lookup(historyItemKey); + Object ^ historyItemValues = historyContainer->Values->Lookup(historyItemKey); if (historyItemValues == nullptr) { throw ref new Platform::Exception(E_POINTER, ref new Platform::String(L"History Item is NULL")); } - String^ historyData = safe_cast(historyItemValues); - IBuffer^ buffer = CryptographicBuffer::DecodeFromBase64String(historyData); + String ^ historyData = safe_cast(historyItemValues); + IBuffer ^ buffer = CryptographicBuffer::DecodeFromBase64String(historyData); if (buffer == nullptr) { throw ref new Platform::Exception(E_POINTER, ref new Platform::String(L"History Item is NULL")); } - DataReader^ reader = DataReader::FromBuffer(buffer); + DataReader ^ reader = DataReader::FromBuffer(buffer); auto exprLen = reader->ReadUInt32(); auto expression = reader->ReadString(exprLen); historyItem.historyItemVector.expression = expression->Data(); @@ -353,10 +352,8 @@ CalculationManager::HISTORYITEM HistoryViewModel::DeserializeHistoryItem(_In_ Pl bool HistoryViewModel::IsValid(_In_ CalculationManager::HISTORYITEM item) { - return (!item.historyItemVector.expression.empty() && - !item.historyItemVector.result.empty() && - (bool)item.historyItemVector.spCommands && - (bool)item.historyItemVector.spTokens); + return (!item.historyItemVector.expression.empty() && !item.historyItemVector.result.empty() && (bool)item.historyItemVector.spCommands + && (bool)item.historyItemVector.spTokens); } void HistoryViewModel::UpdateItemSize() @@ -364,9 +361,9 @@ void HistoryViewModel::UpdateItemSize() ItemSize = Items->Size; } -void HistoryViewModel::MakeHistoryClearedNarratorAnnouncement(String^ resourceKey, String^& formatVariable) +void HistoryViewModel::MakeHistoryClearedNarratorAnnouncement(String ^ resourceKey, String ^ &formatVariable) { - String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement(resourceKey, formatVariable); + String ^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement(resourceKey, formatVariable); HistoryAnnouncement = CalculatorAnnouncement::GetHistoryClearedAnnouncement(announcement); } diff --git a/src/CalcViewModel/HistoryViewModel.h b/src/CalcViewModel/HistoryViewModel.h index 6913fa83..07336c42 100644 --- a/src/CalcViewModel/HistoryViewModel.h +++ b/src/CalcViewModel/HistoryViewModel.h @@ -15,60 +15,60 @@ namespace CalculatorApp namespace ViewModel { - public delegate void HideHistoryClickedHandler(); - public delegate void HistoryItemClickedHandler(CalculatorApp::ViewModel::HistoryItemViewModel^ e); + public + delegate void HideHistoryClickedHandler(); + public + delegate void HistoryItemClickedHandler(CalculatorApp::ViewModel::HistoryItemViewModel ^ e); - [Windows::UI::Xaml::Data::Bindable] - public ref class HistoryViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged + [Windows::UI::Xaml::Data::Bindable] public ref class HistoryViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged { - public: OBSERVABLE_OBJECT(); OBSERVABLE_PROPERTY_RW(int, ItemSize); - OBSERVABLE_PROPERTY_RW(Windows::UI::Xaml::Interop::IBindableObservableVector^, Items); + OBSERVABLE_PROPERTY_RW(Windows::UI::Xaml::Interop::IBindableObservableVector ^, Items); OBSERVABLE_PROPERTY_RW(bool, AreHistoryShortcutsEnabled); - OBSERVABLE_PROPERTY_RW(CalculatorApp::Common::Automation::NarratorAnnouncement^, HistoryAnnouncement); + OBSERVABLE_PROPERTY_RW(CalculatorApp::Common::Automation::NarratorAnnouncement ^, HistoryAnnouncement); void OnHistoryItemAdded(_In_ unsigned int addedItemIndex); COMMAND_FOR_METHOD(HideCommand, HistoryViewModel::OnHideCommand); - void OnHideCommand(_In_ Platform::Object^ e); + void OnHideCommand(_In_ Platform::Object ^ e); COMMAND_FOR_METHOD(ClearCommand, HistoryViewModel::OnClearCommand); - void OnClearCommand(_In_ Platform::Object^ e); + void OnClearCommand(_In_ Platform::Object ^ e); // events that are created - event HideHistoryClickedHandler^ HideHistoryClicked; - event HistoryItemClickedHandler^ HistoryItemClicked; - void ShowItem(_In_ CalculatorApp::ViewModel::HistoryItemViewModel^ e); + event HideHistoryClickedHandler ^ HideHistoryClicked; + event HistoryItemClickedHandler ^ HistoryItemClicked; + void ShowItem(_In_ CalculatorApp::ViewModel::HistoryItemViewModel ^ e); void ClearHistory(); void RestoreCompleteHistory(); - internal: - HistoryViewModel(_In_ CalculationManager::CalculatorManager* calculatorManager); - void SetCalculatorDisplay(CalculatorDisplay &calculatorDisplay); + internal : HistoryViewModel(_In_ CalculationManager::CalculatorManager* calculatorManager); + void SetCalculatorDisplay(CalculatorDisplay& calculatorDisplay); void ReloadHistory(_In_ CalculatorApp::Common::ViewMode currentMode); - void DeleteItem(_In_ CalculatorApp::ViewModel::HistoryItemViewModel^ e); + void DeleteItem(_In_ CalculatorApp::ViewModel::HistoryItemViewModel ^ e); // store history in app data functions - Platform::String^ SerializeHistoryItem(_In_ std::shared_ptr const &item); + Platform::String ^ SerializeHistoryItem(_In_ std::shared_ptr const& item); void SaveHistory(); private: CalculationManager::CalculatorManager* const m_calculatorManager; CalculatorDisplay m_calculatorDisplay; CalculationManager::CALCULATOR_MODE m_currentMode; - Platform::String^ m_localizedHistoryCleared; + Platform::String ^ m_localizedHistoryCleared; void RestoreHistory(_In_ CalculationManager::CALCULATOR_MODE cMode); - CalculationManager::HISTORYITEM DeserializeHistoryItem(_In_ Platform::String^ historyItemKey, _In_ Windows::Storage::ApplicationDataContainer^ historyContainer); - Windows::Storage::ApplicationDataContainer^ GetHistoryContainer(_In_ CalculationManager::CALCULATOR_MODE cMode); - Platform::String^ GetHistoryContainerKey(_In_ CalculationManager::CALCULATOR_MODE cMode); + CalculationManager::HISTORYITEM DeserializeHistoryItem(_In_ Platform::String ^ historyItemKey, + _In_ Windows::Storage::ApplicationDataContainer ^ historyContainer); + Windows::Storage::ApplicationDataContainer ^ GetHistoryContainer(_In_ CalculationManager::CALCULATOR_MODE cMode); + Platform::String ^ GetHistoryContainerKey(_In_ CalculationManager::CALCULATOR_MODE cMode); void ClearHistoryContainer(_In_ CalculationManager::CALCULATOR_MODE cMode); void UpdateHistoryVectorLength(_In_ int newValue, _In_ CalculationManager::CALCULATOR_MODE cMode); bool IsValid(_In_ CalculationManager::HISTORYITEM item); - void MakeHistoryClearedNarratorAnnouncement(Platform::String^ resourceKey, Platform::String^& formatVariable); + void MakeHistoryClearedNarratorAnnouncement(Platform::String ^ resourceKey, Platform::String ^ &formatVariable); friend class CalculatorDisplay; void UpdateItemSize(); diff --git a/src/CalcViewModel/MemoryItemViewModel.h b/src/CalcViewModel/MemoryItemViewModel.h index 948053e6..1a67f3db 100644 --- a/src/CalcViewModel/MemoryItemViewModel.h +++ b/src/CalcViewModel/MemoryItemViewModel.h @@ -14,28 +14,24 @@ namespace CalculatorApp /// /// Model representation of a single item in the Memory list /// - [Windows::UI::Xaml::Data::Bindable] - public ref class MemoryItemViewModel sealed : - public Windows::UI::Xaml::Data::INotifyPropertyChanged, - Windows::UI::Xaml::Data::ICustomPropertyProvider + [Windows::UI::Xaml::Data::Bindable] public ref class MemoryItemViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged, + Windows::UI::Xaml::Data::ICustomPropertyProvider { public: - MemoryItemViewModel(StandardCalculatorViewModel^ calcVM) : m_Position(-1), m_calcVM(calcVM) {} + MemoryItemViewModel(StandardCalculatorViewModel ^ calcVM) : m_Position(-1), m_calcVM(calcVM) + { + } OBSERVABLE_OBJECT(); OBSERVABLE_PROPERTY_RW(int, Position); - OBSERVABLE_PROPERTY_RW(Platform::String^, Value); + OBSERVABLE_PROPERTY_RW(Platform::String ^, Value); - virtual Windows::UI::Xaml::Data::ICustomProperty^ GetCustomProperty(Platform::String^ name) - { - return nullptr; - } + virtual Windows::UI::Xaml::Data::ICustomProperty + ^ GetCustomProperty(Platform::String ^ name) { return nullptr; } - virtual Windows::UI::Xaml::Data::ICustomProperty^ GetIndexedProperty(Platform::String^ name, Windows::UI::Xaml::Interop::TypeName type) - { - return nullptr; - } + virtual Windows::UI::Xaml::Data::ICustomProperty + ^ GetIndexedProperty(Platform::String ^ name, Windows::UI::Xaml::Interop::TypeName type) { return nullptr; } - virtual property Windows::UI::Xaml::Interop::TypeName Type + virtual property Windows::UI::Xaml::Interop::TypeName Type { Windows::UI::Xaml::Interop::TypeName get() { @@ -43,17 +39,15 @@ namespace CalculatorApp } } - virtual Platform::String^ GetStringRepresentation() - { - return Value; - } + virtual Platform::String + ^ GetStringRepresentation() { return Value; } - void Clear(); + void Clear(); void MemoryAdd(); void MemorySubtract(); private: - StandardCalculatorViewModel^ m_calcVM; + StandardCalculatorViewModel ^ m_calcVM; }; } } diff --git a/src/CalcViewModel/StandardCalculatorViewModel.cpp b/src/CalcViewModel/StandardCalculatorViewModel.cpp index d3c71cb3..be656b2e 100644 --- a/src/CalcViewModel/StandardCalculatorViewModel.cpp +++ b/src/CalcViewModel/StandardCalculatorViewModel.cpp @@ -59,45 +59,46 @@ namespace CalculatorResourceKeys StringReference DisplayCopied(L"Display_Copied"); } -StandardCalculatorViewModel::StandardCalculatorViewModel() : - m_DisplayValue(L"0"), - m_DecimalDisplayValue(L"0"), - m_HexDisplayValue(L"0"), - m_BinaryDisplayValue(L"0"), - m_OctalDisplayValue(L"0"), - m_standardCalculatorManager(&m_calculatorDisplay, &m_resourceProvider), - m_ExpressionTokens(ref new Vector()), - m_MemorizedNumbers(ref new Vector()), - m_IsMemoryEmpty(true), - m_IsFToEChecked(false), - m_isShiftChecked(false), - m_IsShiftProgrammerChecked(false), - m_IsQwordEnabled(true), - m_IsDwordEnabled(true), - m_IsWordEnabled(true), - m_IsByteEnabled(true), - m_isBitFlipChecked(false), - m_isBinaryBitFlippingEnabled(false), - m_CurrentRadixType(RADIX_TYPE::DEC_RADIX), - m_CurrentAngleType(NumbersAndOperatorsEnum::Degree), - m_Announcement(nullptr), - m_OpenParenthesisCount(0), - m_feedbackForButtonPress(nullptr), - m_isRtlLanguage(false), - m_localizedMaxDigitsReachedAutomationFormat(nullptr), - m_localizedButtonPressFeedbackAutomationFormat(nullptr), - m_localizedMemorySavedAutomationFormat(nullptr), - m_localizedMemoryItemChangedAutomationFormat(nullptr), - m_localizedMemoryItemClearedAutomationFormat(nullptr), - m_localizedMemoryCleared(nullptr), - m_localizedOpenParenthesisCountChangedAutomationFormat(nullptr), - m_localizedNoRightParenthesisAddedFormat(nullptr) +StandardCalculatorViewModel::StandardCalculatorViewModel() + : m_DisplayValue(L"0") + , m_DecimalDisplayValue(L"0") + , m_HexDisplayValue(L"0") + , m_BinaryDisplayValue(L"0") + , m_OctalDisplayValue(L"0") + , m_standardCalculatorManager(&m_calculatorDisplay, &m_resourceProvider) + , m_ExpressionTokens(ref new Vector()) + , m_MemorizedNumbers(ref new Vector()) + , m_IsMemoryEmpty(true) + , m_IsFToEChecked(false) + , m_isShiftChecked(false) + , m_IsShiftProgrammerChecked(false) + , m_IsQwordEnabled(true) + , m_IsDwordEnabled(true) + , m_IsWordEnabled(true) + , m_IsByteEnabled(true) + , m_isBitFlipChecked(false) + , m_isBinaryBitFlippingEnabled(false) + , m_CurrentRadixType(RADIX_TYPE::DEC_RADIX) + , m_CurrentAngleType(NumbersAndOperatorsEnum::Degree) + , m_Announcement(nullptr) + , m_OpenParenthesisCount(0) + , m_feedbackForButtonPress(nullptr) + , m_isRtlLanguage(false) + , m_localizedMaxDigitsReachedAutomationFormat(nullptr) + , m_localizedButtonPressFeedbackAutomationFormat(nullptr) + , m_localizedMemorySavedAutomationFormat(nullptr) + , m_localizedMemoryItemChangedAutomationFormat(nullptr) + , m_localizedMemoryItemClearedAutomationFormat(nullptr) + , m_localizedMemoryCleared(nullptr) + , m_localizedOpenParenthesisCountChangedAutomationFormat(nullptr) + , m_localizedNoRightParenthesisAddedFormat(nullptr) { WeakReference calculatorViewModel(this); m_calculatorDisplay.SetCallback(calculatorViewModel); m_expressionAutomationNameFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::CalculatorExpression); m_localizedCalculationResultAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::CalculatorResults); - m_localizedCalculationResultDecimalAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::CalculatorResults_DecimalSeparator_Announced); + m_localizedCalculationResultDecimalAutomationFormat = + AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::CalculatorResults_DecimalSeparator_Announced); m_localizedHexaDecimalAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::HexButton); m_localizedDecimalAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::DecButton); m_localizedOctalAutomationFormat = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::OctButton); @@ -132,7 +133,7 @@ StandardCalculatorViewModel::StandardCalculatorViewModel() : m_isLastOperationHistoryLoad = false; } -String^ StandardCalculatorViewModel::LocalizeDisplayValue(_In_ wstring const &displayValue, _In_ bool isError) +String ^ StandardCalculatorViewModel::LocalizeDisplayValue(_In_ wstring const& displayValue, _In_ bool isError) { wstring result(displayValue); @@ -148,10 +149,10 @@ String^ StandardCalculatorViewModel::LocalizeDisplayValue(_In_ wstring const &di return ref new Platform::String(result.c_str()); } -String^ StandardCalculatorViewModel::CalculateNarratorDisplayValue(_In_ wstring const &displayValue, _In_ String^ localizedDisplayValue, _In_ bool isError) +String ^ StandardCalculatorViewModel::CalculateNarratorDisplayValue(_In_ wstring const& displayValue, _In_ String ^ localizedDisplayValue, _In_ bool isError) { - String^ localizedValue = localizedDisplayValue; - String^ automationFormat = m_localizedCalculationResultAutomationFormat; + String ^ localizedValue = localizedDisplayValue; + String ^ automationFormat = m_localizedCalculationResultAutomationFormat; // The narrator doesn't read the decimalSeparator if it's the last character if (Utils::IsLastCharacterTarget(displayValue, m_decimalSeparator)) @@ -173,7 +174,7 @@ String^ StandardCalculatorViewModel::CalculateNarratorDisplayValue(_In_ wstring return GetLocalizedStringFormat(automationFormat, localizedValue); } -String^ StandardCalculatorViewModel::GetNarratorStringReadRawNumbers(_In_ String^ localizedDisplayValue) +String ^ StandardCalculatorViewModel::GetNarratorStringReadRawNumbers(_In_ String ^ localizedDisplayValue) { wstringstream wss; auto& locSettings = LocalizationSettings::GetInstance(); @@ -192,9 +193,9 @@ String^ StandardCalculatorViewModel::GetNarratorStringReadRawNumbers(_In_ String return ref new String(wss.str().c_str()); } -void StandardCalculatorViewModel::SetPrimaryDisplay(_In_ wstring const &displayStringValue, _In_ bool isError) +void StandardCalculatorViewModel::SetPrimaryDisplay(_In_ wstring const& displayStringValue, _In_ bool isError) { - String^ localizedDisplayStringValue = LocalizeDisplayValue(displayStringValue, isError); + String ^ localizedDisplayStringValue = LocalizeDisplayValue(displayStringValue, isError); // Set this variable before the DisplayValue is modified, Otherwise the DisplayValue will // not match what the narrator is saying @@ -234,10 +235,9 @@ void StandardCalculatorViewModel::SetOpenParenthesisCountNarratorAnnouncement() wstring localizedParenthesisCount = to_wstring(m_OpenParenthesisCount).c_str(); LocalizationSettings::GetInstance().LocalizeDisplayValue(&localizedParenthesisCount); - String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement( - CalculatorResourceKeys::OpenParenthesisCountAutomationFormat, - m_localizedOpenParenthesisCountChangedAutomationFormat, - localizedParenthesisCount.c_str()); + String ^ announcement = + LocalizationStringUtil::GetLocalizedNarratorAnnouncement(CalculatorResourceKeys::OpenParenthesisCountAutomationFormat, + m_localizedOpenParenthesisCountChangedAutomationFormat, localizedParenthesisCount.c_str()); Announcement = CalculatorAnnouncement::GetOpenParenthesisCountChangedAnnouncement(announcement); } @@ -249,9 +249,8 @@ void StandardCalculatorViewModel::OnNoRightParenAdded() void StandardCalculatorViewModel::SetNoParenAddedNarratorAnnouncement() { - String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement( - CalculatorResourceKeys::NoParenthesisAdded, - m_localizedNoRightParenthesisAddedFormat); + String ^ announcement = + LocalizationStringUtil::GetLocalizedNarratorAnnouncement(CalculatorResourceKeys::NoParenthesisAdded, m_localizedNoRightParenthesisAddedFormat); Announcement = CalculatorAnnouncement::GetNoRightParenthesisAddedAnnouncement(announcement); } @@ -284,7 +283,8 @@ void StandardCalculatorViewModel::DisableButtons(CommandType selectedExpressionC } } -void StandardCalculatorViewModel::SetExpressionDisplay(_Inout_ shared_ptr>> const &tokens, _Inout_ shared_ptr>> const &commands) +void StandardCalculatorViewModel::SetExpressionDisplay(_Inout_ shared_ptr>> const& tokens, + _Inout_ shared_ptr>> const& commands) { m_tokens = tokens; m_commands = commands; @@ -298,10 +298,11 @@ void StandardCalculatorViewModel::SetExpressionDisplay(_Inout_ shared_ptr>> const &tokens, _Inout_ shared_ptr>> const &commands) +void StandardCalculatorViewModel::SetHistoryExpressionDisplay(_Inout_ shared_ptr>> const& tokens, + _Inout_ shared_ptr>> const& commands) { m_tokens = make_shared>>(*tokens); - m_commands = make_shared>>(*commands); + m_commands = make_shared>>(*commands); IsEditingEnabled = false; // Setting the History Item Load Mode so that UI does not get updated with recalculation of every token @@ -311,7 +312,7 @@ void StandardCalculatorViewModel::SetHistoryExpressionDisplay(_Inout_ shared_ptr m_isLastOperationHistoryLoad = true; } -void StandardCalculatorViewModel::SetTokens(_Inout_ shared_ptr>> const &tokens) +void StandardCalculatorViewModel::SetTokens(_Inout_ shared_ptr>> const& tokens) { AreTokensUpdated = false; @@ -324,7 +325,7 @@ void StandardCalculatorViewModel::SetTokens(_Inout_ shared_ptr currentToken; + pair currentToken; const auto& localizer = LocalizationSettings::GetInstance(); const wstring separator = L" "; @@ -362,7 +363,6 @@ void StandardCalculatorViewModel::SetTokens(_Inout_ shared_ptrInsertAt(i, expressionToken); } - } else { @@ -378,9 +378,9 @@ void StandardCalculatorViewModel::SetTokens(_Inout_ shared_ptrToken); @@ -405,7 +405,7 @@ void StandardCalculatorViewModel::SetMemorizedNumbers(const vector& new size_t newValuePosition = newMemorizedNumbers.size() - MemorizedNumbers->Size - 1; auto stringValue = newMemorizedNumbers.at(newValuePosition); - MemoryItemViewModel^ memorySlot = ref new MemoryItemViewModel(this); + MemoryItemViewModel ^ memorySlot = ref new MemoryItemViewModel(this); memorySlot->Position = 0; localizer.LocalizeDisplayValue(&stringValue); memorySlot->Value = Utils::LRO + ref new String(stringValue.c_str()) + Utils::PDF; @@ -432,7 +432,6 @@ void StandardCalculatorViewModel::SetMemorizedNumbers(const vector& new { MemorizedNumbers->GetAt(i)->Value = Utils::LRO + ref new String(newStringValue.c_str()) + Utils::PDF; } - } } } @@ -444,7 +443,7 @@ void StandardCalculatorViewModel::FtoEButtonToggled() void StandardCalculatorViewModel::HandleUpdatedOperandData(Command cmdenum) { - DisplayExpressionToken^ displayExpressionToken = ExpressionTokens->GetAt(m_tokenPosition); + DisplayExpressionToken ^ displayExpressionToken = ExpressionTokens->GetAt(m_tokenPosition); if (displayExpressionToken == nullptr) { return; @@ -571,7 +570,7 @@ void StandardCalculatorViewModel::HandleUpdatedOperandData(Command cmdenum) } } - String^ updatedData = ref new String(temp); + String ^ updatedData = ref new String(temp); UpdateOperand(m_tokenPosition, updatedData); displayExpressionToken->Token = updatedData; IsOperandUpdatedUsingViewModel = true; @@ -581,8 +580,9 @@ void StandardCalculatorViewModel::HandleUpdatedOperandData(Command cmdenum) bool StandardCalculatorViewModel::IsOperator(Command cmdenum) { if ((cmdenum >= Command::Command0 && cmdenum <= Command::Command9) || (cmdenum == Command::CommandPNT) || (cmdenum == Command::CommandBACK) - || (cmdenum == Command::CommandEXP) || (cmdenum == Command::CommandFE) || (cmdenum == Command::ModeBasic) || (cmdenum == Command::ModeProgrammer) || (cmdenum == Command::ModeScientific) - || (cmdenum == Command::CommandINV) || (cmdenum == Command::CommandCENTR) || (cmdenum == Command::CommandDEG) || (cmdenum == Command::CommandRAD) || (cmdenum == Command::CommandGRAD) + || (cmdenum == Command::CommandEXP) || (cmdenum == Command::CommandFE) || (cmdenum == Command::ModeBasic) || (cmdenum == Command::ModeProgrammer) + || (cmdenum == Command::ModeScientific) || (cmdenum == Command::CommandINV) || (cmdenum == Command::CommandCENTR) || (cmdenum == Command::CommandDEG) + || (cmdenum == Command::CommandRAD) || (cmdenum == Command::CommandGRAD) || ((cmdenum >= Command::CommandBINEDITSTART) && (cmdenum <= Command::CommandBINEDITEND))) { return false; @@ -590,7 +590,7 @@ bool StandardCalculatorViewModel::IsOperator(Command cmdenum) return true; } -void StandardCalculatorViewModel::OnButtonPressed(Object^ parameter) +void StandardCalculatorViewModel::OnButtonPressed(Object ^ parameter) { m_feedbackForButtonPress = CalculatorButtonPressedEventArgs::GetAuditoryFeedbackFromCommandParameter(parameter); NumbersAndOperatorsEnum numOpEnum = CalculatorButtonPressedEventArgs::GetOperationFromCommandParameter(parameter); @@ -608,12 +608,9 @@ void StandardCalculatorViewModel::OnButtonPressed(Object^ parameter) } } - if (IsEditingEnabled && - numOpEnum != NumbersAndOperatorsEnum::IsScientificMode && - numOpEnum != NumbersAndOperatorsEnum::IsStandardMode && - numOpEnum != NumbersAndOperatorsEnum::IsProgrammerMode && - numOpEnum != NumbersAndOperatorsEnum::FToE && - (numOpEnum != NumbersAndOperatorsEnum::Degree) && (numOpEnum != NumbersAndOperatorsEnum::Radians) && (numOpEnum != NumbersAndOperatorsEnum::Grads)) + if (IsEditingEnabled && numOpEnum != NumbersAndOperatorsEnum::IsScientificMode && numOpEnum != NumbersAndOperatorsEnum::IsStandardMode + && numOpEnum != NumbersAndOperatorsEnum::IsProgrammerMode && numOpEnum != NumbersAndOperatorsEnum::FToE + && (numOpEnum != NumbersAndOperatorsEnum::Degree) && (numOpEnum != NumbersAndOperatorsEnum::Radians) && (numOpEnum != NumbersAndOperatorsEnum::Grads)) { if (!m_keyPressed) { @@ -622,9 +619,8 @@ void StandardCalculatorViewModel::OnButtonPressed(Object^ parameter) } else { - if (numOpEnum == NumbersAndOperatorsEnum::IsStandardMode || - numOpEnum == NumbersAndOperatorsEnum::IsScientificMode || - numOpEnum == NumbersAndOperatorsEnum::IsProgrammerMode) + if (numOpEnum == NumbersAndOperatorsEnum::IsStandardMode || numOpEnum == NumbersAndOperatorsEnum::IsScientificMode + || numOpEnum == NumbersAndOperatorsEnum::IsProgrammerMode) { IsEditingEnabled = false; } @@ -634,10 +630,8 @@ void StandardCalculatorViewModel::OnButtonPressed(Object^ parameter) } else { - if (numOpEnum == NumbersAndOperatorsEnum::Clear || - numOpEnum == NumbersAndOperatorsEnum::ClearEntry || - numOpEnum == NumbersAndOperatorsEnum::IsStandardMode || - numOpEnum == NumbersAndOperatorsEnum::IsProgrammerMode) + if (numOpEnum == NumbersAndOperatorsEnum::Clear || numOpEnum == NumbersAndOperatorsEnum::ClearEntry + || numOpEnum == NumbersAndOperatorsEnum::IsStandardMode || numOpEnum == NumbersAndOperatorsEnum::IsProgrammerMode) { // On Clear('C') the F-E button needs to be UnChecked if it in Checked state. // Also, the Primary Display Value should not show in exponential format. @@ -653,7 +647,8 @@ void StandardCalculatorViewModel::OnButtonPressed(Object^ parameter) { m_CurrentAngleType = numOpEnum; } - if ((cmdenum >= Command::Command0 && cmdenum <= Command::Command9) || (cmdenum == Command::CommandPNT) || (cmdenum == Command::CommandBACK) || (cmdenum == Command::CommandEXP)) + if ((cmdenum >= Command::Command0 && cmdenum <= Command::Command9) || (cmdenum == Command::CommandPNT) || (cmdenum == Command::CommandBACK) + || (cmdenum == Command::CommandEXP)) { IsOperatorCommand = false; } @@ -662,8 +657,9 @@ void StandardCalculatorViewModel::OnButtonPressed(Object^ parameter) IsOperatorCommand = true; } - if (m_isLastOperationHistoryLoad && - ((numOpEnum != NumbersAndOperatorsEnum::Degree) && (numOpEnum != NumbersAndOperatorsEnum::Radians) && (numOpEnum != NumbersAndOperatorsEnum::Grads))) + if (m_isLastOperationHistoryLoad + && ((numOpEnum != NumbersAndOperatorsEnum::Degree) && (numOpEnum != NumbersAndOperatorsEnum::Radians) + && (numOpEnum != NumbersAndOperatorsEnum::Grads))) { IsFToEEnabled = true; m_isLastOperationHistoryLoad = false; @@ -712,18 +708,17 @@ int StandardCalculatorViewModel::GetNumberBase() { return BinBase; } - } -void StandardCalculatorViewModel::OnCopyCommand(Object^ parameter) +void StandardCalculatorViewModel::OnCopyCommand(Object ^ parameter) { CopyPasteManager::CopyToClipboard(GetRawDisplayValue()); - String^ announcement = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::DisplayCopied); + String ^ announcement = AppResourceProvider::GetInstance().GetResourceString(CalculatorResourceKeys::DisplayCopied); Announcement = CalculatorAnnouncement::GetDisplayCopiedAnnouncement(announcement); } -void StandardCalculatorViewModel::OnPasteCommand(Object^ parameter) +void StandardCalculatorViewModel::OnPasteCommand(Object ^ parameter) { ViewMode mode; int NumberBase = -1; @@ -749,11 +744,8 @@ void StandardCalculatorViewModel::OnPasteCommand(Object^ parameter) } // Ensure that the paste happens on the UI thread - CopyPasteManager::GetStringToPaste(mode, NavCategory::GetGroupType(mode), NumberBase, bitLengthType).then( - [this, mode](String^ pastedString) - { - OnPaste(pastedString, mode); - }, concurrency::task_continuation_context::use_current()); + CopyPasteManager::GetStringToPaste(mode, NavCategory::GetGroupType(mode), NumberBase, bitLengthType) + .then([this, mode](String ^ pastedString) { OnPaste(pastedString, mode); }, concurrency::task_continuation_context::use_current()); } CalculationManager::Command StandardCalculatorViewModel::ConvertToOperatorsEnum(NumbersAndOperatorsEnum operation) @@ -761,7 +753,7 @@ CalculationManager::Command StandardCalculatorViewModel::ConvertToOperatorsEnum( return safe_cast(operation); } -void StandardCalculatorViewModel::OnPaste(String^ pastedString, ViewMode mode) +void StandardCalculatorViewModel::OnPaste(String ^ pastedString, ViewMode mode) { // If pastedString is invalid("NoOp") then display pasteError else process the string if (pastedString == StringReference(CopyPasteManager::PasteErrorString)) @@ -901,19 +893,18 @@ void StandardCalculatorViewModel::OnPaste(String^ pastedString, ViewMode mode) } } -void StandardCalculatorViewModel::OnClearMemoryCommand( - Object^ parameter) +void StandardCalculatorViewModel::OnClearMemoryCommand(Object ^ parameter) { m_standardCalculatorManager.MemorizedNumberClearAll(); int windowId = Utils::GetWindowId(); TraceLogger::GetInstance().LogMemoryClearAll(windowId); - String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement(CalculatorResourceKeys::MemoryCleared, m_localizedMemoryCleared); + String ^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement(CalculatorResourceKeys::MemoryCleared, m_localizedMemoryCleared); Announcement = CalculatorAnnouncement::GetMemoryClearedAnnouncement(announcement); } -void StandardCalculatorViewModel::OnPinUnpinCommand(Object^ parameter) +void StandardCalculatorViewModel::OnPinUnpinCommand(Object ^ parameter) { SetViewPinnedState(!IsViewPinned()); } @@ -923,15 +914,12 @@ bool StandardCalculatorViewModel::IsViewPinned() return m_IsCurrentViewPinned; } -void StandardCalculatorViewModel::SetViewPinnedState( - bool pinned) +void StandardCalculatorViewModel::SetViewPinnedState(bool pinned) { IsCurrentViewPinned = pinned; } -NumbersAndOperatorsEnum StandardCalculatorViewModel::MapCharacterToButtonId( - const wchar_t ch, - bool& canSendNegate) +NumbersAndOperatorsEnum StandardCalculatorViewModel::MapCharacterToButtonId(const wchar_t ch, bool& canSendNegate) { NumbersAndOperatorsEnum mappedValue = NumbersAndOperatorsEnum::None; canSendNegate = false; @@ -1025,7 +1013,8 @@ NumbersAndOperatorsEnum StandardCalculatorViewModel::MapCharacterToButtonId( { if (LocalizationSettings::GetInstance().IsLocalizedDigit(ch)) { - mappedValue = NumbersAndOperatorsEnum::Zero + static_cast(ch - LocalizationSettings::GetInstance().GetDigitSymbolFromEnUsDigit('0')); + mappedValue = + NumbersAndOperatorsEnum::Zero + static_cast(ch - LocalizationSettings::GetInstance().GetDigitSymbolFromEnUsDigit('0')); canSendNegate = true; } } @@ -1046,10 +1035,8 @@ void StandardCalculatorViewModel::OnMemoryButtonPressed() int windowId = Utils::GetWindowId(); TraceLogger::GetInstance().InsertIntoMemoryMap(windowId, IsStandard, IsScientific, IsProgrammer); - String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement( - CalculatorResourceKeys::MemorySave, - m_localizedMemorySavedAutomationFormat, - m_DisplayValue->Data()); + String ^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement(CalculatorResourceKeys::MemorySave, m_localizedMemorySavedAutomationFormat, + m_DisplayValue->Data()); Announcement = CalculatorAnnouncement::GetMemoryItemAddedAnnouncement(announcement); } @@ -1058,27 +1045,24 @@ void StandardCalculatorViewModel::OnMemoryItemChanged(unsigned int indexOfMemory { if (indexOfMemory < MemorizedNumbers->Size) { - MemoryItemViewModel^ memSlot = MemorizedNumbers->GetAt(indexOfMemory); - String^ localizedValue = memSlot->Value; + MemoryItemViewModel ^ memSlot = MemorizedNumbers->GetAt(indexOfMemory); + String ^ localizedValue = memSlot->Value; wstring localizedIndex = to_wstring(indexOfMemory + 1); LocalizationSettings::GetInstance().LocalizeDisplayValue(&localizedIndex); - String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement( - CalculatorResourceKeys::MemoryItemChanged, - m_localizedMemoryItemChangedAutomationFormat, - localizedIndex.c_str(), - localizedValue->Data()); + String ^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement( + CalculatorResourceKeys::MemoryItemChanged, m_localizedMemoryItemChangedAutomationFormat, localizedIndex.c_str(), localizedValue->Data()); Announcement = CalculatorAnnouncement::GetMemoryItemChangedAnnouncement(announcement); } } -void StandardCalculatorViewModel::OnMemoryItemPressed(Object^ memoryItemPosition) +void StandardCalculatorViewModel::OnMemoryItemPressed(Object ^ memoryItemPosition) { if (MemorizedNumbers && MemorizedNumbers->Size > 0) { - auto boxedPosition = safe_cast^>(memoryItemPosition); + auto boxedPosition = safe_cast ^>(memoryItemPosition); m_standardCalculatorManager.MemorizedNumberLoad(boxedPosition->Value); HideMemoryClicked(); int windowId = Utils::GetWindowId(); @@ -1086,14 +1070,14 @@ void StandardCalculatorViewModel::OnMemoryItemPressed(Object^ memoryItemPosition } } -void StandardCalculatorViewModel::OnMemoryAdd(Object^ memoryItemPosition) +void StandardCalculatorViewModel::OnMemoryAdd(Object ^ memoryItemPosition) { // M+ will add display to memorylist if memory list is empty. int windowId = Utils::GetWindowId(); if (MemorizedNumbers) { - auto boxedPosition = safe_cast^>(memoryItemPosition); + auto boxedPosition = safe_cast ^>(memoryItemPosition); if (MemorizedNumbers->Size > 0) { TraceLogger::GetInstance().LogMemoryUsed(windowId, boxedPosition->Value, IsStandard, IsScientific, IsProgrammer, MemorizedNumbers->Size); @@ -1107,14 +1091,14 @@ void StandardCalculatorViewModel::OnMemoryAdd(Object^ memoryItemPosition) } } -void StandardCalculatorViewModel::OnMemorySubtract(Object^ memoryItemPosition) +void StandardCalculatorViewModel::OnMemorySubtract(Object ^ memoryItemPosition) { int windowId = Utils::GetWindowId(); // M- will add negative of displayed number to memorylist if memory list is empty. if (MemorizedNumbers) { - auto boxedPosition = safe_cast^>(memoryItemPosition); + auto boxedPosition = safe_cast ^>(memoryItemPosition); if (MemorizedNumbers->Size > 0) { TraceLogger::GetInstance().LogMemoryUsed(windowId, boxedPosition->Value, IsStandard, IsScientific, IsProgrammer, MemorizedNumbers->Size); @@ -1128,12 +1112,12 @@ void StandardCalculatorViewModel::OnMemorySubtract(Object^ memoryItemPosition) } } -void StandardCalculatorViewModel::OnMemoryClear(_In_ Object^ memoryItemPosition) +void StandardCalculatorViewModel::OnMemoryClear(_In_ Object ^ memoryItemPosition) { if (MemorizedNumbers && MemorizedNumbers->Size > 0) { int windowId = Utils::GetWindowId(); - auto boxedPosition = safe_cast^>(memoryItemPosition); + auto boxedPosition = safe_cast ^>(memoryItemPosition); if (boxedPosition->Value >= 0) { @@ -1157,19 +1141,17 @@ void StandardCalculatorViewModel::OnMemoryClear(_In_ Object^ memoryItemPosition) wstring localizedIndex = to_wstring(boxedPosition->Value + 1); LocalizationSettings::GetInstance().LocalizeDisplayValue(&localizedIndex); - String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement( - CalculatorResourceKeys::MemoryItemCleared, - m_localizedMemoryItemClearedAutomationFormat, - localizedIndex.c_str()); + String ^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement( + CalculatorResourceKeys::MemoryItemCleared, m_localizedMemoryItemClearedAutomationFormat, localizedIndex.c_str()); Announcement = CalculatorAnnouncement::GetMemoryClearedAnnouncement(announcement); } } } -Array^ StandardCalculatorViewModel::Serialize() +Array ^ StandardCalculatorViewModel::Serialize() { - DataWriter^ writer = ref new DataWriter(); + DataWriter ^ writer = ref new DataWriter(); writer->WriteUInt32(static_cast(m_CurrentAngleType)); writer->WriteBoolean(IsFToEChecked); writer->WriteBoolean(IsCurrentViewPinned); @@ -1207,26 +1189,26 @@ Array^ StandardCalculatorViewModel::Serialize() } // Convert viewmodel data in writer to bytes - IBuffer^ buffer = writer->DetachBuffer(); - DataReader^ reader = DataReader::FromBuffer(buffer); - Platform::Array^ viewModelDataAsBytes = ref new Array(buffer->Length); + IBuffer ^ buffer = writer->DetachBuffer(); + DataReader ^ reader = DataReader::FromBuffer(buffer); + Platform::Array ^ viewModelDataAsBytes = ref new Array(buffer->Length); reader->ReadBytes(viewModelDataAsBytes); // Return byte array return viewModelDataAsBytes; } -void StandardCalculatorViewModel::Deserialize(Array^ state) +void StandardCalculatorViewModel::Deserialize(Array ^ state) { // Read byte array into a buffer - DataWriter^ writer = ref new DataWriter(); + DataWriter ^ writer = ref new DataWriter(); writer->WriteBytes(state); - IBuffer^ buffer = writer->DetachBuffer(); + IBuffer ^ buffer = writer->DetachBuffer(); // Read view model data if (buffer->Length != 0) { - DataReader^ reader = DataReader::FromBuffer(buffer); + DataReader ^ reader = DataReader::FromBuffer(buffer); m_CurrentAngleType = ConvertIntegerToNumbersAndOperatorsEnum(reader->ReadUInt32()); IsFToEChecked = reader->ReadBoolean(); @@ -1256,7 +1238,7 @@ void StandardCalculatorViewModel::Deserialize(Array^ state) CurrentRadixType = reader->ReadUInt32(); // Read command data and Deserialize UINT32 modeldatalength = reader->ReadUInt32(); - Array^ modelDataAsBytes = ref new Array(modeldatalength); + Array ^ modelDataAsBytes = ref new Array(modeldatalength); reader->ReadBytes(modelDataAsBytes); m_standardCalculatorManager.DeSerializeCommands(vector(modelDataAsBytes->begin(), modelDataAsBytes->end())); @@ -1265,13 +1247,13 @@ void StandardCalculatorViewModel::Deserialize(Array^ state) if (IsInError) { shared_ptr>> commandVector = Utils::DeserializeCommands(reader); - shared_ptr>> tokenVector = Utils::DeserializeTokens(reader); + shared_ptr>> tokenVector = Utils::DeserializeTokens(reader); SetExpressionDisplay(tokenVector, commandVector); } } } -void StandardCalculatorViewModel::OnPropertyChanged(String^ propertyname) +void StandardCalculatorViewModel::OnPropertyChanged(String ^ propertyname) { if (propertyname == IsScientificPropertyName) { @@ -1331,7 +1313,7 @@ void StandardCalculatorViewModel::SetCalculatorType(ViewMode targetState) } } -Platform::String^ StandardCalculatorViewModel::GetRawDisplayValue() +Platform::String ^ StandardCalculatorViewModel::GetRawDisplayValue() { wstring rawValue; @@ -1343,13 +1325,12 @@ Platform::String^ StandardCalculatorViewModel::GetRawDisplayValue() // Given a format string, returns a string with the input display value inserted. // 'format' is a localized string containing a %1 formatting mark where the display value should be inserted. // 'displayValue' is a localized string containing a numerical value to be displayed to the user. -String^ StandardCalculatorViewModel::GetLocalizedStringFormat(String^ format, String^ displayValue) +String ^ StandardCalculatorViewModel::GetLocalizedStringFormat(String ^ format, String ^ displayValue) { - String^ localizedString = ref new String(LocalizationStringUtil::GetLocalizedString(format->Data(), displayValue->Data()).c_str()); + String ^ localizedString = ref new String(LocalizationStringUtil::GetLocalizedString(format->Data(), displayValue->Data()).c_str()); return localizedString; } - void StandardCalculatorViewModel::ResetDisplay() { AreHEXButtonsEnabled = false; @@ -1427,29 +1408,29 @@ void StandardCalculatorViewModel::SaveEditedCommand(_In_ unsigned int tokenPosit switch (nOpCode) { - case static_cast(Command::CommandASIN) : - updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast(Command::CommandSIN), true, angleType); - break; - case static_cast(Command::CommandACOS) : - updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast(Command::CommandCOS), true, angleType); - break; - case static_cast(Command::CommandATAN) : - updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast(Command::CommandTAN), true, angleType); - break; - case static_cast(Command::CommandASINH) : - updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast(Command::CommandSINH), true, angleType); - break; - case static_cast(Command::CommandACOSH) : - updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast(Command::CommandCOSH), true, angleType); - break; - case static_cast(Command::CommandATANH) : - updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast(Command::CommandTANH), true, angleType); - break; - case static_cast(Command::CommandPOWE) : - updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast(Command::CommandLN), true, angleType); - break; - default: - updatedToken = CCalcEngine::OpCodeToUnaryString(nOpCode, false, angleType); + case static_cast(Command::CommandASIN): + updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast(Command::CommandSIN), true, angleType); + break; + case static_cast(Command::CommandACOS): + updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast(Command::CommandCOS), true, angleType); + break; + case static_cast(Command::CommandATAN): + updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast(Command::CommandTAN), true, angleType); + break; + case static_cast(Command::CommandASINH): + updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast(Command::CommandSINH), true, angleType); + break; + case static_cast(Command::CommandACOSH): + updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast(Command::CommandCOSH), true, angleType); + break; + case static_cast(Command::CommandATANH): + updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast(Command::CommandTANH), true, angleType); + break; + case static_cast(Command::CommandPOWE): + updatedToken = CCalcEngine::OpCodeToUnaryString(static_cast(Command::CommandLN), true, angleType); + break; + default: + updatedToken = CCalcEngine::OpCodeToUnaryString(nOpCode, false, angleType); } if ((token.first.length() > 0) && (token.first[token.first.length() - 1] == L'(')) { @@ -1488,12 +1469,12 @@ void StandardCalculatorViewModel::SaveEditedCommand(_In_ unsigned int tokenPosit { IFTPlatformException(m_commands->SetAt(tokenCommandIndex, tokenCommand)); - pair < wstring, int> selectedToken; + pair selectedToken; IFTPlatformException(m_tokens->GetAt(tokenPosition, &selectedToken)); selectedToken.first = updatedToken; IFTPlatformException(m_tokens->SetAt(tokenPosition, selectedToken)); - DisplayExpressionToken^ displayExpressionToken = ExpressionTokens->GetAt(tokenPosition); + DisplayExpressionToken ^ displayExpressionToken = ExpressionTokens->GetAt(tokenPosition); displayExpressionToken->Token = ref new Platform::String(updatedToken.c_str()); // Special casing @@ -1509,7 +1490,7 @@ void StandardCalculatorViewModel::Recalculate(bool fromHistory) { // Recalculate Command currentDegreeMode = m_standardCalculatorManager.GetCurrentDegreeMode(); - shared_ptr >> savedCommands = make_shared >>(); + shared_ptr>> savedCommands = make_shared>>(); vector currentCommands; unsigned int commandListCount; @@ -1601,7 +1582,7 @@ void StandardCalculatorViewModel::Recalculate(bool fromHistory) m_standardCalculatorManager.SendCommand(static_cast(currentCommands[i])); } - if (fromHistory) // This is for the cases where the expression is loaded from history + if (fromHistory) // This is for the cases where the expression is loaded from history { // To maintain F-E state of the engine, as the last operand hasn't reached engine by now m_standardCalculatorManager.SendCommand(Command::CommandFE); @@ -1618,7 +1599,7 @@ void StandardCalculatorViewModel::Recalculate(bool fromHistory) CommandType StandardCalculatorViewModel::GetSelectedTokenType(_In_ unsigned int tokenPosition) { - pairtoken; + pair token; shared_ptr tokenCommand; IFTPlatformException(m_tokens->GetAt(tokenPosition, &token)); @@ -1630,20 +1611,8 @@ CommandType StandardCalculatorViewModel::GetSelectedTokenType(_In_ unsigned int bool StandardCalculatorViewModel::IsOpnd(int nOpCode) { - - static Command opnd[] = { - Command::Command0, - Command::Command1, - Command::Command2, - Command::Command3, - Command::Command4, - Command::Command5, - Command::Command6, - Command::Command7, - Command::Command8, - Command::Command9, - Command::CommandPNT - }; + static Command opnd[] = { Command::Command0, Command::Command1, Command::Command2, Command::Command3, Command::Command4, Command::Command5, + Command::Command6, Command::Command7, Command::Command8, Command::Command9, Command::CommandPNT }; for (unsigned int i = 0; i < size(opnd); i++) { @@ -1657,24 +1626,10 @@ bool StandardCalculatorViewModel::IsOpnd(int nOpCode) bool StandardCalculatorViewModel::IsUnaryOp(int nOpCode) { - static Command unaryOp[] = { - Command::CommandSQRT, - Command::CommandFAC, - Command::CommandSQR, - Command::CommandLOG, - Command::CommandPOW10, - Command::CommandPOWE, - Command::CommandLN, - Command::CommandREC, - Command::CommandSIGN, - Command::CommandSINH, - Command::CommandASINH, - Command::CommandCOSH, - Command::CommandACOSH, - Command::CommandTANH, - Command::CommandATANH, - Command::CommandCUB - }; + static Command unaryOp[] = { Command::CommandSQRT, Command::CommandFAC, Command::CommandSQR, Command::CommandLOG, + Command::CommandPOW10, Command::CommandPOWE, Command::CommandLN, Command::CommandREC, + Command::CommandSIGN, Command::CommandSINH, Command::CommandASINH, Command::CommandCOSH, + Command::CommandACOSH, Command::CommandTANH, Command::CommandATANH, Command::CommandCUB }; for (unsigned int i = 0; i < size(unaryOp); i++) { @@ -1695,12 +1650,7 @@ bool StandardCalculatorViewModel::IsUnaryOp(int nOpCode) bool StandardCalculatorViewModel::IsTrigOp(int nOpCode) { static Command trigOp[] = { - Command::CommandSIN, - Command::CommandCOS, - Command::CommandTAN, - Command::CommandASIN, - Command::CommandACOS, - Command::CommandATAN + Command::CommandSIN, Command::CommandCOS, Command::CommandTAN, Command::CommandASIN, Command::CommandACOS, Command::CommandATAN }; for (unsigned int i = 0; i < size(trigOp); i++) @@ -1715,16 +1665,8 @@ bool StandardCalculatorViewModel::IsTrigOp(int nOpCode) bool StandardCalculatorViewModel::IsBinOp(int nOpCode) { - static Command binOp[] = { - Command::CommandADD, - Command::CommandSUB, - Command::CommandMUL, - Command::CommandDIV, - Command::CommandEXP, - Command::CommandROOT, - Command::CommandMOD, - Command::CommandPWR - }; + static Command binOp[] = { Command::CommandADD, Command::CommandSUB, Command::CommandMUL, Command::CommandDIV, + Command::CommandEXP, Command::CommandROOT, Command::CommandMOD, Command::CommandPWR }; for (unsigned int i = 0; i < size(binOp); i++) { @@ -1751,14 +1693,7 @@ bool StandardCalculatorViewModel::IsRecoverableCommand(int nOpCode) return true; } - static Command recoverableCommands[] = { - Command::CommandA, - Command::CommandB, - Command::CommandC, - Command::CommandD, - Command::CommandE, - Command::CommandF - }; + static Command recoverableCommands[] = { Command::CommandA, Command::CommandB, Command::CommandC, Command::CommandD, Command::CommandE, Command::CommandF }; for (unsigned int i = 0; i < size(recoverableCommands); i++) { @@ -1870,12 +1805,12 @@ NumbersAndOperatorsEnum StandardCalculatorViewModel::ConvertIntegerToNumbersAndO return angletype; } -void StandardCalculatorViewModel::UpdateOperand(int pos, String^ text) +void StandardCalculatorViewModel::UpdateOperand(int pos, String ^ text) { pair p; m_tokens->GetAt(pos, &p); - String^ englishString = LocalizationSettings::GetInstance().GetEnglishValueFromLocalizedDigits(text->Data()); + String ^ englishString = LocalizationSettings::GetInstance().GetEnglishValueFromLocalizedDigits(text->Data()); p.first = englishString->Data(); int commandPos = p.second; @@ -1934,7 +1869,7 @@ void StandardCalculatorViewModel::UpdateOperand(int pos, String^ text) } } -void StandardCalculatorViewModel::UpdatecommandsInRecordingMode() +void StandardCalculatorViewModel::UpdatecommandsInRecordingMode() { vector savedCommands = m_standardCalculatorManager.GetSavedCommands(); shared_ptr> commands = make_shared>(); @@ -2002,10 +1937,8 @@ void StandardCalculatorViewModel::UpdatecommandsInRecordingMode() void StandardCalculatorViewModel::OnMaxDigitsReached() { - String^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement( - CalculatorResourceKeys::MaxDigitsReachedFormat, - m_localizedMaxDigitsReachedAutomationFormat, - m_CalculationResultAutomationName->Data()); + String ^ announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement( + CalculatorResourceKeys::MaxDigitsReachedFormat, m_localizedMaxDigitsReachedAutomationFormat, m_CalculationResultAutomationName->Data()); Announcement = CalculatorAnnouncement::GetMaxDigitsReachedAnnouncement(announcement); } @@ -2015,20 +1948,18 @@ void StandardCalculatorViewModel::OnBinaryOperatorReceived() Announcement = GetDisplayUpdatedNarratorAnnouncement(); } -NarratorAnnouncement^ StandardCalculatorViewModel::GetDisplayUpdatedNarratorAnnouncement() +NarratorAnnouncement ^ StandardCalculatorViewModel::GetDisplayUpdatedNarratorAnnouncement() { - String^ announcement; + String ^ announcement; if (m_feedbackForButtonPress == nullptr || m_feedbackForButtonPress->IsEmpty()) { announcement = m_CalculationResultAutomationName; } else { - announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement( - CalculatorResourceKeys::ButtonPressFeedbackFormat, - m_localizedButtonPressFeedbackAutomationFormat, - m_CalculationResultAutomationName->Data(), - m_feedbackForButtonPress->Data()); + announcement = LocalizationStringUtil::GetLocalizedNarratorAnnouncement(CalculatorResourceKeys::ButtonPressFeedbackFormat, + m_localizedButtonPressFeedbackAutomationFormat, + m_CalculationResultAutomationName->Data(), m_feedbackForButtonPress->Data()); } // Make sure we don't accidentally repeat an announcement. diff --git a/src/CalcViewModel/StandardCalculatorViewModel.h b/src/CalcViewModel/StandardCalculatorViewModel.h index f8140a75..fc433752 100644 --- a/src/CalcViewModel/StandardCalculatorViewModel.h +++ b/src/CalcViewModel/StandardCalculatorViewModel.h @@ -29,47 +29,48 @@ namespace CalculatorApp namespace ViewModel { #define ASCII_0 48 - public delegate void HideMemoryClickedHandler(); - public delegate void ProgModeRadixChangeHandler(); + public + delegate void HideMemoryClickedHandler(); + public + delegate void ProgModeRadixChangeHandler(); - [Windows::UI::Xaml::Data::Bindable] - public ref class StandardCalculatorViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged + [Windows::UI::Xaml::Data::Bindable] public ref class StandardCalculatorViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged { public: StandardCalculatorViewModel(); - void UpdateOperand(int pos, Platform::String^ text); + void UpdateOperand(int pos, Platform::String ^ text); void UpdatecommandsInRecordingMode(); int GetBitLengthType(); int GetNumberBase(); OBSERVABLE_OBJECT_CALLBACK(OnPropertyChanged); - OBSERVABLE_PROPERTY_RW(Platform::String^, DisplayValue); - OBSERVABLE_PROPERTY_RW(HistoryViewModel^, HistoryVM); + OBSERVABLE_PROPERTY_RW(Platform::String ^, DisplayValue); + OBSERVABLE_PROPERTY_RW(HistoryViewModel ^, HistoryVM); OBSERVABLE_NAMED_PROPERTY_RW(bool, IsInError); OBSERVABLE_PROPERTY_RW(bool, IsOperatorCommand); - OBSERVABLE_PROPERTY_RW(Platform::String^, DisplayStringExpression); - OBSERVABLE_PROPERTY_R(Windows::Foundation::Collections::IObservableVector^, ExpressionTokens); - OBSERVABLE_PROPERTY_RW(Platform::String^, DecimalDisplayValue); - OBSERVABLE_PROPERTY_RW(Platform::String^, HexDisplayValue); - OBSERVABLE_PROPERTY_RW(Platform::String^, OctalDisplayValue); - OBSERVABLE_NAMED_PROPERTY_RW(Platform::String^, BinaryDisplayValue); - OBSERVABLE_PROPERTY_RW(Platform::String^, HexDisplayValue_AutomationName); - OBSERVABLE_PROPERTY_RW(Platform::String^, DecDisplayValue_AutomationName); - OBSERVABLE_PROPERTY_RW(Platform::String^, OctDisplayValue_AutomationName); - OBSERVABLE_PROPERTY_RW(Platform::String^, BinDisplayValue_AutomationName); + OBSERVABLE_PROPERTY_RW(Platform::String ^, DisplayStringExpression); + OBSERVABLE_PROPERTY_R(Windows::Foundation::Collections::IObservableVector ^, ExpressionTokens); + OBSERVABLE_PROPERTY_RW(Platform::String ^, DecimalDisplayValue); + OBSERVABLE_PROPERTY_RW(Platform::String ^, HexDisplayValue); + OBSERVABLE_PROPERTY_RW(Platform::String ^, OctalDisplayValue); + OBSERVABLE_NAMED_PROPERTY_RW(Platform::String ^, BinaryDisplayValue); + OBSERVABLE_PROPERTY_RW(Platform::String ^, HexDisplayValue_AutomationName); + OBSERVABLE_PROPERTY_RW(Platform::String ^, DecDisplayValue_AutomationName); + OBSERVABLE_PROPERTY_RW(Platform::String ^, OctDisplayValue_AutomationName); + OBSERVABLE_PROPERTY_RW(Platform::String ^, BinDisplayValue_AutomationName); OBSERVABLE_PROPERTY_RW(bool, IsBinaryOperatorEnabled); OBSERVABLE_PROPERTY_RW(bool, IsUnaryOperatorEnabled); OBSERVABLE_PROPERTY_RW(bool, IsNegateEnabled); OBSERVABLE_PROPERTY_RW(bool, IsDecimalEnabled); OBSERVABLE_PROPERTY_RW(bool, IsCurrentViewPinned); - OBSERVABLE_PROPERTY_RW(Windows::Foundation::Collections::IVector^, MemorizedNumbers); + OBSERVABLE_PROPERTY_RW(Windows::Foundation::Collections::IVector ^, MemorizedNumbers); OBSERVABLE_NAMED_PROPERTY_RW(bool, IsMemoryEmpty); OBSERVABLE_PROPERTY_RW(bool, IsFToEChecked); OBSERVABLE_PROPERTY_RW(bool, IsFToEEnabled); OBSERVABLE_PROPERTY_RW(bool, IsHyperbolicChecked); OBSERVABLE_PROPERTY_RW(bool, AreHEXButtonsEnabled); - OBSERVABLE_PROPERTY_RW(Platform::String^, CalculationResultAutomationName); - OBSERVABLE_PROPERTY_RW(Platform::String^, CalculationExpressionAutomationName); + OBSERVABLE_PROPERTY_RW(Platform::String ^, CalculationResultAutomationName); + OBSERVABLE_PROPERTY_RW(Platform::String ^, CalculationExpressionAutomationName); OBSERVABLE_PROPERTY_RW(bool, IsShiftProgrammerChecked); OBSERVABLE_PROPERTY_RW(bool, IsQwordEnabled); OBSERVABLE_PROPERTY_RW(bool, IsDwordEnabled); @@ -79,7 +80,7 @@ namespace CalculatorApp OBSERVABLE_PROPERTY_RW(bool, AreTokensUpdated); OBSERVABLE_PROPERTY_RW(bool, AreHistoryShortcutsEnabled); OBSERVABLE_PROPERTY_RW(bool, AreProgrammerRadixOperatorsEnabled); - OBSERVABLE_PROPERTY_RW(CalculatorApp::Common::Automation::NarratorAnnouncement^, Announcement); + OBSERVABLE_PROPERTY_RW(CalculatorApp::Common::Automation::NarratorAnnouncement ^, Announcement); OBSERVABLE_PROPERTY_R(unsigned int, OpenParenthesisCount); COMMAND_FOR_METHOD(CopyCommand, StandardCalculatorViewModel::OnCopyCommand); @@ -90,11 +91,15 @@ namespace CalculatorApp COMMAND_FOR_METHOD(MemoryAdd, StandardCalculatorViewModel::OnMemoryAdd); COMMAND_FOR_METHOD(MemorySubtract, StandardCalculatorViewModel::OnMemorySubtract); - event HideMemoryClickedHandler^ HideMemoryClicked; - event ProgModeRadixChangeHandler^ ProgModeRadixChange; + event HideMemoryClickedHandler ^ HideMemoryClicked; + event ProgModeRadixChangeHandler ^ ProgModeRadixChange; - property bool IsShiftChecked { - bool get() { return m_isShiftChecked; } + property bool IsShiftChecked + { + bool get() + { + return m_isShiftChecked; + } void set(bool value) { if (m_isShiftChecked != value) @@ -105,8 +110,12 @@ namespace CalculatorApp } } - property bool IsBitFlipChecked { - bool get() { return m_isBitFlipChecked; } + property bool IsBitFlipChecked + { + bool get() + { + return m_isBitFlipChecked; + } void set(bool value) { if (m_isBitFlipChecked != value) @@ -119,8 +128,12 @@ namespace CalculatorApp } } - property bool IsBinaryBitFlippingEnabled { - bool get() { return m_isBinaryBitFlippingEnabled; } + property bool IsBinaryBitFlippingEnabled + { + bool get() + { + return m_isBinaryBitFlippingEnabled; + } void set(bool value) { if (m_isBinaryBitFlippingEnabled != value) @@ -131,8 +144,12 @@ namespace CalculatorApp } } - property bool IsStandard { - bool get() { return m_isStandard; } + property bool IsStandard + { + bool get() + { + return m_isStandard; + } void set(bool value) { if (m_isStandard != value) @@ -148,8 +165,12 @@ namespace CalculatorApp } } - property bool IsScientific { - bool get() { return m_isScientific; } + property bool IsScientific + { + bool get() + { + return m_isScientific; + } void set(bool value) { if (m_isScientific != value) @@ -165,8 +186,12 @@ namespace CalculatorApp } } - property bool IsProgrammer { - bool get() { return m_isProgrammer; } + property bool IsProgrammer + { + bool get() + { + return m_isProgrammer; + } void set(bool value) { if (m_isProgrammer != value) @@ -188,9 +213,14 @@ namespace CalculatorApp } } - property bool IsEditingEnabled { - bool get() { return m_isEditingEnabled; } - void set(bool value) { + property bool IsEditingEnabled + { + bool get() + { + return m_isEditingEnabled; + } + void set(bool value) + { if (m_isEditingEnabled != value) { // Numbers::Common::KeyboardShortcutManager::IsCalculatorInEditingMode = value; @@ -206,13 +236,22 @@ namespace CalculatorApp } } - property bool IsEngineRecording { - bool get() { return m_standardCalculatorManager.IsEngineRecording(); } + property bool IsEngineRecording + { + bool get() + { + return m_standardCalculatorManager.IsEngineRecording(); + } } - property bool IsOperandEnabled { - bool get() { return m_isOperandEnabled; } - void set(bool value) { + property bool IsOperandEnabled + { + bool get() + { + return m_isOperandEnabled; + } + void set(bool value) + { if (m_isOperandEnabled != value) { m_isOperandEnabled = value; @@ -226,8 +265,14 @@ namespace CalculatorApp property int TokenPosition { - int get() { return m_tokenPosition; } - void set(int value) { m_tokenPosition = value; } + int get() + { + return m_tokenPosition; + } + void set(int value) + { + m_tokenPosition = value; + } } property Platform::String^ SelectedExpressionLastData @@ -238,42 +283,61 @@ namespace CalculatorApp property bool KeyPressed { - bool get() { return m_keyPressed; } - void set(bool value) { m_keyPressed = value; } + bool get() + { + return m_keyPressed; + } + void set(bool value) + { + m_keyPressed = value; + } } property bool IsOperandUpdatedUsingViewModel { - bool get() { return m_operandUpdated; } - void set(bool value) { m_operandUpdated = value; } + bool get() + { + return m_operandUpdated; + } + void set(bool value) + { + m_operandUpdated = value; + } } property bool IsOperandTextCompletelySelected { - bool get() { return m_completeTextSelection; } - void set(bool value) { m_completeTextSelection = value; } + bool get() + { + return m_completeTextSelection; + } + void set(bool value) + { + m_completeTextSelection = value; + } } - internal: - void OnPaste(Platform::String^ pastedString, CalculatorApp::Common::ViewMode mode); - void OnCopyCommand(Platform::Object^ parameter); - void OnPasteCommand(Platform::Object^ parameter); + internal : void OnPaste(Platform::String ^ pastedString, CalculatorApp::Common::ViewMode mode); + void OnCopyCommand(Platform::Object ^ parameter); + void OnPasteCommand(Platform::Object ^ parameter); NumbersAndOperatorsEnum MapCharacterToButtonId(const wchar_t ch, bool& canSendNegate); // Memory feature related methods. They are internal because they need to called from the MainPage code-behind void OnMemoryButtonPressed(); - void OnMemoryItemPressed(Platform::Object^ memoryItemPosition); - void OnMemoryAdd(Platform::Object^ memoryItemPosition); - void OnMemorySubtract(Platform::Object^ memoryItemPosition); - void OnMemoryClear(_In_ Platform::Object^ memoryItemPosition); - void OnPinUnpinCommand(Platform::Object^ parameter); + void OnMemoryItemPressed(Platform::Object ^ memoryItemPosition); + void OnMemoryAdd(Platform::Object ^ memoryItemPosition); + void OnMemorySubtract(Platform::Object ^ memoryItemPosition); + void OnMemoryClear(_In_ Platform::Object ^ memoryItemPosition); + void OnPinUnpinCommand(Platform::Object ^ parameter); - void SetPrimaryDisplay(_In_ std::wstring const&displayString, _In_ bool isError); + void SetPrimaryDisplay(_In_ std::wstring const& displayString, _In_ bool isError); void DisplayPasteError(); - void SetTokens(_Inout_ std::shared_ptr>> const &tokens); - void SetExpressionDisplay(_Inout_ std::shared_ptr>> const &tokens, _Inout_ std::shared_ptr>> const &commands); - void SetHistoryExpressionDisplay(_Inout_ std::shared_ptr>> const &tokens, _Inout_ std::shared_ptr>> const &commands); + void SetTokens(_Inout_ std::shared_ptr>> const& tokens); + void SetExpressionDisplay(_Inout_ std::shared_ptr>> const& tokens, + _Inout_ std::shared_ptr>> const& commands); + void SetHistoryExpressionDisplay(_Inout_ std::shared_ptr>> const& tokens, + _Inout_ std::shared_ptr>> const& commands); void SetParenthesisCount(_In_ unsigned int parenthesisCount); void SetOpenParenthesisCountNarratorAnnouncement(); void OnNoRightParenAdded(); @@ -282,14 +346,14 @@ namespace CalculatorApp void OnBinaryOperatorReceived(); void OnMemoryItemChanged(unsigned int indexOfMemory); - Platform::Array^ Serialize(); - void Deserialize(Platform::Array^ state); + Platform::Array ^ Serialize(); + void Deserialize(Platform::Array ^ state); - Platform::String^ GetLocalizedStringFormat(Platform::String^ format, Platform::String^ displayValue); - void OnPropertyChanged(Platform::String^ propertyname); + Platform::String ^ GetLocalizedStringFormat(Platform::String ^ format, Platform::String ^ displayValue); + void OnPropertyChanged(Platform::String ^ propertyname); void SetCalculatorType(CalculatorApp::Common::ViewMode targetState); - Platform::String^ GetRawDisplayValue(); + Platform::String ^ GetRawDisplayValue(); void Recalculate(bool fromHistory = false); bool IsOperator(CalculationManager::Command cmdenum); void FtoEButtonToggled(); @@ -297,10 +361,19 @@ namespace CalculatorApp void SetMemorizedNumbersString(); void SwitchAngleType(NumbersAndOperatorsEnum num); void ResetDisplay(); - RADIX_TYPE GetCurrentRadixType() { return (RADIX_TYPE)m_CurrentRadixType; } + RADIX_TYPE GetCurrentRadixType() + { + return (RADIX_TYPE)m_CurrentRadixType; + } void SetPrecision(int32_t precision); - void UpdateMaxIntDigits() { m_standardCalculatorManager.UpdateMaxIntDigits(); } - NumbersAndOperatorsEnum GetCurrentAngleType() { return m_CurrentAngleType; } + void UpdateMaxIntDigits() + { + m_standardCalculatorManager.UpdateMaxIntDigits(); + } + NumbersAndOperatorsEnum GetCurrentAngleType() + { + return m_CurrentAngleType; + } private: void SetMemorizedNumbers(const std::vector& memorizedNumbers); @@ -312,21 +385,21 @@ namespace CalculatorApp CalculatorDisplay m_calculatorDisplay; CalculatorApp::EngineResourceProvider m_resourceProvider; CalculationManager::CalculatorManager m_standardCalculatorManager; - Platform::String^ m_expressionAutomationNameFormat; - Platform::String^ m_localizedCalculationResultAutomationFormat; - Platform::String^ m_localizedCalculationResultDecimalAutomationFormat; - Platform::String^ m_localizedHexaDecimalAutomationFormat; - Platform::String^ m_localizedDecimalAutomationFormat; - Platform::String^ m_localizedOctalAutomationFormat; - Platform::String^ m_localizedBinaryAutomationFormat; - Platform::String^ m_localizedMaxDigitsReachedAutomationFormat; - Platform::String^ m_localizedButtonPressFeedbackAutomationFormat; - Platform::String^ m_localizedMemorySavedAutomationFormat; - Platform::String^ m_localizedMemoryItemChangedAutomationFormat; - Platform::String^ m_localizedMemoryItemClearedAutomationFormat; - Platform::String^ m_localizedMemoryCleared; - Platform::String^ m_localizedOpenParenthesisCountChangedAutomationFormat; - Platform::String^ m_localizedNoRightParenthesisAddedFormat; + Platform::String ^ m_expressionAutomationNameFormat; + Platform::String ^ m_localizedCalculationResultAutomationFormat; + Platform::String ^ m_localizedCalculationResultDecimalAutomationFormat; + Platform::String ^ m_localizedHexaDecimalAutomationFormat; + Platform::String ^ m_localizedDecimalAutomationFormat; + Platform::String ^ m_localizedOctalAutomationFormat; + Platform::String ^ m_localizedBinaryAutomationFormat; + Platform::String ^ m_localizedMaxDigitsReachedAutomationFormat; + Platform::String ^ m_localizedButtonPressFeedbackAutomationFormat; + Platform::String ^ m_localizedMemorySavedAutomationFormat; + Platform::String ^ m_localizedMemoryItemChangedAutomationFormat; + Platform::String ^ m_localizedMemoryItemClearedAutomationFormat; + Platform::String ^ m_localizedMemoryCleared; + Platform::String ^ m_localizedOpenParenthesisCountChangedAutomationFormat; + Platform::String ^ m_localizedNoRightParenthesisAddedFormat; bool m_pinned; bool m_isOperandEnabled; @@ -343,26 +416,27 @@ namespace CalculatorApp bool m_operandUpdated; bool m_completeTextSelection; bool m_isLastOperationHistoryLoad; - Platform::String^ m_selectedExpressionLastData; - Common::DisplayExpressionToken^ m_selectedExpressionToken; + Platform::String ^ m_selectedExpressionLastData; + Common::DisplayExpressionToken ^ m_selectedExpressionToken; - Platform::String^ LocalizeDisplayValue(_In_ std::wstring const &displayValue, _In_ bool isError); - Platform::String^ CalculateNarratorDisplayValue(_In_ std::wstring const &displayValue, _In_ Platform::String^ localizedDisplayValue, _In_ bool isError); - CalculatorApp::Common::Automation::NarratorAnnouncement^ GetDisplayUpdatedNarratorAnnouncement(); - Platform::String^ GetCalculatorExpressionAutomationName(); - Platform::String^ GetNarratorStringReadRawNumbers(_In_ Platform::String^ localizedDisplayValue); + Platform::String ^ LocalizeDisplayValue(_In_ std::wstring const& displayValue, _In_ bool isError); + Platform::String + ^ CalculateNarratorDisplayValue(_In_ std::wstring const& displayValue, _In_ Platform::String ^ localizedDisplayValue, _In_ bool isError); + CalculatorApp::Common::Automation::NarratorAnnouncement ^ GetDisplayUpdatedNarratorAnnouncement(); + Platform::String ^ GetCalculatorExpressionAutomationName(); + Platform::String ^ GetNarratorStringReadRawNumbers(_In_ Platform::String ^ localizedDisplayValue); CalculationManager::Command ConvertToOperatorsEnum(NumbersAndOperatorsEnum operation); void DisableButtons(CalculationManager::CommandType selectedExpressionCommandType); - Platform::String^ m_feedbackForButtonPress; - void OnButtonPressed(Platform::Object^ parameter); - void OnClearMemoryCommand(Platform::Object^ parameter); + Platform::String ^ m_feedbackForButtonPress; + void OnButtonPressed(Platform::Object ^ parameter); + void OnClearMemoryCommand(Platform::Object ^ parameter); std::wstring AddPadding(std::wstring); size_t LengthWithoutPadding(std::wstring); std::shared_ptr>> m_tokens; - std::shared_ptr>> m_commands; + std::shared_ptr>> m_commands; // Token types bool IsUnaryOp(int nOpCode); diff --git a/src/CalcViewModel/UnitConverterViewModel.cpp b/src/CalcViewModel/UnitConverterViewModel.cpp index 446ae582..f705d6e9 100644 --- a/src/CalcViewModel/UnitConverterViewModel.cpp +++ b/src/CalcViewModel/UnitConverterViewModel.cpp @@ -45,7 +45,7 @@ constexpr unsigned int TIMER_INTERVAL_IN_MS = 10000; const TimeSpan SUPPLEMENTARY_VALUES_INTERVAL = { 10 * TIMER_INTERVAL_IN_MS }; -static Unit^ EMPTY_UNIT = ref new Unit(UCM::EMPTY_UNIT); +static Unit ^ EMPTY_UNIT = ref new Unit(UCM::EMPTY_UNIT); constexpr size_t UNIT_LIST = 0; constexpr size_t SELECTED_SOURCE_UNIT = 1; @@ -89,38 +89,38 @@ namespace CalculatorApp::ViewModel::UnitConverterResourceKeys StringReference CurrencyRatesUpdateFailed(L"CurrencyRatesUpdateFailed"); } -UnitConverterViewModel::UnitConverterViewModel(const shared_ptr& model) : - m_model(model), - m_resettingTimer(false), - m_value1cp(ConversionParameter::Source), - m_Value1Active(true), - m_Value2Active(false), - m_Value1("0"), - m_Value2("0"), - m_valueToUnlocalized(L"0"), - m_valueFromUnlocalized(L"0"), - m_relocalizeStringOnSwitch(false), - m_Categories(ref new Vector()), - m_Units(ref new Vector()), - m_SupplementaryResults(ref new Vector), - m_IsDropDownOpen(false), - m_IsDropDownEnabled(true), - m_IsCurrencyLoadingVisible(false), - m_isCurrencyDataLoaded(false), - m_lastAnnouncedFrom(L""), - m_lastAnnouncedTo(L""), - m_lastAnnouncedConversionResult(L""), - m_isValue1Updating(false), - m_isValue2Updating(false), - m_Announcement(nullptr), - m_Mode(ViewMode::None), - m_CurrencySymbol1(L""), - m_CurrencySymbol2(L""), - m_IsCurrencyCurrentCategory(false), - m_CurrencyRatioEquality(L""), - m_CurrencyRatioEqualityAutomationName(L""), - m_isInputBlocked(false), - m_CurrencyDataLoadFailed(false) +UnitConverterViewModel::UnitConverterViewModel(const shared_ptr& model) + : m_model(model) + , m_resettingTimer(false) + , m_value1cp(ConversionParameter::Source) + , m_Value1Active(true) + , m_Value2Active(false) + , m_Value1("0") + , m_Value2("0") + , m_valueToUnlocalized(L"0") + , m_valueFromUnlocalized(L"0") + , m_relocalizeStringOnSwitch(false) + , m_Categories(ref new Vector()) + , m_Units(ref new Vector()) + , m_SupplementaryResults(ref new Vector) + , m_IsDropDownOpen(false) + , m_IsDropDownEnabled(true) + , m_IsCurrencyLoadingVisible(false) + , m_isCurrencyDataLoaded(false) + , m_lastAnnouncedFrom(L"") + , m_lastAnnouncedTo(L"") + , m_lastAnnouncedConversionResult(L"") + , m_isValue1Updating(false) + , m_isValue2Updating(false) + , m_Announcement(nullptr) + , m_Mode(ViewMode::None) + , m_CurrencySymbol1(L"") + , m_CurrencySymbol2(L"") + , m_IsCurrencyCurrentCategory(false) + , m_CurrencyRatioEquality(L"") + , m_CurrencyRatioEqualityAutomationName(L"") + , m_isInputBlocked(false) + , m_CurrencyDataLoadFailed(false) { m_model->SetViewModelCallback(make_shared(this)); m_model->SetViewModelCurrencyCallback(make_shared(this)); @@ -164,7 +164,7 @@ void UnitConverterViewModel::PopulateData() InitializeView(); } -void UnitConverterViewModel::OnCategoryChanged(Object^ parameter) +void UnitConverterViewModel::OnCategoryChanged(Object ^ parameter) { m_model->SendCommand(UCM::Command::Clear); ResetCategory(); @@ -210,9 +210,9 @@ void UnitConverterViewModel::BuildUnitList(const vector& modelUnitLis } } -Unit^ UnitConverterViewModel::FindUnitInList(UCM::Unit target) +Unit ^ UnitConverterViewModel::FindUnitInList(UCM::Unit target) { - for (Unit^ vmUnit : m_Units) + for (Unit ^ vmUnit : m_Units) { UCM::Unit modelUnit = vmUnit->GetModelUnit(); if (modelUnit.id == target.id) @@ -224,7 +224,7 @@ Unit^ UnitConverterViewModel::FindUnitInList(UCM::Unit target) return EMPTY_UNIT; } -void UnitConverterViewModel::OnUnitChanged(Object^ parameter) +void UnitConverterViewModel::OnUnitChanged(Object ^ parameter) { if ((m_Unit1 == nullptr) || (m_Unit2 == nullptr)) { @@ -249,7 +249,7 @@ void UnitConverterViewModel::OnUnitChanged(Object^ parameter) } } -void UnitConverterViewModel::OnSwitchActive(Platform::Object^ unused) +void UnitConverterViewModel::OnSwitchActive(Platform::Object ^ unused) { // this can be false if this switch occurs without the user having explicitly updated any strings // (for example, during deserialization). We only want to try this cleanup if there's actually @@ -282,9 +282,9 @@ void UnitConverterViewModel::OnSwitchActive(Platform::Object^ unused) m_model->SwitchActive(m_valueFromUnlocalized); } -String^ UnitConverterViewModel::ConvertToLocalizedString(const std::wstring& stringToLocalize, bool allowPartialStrings) +String ^ UnitConverterViewModel::ConvertToLocalizedString(const std::wstring& stringToLocalize, bool allowPartialStrings) { - Platform::String^ result; + Platform::String ^ result; if (stringToLocalize.empty()) { @@ -368,7 +368,7 @@ String^ UnitConverterViewModel::ConvertToLocalizedString(const std::wstring& str // Since the output from GetLocaleInfoEx() and DecimalFormatter are differing for decimal string // we are adding the below work-around of editing the string returned by DecimalFormatter // and replacing the decimal separator with the one returned by GetLocaleInfoEx() - String^ formattedSampleString = m_decimalFormatter->Format(stod("1.1")); + String ^ formattedSampleString = m_decimalFormatter->Format(stod("1.1")); wstring formattedSampleWString = wstring(formattedSampleString->Data()); wstring resultWithDecimal = wstring(result->Data()); @@ -398,7 +398,7 @@ String^ UnitConverterViewModel::ConvertToLocalizedString(const std::wstring& str void UnitConverterViewModel::DisplayPasteError() { - String^ errorMsg = AppResourceProvider::GetInstance().GetCEngineString(StringReference(SIDS_DOMAIN)); /*SIDS_DOMAIN is for "invalid input"*/ + String ^ errorMsg = AppResourceProvider::GetInstance().GetCEngineString(StringReference(SIDS_DOMAIN)); /*SIDS_DOMAIN is for "invalid input"*/ Value1 = errorMsg; Value2 = errorMsg; m_relocalizeStringOnSwitch = false; @@ -406,9 +406,9 @@ void UnitConverterViewModel::DisplayPasteError() void UnitConverterViewModel::UpdateDisplay(const wstring& from, const wstring& to) { - String^ fromStr = this->ConvertToLocalizedString(from, true); + String ^ fromStr = this->ConvertToLocalizedString(from, true); UpdateInputBlocked(from); - String^ toStr = this->ConvertToLocalizedString(to, true); + String ^ toStr = this->ConvertToLocalizedString(to, true); bool updatedValueFrom = ValueFrom != fromStr; bool updatedValueTo = ValueTo != toStr; @@ -463,17 +463,16 @@ void UnitConverterViewModel::UpdateSupplementaryResults(const std::vectorIsActive = true; } -void UnitConverterViewModel::OnButtonPressed(Platform::Object^ parameter) +void UnitConverterViewModel::OnButtonPressed(Platform::Object ^ parameter) { NumbersAndOperatorsEnum numOpEnum = CalculatorButtonPressedEventArgs::GetOperationFromCommandParameter(parameter); UCM::Command command = CommandFromButtonId(numOpEnum); @@ -484,18 +483,8 @@ void UnitConverterViewModel::OnButtonPressed(Platform::Object^ parameter) return; } - static const vector OPERANDS = { - UCM::Command::Zero, - UCM::Command::One, - UCM::Command::Two, - UCM::Command::Three, - UCM::Command::Four, - UCM::Command::Five, - UCM::Command::Six, - UCM::Command::Seven, - UCM::Command::Eight, - UCM::Command::Nine - }; + static const vector OPERANDS = { UCM::Command::Zero, UCM::Command::One, UCM::Command::Two, UCM::Command::Three, UCM::Command::Four, + UCM::Command::Five, UCM::Command::Six, UCM::Command::Seven, UCM::Command::Eight, UCM::Command::Nine }; if (find(begin(OPERANDS), end(OPERANDS), command) != OPERANDS.end()) { @@ -513,14 +502,14 @@ void UnitConverterViewModel::OnButtonPressed(Platform::Object^ parameter) m_model->SendCommand(command); } -void UnitConverterViewModel::OnCopyCommand(Platform::Object^ parameter) +void UnitConverterViewModel::OnCopyCommand(Platform::Object ^ parameter) { - //EventWriteClipboardCopy_Start(); + // EventWriteClipboardCopy_Start(); CopyPasteManager::CopyToClipboard(ref new Platform::String(m_valueFromUnlocalized.c_str())); - //EventWriteClipboardCopy_Stop(); + // EventWriteClipboardCopy_Stop(); } -void UnitConverterViewModel::OnPasteCommand(Platform::Object^ parameter) +void UnitConverterViewModel::OnPasteCommand(Platform::Object ^ parameter) { // if there's nothing to copy early out if (!CopyPasteManager::HasStringToPaste()) @@ -529,13 +518,10 @@ void UnitConverterViewModel::OnPasteCommand(Platform::Object^ parameter) } // Ensure that the paste happens on the UI thread - //EventWriteClipboardPaste_Start(); + // EventWriteClipboardPaste_Start(); // Any converter ViewMode is fine here. - CopyPasteManager::GetStringToPaste(m_Mode, NavCategory::GetGroupType(m_Mode)).then( - [this](String^ pastedString) - { - OnPaste(pastedString, m_Mode); - }, concurrency::task_continuation_context::use_current()); + CopyPasteManager::GetStringToPaste(m_Mode, NavCategory::GetGroupType(m_Mode)) + .then([this](String ^ pastedString) { OnPaste(pastedString, m_Mode); }, concurrency::task_continuation_context::use_current()); } void UnitConverterViewModel::InitializeView() @@ -543,7 +529,7 @@ void UnitConverterViewModel::InitializeView() vector categories = m_model->GetCategories(); for (UINT i = 0; i < categories.size(); i++) { - Category^ category = ref new Category(categories[i]); + Category ^ category = ref new Category(categories[i]); m_Categories->Append(category); } @@ -551,7 +537,7 @@ void UnitConverterViewModel::InitializeView() CurrentCategory = ref new Category(m_model->GetCurrentCategory()); } -void UnitConverterViewModel::OnPropertyChanged(Platform::String^ prop) +void UnitConverterViewModel::OnPropertyChanged(Platform::String ^ prop) { static bool isCategoryChanging = false; @@ -625,10 +611,10 @@ void UnitConverterViewModel::OnPropertyChanged(Platform::String^ prop) } } -String^ UnitConverterViewModel::Serialize() +String ^ UnitConverterViewModel::Serialize() { wstringstream out(wstringstream::out); - const wchar_t * delimiter = L"[;;;]"; + const wchar_t* delimiter = L"[;;;]"; out << std::to_wstring(m_resettingTimer) << delimiter; out << std::to_wstring(static_cast(m_value1cp)) << delimiter; out << m_Value1Active << delimiter << m_Value2Active << delimiter; @@ -639,14 +625,14 @@ String^ UnitConverterViewModel::Serialize() if (!unitConverterSerializedData.empty()) { out << m_model->Serialize() << L"[###]"; - String^ serializedData = ref new String(wstring(out.str()).c_str()); + String ^ serializedData = ref new String(wstring(out.str()).c_str()); return serializedData; } return nullptr; } -void UnitConverterViewModel::Deserialize(Platform::String^ state) +void UnitConverterViewModel::Deserialize(Platform::String ^ state) { wstring serializedData = wstring(state->Data()); vector tokens = UCM::UnitConverter::StringToVector(serializedData, L"[###]"); @@ -668,7 +654,7 @@ void UnitConverterViewModel::Deserialize(Platform::String^ state) } m_model->DeSerialize(modelData.str()); InitializeView(); - RaisePropertyChanged(nullptr); // Update since all props have been updated. + RaisePropertyChanged(nullptr); // Update since all props have been updated. } // Saving User Preferences of Category and Associated-Units across Sessions. @@ -676,7 +662,7 @@ void UnitConverterViewModel::SaveUserPreferences() { if (UnitsAreValid()) { - ApplicationDataContainer^ localSettings = ApplicationData::Current->LocalSettings; + ApplicationDataContainer ^ localSettings = ApplicationData::Current->LocalSettings; if (!m_IsCurrencyCurrentCategory) { auto userPreferences = m_model->SaveUserPreferences(); @@ -697,10 +683,10 @@ void UnitConverterViewModel::RestoreUserPreferences() { if (!IsCurrencyCurrentCategory) { - ApplicationDataContainer^ localSettings = ApplicationData::Current->LocalSettings; + ApplicationDataContainer ^ localSettings = ApplicationData::Current->LocalSettings; if (localSettings->Values->HasKey(ref new String(L"UnitConverterPreferences"))) { - String^ userPreferences = safe_cast(localSettings->Values->Lookup(ref new String(L"UnitConverterPreferences"))); + String ^ userPreferences = safe_cast(localSettings->Values->Lookup(ref new String(L"UnitConverterPreferences"))); m_model->RestoreUserPreferences(userPreferences->Data()); } } @@ -715,7 +701,7 @@ void UnitConverterViewModel::OnCurrencyDataLoadFinished(bool didLoad) ResetCategory(); StringReference key = didLoad ? UnitConverterResourceKeys::CurrencyRatesUpdated : UnitConverterResourceKeys::CurrencyRatesUpdateFailed; - String^ announcement = AppResourceProvider::GetInstance().GetResourceString(key); + String ^ announcement = AppResourceProvider::GetInstance().GetResourceString(key); Announcement = CalculatorAnnouncement::GetUpdateCurrencyRatesAnnouncement(announcement); } @@ -730,18 +716,19 @@ void UnitConverterViewModel::RefreshCurrencyRatios() m_isCurrencyDataLoaded = false; IsCurrencyLoadingVisible = true; - String^ announcement = AppResourceProvider::GetInstance().GetResourceString(UnitConverterResourceKeys::UpdatingCurrencyRates); + String ^ announcement = AppResourceProvider::GetInstance().GetResourceString(UnitConverterResourceKeys::UpdatingCurrencyRates); Announcement = CalculatorAnnouncement::GetUpdateCurrencyRatesAnnouncement(announcement); auto refreshTask = create_task(m_model->RefreshCurrencyRatios()); - refreshTask.then([this](const pair& refreshResult) - { - bool didLoad = refreshResult.first; - wstring timestamp = refreshResult.second; + refreshTask.then( + [this](const pair& refreshResult) { + bool didLoad = refreshResult.first; + wstring timestamp = refreshResult.second; - OnCurrencyTimestampUpdated(timestamp, false /*isWeekOldData*/); - OnCurrencyDataLoadFinished(didLoad); - }, task_continuation_context::use_current()); + OnCurrencyTimestampUpdated(timestamp, false /*isWeekOldData*/); + OnCurrencyDataLoadFinished(didLoad); + }, + task_continuation_context::use_current()); } void UnitConverterViewModel::OnNetworkBehaviorChanged(_In_ NetworkAccessBehavior newBehavior) @@ -806,12 +793,12 @@ UnitConversionManager::Command UnitConverterViewModel::CommandFromButtonId(Numbe return command; } -void UnitConverterViewModel::SupplementaryResultsTimerTick(ThreadPoolTimer^ timer) +void UnitConverterViewModel::SupplementaryResultsTimerTick(ThreadPoolTimer ^ timer) { timer->Cancel(); } -void UnitConverterViewModel::SupplementaryResultsTimerCancel(ThreadPoolTimer^ timer) +void UnitConverterViewModel::SupplementaryResultsTimerCancel(ThreadPoolTimer ^ timer) { if (!m_resettingTimer) { @@ -824,14 +811,12 @@ void UnitConverterViewModel::RefreshSupplementaryResults() m_cacheMutex.lock(); m_SupplementaryResults->Clear(); - vector whimsicals; + vector whimsicals; for (tuple suggestedValue : m_cachedSuggestedValues) { - SupplementaryResult^ result = - ref new SupplementaryResult( - this->ConvertToLocalizedString(get<0>(suggestedValue), false), - ref new Unit(get<1>(suggestedValue))); + SupplementaryResult ^ result = + ref new SupplementaryResult(this->ConvertToLocalizedString(get<0>(suggestedValue), false), ref new Unit(get<1>(suggestedValue))); if (result->IsWhimsical()) { whimsicals.push_back(result); @@ -849,7 +834,7 @@ void UnitConverterViewModel::RefreshSupplementaryResults() m_cacheMutex.unlock(); RaisePropertyChanged(SupplementaryResultsPropertyName); - //EventWriteConverterSupplementaryResultsUpdated(); + // EventWriteConverterSupplementaryResultsUpdated(); } // When UpdateDisplay is called, the ViewModel will remember the From/To unlocalized display values @@ -858,16 +843,13 @@ void UnitConverterViewModel::RefreshSupplementaryResults() // values are not both zero. void UnitConverterViewModel::AnnounceConversionResult() { - if ((m_valueFromUnlocalized != m_lastAnnouncedFrom - || m_valueToUnlocalized != m_lastAnnouncedTo) - && Unit1 != nullptr - && Unit2 != nullptr) + if ((m_valueFromUnlocalized != m_lastAnnouncedFrom || m_valueToUnlocalized != m_lastAnnouncedTo) && Unit1 != nullptr && Unit2 != nullptr) { m_lastAnnouncedFrom = m_valueFromUnlocalized; m_lastAnnouncedTo = m_valueToUnlocalized; - Unit^ unitFrom = Value1Active ? Unit1 : Unit2; - Unit^ unitTo = (unitFrom == Unit1) ? Unit2 : Unit1; + Unit ^ unitFrom = Value1Active ? Unit1 : Unit2; + Unit ^ unitTo = (unitFrom == Unit1) ? Unit2 : Unit1; m_lastAnnouncedConversionResult = GetLocalizedConversionResultStringFormat(ValueFrom, unitFrom->Name, ValueTo, unitTo->Name); Announcement = CalculatorAnnouncement::GetDisplayUpdatedAnnouncement(m_lastAnnouncedConversionResult); @@ -878,16 +860,14 @@ void UnitConverterViewModel::UpdateInputBlocked(_In_ const wstring& currencyInpu { // currencyInput is in en-US and has the default decimal separator, so this is safe to do. auto posOfDecimal = currencyInput.find(L'.'); - m_isInputBlocked = false; + m_isInputBlocked = false; if (posOfDecimal != wstring::npos && IsCurrencyCurrentCategory) { m_isInputBlocked = (posOfDecimal + static_cast(m_currencyMaxFractionDigits) + 1 == currencyInput.length()); } } -NumbersAndOperatorsEnum UnitConverterViewModel::MapCharacterToButtonId( - const wchar_t ch, - bool& canSendNegate) +NumbersAndOperatorsEnum UnitConverterViewModel::MapCharacterToButtonId(const wchar_t ch, bool& canSendNegate) { static_assert(NumbersAndOperatorsEnum::Zero < NumbersAndOperatorsEnum::One, "NumbersAndOperatorsEnum order is invalid"); static_assert(NumbersAndOperatorsEnum::One < NumbersAndOperatorsEnum::Two, "NumbersAndOperatorsEnum order is invalid"); @@ -937,7 +917,8 @@ NumbersAndOperatorsEnum UnitConverterViewModel::MapCharacterToButtonId( { if (LocalizationSettings::GetInstance().IsLocalizedDigit(ch)) { - mappedValue = NumbersAndOperatorsEnum::Zero + static_cast(ch - LocalizationSettings::GetInstance().GetDigitSymbolFromEnUsDigit(L'0')); + mappedValue = NumbersAndOperatorsEnum::Zero + + static_cast(ch - LocalizationSettings::GetInstance().GetDigitSymbolFromEnUsDigit(L'0')); canSendNegate = true; } } @@ -945,7 +926,7 @@ NumbersAndOperatorsEnum UnitConverterViewModel::MapCharacterToButtonId( return mappedValue; } -void UnitConverterViewModel::OnPaste(String^ stringToPaste, ViewMode mode) +void UnitConverterViewModel::OnPaste(String ^ stringToPaste, ViewMode mode) { // If pastedString is invalid("NoOp") then display pasteError else process the string if (stringToPaste == StringReference(CopyPasteManager::PasteErrorString)) @@ -1013,9 +994,9 @@ void UnitConverterViewModel::OnPaste(String^ stringToPaste, ViewMode mode) } } -String^ UnitConverterViewModel::GetLocalizedAutomationName(_In_ String^ displayvalue, _In_ String^ unitname, _In_ String^ format) +String ^ UnitConverterViewModel::GetLocalizedAutomationName(_In_ String ^ displayvalue, _In_ String ^ unitname, _In_ String ^ format) { - String^ valueToLocalize = displayvalue; + String ^ valueToLocalize = displayvalue; if (displayvalue == ValueFrom && Utils::IsLastCharacterTarget(m_valueFromUnlocalized, m_decimalSeparator)) { // Need to compute a second localized value for the automation @@ -1028,9 +1009,13 @@ String^ UnitConverterViewModel::GetLocalizedAutomationName(_In_ String^ displayv return ref new String(localizedResult.c_str()); } -String^ UnitConverterViewModel::GetLocalizedConversionResultStringFormat(_In_ String^ fromValue, _In_ String^ fromUnit, _In_ String^ toValue, _In_ String^ toUnit) +String + ^ UnitConverterViewModel::GetLocalizedConversionResultStringFormat(_In_ String ^ fromValue, _In_ String ^ fromUnit, _In_ String ^ toValue, + _In_ String ^ toUnit) { - String^ localizedString = ref new String(LocalizationStringUtil::GetLocalizedString(m_localizedConversionResultFormat->Data(), fromValue->Data(), fromUnit->Data(), toValue->Data(), toUnit->Data()).c_str()); + String ^ localizedString = ref new String(LocalizationStringUtil::GetLocalizedString(m_localizedConversionResultFormat->Data(), fromValue->Data(), + fromUnit->Data(), toValue->Data(), toUnit->Data()) + .c_str()); return localizedString; } @@ -1052,7 +1037,7 @@ void UnitConverterViewModel::UpdateValue2AutomationName() void UnitConverterViewModel::OnMaxDigitsReached() { - String^ format = AppResourceProvider::GetInstance().GetResourceString(UnitConverterResourceKeys::MaxDigitsReachedFormat); + String ^ format = AppResourceProvider::GetInstance().GetResourceString(UnitConverterResourceKeys::MaxDigitsReachedFormat); const wstring& announcement = LocalizationStringUtil::GetLocalizedString(format->Data(), m_lastAnnouncedConversionResult->Data()); Announcement = CalculatorAnnouncement::GetMaxDigitsReachedAnnouncement(StringReference(announcement.c_str())); } @@ -1064,27 +1049,18 @@ bool UnitConverterViewModel::UnitsAreValid() void UnitConverterViewModel::StartConversionResultTimer() { - m_conversionResultTaskHelper = make_unique( - CONVERSION_FINALIZED_DELAY_IN_MS, [this]() - { + m_conversionResultTaskHelper = make_unique(CONVERSION_FINALIZED_DELAY_IN_MS, [this]() { if (UnitsAreValid()) { - String^ valueFrom = m_Value1Active ? m_Value1 : m_Value2; - String^ valueTo = m_Value1Active ? m_Value2 : m_Value1; - TraceLogger::GetInstance().LogConversionResult( - valueFrom->Data(), - UnitFrom->ToString()->Data(), - valueTo->Data(), - UnitTo->ToString()->Data()); + String ^ valueFrom = m_Value1Active ? m_Value1 : m_Value2; + String ^ valueTo = m_Value1Active ? m_Value2 : m_Value1; + TraceLogger::GetInstance().LogConversionResult(valueFrom->Data(), UnitFrom->ToString()->Data(), valueTo->Data(), UnitTo->ToString()->Data()); } }); } -String^ SupplementaryResult::GetLocalizedAutomationName() +String ^ SupplementaryResult::GetLocalizedAutomationName() { auto format = AppResourceProvider::GetInstance().GetResourceString("SupplementaryUnit_AutomationName"); - return ref new String(LocalizationStringUtil::GetLocalizedString( - format->Data(), - this->Value->Data(), - this->Unit->Name->Data()).c_str()); + return ref new String(LocalizationStringUtil::GetLocalizedString(format->Data(), this->Value->Data(), this->Unit->Name->Data()).c_str()); } diff --git a/src/CalcViewModel/UnitConverterViewModel.h b/src/CalcViewModel/UnitConverterViewModel.h index 2c6c8af3..5fea4721 100644 --- a/src/CalcViewModel/UnitConverterViewModel.h +++ b/src/CalcViewModel/UnitConverterViewModel.h @@ -15,99 +15,87 @@ namespace CalculatorApp { namespace ViewModel { - [Windows::UI::Xaml::Data::Bindable] - public ref class Category sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged + [Windows::UI::Xaml::Data::Bindable] public ref class Category sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged { - internal: - Category(const UnitConversionManager::Category& category) : - m_original(category) - { } + internal : Category(const UnitConversionManager::Category& category) : m_original(category) + { + } public: OBSERVABLE_OBJECT(); - property Platform::String^ Name - { - Platform::String^ get() { return ref new Platform::String(m_original.name.c_str()); } - } + property Platform::String + ^ Name { Platform::String ^ get() { return ref new Platform::String(m_original.name.c_str()); } } - property Windows::UI::Xaml::Visibility NegateVisibility + property Windows::UI::Xaml::Visibility NegateVisibility { Windows::UI::Xaml::Visibility get() { - return m_original.supportsNegative - ? Windows::UI::Xaml::Visibility::Visible - : Windows::UI::Xaml::Visibility::Collapsed; + return m_original.supportsNegative ? Windows::UI::Xaml::Visibility::Visible : Windows::UI::Xaml::Visibility::Collapsed; } } - internal: - const UnitConversionManager::Category& GetModelCategory() const { return m_original; } + internal : const UnitConversionManager::Category& GetModelCategory() const + { + return m_original; + } private: const UnitConversionManager::Category m_original; }; - [Windows::UI::Xaml::Data::Bindable] - public ref class Unit sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged + [Windows::UI::Xaml::Data::Bindable] public ref class Unit sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged { - internal: - Unit(const UnitConversionManager::Unit& unit) : - m_original(unit) - { } + internal : Unit(const UnitConversionManager::Unit& unit) : m_original(unit) + { + } public: OBSERVABLE_OBJECT(); - property Platform::String^ Name - { - Platform::String^ get() { return ref new Platform::String(m_original.name.c_str()); } - } + property Platform::String + ^ Name { Platform::String ^ get() { return ref new Platform::String(m_original.name.c_str()); } } - property Platform::String^ AccessibleName - { - Platform::String^ get() { return ref new Platform::String(m_original.accessibleName.c_str()); } - } + property Platform::String + ^ AccessibleName { Platform::String ^ get() { return ref new Platform::String(m_original.accessibleName.c_str()); } } - property Platform::String^ Abbreviation - { - Platform::String^ get() { return ref new Platform::String(m_original.abbreviation.c_str()); } - } + property Platform::String + ^ Abbreviation { Platform::String ^ get() { return ref new Platform::String(m_original.abbreviation.c_str()); } } - // This method is used to return the desired automation name for default unit in UnitConverter combo box. - Platform::String^ ToString() override + // This method is used to return the desired automation name for default unit in UnitConverter combo box. + Platform::String + ^ ToString() override { return AccessibleName; } - internal: - const UnitConversionManager::Unit& GetModelUnit() const { return m_original; } + internal : const UnitConversionManager::Unit& GetModelUnit() const + { + return m_original; + } private: const UnitConversionManager::Unit m_original; }; - [Windows::UI::Xaml::Data::Bindable] - public ref class SupplementaryResult sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged + [Windows::UI::Xaml::Data::Bindable] public ref class SupplementaryResult sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged { - internal: - SupplementaryResult(Platform::String^ value, Unit^ unit) : - m_Value(value), - m_Unit(unit) - {} + internal : SupplementaryResult(Platform::String ^ value, Unit ^ unit) : m_Value(value), m_Unit(unit) + { + } bool IsWhimsical() const { return m_Unit->GetModelUnit().isWhimsical; } - Platform::String^ GetLocalizedAutomationName(); + Platform::String ^ GetLocalizedAutomationName(); public: OBSERVABLE_OBJECT(); - OBSERVABLE_PROPERTY_R(Platform::String^, Value); - OBSERVABLE_PROPERTY_R(CalculatorApp::ViewModel::Unit^, Unit); + OBSERVABLE_PROPERTY_R(Platform::String ^, Value); + OBSERVABLE_PROPERTY_R(CalculatorApp::ViewModel::Unit ^, Unit); }; interface class IActivatable @@ -115,7 +103,7 @@ namespace CalculatorApp virtual property bool IsActive; }; - template + template ref class Activatable sealed : public IActivatable { private: @@ -123,56 +111,59 @@ namespace CalculatorApp public: Activatable(TActivatable activatable) : m_activatable(activatable) - { } + { + } virtual property bool IsActive { - bool get() { return m_activatable->IsActive; } - void set(bool value) { m_activatable->IsActive = value; } + bool get() + { + return m_activatable->IsActive; + } + void set(bool value) + { + m_activatable->IsActive = value; + } } }; - template - IActivatable^ AsActivatable(TActivatable activatable) - { - return ref new Activatable(activatable); - } + template + IActivatable + ^ AsActivatable(TActivatable activatable) { return ref new Activatable(activatable); } - [Windows::UI::Xaml::Data::Bindable] - public ref class UnitConverterViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged + [Windows::UI::Xaml::Data::Bindable] public ref class UnitConverterViewModel sealed : public Windows::UI::Xaml::Data::INotifyPropertyChanged { - internal: - UnitConverterViewModel(const std::shared_ptr& model); + internal : UnitConverterViewModel(const std::shared_ptr& model); public: OBSERVABLE_OBJECT_CALLBACK(OnPropertyChanged); - OBSERVABLE_PROPERTY_R(Windows::Foundation::Collections::IObservableVector^, Categories); - OBSERVABLE_PROPERTY_RW(Category^, CurrentCategory); + OBSERVABLE_PROPERTY_R(Windows::Foundation::Collections::IObservableVector ^, Categories); + OBSERVABLE_PROPERTY_RW(Category ^, CurrentCategory); OBSERVABLE_PROPERTY_RW(CalculatorApp::Common::ViewMode, Mode); - OBSERVABLE_PROPERTY_R(Windows::Foundation::Collections::IObservableVector^, Units); - OBSERVABLE_PROPERTY_RW(Platform::String^, CurrencySymbol1); - OBSERVABLE_PROPERTY_RW(Unit^, Unit1); - OBSERVABLE_PROPERTY_RW(Platform::String^, Value1); - OBSERVABLE_PROPERTY_RW(Platform::String^, CurrencySymbol2); - OBSERVABLE_PROPERTY_RW(Unit^, Unit2); - OBSERVABLE_PROPERTY_RW(Platform::String^, Value2); - OBSERVABLE_NAMED_PROPERTY_R(Windows::Foundation::Collections::IObservableVector^, SupplementaryResults); + OBSERVABLE_PROPERTY_R(Windows::Foundation::Collections::IObservableVector ^, Units); + OBSERVABLE_PROPERTY_RW(Platform::String ^, CurrencySymbol1); + OBSERVABLE_PROPERTY_RW(Unit ^, Unit1); + OBSERVABLE_PROPERTY_RW(Platform::String ^, Value1); + OBSERVABLE_PROPERTY_RW(Platform::String ^, CurrencySymbol2); + OBSERVABLE_PROPERTY_RW(Unit ^, Unit2); + OBSERVABLE_PROPERTY_RW(Platform::String ^, Value2); + OBSERVABLE_NAMED_PROPERTY_R(Windows::Foundation::Collections::IObservableVector ^, SupplementaryResults); OBSERVABLE_PROPERTY_RW(bool, Value1Active); OBSERVABLE_PROPERTY_RW(bool, Value2Active); - OBSERVABLE_PROPERTY_RW(Platform::String^, Value1AutomationName); - OBSERVABLE_PROPERTY_RW(Platform::String^, Value2AutomationName); - OBSERVABLE_PROPERTY_RW(Platform::String^, Unit1AutomationName); - OBSERVABLE_PROPERTY_RW(Platform::String^, Unit2AutomationName); - OBSERVABLE_PROPERTY_RW(CalculatorApp::Common::Automation::NarratorAnnouncement^, Announcement); + OBSERVABLE_PROPERTY_RW(Platform::String ^, Value1AutomationName); + OBSERVABLE_PROPERTY_RW(Platform::String ^, Value2AutomationName); + OBSERVABLE_PROPERTY_RW(Platform::String ^, Unit1AutomationName); + OBSERVABLE_PROPERTY_RW(Platform::String ^, Unit2AutomationName); + OBSERVABLE_PROPERTY_RW(CalculatorApp::Common::Automation::NarratorAnnouncement ^, Announcement); OBSERVABLE_PROPERTY_RW(bool, IsDecimalEnabled); OBSERVABLE_PROPERTY_RW(bool, IsDropDownOpen); OBSERVABLE_PROPERTY_RW(bool, IsDropDownEnabled); OBSERVABLE_NAMED_PROPERTY_RW(bool, IsCurrencyLoadingVisible); OBSERVABLE_PROPERTY_RW(bool, IsCurrencyCurrentCategory); - OBSERVABLE_PROPERTY_RW(Platform::String^, CurrencyRatioEquality); - OBSERVABLE_PROPERTY_RW(Platform::String^, CurrencyRatioEqualityAutomationName); - OBSERVABLE_PROPERTY_RW(Platform::String^, CurrencyTimestamp); + OBSERVABLE_PROPERTY_RW(Platform::String ^, CurrencyRatioEquality); + OBSERVABLE_PROPERTY_RW(Platform::String ^, CurrencyRatioEqualityAutomationName); + OBSERVABLE_PROPERTY_RW(Platform::String ^, CurrencyTimestamp); OBSERVABLE_NAMED_PROPERTY_RW(CalculatorApp::NetworkAccessBehavior, NetworkBehavior); OBSERVABLE_NAMED_PROPERTY_RW(bool, CurrencyDataLoadFailed); OBSERVABLE_NAMED_PROPERTY_RW(bool, CurrencyDataIsWeekOld); @@ -181,9 +172,7 @@ namespace CalculatorApp { Windows::UI::Xaml::Visibility get() { - return SupplementaryResults->Size > 0 - ? Windows::UI::Xaml::Visibility::Visible - : Windows::UI::Xaml::Visibility::Collapsed; + return SupplementaryResults->Size > 0 ? Windows::UI::Xaml::Visibility::Visible : Windows::UI::Xaml::Visibility::Collapsed; } } @@ -191,9 +180,8 @@ namespace CalculatorApp { Windows::UI::Xaml::Visibility get() { - return (CurrencySymbol1->IsEmpty() || CurrencySymbol2->IsEmpty()) - ? Windows::UI::Xaml::Visibility::Collapsed - : Windows::UI::Xaml::Visibility::Visible; + return (CurrencySymbol1->IsEmpty() || CurrencySymbol2->IsEmpty()) ? Windows::UI::Xaml::Visibility::Collapsed + : Windows::UI::Xaml::Visibility::Visible; } } @@ -206,23 +194,25 @@ namespace CalculatorApp void AnnounceConversionResult(); - internal: - void ResetView(); + internal : void ResetView(); void PopulateData(); NumbersAndOperatorsEnum MapCharacterToButtonId(const wchar_t ch, bool& canSendNegate); void DisplayPasteError(); - void OnValueActivated(IActivatable^ control); - void OnPaste(Platform::String^ stringToPaste, CalculatorApp::Common::ViewMode mode); + void OnValueActivated(IActivatable ^ control); + void OnPaste(Platform::String ^ stringToPaste, CalculatorApp::Common::ViewMode mode); - void OnCopyCommand(Platform::Object^ parameter); - void OnPasteCommand(Platform::Object^ parameter); + void OnCopyCommand(Platform::Object ^ parameter); + void OnPasteCommand(Platform::Object ^ parameter); - Platform::String^ GetLocalizedAutomationName(_In_ Platform::String^ displayvalue, _In_ Platform::String^ unitname, _In_ Platform::String^ format); - Platform::String^ GetLocalizedConversionResultStringFormat(_In_ Platform::String^ fromValue, _In_ Platform::String^ fromUnit, _In_ Platform::String^ toValue, _In_ Platform::String^ toUnit); + Platform::String + ^ GetLocalizedAutomationName(_In_ Platform::String ^ displayvalue, _In_ Platform::String ^ unitname, _In_ Platform::String ^ format); + Platform::String + ^ GetLocalizedConversionResultStringFormat(_In_ Platform::String ^ fromValue, _In_ Platform::String ^ fromUnit, _In_ Platform::String ^ toValue, + _In_ Platform::String ^ toUnit); void UpdateValue1AutomationName(); void UpdateValue2AutomationName(); - Platform::String^ Serialize(); - void Deserialize(Platform::String^ state); + Platform::String ^ Serialize(); + void Deserialize(Platform::String ^ state); void ResetCategoriesAndRatio(); // Saving And Restoring User Preferences of Category and Associated-Units across Sessions. @@ -249,25 +239,25 @@ namespace CalculatorApp void OnMaxDigitsReached(); void BuildUnitList(const std::vector& modelUnitList); - Unit^ FindUnitInList(UnitConversionManager::Unit target); + Unit ^ FindUnitInList(UnitConversionManager::Unit target); void SetSelectedUnits(); private: void InitializeView(); - void OnPropertyChanged(Platform::String^ prop); - void OnCategoryChanged(Platform::Object^ unused); - void OnUnitChanged(Platform::Object^ unused); - void OnSwitchActive(Platform::Object^ unused); + void OnPropertyChanged(Platform::String ^ prop); + void OnCategoryChanged(Platform::Object ^ unused); + void OnUnitChanged(Platform::Object ^ unused); + void OnSwitchActive(Platform::Object ^ unused); UnitConversionManager::Command CommandFromButtonId(CalculatorApp::NumbersAndOperatorsEnum button); - void SupplementaryResultsTimerTick(Windows::System::Threading::ThreadPoolTimer^ timer); - void SupplementaryResultsTimerCancel(Windows::System::Threading::ThreadPoolTimer^ timer); + void SupplementaryResultsTimerTick(Windows::System::Threading::ThreadPoolTimer ^ timer); + void SupplementaryResultsTimerCancel(Windows::System::Threading::ThreadPoolTimer ^ timer); void RefreshSupplementaryResults(); void UpdateInputBlocked(_In_ const std::wstring& currencyInput); bool UnitsAreValid(); void ResetCategory(); - void OnButtonPressed(Platform::Object^ parameter); - Platform::String^ ConvertToLocalizedString(const std::wstring& stringToLocalize, bool allowPartialStrings); + void OnButtonPressed(Platform::Object ^ parameter); + Platform::String ^ ConvertToLocalizedString(const std::wstring& stringToLocalize, bool allowPartialStrings); void StartConversionResultTimer(); @@ -306,12 +296,12 @@ namespace CalculatorApp private: bool m_isInputBlocked; - Windows::System::Threading::ThreadPoolTimer^ m_supplementaryResultsTimer; + Windows::System::Threading::ThreadPoolTimer ^ m_supplementaryResultsTimer; bool m_resettingTimer; std::vector> m_cachedSuggestedValues; std::mutex m_cacheMutex; - Windows::Globalization::NumberFormatting::DecimalFormatter^ m_decimalFormatter; - Windows::Globalization::NumberFormatting::CurrencyFormatter^ m_currencyFormatter; + Windows::Globalization::NumberFormatting::DecimalFormatter ^ m_decimalFormatter; + Windows::Globalization::NumberFormatting::CurrencyFormatter ^ m_currencyFormatter; int m_currencyMaxFractionDigits; std::wstring m_valueFromUnlocalized; std::wstring m_valueToUnlocalized; @@ -319,18 +309,18 @@ namespace CalculatorApp // For Saving the User Preferences only if the Unit converter ViewModel is initialised for the first time bool m_IsFirstTime; - Platform::String^ m_localizedValueFromFormat; - Platform::String^ m_localizedValueFromDecimalFormat; - Platform::String^ m_localizedValueToFormat; - Platform::String^ m_localizedConversionResultFormat; - Platform::String^ m_localizedInputUnitName; - Platform::String^ m_localizedOutputUnitName; + Platform::String ^ m_localizedValueFromFormat; + Platform::String ^ m_localizedValueFromDecimalFormat; + Platform::String ^ m_localizedValueToFormat; + Platform::String ^ m_localizedConversionResultFormat; + Platform::String ^ m_localizedInputUnitName; + Platform::String ^ m_localizedOutputUnitName; bool m_isValue1Updating; bool m_isValue2Updating; std::wstring m_lastAnnouncedFrom; std::wstring m_lastAnnouncedTo; - Platform::String^ m_lastAnnouncedConversionResult; + Platform::String ^ m_lastAnnouncedConversionResult; bool m_isCurrencyDataLoaded; @@ -340,16 +330,16 @@ namespace CalculatorApp class UnitConverterVMCallback : public UnitConversionManager::IUnitConverterVMCallback { public: - UnitConverterVMCallback(UnitConverterViewModel^ viewModel) : m_viewModel(viewModel) - {} + UnitConverterVMCallback(UnitConverterViewModel ^ viewModel) : m_viewModel(viewModel) + { + } void DisplayCallback(const std::wstring& from, const std::wstring& to) override { m_viewModel->UpdateDisplay(from, to); } - void SuggestedValueCallback( - const std::vector>& suggestedValues) override + void SuggestedValueCallback(const std::vector>& suggestedValues) override { m_viewModel->UpdateSupplementaryResults(suggestedValues); } @@ -360,14 +350,15 @@ namespace CalculatorApp } private: - UnitConverterViewModel^ m_viewModel; + UnitConverterViewModel ^ m_viewModel; }; class ViewModelCurrencyCallback : public UnitConversionManager::IViewModelCurrencyCallback { public: - ViewModelCurrencyCallback(UnitConverterViewModel^ viewModel) : m_viewModel(viewModel) - {} + ViewModelCurrencyCallback(UnitConverterViewModel ^ viewModel) : m_viewModel(viewModel) + { + } void CurrencyDataLoadFinished(bool didLoad) override { @@ -376,8 +367,8 @@ namespace CalculatorApp void CurrencySymbolsCallback(const std::wstring& symbol1, const std::wstring& symbol2) override { - Platform::String^ sym1 = Platform::StringReference(symbol1.c_str()); - Platform::String^ sym2 = Platform::StringReference(symbol2.c_str()); + Platform::String ^ sym1 = Platform::StringReference(symbol1.c_str()); + Platform::String ^ sym2 = Platform::StringReference(symbol2.c_str()); bool value1Active = m_viewModel->Value1Active; m_viewModel->CurrencySymbol1 = value1Active ? sym1 : sym2; @@ -401,7 +392,7 @@ namespace CalculatorApp } private: - UnitConverterViewModel^ m_viewModel; + UnitConverterViewModel ^ m_viewModel; }; } } diff --git a/src/CalcViewModel/ViewState.cpp b/src/CalcViewModel/ViewState.cpp index cadfc299..63a5d30e 100644 --- a/src/CalcViewModel/ViewState.cpp +++ b/src/CalcViewModel/ViewState.cpp @@ -11,7 +11,7 @@ namespace CalculatorApp Platform::StringReference Snap(L"Snap"); Platform::StringReference DockedView(L"DockedView"); - bool IsValidViewState(Platform::String^ viewState) + bool IsValidViewState(Platform::String ^ viewState) { return viewState->Equals(ViewState::Snap) || viewState->Equals(ViewState::DockedView); } diff --git a/src/CalcViewModel/ViewState.h b/src/CalcViewModel/ViewState.h index 8b70cff0..0a103d09 100644 --- a/src/CalcViewModel/ViewState.h +++ b/src/CalcViewModel/ViewState.h @@ -10,6 +10,6 @@ namespace CalculatorApp extern Platform::StringReference Snap; extern Platform::StringReference DockedView; - bool IsValidViewState(Platform::String^ viewState); + bool IsValidViewState(Platform::String ^ viewState); } } diff --git a/src/CalcViewModel/pch.cpp b/src/CalcViewModel/pch.cpp index 7c5e1feb..1da170eb 100644 --- a/src/CalcViewModel/pch.cpp +++ b/src/CalcViewModel/pch.cpp @@ -2,4 +2,3 @@ // Licensed under the MIT License. #include "pch.h" - diff --git a/src/CalcViewModel/pch.h b/src/CalcViewModel/pch.h index 17128bc6..142e05f8 100644 --- a/src/CalcViewModel/pch.h +++ b/src/CalcViewModel/pch.h @@ -3,7 +3,6 @@ #pragma once - #include "targetver.h" #ifndef WIN32_LEAN_AND_MEAN @@ -45,5 +44,7 @@ // Once the app switches to min version RS3, the namespaces can be removed. // TODO - MSFT 12735088 namespace StandardPeers = Windows::UI::Xaml::Automation::Peers; -namespace CalculatorApp::Common::Automation {} +namespace CalculatorApp::Common::Automation +{ +} namespace CustomPeers = CalculatorApp::Common::Automation; diff --git a/src/CalcViewModel/targetver.h b/src/CalcViewModel/targetver.h index 18b255ab..221efabb 100644 --- a/src/CalcViewModel/targetver.h +++ b/src/CalcViewModel/targetver.h @@ -9,4 +9,3 @@ // set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h. #include - diff --git a/src/Calculator.sln b/src/Calculator.sln index 232fcd1e..47084340 100644 --- a/src/Calculator.sln +++ b/src/Calculator.sln @@ -9,6 +9,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CalcManager", "CalcManager\ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3A5DF651-B8A1-45CA-9135-964A6FC7F5D1}" ProjectSection(SolutionItems) = preProject + .clang-format = .clang-format + clang-format-all.sh = clang-format-all.sh nuget.config = nuget.config EndProjectSection EndProject diff --git a/src/Calculator/AboutFlyout.xaml.cpp b/src/Calculator/AboutFlyout.xaml.cpp index 524644f0..6ec7d4e1 100644 --- a/src/Calculator/AboutFlyout.xaml.cpp +++ b/src/Calculator/AboutFlyout.xaml.cpp @@ -37,15 +37,15 @@ AboutFlyout::AboutFlyout() Header->Text = resourceLoader.GetResourceString("AboutButton/Content"); - auto copyrightText = LocalizationStringUtil::GetLocalizedString(resourceLoader.GetResourceString("AboutControlCopyright")->Data(), to_wstring(BUILD_YEAR).c_str()); + auto copyrightText = + LocalizationStringUtil::GetLocalizedString(resourceLoader.GetResourceString("AboutControlCopyright")->Data(), to_wstring(BUILD_YEAR).c_str()); AboutControlCopyrightRun->Text = ref new String(copyrightText.c_str()); - } -void AboutFlyout::FeedbackButton_Click(_In_ Object^ sender, _In_ RoutedEventArgs^ e) +void AboutFlyout::FeedbackButton_Click(_In_ Object ^ sender, _In_ RoutedEventArgs ^ e) { PackageVersion version = Package::Current->Id->Version; - String^ versionNumber = ref new String(L"Version "); + String ^ versionNumber = ref new String(L"Version "); versionNumber = versionNumber + version.Major + "." + version.Minor + "." + version.Build + "." + version.Revision; Launcher::LaunchUriAsync(ref new Uri("windows-feedback:?contextid=130&metadata=%7B%22Metadata%22:[%7B%22AppBuild%22:%22" + versionNumber + "%22%7D]%7D")); } @@ -53,7 +53,7 @@ void AboutFlyout::FeedbackButton_Click(_In_ Object^ sender, _In_ RoutedEventArgs void AboutFlyout::SetVersionString() { PackageVersion version = Package::Current->Id->Version; - String^ appName = AppResourceProvider::GetInstance().GetResourceString(L"AppName"); + String ^ appName = AppResourceProvider::GetInstance().GetResourceString(L"AppName"); AboutFlyoutVersion->Text = appName + L" " + version.Major + L"." + version.Minor + L"." + version.Build + L"." + version.Revision; } @@ -62,7 +62,7 @@ void AboutFlyout::SetDefaultFocus() AboutFlyoutEULA->Focus(::FocusState::Programmatic); } -void CalculatorApp::AboutFlyout::UserControl_Loaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) +void CalculatorApp::AboutFlyout::UserControl_Loaded(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e) { TraceLogger::GetInstance().LogAboutFlyoutOpened(); } diff --git a/src/Calculator/AboutFlyout.xaml.h b/src/Calculator/AboutFlyout.xaml.h index f7688681..87b53e9c 100644 --- a/src/Calculator/AboutFlyout.xaml.h +++ b/src/Calculator/AboutFlyout.xaml.h @@ -7,7 +7,8 @@ namespace CalculatorApp { - public ref class AboutFlyout sealed +public + ref class AboutFlyout sealed { public: AboutFlyout(); @@ -15,8 +16,8 @@ namespace CalculatorApp void SetDefaultFocus(); private: - void FeedbackButton_Click(_In_ Platform::Object^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs^ e); + void FeedbackButton_Click(_In_ Platform::Object ^ sender, _In_ Windows::UI::Xaml::RoutedEventArgs ^ e); void SetVersionString(); - void UserControl_Loaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); + void UserControl_Loaded(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); }; } /* namespace CalculatorApp */ diff --git a/src/Calculator/App.xaml.cpp b/src/Calculator/App.xaml.cpp index 456b1e8c..4373201e 100644 --- a/src/Calculator/App.xaml.cpp +++ b/src/Calculator/App.xaml.cpp @@ -73,11 +73,10 @@ App::App() #if _DEBUG this->DebugSettings->IsBindingTracingEnabled = true; - this->DebugSettings->BindingFailed += ref new BindingFailedEventHandler([](_In_ Object^ /*sender*/, _In_ BindingFailedEventArgs^ e) - { + this->DebugSettings->BindingFailed += ref new BindingFailedEventHandler([](_In_ Object ^ /*sender*/, _In_ BindingFailedEventArgs ^ e) { if (IsDebuggerPresent()) { - ::Platform::String^ errorMessage = e->Message; + ::Platform::String ^ errorMessage = e->Message; __debugbreak(); } }); @@ -87,7 +86,7 @@ App::App() bool App::m_isAnimationEnabled = true; /// -/// Return True if animation is enabled by user setting. +/// Return True if animation is enabled by user setting. /// bool App::IsAnimationEnabled() { @@ -96,12 +95,12 @@ bool App::IsAnimationEnabled() /// /// Return the current application view state. The value -/// will match one of the constants in the ViewState namespace. +/// will match one of the constants in the ViewState namespace. /// -String^ App::GetAppViewState() +String ^ App::GetAppViewState() { - String^ newViewState; - CoreWindow^ window = CoreWindow::GetForCurrentThread(); + String ^ newViewState; + CoreWindow ^ window = CoreWindow::GetForCurrentThread(); if ((window->Bounds.Width >= 560) && (window->Bounds.Height >= 356)) { newViewState = ViewState::DockedView; @@ -114,14 +113,14 @@ String^ App::GetAppViewState() return newViewState; } -void App::AddWindowToMap(_In_ WindowFrameService^ frameService) +void App::AddWindowToMap(_In_ WindowFrameService ^ frameService) { reader_writer_lock::scoped_lock lock(m_windowsMapLock); m_secondaryWindows[frameService->GetViewId()] = frameService; TraceLogger::GetInstance().UpdateWindowCount(m_secondaryWindows.size()); } -WindowFrameService^ App::GetWindowFromMap(int viewId) +WindowFrameService ^ App::GetWindowFromMap(int viewId) { reader_writer_lock::scoped_lock_read lock(m_windowsMapLock); auto windowMapEntry = m_secondaryWindows.find(viewId); @@ -140,30 +139,30 @@ void App::RemoveWindowFromMap(int viewId) m_secondaryWindows.erase(viewId); } -void App::RemoveWindow(_In_ WindowFrameService^ frameService) +void App::RemoveWindow(_In_ WindowFrameService ^ frameService) { - // Shell does not allow killing the main window. + // Shell does not allow killing the main window. if (m_mainViewId != frameService->GetViewId()) { HandleViewReleaseAndRemoveWindowFromMap(frameService); } } -task App::HandleViewReleaseAndRemoveWindowFromMap(_In_ WindowFrameService^ frameService) +task App::HandleViewReleaseAndRemoveWindowFromMap(_In_ WindowFrameService ^ frameService) { WeakReference weak(this); // Unregister the event handler of the Main Page - auto frame = safe_cast(Window::Current->Content); - auto mainPage = safe_cast(frame->Content); + auto frame = safe_cast(Window::Current->Content); + auto mainPage = safe_cast(frame->Content); mainPage->UnregisterEventHandlers(); - return frameService->HandleViewRelease() - .then([weak, frameService]() - { - auto that = weak.Resolve(); - that->RemoveWindowFromMap(frameService->GetViewId()); - }, task_continuation_context::use_arbitrary()); + return frameService->HandleViewRelease().then( + [weak, frameService]() { + auto that = weak.Resolve(); + that->RemoveWindowFromMap(frameService->GetViewId()); + }, + task_continuation_context::use_arbitrary()); } task App::SetupJumpList() @@ -176,10 +175,10 @@ task App::SetupJumpList() jumpList->SystemGroupKind = JumpListSystemGroupKind::None; jumpList->Items->Clear(); - for (NavCategory^ option : calculatorOptions->Categories) + for (NavCategory ^ option : calculatorOptions->Categories) { ViewMode mode = option->Mode; - auto item = JumpListItem::CreateWithArguments(((int)mode).ToString(), L"ms-resource:///Resources/"+ NavCategory::GetNameResourceKey(mode)); + auto item = JumpListItem::CreateWithArguments(((int)mode).ToString(), L"ms-resource:///Resources/" + NavCategory::GetNameResourceKey(mode)); item->Description = L"ms-resource:///Resources/" + NavCategory::GetNameResourceKey(mode); item->GroupName = L"ms-resource:///Resources/" + NavCategoryGroup::GetHeaderResourceKey(calculatorOptions->GroupType); item->Logo = ref new Uri("ms-appx:///Assets/" + mode.ToString() + ".png"); @@ -189,10 +188,12 @@ task App::SetupJumpList() co_await jumpList->SaveAsync(); } - catch(...) {} + catch (...) + { + } } -void App::RemoveSecondaryWindow(_In_ WindowFrameService^ frameService) +void App::RemoveSecondaryWindow(_In_ WindowFrameService ^ frameService) { // Shell does not allow killing the main window. if (m_mainViewId != frameService->GetViewId()) @@ -201,7 +202,7 @@ void App::RemoveSecondaryWindow(_In_ WindowFrameService^ frameService) } } -Frame^ App::CreateFrame() +Frame ^ App::CreateFrame() { auto frame = ref new Frame(); frame->FlowDirection = LocalizationService::GetInstance()->GetFlowDirection(); @@ -215,7 +216,7 @@ Frame^ App::CreateFrame() /// search results, and so forth. /// /// Details about the launch request and process. -void App::OnLaunched(LaunchActivatedEventArgs^ args) +void App::OnLaunched(LaunchActivatedEventArgs ^ args) { TraceLogger::GetInstance().LogWindowLaunched(); if (args->PrelaunchActivated) @@ -227,7 +228,7 @@ void App::OnLaunched(LaunchActivatedEventArgs^ args) OnAppLaunch(args, args->Arguments); } -void App::OnAppLaunch(IActivatedEventArgs^ args, String^ argument) +void App::OnAppLaunch(IActivatedEventArgs ^ args, String ^ argument) { auto previousExecutionState = args->PreviousExecutionState; @@ -244,17 +245,17 @@ void App::OnAppLaunch(IActivatedEventArgs^ args, String^ argument) auto userSettings = ref new Windows::UI::ViewManagement::UISettings(); m_isAnimationEnabled = userSettings->AnimationsEnabled; - args->SplashScreen->Dismissed += ref new TypedEventHandler(this, &App::DismissedEventHandler); + args->SplashScreen->Dismissed += ref new TypedEventHandler(this, &App::DismissedEventHandler); - auto rootFrame = dynamic_cast(Window::Current->Content); + auto rootFrame = dynamic_cast(Window::Current->Content); WeakReference weak(this); float minWindowWidth = static_cast(static_cast(this->Resources->Lookup(ApplicationResourceKeys::AppMinWindowWidth))); float minWindowHeight = static_cast(static_cast(this->Resources->Lookup(ApplicationResourceKeys::AppMinWindowHeight))); Size minWindowSize = SizeHelper::FromDimensions(minWindowWidth, minWindowHeight); - ApplicationView^ appView = ApplicationView::GetForCurrentView(); - ApplicationDataContainer^ localSettings = ApplicationData::Current->LocalSettings; + ApplicationView ^ appView = ApplicationView::GetForCurrentView(); + ApplicationDataContainer ^ localSettings = ApplicationData::Current->LocalSettings; // For very first launch, set the size of the calc as size of the default standard mode if (!localSettings->Values->HasKey(L"VeryFirstLaunch")) { @@ -271,17 +272,17 @@ void App::OnAppLaunch(IActivatedEventArgs^ args, String^ argument) // just ensure that the window is active if (rootFrame == nullptr) { - if (!Windows::Foundation::Metadata::ApiInformation::IsTypePresent("Windows.Phone.UI.Input.HardwareButtons")) // PC Family + if (!Windows::Foundation::Metadata::ApiInformation::IsTypePresent("Windows.Phone.UI.Input.HardwareButtons")) // PC Family { - // Disable the system view activation policy during the first launch of the app + // Disable the system view activation policy during the first launch of the app // only for PC family devices and not for phone family devices try { ApplicationViewSwitcher::DisableSystemViewActivationPolicy(); } - catch (Exception^ e) + catch (Exception ^ e) { - // Log that DisableSystemViewActionPolicy didn't work + // Log that DisableSystemViewActionPolicy didn't work } } @@ -308,76 +309,75 @@ void App::OnAppLaunch(IActivatedEventArgs^ args, String^ argument) TraceLogger::GetInstance().LogAppLaunchStart(); // !Phone check is required because even in continuum mode user interaction mode is Mouse not Touch - if ((UIViewSettings::GetForCurrentView()->UserInteractionMode == UserInteractionMode::Mouse) && (!Windows::Foundation::Metadata::ApiInformation::IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))) + if ((UIViewSettings::GetForCurrentView()->UserInteractionMode == UserInteractionMode::Mouse) + && (!Windows::Foundation::Metadata::ApiInformation::IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))) { // If the pre-launch hasn't happened then allow for the new window/view creation if (!m_preLaunched) { auto newCoreAppView = CoreApplication::CreateNewView(); - newCoreAppView->Dispatcher->RunAsync(CoreDispatcherPriority::Normal, ref new DispatchedHandler([args, argument, minWindowSize, weak]() - { - TraceLogger::GetInstance().LogNewWindowCreationBegin(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread())); - auto that = weak.Resolve(); - if (that != nullptr) - { - auto rootFrame = App::CreateFrame(); - SetMinWindowSizeAndActivate(rootFrame, minWindowSize); - - if (!rootFrame->Navigate(MainPage::typeid, argument)) + newCoreAppView->Dispatcher->RunAsync( + CoreDispatcherPriority::Normal, ref new DispatchedHandler([args, argument, minWindowSize, weak]() { + TraceLogger::GetInstance().LogNewWindowCreationBegin(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread())); + auto that = weak.Resolve(); + if (that != nullptr) { - // We couldn't navigate to the main page, kill the app so we have a good - // stack to debug - throw std::bad_exception(); - } + auto rootFrame = App::CreateFrame(); + SetMinWindowSizeAndActivate(rootFrame, minWindowSize); - auto frameService = WindowFrameService::CreateNewWindowFrameService(rootFrame, true, weak); - that->AddWindowToMap(frameService); - - auto dispatcher = CoreWindow::GetForCurrentThread()->Dispatcher; - auto safeFrameServiceCreation = std::make_shared(frameService, that); - int newWindowId = ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()); - - ActivationViewSwitcher^ activationViewSwitcher; - auto activateEventArgs = dynamic_cast(args); - if (activateEventArgs != nullptr) - { - activationViewSwitcher = activateEventArgs->ViewSwitcher; - } - - if (activationViewSwitcher != nullptr) - { - activationViewSwitcher->ShowAsStandaloneAsync(newWindowId, ViewSizePreference::Default); - safeFrameServiceCreation->SetOperationSuccess(true); - } - else - { - auto activatedEventArgs = dynamic_cast(args); - if ((activatedEventArgs != nullptr) && (activatedEventArgs->CurrentlyShownApplicationViewId != 0)) + if (!rootFrame->Navigate(MainPage::typeid, argument)) { - create_task(ApplicationViewSwitcher::TryShowAsStandaloneAsync( - frameService->GetViewId(), - ViewSizePreference::Default, - activatedEventArgs->CurrentlyShownApplicationViewId, - ViewSizePreference::Default - )) - .then([safeFrameServiceCreation](bool viewShown) + // We couldn't navigate to the main page, kill the app so we have a good + // stack to debug + throw std::bad_exception(); + } + + auto frameService = WindowFrameService::CreateNewWindowFrameService(rootFrame, true, weak); + that->AddWindowToMap(frameService); + + auto dispatcher = CoreWindow::GetForCurrentThread()->Dispatcher; + auto safeFrameServiceCreation = std::make_shared(frameService, that); + int newWindowId = ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()); + + ActivationViewSwitcher ^ activationViewSwitcher; + auto activateEventArgs = dynamic_cast(args); + if (activateEventArgs != nullptr) + { + activationViewSwitcher = activateEventArgs->ViewSwitcher; + } + + if (activationViewSwitcher != nullptr) + { + activationViewSwitcher->ShowAsStandaloneAsync(newWindowId, ViewSizePreference::Default); + safeFrameServiceCreation->SetOperationSuccess(true); + } + else + { + auto activatedEventArgs = dynamic_cast(args); + if ((activatedEventArgs != nullptr) && (activatedEventArgs->CurrentlyShownApplicationViewId != 0)) { - // SafeFrameServiceCreation is used to automatically remove the frame - // from the list of frames if something goes bad. - safeFrameServiceCreation->SetOperationSuccess(viewShown); - }, task_continuation_context::use_current()); + create_task(ApplicationViewSwitcher::TryShowAsStandaloneAsync(frameService->GetViewId(), ViewSizePreference::Default, + activatedEventArgs->CurrentlyShownApplicationViewId, + ViewSizePreference::Default)) + .then( + [safeFrameServiceCreation](bool viewShown) { + // SafeFrameServiceCreation is used to automatically remove the frame + // from the list of frames if something goes bad. + safeFrameServiceCreation->SetOperationSuccess(viewShown); + }, + task_continuation_context::use_current()); + } } } - } - TraceLogger::GetInstance().LogNewWindowCreationEnd(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread())); - })); + TraceLogger::GetInstance().LogNewWindowCreationEnd(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread())); + })); } else { TraceLogger::GetInstance().LogNewWindowCreationBegin(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread())); - ActivationViewSwitcher^ activationViewSwitcher; - auto activateEventArgs = dynamic_cast(args); + ActivationViewSwitcher ^ activationViewSwitcher; + auto activateEventArgs = dynamic_cast(args); if (activateEventArgs != nullptr) { activationViewSwitcher = activateEventArgs->ViewSwitcher; @@ -385,7 +385,8 @@ void App::OnAppLaunch(IActivatedEventArgs^ args, String^ argument) if (activationViewSwitcher != nullptr) { - activationViewSwitcher->ShowAsStandaloneAsync(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()), ViewSizePreference::Default); + activationViewSwitcher->ShowAsStandaloneAsync(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread()), + ViewSizePreference::Default); TraceLogger::GetInstance().LogNewWindowCreationEnd(ApplicationView::GetApplicationViewIdForWindow(CoreWindow::GetForCurrentThread())); TraceLogger::GetInstance().LogPrelaunchedAppActivatedByUser(); } @@ -406,23 +407,24 @@ void App::OnAppLaunch(IActivatedEventArgs^ args, String^ argument) // parameter if (!rootFrame->Navigate(MainPage::typeid, argument)) { - // We couldn't navigate to the main page, + // We couldn't navigate to the main page, // kill the app so we have a good stack to debug throw std::bad_exception(); } } if (!Windows::Foundation::Metadata::ApiInformation::IsTypePresent("Windows.Phone.UI.Input.HardwareButtons")) { - // for tablet mode: since system view activation policy is disabled so do ShowAsStandaloneAsync if activationViewSwitcher exists in activationArgs - ActivationViewSwitcher^ activationViewSwitcher; - auto activateEventArgs = dynamic_cast(args); + // for tablet mode: since system view activation policy is disabled so do ShowAsStandaloneAsync if activationViewSwitcher exists in + // activationArgs + ActivationViewSwitcher ^ activationViewSwitcher; + auto activateEventArgs = dynamic_cast(args); if (activateEventArgs != nullptr) { activationViewSwitcher = activateEventArgs->ViewSwitcher; } if (activationViewSwitcher != nullptr) { - auto viewId = safe_cast(args)->CurrentlyShownApplicationViewId; + auto viewId = safe_cast(args)->CurrentlyShownApplicationViewId; if (viewId != 0) { activationViewSwitcher->ShowAsStandaloneAsync(viewId); @@ -435,10 +437,10 @@ void App::OnAppLaunch(IActivatedEventArgs^ args, String^ argument) } } -void App::SetMinWindowSizeAndActivate(Frame^ rootFrame, Size minWindowSize) +void App::SetMinWindowSizeAndActivate(Frame ^ rootFrame, Size minWindowSize) { // SetPreferredMinSize should always be called before Window::Activate - ApplicationView^ appView = ApplicationView::GetForCurrentView(); + ApplicationView ^ appView = ApplicationView::GetForCurrentView(); appView->SetPreferredMinSize(minWindowSize); // Place the frame in the current Window @@ -451,7 +453,7 @@ void App::RegisterDependencyProperties() NarratorNotifier::RegisterDependencyProperties(); } -void App::OnActivated(IActivatedEventArgs^ args) +void App::OnActivated(IActivatedEventArgs ^ args) { if (args->Kind == ActivationKind::Protocol) { @@ -462,14 +464,13 @@ void App::OnActivated(IActivatedEventArgs^ args) } } -void App::DismissedEventHandler(SplashScreen^ sender, Object^ e) +void App::DismissedEventHandler(SplashScreen ^ sender, Object ^ e) { SetupJumpList(); } float App::GetAppWindowHeight() { - CoreWindow^ window = CoreWindow::GetForCurrentThread(); + CoreWindow ^ window = CoreWindow::GetForCurrentThread(); return window->Bounds.Height; } - diff --git a/src/Calculator/App.xaml.h b/src/Calculator/App.xaml.h index 341f9d3c..60e9f71f 100644 --- a/src/Calculator/App.xaml.h +++ b/src/Calculator/App.xaml.h @@ -26,31 +26,28 @@ namespace CalculatorApp { public: App(); - virtual void OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs^ args) override; - virtual void OnActivated(Windows::ApplicationModel::Activation::IActivatedEventArgs^ args) override; + virtual void OnLaunched(Windows::ApplicationModel::Activation::LaunchActivatedEventArgs ^ args) override; + virtual void OnActivated(Windows::ApplicationModel::Activation::IActivatedEventArgs ^ args) override; - internal: - static bool IsAnimationEnabled(); - static Platform::String^ GetAppViewState(); + internal : static bool IsAnimationEnabled(); + static Platform::String ^ GetAppViewState(); static float GetAppWindowHeight(); - void RemoveWindow(_In_ WindowFrameService^ frameService); - void RemoveSecondaryWindow(_In_ WindowFrameService^ frameService); + void RemoveWindow(_In_ WindowFrameService ^ frameService); + void RemoveSecondaryWindow(_In_ WindowFrameService ^ frameService); private: - static Windows::UI::Xaml::Controls::Frame^ CreateFrame(); - static void SetMinWindowSizeAndActivate(Windows::UI::Xaml::Controls::Frame^ rootFrame, Windows::Foundation::Size minWindowSize); + static Windows::UI::Xaml::Controls::Frame ^ CreateFrame(); + static void SetMinWindowSizeAndActivate(Windows::UI::Xaml::Controls::Frame ^ rootFrame, Windows::Foundation::Size minWindowSize); - void OnAppLaunch(Windows::ApplicationModel::Activation::IActivatedEventArgs^ args, Platform::String^ argument); - void DismissedEventHandler(Windows::ApplicationModel::Activation::SplashScreen^ sender, Platform::Object^ e); + void OnAppLaunch(Windows::ApplicationModel::Activation::IActivatedEventArgs ^ args, Platform::String ^ argument); + void DismissedEventHandler(Windows::ApplicationModel::Activation::SplashScreen ^ sender, Platform::Object ^ e); void RegisterDependencyProperties(); class SafeFrameWindowCreation final { public: - SafeFrameWindowCreation(_In_ WindowFrameService^ frameService, App^ parent) - : m_frameService(frameService) - , m_frameOpenedInWindow(false) - , m_parent(parent) + SafeFrameWindowCreation(_In_ WindowFrameService ^ frameService, App ^ parent) + : m_frameService(frameService), m_frameOpenedInWindow(false), m_parent(parent) { } @@ -70,24 +67,24 @@ namespace CalculatorApp } private: - WindowFrameService^ m_frameService; + WindowFrameService ^ m_frameService; bool m_frameOpenedInWindow; - App^ m_parent; + App ^ m_parent; }; private: concurrency::reader_writer_lock m_windowsMapLock; - std::unordered_map m_secondaryWindows; + std::unordered_map m_secondaryWindows; concurrency::task SetupJumpList(); - concurrency::task HandleViewReleaseAndRemoveWindowFromMap(_In_ WindowFrameService^ frameService); - void AddWindowToMap(_In_ WindowFrameService^ frameService); - WindowFrameService^ GetWindowFromMap(int viewId); + concurrency::task HandleViewReleaseAndRemoveWindowFromMap(_In_ WindowFrameService ^ frameService); + void AddWindowToMap(_In_ WindowFrameService ^ frameService); + WindowFrameService ^ GetWindowFromMap(int viewId); void RemoveWindowFromMap(int viewId); int m_mainViewId; bool m_preLaunched; - Windows::UI::Xaml::Controls::Primitives::Popup^ m_aboutPopup; + Windows::UI::Xaml::Controls::Primitives::Popup ^ m_aboutPopup; static bool m_isAnimationEnabled; }; diff --git a/src/Calculator/Common/AlwaysSelectedCollectionView.h b/src/Calculator/Common/AlwaysSelectedCollectionView.h index 6e702c79..40a620a9 100644 --- a/src/Calculator/Common/AlwaysSelectedCollectionView.h +++ b/src/Calculator/Common/AlwaysSelectedCollectionView.h @@ -3,107 +3,102 @@ #pragma once -namespace CalculatorApp { namespace Common +namespace CalculatorApp { - ref class AlwaysSelectedCollectionView sealed: - public Windows::UI::Xaml::DependencyObject, - public Windows::UI::Xaml::Data::ICollectionView + namespace Common { - internal: - AlwaysSelectedCollectionView(Windows::UI::Xaml::Interop::IBindableVector^ source): - m_currentPosition(-1) + ref class AlwaysSelectedCollectionView sealed : public Windows::UI::Xaml::DependencyObject, public Windows::UI::Xaml::Data::ICollectionView { - m_source = source; + internal : AlwaysSelectedCollectionView(Windows::UI::Xaml::Interop::IBindableVector ^ source) : m_currentPosition(-1) + { + m_source = source; - Windows::UI::Xaml::Interop::IBindableObservableVector^ observable = dynamic_cast(source); - if (observable) - { - observable->VectorChanged += - ref new Windows::UI::Xaml::Interop::BindableVectorChangedEventHandler(this, &AlwaysSelectedCollectionView::OnSourceBindableVectorChanged); - } - } - - private: - // ICollectionView - // Not implemented methods - virtual Windows::Foundation::IAsyncOperation^ LoadMoreItemsAsync(unsigned int) = Windows::UI::Xaml::Data::ICollectionView::LoadMoreItemsAsync - { - throw ref new Platform::NotImplementedException(); - } - virtual bool MoveCurrentToFirst() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToFirst - { - throw ref new Platform::NotImplementedException(); - } - virtual bool MoveCurrentToLast() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToLast - { - throw ref new Platform::NotImplementedException(); - } - virtual bool MoveCurrentToNext() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToNext - { - throw ref new Platform::NotImplementedException(); - } - virtual bool MoveCurrentToPrevious() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToPrevious - { - throw ref new Platform::NotImplementedException(); - } - property Windows::Foundation::Collections::IObservableVector^ CollectionGroups - { - virtual Windows::Foundation::Collections::IObservableVector^ get() = Windows::UI::Xaml::Data::ICollectionView::CollectionGroups::get - { - return ref new Platform::Collections::Vector(); - } - } - property bool HasMoreItems - { - virtual bool get() = Windows::UI::Xaml::Data::ICollectionView::HasMoreItems::get - { - return false; - } - } - - // Implementented methods - virtual bool MoveCurrentTo(Platform::Object^ item) = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentTo - { - if (item) - { - unsigned int newCurrentPosition = 0; - bool result = m_source->IndexOf(item, &newCurrentPosition); - if (result) + Windows::UI::Xaml::Interop::IBindableObservableVector ^ observable = + dynamic_cast(source); + if (observable) { - m_currentPosition = newCurrentPosition; - m_currentChanged(this, nullptr); - return true; + observable->VectorChanged += ref new Windows::UI::Xaml::Interop::BindableVectorChangedEventHandler( + this, &AlwaysSelectedCollectionView::OnSourceBindableVectorChanged); } } - // The item is not in the collection - // We're going to schedule a call back later so we - // restore the selection to the way we wanted it to begin with - if (m_currentPosition >= 0 && m_currentPosition < static_cast(m_source->Size)) + private: + // ICollectionView + // Not implemented methods + virtual Windows::Foundation::IAsyncOperation< + Windows::UI::Xaml::Data::LoadMoreItemsResult> ^ LoadMoreItemsAsync(unsigned int) = Windows::UI::Xaml::Data::ICollectionView::LoadMoreItemsAsync { - this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, - ref new Windows::UI::Core::DispatchedHandler( - [this]() - { - m_currentChanged(this, nullptr); - })); + throw ref new Platform::NotImplementedException(); } - return false; - } - - virtual bool MoveCurrentToPosition(int index) = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToPosition - { - if (index < 0 || index >= static_cast(m_source->Size)) + virtual bool MoveCurrentToFirst() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToFirst { + throw ref new Platform::NotImplementedException(); + } + virtual bool MoveCurrentToLast() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToLast + { + throw ref new Platform::NotImplementedException(); + } + virtual bool MoveCurrentToNext() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToNext + { + throw ref new Platform::NotImplementedException(); + } + virtual bool MoveCurrentToPrevious() = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToPrevious + { + throw ref new Platform::NotImplementedException(); + } + property Windows::Foundation::Collections::IObservableVector ^ CollectionGroups { + virtual Windows::Foundation::Collections::IObservableVector ^ get() = Windows::UI::Xaml::Data::ICollectionView::CollectionGroups::get + { + return ref new Platform::Collections::Vector(); + } + } property bool HasMoreItems + { + virtual bool get() = Windows::UI::Xaml::Data::ICollectionView::HasMoreItems::get + { + return false; + } + } + + // Implementented methods + virtual bool MoveCurrentTo(Platform::Object ^ item) = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentTo + { + if (item) + { + unsigned int newCurrentPosition = 0; + bool result = m_source->IndexOf(item, &newCurrentPosition); + if (result) + { + m_currentPosition = newCurrentPosition; + m_currentChanged(this, nullptr); + return true; + } + } + + // The item is not in the collection + // We're going to schedule a call back later so we + // restore the selection to the way we wanted it to begin with + if (m_currentPosition >= 0 && m_currentPosition < static_cast(m_source->Size)) + { + this->Dispatcher->RunAsync(Windows::UI::Core::CoreDispatcherPriority::Normal, + ref new Windows::UI::Core::DispatchedHandler([this]() { m_currentChanged(this, nullptr); })); + } return false; } - m_currentPosition = index; - m_currentChanged(this, nullptr); - return true; - } + virtual bool MoveCurrentToPosition(int index) = Windows::UI::Xaml::Data::ICollectionView::MoveCurrentToPosition + { + if (index < 0 || index >= static_cast(m_source->Size)) + { + return false; + } - property Platform::Object^ CurrentItem + m_currentPosition = index; + m_currentChanged(this, nullptr); + return true; + } + + property Platform::Object^ CurrentItem { virtual Platform::Object^ get() = Windows::UI::Xaml::Data::ICollectionView::CurrentItem::get { @@ -116,30 +111,30 @@ namespace CalculatorApp { namespace Common } property int CurrentPosition - { - virtual int get() = Windows::UI::Xaml::Data::ICollectionView::CurrentPosition::get { - return m_currentPosition; + virtual int get() = Windows::UI::Xaml::Data::ICollectionView::CurrentPosition::get + { + return m_currentPosition; + } } - } - property bool IsCurrentAfterLast - { - virtual bool get() = Windows::UI::Xaml::Data::ICollectionView::IsCurrentAfterLast::get + property bool IsCurrentAfterLast { - return m_currentPosition >= static_cast(m_source->Size); + virtual bool get() = Windows::UI::Xaml::Data::ICollectionView::IsCurrentAfterLast::get + { + return m_currentPosition >= static_cast(m_source->Size); + } } - } - property bool IsCurrentBeforeFirst - { - virtual bool get() = Windows::UI::Xaml::Data::ICollectionView::IsCurrentBeforeFirst::get + property bool IsCurrentBeforeFirst { - return m_currentPosition < 0; + virtual bool get() = Windows::UI::Xaml::Data::ICollectionView::IsCurrentBeforeFirst::get + { + return m_currentPosition < 0; + } } - } - event Windows::Foundation::EventHandler^ CurrentChanged + event Windows::Foundation::EventHandler^ CurrentChanged { virtual Windows::Foundation::EventRegistrationToken add(Windows::Foundation::EventHandler^ handler) = Windows::UI::Xaml::Data::ICollectionView::CurrentChanged::add { @@ -165,63 +160,67 @@ namespace CalculatorApp { namespace Common // IVector // Not implemented methods virtual void Append(Platform::Object^ /*item*/) = Windows::Foundation::Collections::IVector::Append - { - throw ref new Platform::NotImplementedException(); - } - virtual void Clear() = Windows::Foundation::Collections::IVector::Clear - { - throw ref new Platform::NotImplementedException(); - } - virtual unsigned int GetMany(unsigned int /*startIndex*/, Platform::WriteOnlyArray^ /*items*/) = Windows::Foundation::Collections::IVector::GetMany - { - throw ref new Platform::NotImplementedException(); - } - virtual Windows::Foundation::Collections::IVectorView^ GetView() = Windows::Foundation::Collections::IVector::GetView - { - throw ref new Platform::NotImplementedException(); - } - virtual void InsertAt(unsigned int /*index*/, Platform::Object^ /*item*/) = Windows::Foundation::Collections::IVector::InsertAt - { - throw ref new Platform::NotImplementedException(); - } - virtual void RemoveAt(unsigned int /*index*/) = Windows::Foundation::Collections::IVector::RemoveAt - { - throw ref new Platform::NotImplementedException(); - } - virtual void RemoveAtEnd() = Windows::Foundation::Collections::IVector::RemoveAtEnd - { - throw ref new Platform::NotImplementedException(); - } - virtual void ReplaceAll(const Platform::Array^ /*items*/) = Windows::Foundation::Collections::IVector::ReplaceAll - { - throw ref new Platform::NotImplementedException(); - } - virtual void SetAt(unsigned int /*index*/, Platform::Object^ /*item*/) = Windows::Foundation::Collections::IVector::SetAt - { - throw ref new Platform::NotImplementedException(); - } - - // Implemented methods - virtual Platform::Object^ GetAt(unsigned int index) = Windows::Foundation::Collections::IVector::GetAt - { - return m_source->GetAt(index); - } - - virtual bool IndexOf(Platform::Object^ item, unsigned int* index) = Windows::Foundation::Collections::IVector::IndexOf - { - return m_source->IndexOf(item, index); - } - - property unsigned int Size - { - virtual unsigned int get() = Windows::Foundation::Collections::IVector::Size::get { - return m_source->Size; + throw ref new Platform::NotImplementedException(); + } + virtual void Clear() = Windows::Foundation::Collections::IVector::Clear + { + throw ref new Platform::NotImplementedException(); + } + virtual unsigned int + GetMany(unsigned int /*startIndex*/, + Platform::WriteOnlyArray ^ /*items*/) = Windows::Foundation::Collections::IVector::GetMany + { + throw ref new Platform::NotImplementedException(); + } + virtual Windows::Foundation::Collections::IVectorView ^ GetView() = Windows::Foundation::Collections::IVector::GetView + { + throw ref new Platform::NotImplementedException(); + } + virtual void InsertAt(unsigned int /*index*/, Platform::Object ^ /*item*/) = Windows::Foundation::Collections::IVector::InsertAt + { + throw ref new Platform::NotImplementedException(); + } + virtual void RemoveAt(unsigned int /*index*/) = Windows::Foundation::Collections::IVector::RemoveAt + { + throw ref new Platform::NotImplementedException(); + } + virtual void RemoveAtEnd() = Windows::Foundation::Collections::IVector::RemoveAtEnd + { + throw ref new Platform::NotImplementedException(); + } + virtual void + ReplaceAll(const Platform::Array ^ /*items*/) = Windows::Foundation::Collections::IVector::ReplaceAll + { + throw ref new Platform::NotImplementedException(); + } + virtual void SetAt(unsigned int /*index*/, Platform::Object ^ /*item*/) = Windows::Foundation::Collections::IVector::SetAt + { + throw ref new Platform::NotImplementedException(); } - } - // IObservableVector - event Windows::Foundation::Collections::VectorChangedEventHandler^ VectorChanged + // Implemented methods + virtual Platform::Object ^ GetAt(unsigned int index) = Windows::Foundation::Collections::IVector::GetAt + { + return m_source->GetAt(index); + } + + virtual bool IndexOf(Platform::Object ^ item, unsigned int* index) = Windows::Foundation::Collections::IVector::IndexOf + { + return m_source->IndexOf(item, index); + } + + property unsigned int Size + { + virtual unsigned int get() = Windows::Foundation::Collections::IVector::Size::get + { + return m_source->Size; + } + } + + // IObservableVector + event Windows::Foundation::Collections::VectorChangedEventHandler^ VectorChanged { virtual Windows::Foundation::EventRegistrationToken add(Windows::Foundation::Collections::VectorChangedEventHandler^ handler) = Windows::Foundation::Collections::IObservableVector::VectorChanged::add { @@ -236,52 +235,51 @@ namespace CalculatorApp { namespace Common // IIterable // Not implemented virtual Windows::Foundation::Collections::IIterator^ First() = Windows::Foundation::Collections::IIterable::First - { - throw ref new Platform::NotImplementedException(); - } - - // Event handlers - void OnSourceBindableVectorChanged(Windows::UI::Xaml::Interop::IBindableObservableVector^ source, Platform::Object^ e) - { - Windows::Foundation::Collections::IVectorChangedEventArgs^ args = safe_cast(e); - m_vectorChanged(this, args); - } - - Windows::UI::Xaml::Interop::IBindableVector^ m_source; - int m_currentPosition; - event Windows::Foundation::EventHandler^ m_currentChanged; - event Windows::UI::Xaml::Data::CurrentChangingEventHandler^ m_currentChanging; - event Windows::Foundation::Collections::VectorChangedEventHandler^ m_vectorChanged; - }; - - public ref class AlwaysSelectedCollectionViewConverter sealed: public Windows::UI::Xaml::Data::IValueConverter - { - public: - AlwaysSelectedCollectionViewConverter() - { } - - private: - virtual Platform::Object^ Convert( - Platform::Object^ value, - Windows::UI::Xaml::Interop::TypeName /*targetType*/, - Platform::Object^ /*parameter*/, - Platform::String^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::Convert - { - auto result = dynamic_cast(value); - if (result) { - return ref new AlwaysSelectedCollectionView(result); + throw ref new Platform::NotImplementedException(); } - return Windows::UI::Xaml::DependencyProperty::UnsetValue; // Can't convert - } - virtual Platform::Object^ ConvertBack( - Platform::Object^ /*value*/, - Windows::UI::Xaml::Interop::TypeName /*targetType*/, - Platform::Object^ /*parameter*/, - Platform::String^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::ConvertBack + // Event handlers + void OnSourceBindableVectorChanged(Windows::UI::Xaml::Interop::IBindableObservableVector ^ source, Platform::Object ^ e) + { + Windows::Foundation::Collections::IVectorChangedEventArgs ^ args = safe_cast(e); + m_vectorChanged(this, args); + } + + Windows::UI::Xaml::Interop::IBindableVector ^ m_source; + int m_currentPosition; + event Windows::Foundation::EventHandler ^ m_currentChanged; + event Windows::UI::Xaml::Data::CurrentChangingEventHandler ^ m_currentChanging; + event Windows::Foundation::Collections::VectorChangedEventHandler ^ m_vectorChanged; + }; + + public + ref class AlwaysSelectedCollectionViewConverter sealed : public Windows::UI::Xaml::Data::IValueConverter { - return Windows::UI::Xaml::DependencyProperty::UnsetValue; - } - }; -}} + public: + AlwaysSelectedCollectionViewConverter() + { + } + + private: + virtual Platform::Object + ^ Convert(Platform::Object ^ value, Windows::UI::Xaml::Interop::TypeName /*targetType*/, Platform::Object ^ /*parameter*/, + Platform::String ^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::Convert + { + auto result = dynamic_cast(value); + if (result) + { + return ref new AlwaysSelectedCollectionView(result); + } + return Windows::UI::Xaml::DependencyProperty::UnsetValue; // Can't convert + } + + virtual Platform::Object + ^ ConvertBack(Platform::Object ^ /*value*/, Windows::UI::Xaml::Interop::TypeName /*targetType*/, Platform::Object ^ /*parameter*/, + Platform::String ^ /*language*/) = Windows::UI::Xaml::Data::IValueConverter::ConvertBack + { + return Windows::UI::Xaml::DependencyProperty::UnsetValue; + } + }; + } +} diff --git a/src/Calculator/Common/AppLifecycleLogger.cpp b/src/Calculator/Common/AppLifecycleLogger.cpp index 5bfb6141..9e208508 100644 --- a/src/Calculator/Common/AppLifecycleLogger.cpp +++ b/src/Calculator/Common/AppLifecycleLogger.cpp @@ -15,14 +15,13 @@ using namespace winrt::Windows::UI::ViewManagement; namespace CalculatorApp { - #ifdef SEND_TELEMETRY // c.f. WINEVENT_KEYWORD_RESERVED_63-56 0xFF00000000000000 // Bits 63-56 - channel keywords // c.f. WINEVENT_KEYWORD_* 0x00FF000000000000 // Bits 55-48 - system-reserved keywords constexpr int64_t MICROSOFT_KEYWORD_CRITICAL_DATA = 0x0000800000000000; // Bit 47 - constexpr int64_t MICROSOFT_KEYWORD_MEASURES = 0x0000400000000000; // Bit 46 - constexpr int64_t MICROSOFT_KEYWORD_TELEMETRY = 0x0000200000000000; // Bit 45 - constexpr int64_t MICROSOFT_KEYWORD_RESERVED_44 = 0x0000100000000000; // Bit 44 (reserved for future assignment) + constexpr int64_t MICROSOFT_KEYWORD_MEASURES = 0x0000400000000000; // Bit 46 + constexpr int64_t MICROSOFT_KEYWORD_TELEMETRY = 0x0000200000000000; // Bit 45 + constexpr int64_t MICROSOFT_KEYWORD_RESERVED_44 = 0x0000100000000000; // Bit 44 (reserved for future assignment) #else // define all Keyword options as 0 when we do not want to upload app telemetry constexpr int64_t MICROSOFT_KEYWORD_CRITICAL_DATA = 0; @@ -33,8 +32,8 @@ namespace CalculatorApp #pragma region TraceLogger setup and cleanup - AppLifecycleLogger::AppLifecycleLogger() : - m_appLifecycleProvider( + AppLifecycleLogger::AppLifecycleLogger() + : m_appLifecycleProvider( L"Microsoft.Windows.AppLifeCycle", LoggingChannelOptions(GUID{ 0x4f50731a, 0x89cf, 0x4782, 0xb3, 0xe0, 0xdc, 0xe8, 0xc9, 0x4, 0x76, 0xba }), // Microsoft Telemetry group GUID{ 0xef00584a, 0x2655, 0x462c, 0xbc, 0x24, 0xe7, 0xde, 0x63, 0xe, 0x7f, 0xbf }) // Unique provider ID {EF00584A-2655-462C-BC24-E7DE630E7FBF} @@ -59,13 +58,15 @@ namespace CalculatorApp #pragma region Tracing methods void AppLifecycleLogger::LogAppLifecycleEvent(hstring const& eventName, LoggingFields const& fields) const { - m_appLifecycleProvider.LogEvent(eventName, fields, LoggingLevel::Information, LoggingOptions(MICROSOFT_KEYWORD_TELEMETRY | WINEVENT_KEYWORD_RESPONSE_TIME)); + m_appLifecycleProvider.LogEvent(eventName, fields, LoggingLevel::Information, + LoggingOptions(MICROSOFT_KEYWORD_TELEMETRY | WINEVENT_KEYWORD_RESPONSE_TIME)); } #pragma endregion void AppLifecycleLogger::LaunchUIResponsive() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; PopulateAppInfo(fields); @@ -74,7 +75,8 @@ namespace CalculatorApp void AppLifecycleLogger::LaunchVisibleComplete() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; PopulateAppInfo(fields); @@ -83,7 +85,8 @@ namespace CalculatorApp void AppLifecycleLogger::ResumeUIResponsive() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; PopulateAppInfo(fields); @@ -92,7 +95,8 @@ namespace CalculatorApp void AppLifecycleLogger::ResumeVisibleComplete() const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; PopulateAppInfo(fields); @@ -106,7 +110,8 @@ namespace CalculatorApp void AppLifecycleLogger::ResizeUIResponsive(int32_t viewId) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; PopulateAppInfo(fields); @@ -121,7 +126,8 @@ namespace CalculatorApp void AppLifecycleLogger::ResizeVisibleComplete(int32_t viewId) const { - if (!GetTraceLoggingProviderEnabled()) return; + if (!GetTraceLoggingProviderEnabled()) + return; LoggingFields fields{}; PopulateAppInfo(fields); @@ -141,6 +147,3 @@ namespace CalculatorApp fields.AddString(L"PsmKey", psmKey); } } - - - diff --git a/src/Calculator/Common/AppLifecycleLogger.h b/src/Calculator/Common/AppLifecycleLogger.h index ca7ac65c..cb43327e 100644 --- a/src/Calculator/Common/AppLifecycleLogger.h +++ b/src/Calculator/Common/AppLifecycleLogger.h @@ -9,7 +9,7 @@ namespace CalculatorApp { public: AppLifecycleLogger(AppLifecycleLogger const&) = delete; - AppLifecycleLogger const & operator= (AppLifecycleLogger const&) = delete; + AppLifecycleLogger const& operator=(AppLifecycleLogger const&) = delete; ~AppLifecycleLogger(); static AppLifecycleLogger& GetInstance(); bool GetTraceLoggingProviderEnabled() const; @@ -29,10 +29,10 @@ namespace CalculatorApp AppLifecycleLogger(); // Any new Log method should - // a) Decide the level of logging. This will help us in limiting recording of events only up to a certain level. See this link for guidance https://msdn.microsoft.com/en-us/library/windows/desktop/aa363742(v=vs.85).aspx - // We're using Verbose level for events that are called frequently and needed only for debugging or capturing perf for specific scenarios - // b) Should decide whether or not to log to telemetry and pass TraceLoggingKeyword(MICROSOFT_KEYWORD_TELEMETRY) accordingly - // c) Should accept a variable number of additional data arguments if needed + // a) Decide the level of logging. This will help us in limiting recording of events only up to a certain level. See this link for guidance + // https://msdn.microsoft.com/en-us/library/windows/desktop/aa363742(v=vs.85).aspx We're using Verbose level for events that are called frequently and + // needed only for debugging or capturing perf for specific scenarios b) Should decide whether or not to log to telemetry and pass + // TraceLoggingKeyword(MICROSOFT_KEYWORD_TELEMETRY) accordingly c) Should accept a variable number of additional data arguments if needed void LogAppLifecycleEvent(winrt::hstring const& eventName, winrt::Windows::Foundation::Diagnostics::LoggingFields const& fields) const; void PopulateAppInfo(winrt::Windows::Foundation::Diagnostics::LoggingFields& fields) const; diff --git a/src/Calculator/Common/BindableBase.cpp b/src/Calculator/Common/BindableBase.cpp index b1fdcc78..ccba7985 100644 --- a/src/Calculator/Common/BindableBase.cpp +++ b/src/Calculator/Common/BindableBase.cpp @@ -13,22 +13,22 @@ using namespace Windows::UI::Xaml::Data; /// Notifies listeners that a property value has changed. /// /// Name of the property used to notify listeners. -void BindableBase::OnPropertyChanged(String^ propertyName) +void BindableBase::OnPropertyChanged(String ^ propertyName) { PropertyChanged(this, ref new PropertyChangedEventArgs(propertyName)); } -Windows::UI::Xaml::Data::ICustomProperty^ BindableBase::GetCustomProperty(Platform::String^ name) +Windows::UI::Xaml::Data::ICustomProperty ^ BindableBase::GetCustomProperty(Platform::String ^ name) { return nullptr; } -Windows::UI::Xaml::Data::ICustomProperty^ BindableBase::GetIndexedProperty(Platform::String^ name, Windows::UI::Xaml::Interop::TypeName type) +Windows::UI::Xaml::Data::ICustomProperty ^ BindableBase::GetIndexedProperty(Platform::String ^ name, Windows::UI::Xaml::Interop::TypeName type) { return nullptr; } -Platform::String^ BindableBase::GetStringRepresentation() +Platform::String ^ BindableBase::GetStringRepresentation() { return this->ToString(); } diff --git a/src/Calculator/Common/BindableBase.h b/src/Calculator/Common/BindableBase.h index b6a9f32e..d1f958f5 100644 --- a/src/Calculator/Common/BindableBase.h +++ b/src/Calculator/Common/BindableBase.h @@ -10,26 +10,29 @@ namespace CalculatorApp /// /// Implementation of to simplify models. /// - [Windows::Foundation::Metadata::WebHostHidden] - public ref class BindableBase : Windows::UI::Xaml::DependencyObject, Windows::UI::Xaml::Data::INotifyPropertyChanged, Windows::UI::Xaml::Data::ICustomPropertyProvider + [Windows::Foundation::Metadata::WebHostHidden] public ref class BindableBase : Windows::UI::Xaml::DependencyObject, + Windows::UI::Xaml::Data::INotifyPropertyChanged, + Windows::UI::Xaml::Data::ICustomPropertyProvider { public: - virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler^ PropertyChanged; + virtual event Windows::UI::Xaml::Data::PropertyChangedEventHandler ^ PropertyChanged; public: // ICustomPropertyProvider - virtual Windows::UI::Xaml::Data::ICustomProperty^ GetCustomProperty(Platform::String^ name); - virtual Windows::UI::Xaml::Data::ICustomProperty^ GetIndexedProperty(Platform::String^ name, Windows::UI::Xaml::Interop::TypeName type); - virtual Platform::String^ GetStringRepresentation(); + virtual Windows::UI::Xaml::Data::ICustomProperty ^ GetCustomProperty(Platform::String ^ name); + virtual Windows::UI::Xaml::Data::ICustomProperty ^ GetIndexedProperty(Platform::String ^ name, Windows::UI::Xaml::Interop::TypeName type); + virtual Platform::String ^ GetStringRepresentation(); property Windows::UI::Xaml::Interop::TypeName Type { - virtual Windows::UI::Xaml::Interop::TypeName get() { return this->GetType(); } + virtual Windows::UI::Xaml::Interop::TypeName get() + { + return this->GetType(); + } } - protected: - virtual void OnPropertyChanged(Platform::String^ propertyName); + virtual void OnPropertyChanged(Platform::String ^ propertyName); }; } } diff --git a/src/Calculator/Controls/CalculationResult.cpp b/src/Calculator/Controls/CalculationResult.cpp index 608bf07c..c6486c35 100644 --- a/src/Calculator/Controls/CalculationResult.cpp +++ b/src/Calculator/Controls/CalculationResult.cpp @@ -50,13 +50,11 @@ DEPENDENCY_PROPERTY_INITIALIZATION(CalculationResult, DisplayStringExpression); StringReference CalculationResult::s_FocusedState(L"Focused"); StringReference CalculationResult::s_UnfocusedState(L"Unfocused"); -CalculationResult::CalculationResult(): - m_isScalingText(false), - m_haveCalculatedMax(false) +CalculationResult::CalculationResult() : m_isScalingText(false), m_haveCalculatedMax(false) { } -Platform::String^ CalculationResult::GetRawDisplayValue() +Platform::String ^ CalculationResult::GetRawDisplayValue() { std::wstring rawValue; @@ -72,18 +70,19 @@ void CalculationResult::OnApplyTemplate() { m_textContainer->LayoutUpdated -= m_textContainerLayoutChangedToken; } - m_textContainer = dynamic_cast(GetTemplateChild("TextContainer")); + m_textContainer = dynamic_cast(GetTemplateChild("TextContainer")); if (m_textContainer) { m_textContainer->SizeChanged += ref new SizeChangedEventHandler(this, &CalculationResult::TextContainerSizeChanged); // We want to know when the size of the container changes so // we can rescale the textbox - m_textContainerLayoutChangedToken = m_textContainer->LayoutUpdated += ref new EventHandler(this, &CalculationResult::OnTextContainerLayoutUpdated); + m_textContainerLayoutChangedToken = m_textContainer->LayoutUpdated += + ref new EventHandler(this, &CalculationResult::OnTextContainerLayoutUpdated); - m_textContainer->ChangeView(m_textContainer->ExtentWidth - m_textContainer->ViewportWidth,nullptr,nullptr); - m_scrollLeft = dynamic_cast(GetTemplateChild("ScrollLeft")); - m_scrollRight = dynamic_cast(GetTemplateChild("ScrollRight")); - auto borderContainer = dynamic_cast(GetTemplateChild("Border")); + m_textContainer->ChangeView(m_textContainer->ExtentWidth - m_textContainer->ViewportWidth, nullptr, nullptr); + m_scrollLeft = dynamic_cast(GetTemplateChild("ScrollLeft")); + m_scrollRight = dynamic_cast(GetTemplateChild("ScrollRight")); + auto borderContainer = dynamic_cast(GetTemplateChild("Border")); if (m_scrollLeft && m_scrollRight) { m_scrollLeft->Click += ref new RoutedEventHandler(this, &CalculationResult::OnScrollClick); @@ -91,7 +90,7 @@ void CalculationResult::OnApplyTemplate() borderContainer->PointerEntered += ref new PointerEventHandler(this, &CalculationResult::OnPointerEntered); borderContainer->PointerExited += ref new PointerEventHandler(this, &CalculationResult::OnPointerExited); } - m_textBlock = dynamic_cast(m_textContainer->FindName("NormalOutput")); + m_textBlock = dynamic_cast(m_textContainer->FindName("NormalOutput")); if (m_textBlock) { m_textBlock->Visibility = ::Visibility::Visible; @@ -101,7 +100,7 @@ void CalculationResult::OnApplyTemplate() VisualStateManager::GoToState(this, s_UnfocusedState, false); } -void CalculationResult::OnPointerPressed(PointerRoutedEventArgs^ e) +void CalculationResult::OnPointerPressed(PointerRoutedEventArgs ^ e) { if (m_scrollLeft && m_scrollRight && e->Pointer->PointerDeviceType == PointerDeviceType::Touch) { @@ -109,7 +108,7 @@ void CalculationResult::OnPointerPressed(PointerRoutedEventArgs^ e) } } -void CalculationResult::OnTextContainerLayoutUpdated(Object^ /*sender*/, Object^ /*e*/) +void CalculationResult::OnTextContainerLayoutUpdated(Object ^ /*sender*/, Object ^ /*e*/) { if (m_isScalingText) { @@ -117,7 +116,7 @@ void CalculationResult::OnTextContainerLayoutUpdated(Object^ /*sender*/, Object^ } } -void CalculationResult::TextContainerSizeChanged(Object^ /*sender*/, SizeChangedEventArgs^ /*e*/) +void CalculationResult::TextContainerSizeChanged(Object ^ /*sender*/, SizeChangedEventArgs ^ /*e*/) { UpdateTextState(); } @@ -127,7 +126,7 @@ void CalculationResult::OnIsActivePropertyChanged(bool /*oldValue*/, bool /*newV UpdateVisualState(); } -void CalculationResult::OnAccentColorPropertyChanged(Brush^ /*oldValue*/, Brush^ /*newValue*/) +void CalculationResult::OnAccentColorPropertyChanged(Brush ^ /*oldValue*/, Brush ^ /*newValue*/) { // Force the "Active" transition to happen again if (IsActive) @@ -137,7 +136,7 @@ void CalculationResult::OnAccentColorPropertyChanged(Brush^ /*oldValue*/, Brush^ } } -void CalculationResult::OnDisplayValuePropertyChanged(String^ /*oldValue*/, String^ /*newValue*/) +void CalculationResult::OnDisplayValuePropertyChanged(String ^ /*oldValue*/, String ^ /*newValue*/) { UpdateTextState(); } @@ -198,8 +197,8 @@ void CalculationResult::UpdateTextState() } auto containerSize = m_textContainer->ActualWidth; - String^ oldText = m_textBlock->Text; - String^ newText = Utils::LRO + DisplayValue + Utils::PDF; + String ^ oldText = m_textBlock->Text; + String ^ newText = Utils::LRO + DisplayValue + Utils::PDF; // Initiate the scaling operation // UpdateLayout will keep calling us until we make it through the below 2 if-statements @@ -241,11 +240,11 @@ void CalculationResult::UpdateTextState() m_isScalingText = false; if (IsOperatorCommand) { - m_textContainer->ChangeView(0.0,nullptr,nullptr); + m_textContainer->ChangeView(0.0, nullptr, nullptr); } else { - m_textContainer->ChangeView(m_textContainer->ExtentWidth - m_textContainer->ViewportWidth,nullptr,nullptr); + m_textContainer->ChangeView(m_textContainer->ExtentWidth - m_textContainer->ViewportWidth, nullptr, nullptr); } if (m_scrollLeft && m_scrollRight) @@ -292,7 +291,7 @@ void CalculationResult::ScrollRight() } } -void CalculationResult::OnKeyDown(KeyRoutedEventArgs^ e) +void CalculationResult::OnKeyDown(KeyRoutedEventArgs ^ e) { if (m_scrollLeft != nullptr && m_scrollRight != nullptr) { @@ -308,9 +307,9 @@ void CalculationResult::OnKeyDown(KeyRoutedEventArgs^ e) } } -void CalculationResult::OnScrollClick(Object^ sender, RoutedEventArgs^ /*e*/) +void CalculationResult::OnScrollClick(Object ^ sender, RoutedEventArgs ^ /*e*/) { - auto clicked = dynamic_cast(sender); + auto clicked = dynamic_cast(sender); if (clicked == m_scrollLeft) { this->ScrollLeft(); @@ -321,7 +320,7 @@ void CalculationResult::OnScrollClick(Object^ sender, RoutedEventArgs^ /*e*/) } } -void CalculationResult::OnPointerEntered(Platform::Object^ sender, PointerRoutedEventArgs^ e) +void CalculationResult::OnPointerEntered(Platform::Object ^ sender, PointerRoutedEventArgs ^ e) { if (e->Pointer->PointerDeviceType == PointerDeviceType::Mouse && m_textBlock->ActualWidth >= m_textContainer->ActualWidth) { @@ -358,7 +357,7 @@ void CalculationResult::UpdateScrollButtons() } } -void CalculationResult::OnPointerExited(Platform::Object^ sender, PointerRoutedEventArgs^ e) +void CalculationResult::OnPointerExited(Platform::Object ^ sender, PointerRoutedEventArgs ^ e) { if (e->Pointer->PointerDeviceType == PointerDeviceType::Mouse) { @@ -366,7 +365,7 @@ void CalculationResult::OnPointerExited(Platform::Object^ sender, PointerRoutedE } } -void CalculationResult::ModifyFontAndMargin(TextBlock^ textBox, double fontChange) +void CalculationResult::ModifyFontAndMargin(TextBlock ^ textBox, double fontChange) { double cur = textBox->FontSize; double newFontSize = 0.0; @@ -387,18 +386,18 @@ void CalculationResult::UpdateAllState() UpdateTextState(); } -void CalculationResult::OnTapped(TappedRoutedEventArgs^ e) +void CalculationResult::OnTapped(TappedRoutedEventArgs ^ e) { this->Focus(::FocusState::Programmatic); RaiseSelectedEvent(); } -void CalculationResult::OnRightTapped(RightTappedRoutedEventArgs^ e) +void CalculationResult::OnRightTapped(RightTappedRoutedEventArgs ^ e) { this->Focus(::FocusState::Programmatic); } -void CalculationResult::OnGotFocus(RoutedEventArgs^ e) +void CalculationResult::OnGotFocus(RoutedEventArgs ^ e) { if (this->FocusState == ::FocusState::Keyboard) { @@ -406,12 +405,12 @@ void CalculationResult::OnGotFocus(RoutedEventArgs^ e) } } -void CalculationResult::OnLostFocus(RoutedEventArgs^ e) +void CalculationResult::OnLostFocus(RoutedEventArgs ^ e) { VisualStateManager::GoToState(this, s_UnfocusedState, true); } -AutomationPeer^ CalculationResult::OnCreateAutomationPeer() +AutomationPeer ^ CalculationResult::OnCreateAutomationPeer() { return ref new CalculationResultAutomationPeer(this); } diff --git a/src/Calculator/Controls/CalculationResult.h b/src/Calculator/Controls/CalculationResult.h index 662ff55b..b160d822 100644 --- a/src/Calculator/Controls/CalculationResult.h +++ b/src/Calculator/Controls/CalculationResult.h @@ -9,9 +9,11 @@ namespace CalculatorApp { namespace Controls { - public delegate void SelectedEventHandler(Platform::Object^ sender); + public + delegate void SelectedEventHandler(Platform::Object ^ sender); - public ref class CalculationResult sealed: public Windows::UI::Xaml::Controls::Control + public + ref class CalculationResult sealed : public Windows::UI::Xaml::Controls::Control { public: CalculationResult(); @@ -24,45 +26,44 @@ namespace CalculatorApp DEPENDENCY_PROPERTY(Windows::UI::Xaml::Thickness, DisplayMargin); DEPENDENCY_PROPERTY(int, MaxExpressionHistoryCharacters); DEPENDENCY_PROPERTY_WITH_CALLBACK(bool, IsActive); - DEPENDENCY_PROPERTY_WITH_CALLBACK(Windows::UI::Xaml::Media::Brush^, AccentColor); - DEPENDENCY_PROPERTY_WITH_CALLBACK(Platform::String^, DisplayValue); - DEPENDENCY_PROPERTY(Platform::String^, DisplayStringExpression); + DEPENDENCY_PROPERTY_WITH_CALLBACK(Windows::UI::Xaml::Media::Brush ^, AccentColor); + DEPENDENCY_PROPERTY_WITH_CALLBACK(Platform::String ^, DisplayValue); + DEPENDENCY_PROPERTY(Platform::String ^, DisplayStringExpression); DEPENDENCY_PROPERTY_WITH_CALLBACK(bool, IsInError); DEPENDENCY_PROPERTY_WITH_DEFAULT(bool, IsOperatorCommand, false); - event SelectedEventHandler^ Selected; + event SelectedEventHandler ^ Selected; void ProgrammaticSelect(); - internal: - void UpdateTextState(); - Platform::String^ GetRawDisplayValue(); + internal : void UpdateTextState(); + Platform::String ^ GetRawDisplayValue(); protected: - virtual void OnKeyDown(Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e) override; + virtual void OnKeyDown(Windows::UI::Xaml::Input::KeyRoutedEventArgs ^ e) override; virtual void OnApplyTemplate() override; - virtual void OnTapped(Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e) override; - virtual void OnPointerPressed(Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e) override; - virtual void OnRightTapped(Windows::UI::Xaml::Input::RightTappedRoutedEventArgs^ e) override; - virtual void OnGotFocus(Windows::UI::Xaml::RoutedEventArgs^ e) override; - virtual void OnLostFocus(Windows::UI::Xaml::RoutedEventArgs^ e) override; + virtual void OnTapped(Windows::UI::Xaml::Input::TappedRoutedEventArgs ^ e) override; + virtual void OnPointerPressed(Windows::UI::Xaml::Input::PointerRoutedEventArgs ^ e) override; + virtual void OnRightTapped(Windows::UI::Xaml::Input::RightTappedRoutedEventArgs ^ e) override; + virtual void OnGotFocus(Windows::UI::Xaml::RoutedEventArgs ^ e) override; + virtual void OnLostFocus(Windows::UI::Xaml::RoutedEventArgs ^ e) override; - virtual Windows::UI::Xaml::Automation::Peers::AutomationPeer^ OnCreateAutomationPeer() override; + virtual Windows::UI::Xaml::Automation::Peers::AutomationPeer ^ OnCreateAutomationPeer() override; private: void OnIsActivePropertyChanged(bool oldValue, bool newValue); - void OnAccentColorPropertyChanged(Windows::UI::Xaml::Media::Brush^ oldValue, Windows::UI::Xaml::Media::Brush^ newValue); - void OnDisplayValuePropertyChanged(Platform::String^ oldValue, Platform::String^ newValue); + void OnAccentColorPropertyChanged(Windows::UI::Xaml::Media::Brush ^ oldValue, Windows::UI::Xaml::Media::Brush ^ newValue); + void OnDisplayValuePropertyChanged(Platform::String ^ oldValue, Platform::String ^ newValue); void OnIsInErrorPropertyChanged(bool oldValue, bool newValue); void OnMinFontSizePropertyChanged(double oldValue, double newValue); void OnMaxFontSizePropertyChanged(double oldValue, double newValue); - void TextContainerSizeChanged(Object^ sender, Windows::UI::Xaml::SizeChangedEventArgs^ e); - void OnTextContainerLayoutUpdated(Object^ sender, Object^ e); + void TextContainerSizeChanged(Object ^ sender, Windows::UI::Xaml::SizeChangedEventArgs ^ e); + void OnTextContainerLayoutUpdated(Object ^ sender, Object ^ e); void UpdateVisualState(); void UpdateAllState(); - void OnScrollClick(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e); - void OnPointerEntered(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e); - void OnPointerExited(Platform::Object^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs^ e); - void ModifyFontAndMargin(Windows::UI::Xaml::Controls::TextBlock^ textBlock, double fontChange); + void OnScrollClick(Platform::Object ^ sender, Windows::UI::Xaml::RoutedEventArgs ^ e); + void OnPointerEntered(Platform::Object ^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs ^ e); + void OnPointerExited(Platform::Object ^ sender, Windows::UI::Xaml::Input::PointerRoutedEventArgs ^ e); + void ModifyFontAndMargin(Windows::UI::Xaml::Controls::TextBlock ^ textBlock, double fontChange); void ShowHideScrollButtons(Windows::UI::Xaml::Visibility vLeft, Windows::UI::Xaml::Visibility vRight); void UpdateScrollButtons(); void ScrollLeft(); @@ -73,10 +74,10 @@ namespace CalculatorApp static Platform::StringReference s_FocusedState; static Platform::StringReference s_UnfocusedState; - Windows::UI::Xaml::Controls::ScrollViewer^ m_textContainer; - Windows::UI::Xaml::Controls::TextBlock^ m_textBlock; - Windows::UI::Xaml::Controls::HyperlinkButton^ m_scrollLeft; - Windows::UI::Xaml::Controls::HyperlinkButton^ m_scrollRight; + Windows::UI::Xaml::Controls::ScrollViewer ^ m_textContainer; + Windows::UI::Xaml::Controls::TextBlock ^ m_textBlock; + Windows::UI::Xaml::Controls::HyperlinkButton ^ m_scrollLeft; + Windows::UI::Xaml::Controls::HyperlinkButton ^ m_scrollRight; double scrollRatio = 0.7; bool m_isScalingText; bool m_haveCalculatedMax; diff --git a/src/Calculator/Controls/CalculationResultAutomationPeer.cpp b/src/Calculator/Controls/CalculationResultAutomationPeer.cpp index 2b77a172..d736b9ee 100644 --- a/src/Calculator/Controls/CalculationResultAutomationPeer.cpp +++ b/src/Calculator/Controls/CalculationResultAutomationPeer.cpp @@ -9,16 +9,16 @@ using namespace Windows::UI::Xaml::Automation::Peers; namespace CalculatorApp::Controls { - CalculationResultAutomationPeer::CalculationResultAutomationPeer(FrameworkElement^ owner) : - FrameworkElementAutomationPeer(owner) - { } + CalculationResultAutomationPeer::CalculationResultAutomationPeer(FrameworkElement ^ owner) : FrameworkElementAutomationPeer(owner) + { + } AutomationControlType CalculationResultAutomationPeer::GetAutomationControlTypeCore() { return AutomationControlType::Text; } - Platform::Object^ CalculationResultAutomationPeer::GetPatternCore(PatternInterface pattern) + Platform::Object ^ CalculationResultAutomationPeer::GetPatternCore(PatternInterface pattern) { if (pattern == PatternInterface::Invoke) { @@ -30,7 +30,7 @@ namespace CalculatorApp::Controls void CalculationResultAutomationPeer::Invoke() { - auto owner = static_cast(this->Owner); + auto owner = static_cast(this->Owner); owner->ProgrammaticSelect(); } } diff --git a/src/Calculator/Controls/CalculationResultAutomationPeer.h b/src/Calculator/Controls/CalculationResultAutomationPeer.h index afdaa8ba..ec75320c 100644 --- a/src/Calculator/Controls/CalculationResultAutomationPeer.h +++ b/src/Calculator/Controls/CalculationResultAutomationPeer.h @@ -9,14 +9,15 @@ namespace CalculatorApp { namespace Controls { - public ref class CalculationResultAutomationPeer sealed : Windows::UI::Xaml::Automation::Peers::FrameworkElementAutomationPeer, - Windows::UI::Xaml::Automation::Provider::IInvokeProvider + public + ref class CalculationResultAutomationPeer sealed : Windows::UI::Xaml::Automation::Peers::FrameworkElementAutomationPeer, + Windows::UI::Xaml::Automation::Provider::IInvokeProvider { public: - CalculationResultAutomationPeer(Windows::UI::Xaml::FrameworkElement^ owner); + CalculationResultAutomationPeer(Windows::UI::Xaml::FrameworkElement ^ owner); virtual Windows::UI::Xaml::Automation::Peers::AutomationControlType GetAutomationControlTypeCore() override; - virtual Platform::Object^ GetPatternCore(Windows::UI::Xaml::Automation::Peers::PatternInterface pattern) override; + virtual Platform::Object ^ GetPatternCore(Windows::UI::Xaml::Automation::Peers::PatternInterface pattern) override; virtual void Invoke(); }; } diff --git a/src/Calculator/Controls/CalculatorButton.cpp b/src/Calculator/Controls/CalculatorButton.cpp index abd00b92..2377a9a7 100644 --- a/src/Calculator/Controls/CalculatorButton.cpp +++ b/src/Calculator/Controls/CalculatorButton.cpp @@ -26,12 +26,12 @@ CalculatorButton::CalculatorButton() { // Set the default bindings for this button, these can be overwritten by Xaml if needed // These are a replacement for binding in styles - Binding^ commandBinding = ref new Binding(); + Binding ^ commandBinding = ref new Binding(); commandBinding->Path = ref new PropertyPath("ButtonPressed"); this->SetBinding(Button::CommandProperty, commandBinding); } -void CalculatorButton::OnKeyDown(KeyRoutedEventArgs^ e) +void CalculatorButton::OnKeyDown(KeyRoutedEventArgs ^ e) { // Ignore the Enter key if (e->Key == VirtualKey::Enter) @@ -42,7 +42,7 @@ void CalculatorButton::OnKeyDown(KeyRoutedEventArgs^ e) Button::OnKeyDown(e); } -void CalculatorButton::OnKeyUp(KeyRoutedEventArgs^ e) +void CalculatorButton::OnKeyUp(KeyRoutedEventArgs ^ e) { // Ignore the Enter key if (e->Key == VirtualKey::Enter) @@ -53,16 +53,12 @@ void CalculatorButton::OnKeyUp(KeyRoutedEventArgs^ e) Button::OnKeyUp(e); } -void CalculatorButton::OnButtonIdPropertyChanged( - NumbersAndOperatorsEnum /*oldValue*/, - NumbersAndOperatorsEnum newValue) +void CalculatorButton::OnButtonIdPropertyChanged(NumbersAndOperatorsEnum /*oldValue*/, NumbersAndOperatorsEnum newValue) { this->CommandParameter = ref new CalculatorButtonPressedEventArgs(AuditoryFeedback, newValue); } -void CalculatorButton::OnAuditoryFeedbackPropertyChanged( - String^ /*oldValue*/, - String^ newValue) +void CalculatorButton::OnAuditoryFeedbackPropertyChanged(String ^ /*oldValue*/, String ^ newValue) { this->CommandParameter = ref new CalculatorButtonPressedEventArgs(newValue, ButtonId); } diff --git a/src/Calculator/Controls/CalculatorButton.h b/src/Calculator/Controls/CalculatorButton.h index daad7382..8a780700 100644 --- a/src/Calculator/Controls/CalculatorButton.h +++ b/src/Calculator/Controls/CalculatorButton.h @@ -10,29 +10,27 @@ namespace CalculatorApp { namespace Controls { - public ref class CalculatorButton sealed: Windows::UI::Xaml::Controls::Button + public + ref class CalculatorButton sealed : Windows::UI::Xaml::Controls::Button { public: - CalculatorButton(); DEPENDENCY_PROPERTY_OWNER(CalculatorButton); DEPENDENCY_PROPERTY_WITH_CALLBACK(NumbersAndOperatorsEnum, ButtonId); - DEPENDENCY_PROPERTY_WITH_CALLBACK(Platform::String^, AuditoryFeedback); - DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush^, HoverBackground); - DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush^, HoverForeground); - DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush^, PressBackground); - DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush^, PressForeground); + DEPENDENCY_PROPERTY_WITH_CALLBACK(Platform::String ^, AuditoryFeedback); + DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush ^, HoverBackground); + DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush ^, HoverForeground); + DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush ^, PressBackground); + DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush ^, PressForeground); protected: - - virtual void OnKeyDown(Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e) override; - virtual void OnKeyUp(Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e) override; + virtual void OnKeyDown(Windows::UI::Xaml::Input::KeyRoutedEventArgs ^ e) override; + virtual void OnKeyUp(Windows::UI::Xaml::Input::KeyRoutedEventArgs ^ e) override; private: - void OnButtonIdPropertyChanged(NumbersAndOperatorsEnum oldValue, NumbersAndOperatorsEnum newValue); - void OnAuditoryFeedbackPropertyChanged(Platform::String^ oldValue, Platform::String^ newValue); + void OnAuditoryFeedbackPropertyChanged(Platform::String ^ oldValue, Platform::String ^ newValue); }; } } diff --git a/src/Calculator/Controls/FlipButtons.cpp b/src/Calculator/Controls/FlipButtons.cpp index 1ab2b4b9..07e28f92 100644 --- a/src/Calculator/Controls/FlipButtons.cpp +++ b/src/Calculator/Controls/FlipButtons.cpp @@ -19,8 +19,7 @@ DEPENDENCY_PROPERTY_INITIALIZATION(FlipButtons, HoverForeground); DEPENDENCY_PROPERTY_INITIALIZATION(FlipButtons, PressBackground); DEPENDENCY_PROPERTY_INITIALIZATION(FlipButtons, PressForeground); - -void FlipButtons::OnKeyDown(KeyRoutedEventArgs^ e) +void FlipButtons::OnKeyDown(KeyRoutedEventArgs ^ e) { // Ignore the Enter key if (e->Key == VirtualKey::Enter) @@ -31,7 +30,7 @@ void FlipButtons::OnKeyDown(KeyRoutedEventArgs^ e) ToggleButton::OnKeyDown(e); } -void FlipButtons::OnKeyUp(KeyRoutedEventArgs^ e) +void FlipButtons::OnKeyUp(KeyRoutedEventArgs ^ e) { // Ignore the Enter key if (e->Key == VirtualKey::Enter) @@ -42,10 +41,7 @@ void FlipButtons::OnKeyUp(KeyRoutedEventArgs^ e) ToggleButton::OnKeyUp(e); } -void FlipButtons::OnButtonIdPropertyChanged( - NumbersAndOperatorsEnum /*oldValue*/, - NumbersAndOperatorsEnum newValue) +void FlipButtons::OnButtonIdPropertyChanged(NumbersAndOperatorsEnum /*oldValue*/, NumbersAndOperatorsEnum newValue) { this->CommandParameter = newValue; } - diff --git a/src/Calculator/Controls/FlipButtons.h b/src/Calculator/Controls/FlipButtons.h index 67df4057..6fcc2266 100644 --- a/src/Calculator/Controls/FlipButtons.h +++ b/src/Calculator/Controls/FlipButtons.h @@ -10,27 +10,24 @@ namespace CalculatorApp { namespace Controls { - public ref class FlipButtons sealed: Windows::UI::Xaml::Controls::Primitives::ToggleButton + public + ref class FlipButtons sealed : Windows::UI::Xaml::Controls::Primitives::ToggleButton { public: DEPENDENCY_PROPERTY_OWNER(FlipButtons); DEPENDENCY_PROPERTY_WITH_CALLBACK(NumbersAndOperatorsEnum, ButtonId); - DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush^, HoverBackground); - DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush^, HoverForeground); - DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush^, PressBackground); - DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush^, PressForeground); + DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush ^, HoverBackground); + DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush ^, HoverForeground); + DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush ^, PressBackground); + DEPENDENCY_PROPERTY(Windows::UI::Xaml::Media::Brush ^, PressForeground); protected: - - virtual void OnKeyDown(Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e) override; - virtual void OnKeyUp(Windows::UI::Xaml::Input::KeyRoutedEventArgs^ e) override; + virtual void OnKeyDown(Windows::UI::Xaml::Input::KeyRoutedEventArgs ^ e) override; + virtual void OnKeyUp(Windows::UI::Xaml::Input::KeyRoutedEventArgs ^ e) override; private: - - void OnButtonIdPropertyChanged( - NumbersAndOperatorsEnum oldValue, - NumbersAndOperatorsEnum newValue); + void OnButtonIdPropertyChanged(NumbersAndOperatorsEnum oldValue, NumbersAndOperatorsEnum newValue); }; } } diff --git a/src/Calculator/Controls/HorizontalNoOverflowStackPanel.cpp b/src/Calculator/Controls/HorizontalNoOverflowStackPanel.cpp index b009bc28..9e220705 100644 --- a/src/Calculator/Controls/HorizontalNoOverflowStackPanel.cpp +++ b/src/Calculator/Controls/HorizontalNoOverflowStackPanel.cpp @@ -55,16 +55,15 @@ Size HorizontalNoOverflowStackPanel::ArrangeOverride(Size finalSize) float itemWidth = item->DesiredSize.Width; if (widthAvailable > 0 && itemWidth <= widthAvailable) { - //stack the items horizontally (left to right) + // stack the items horizontally (left to right) item->Arrange(Rect(posX, 0, itemWidth, finalSize.Height)); posX += item->RenderSize.Width; } else { - //Not display the item + // Not display the item item->Arrange(Rect(0, 0, 0, 0)); } } return finalSize; } - diff --git a/src/Calculator/Controls/HorizontalNoOverflowStackPanel.h b/src/Calculator/Controls/HorizontalNoOverflowStackPanel.h index 7619faf4..12aacdc0 100644 --- a/src/Calculator/Controls/HorizontalNoOverflowStackPanel.h +++ b/src/Calculator/Controls/HorizontalNoOverflowStackPanel.h @@ -13,12 +13,15 @@ namespace CalculatorApp { namespace Controls { - public ref class HorizontalNoOverflowStackPanel : public Windows::UI::Xaml::Controls::Panel + public + ref class HorizontalNoOverflowStackPanel : public Windows::UI::Xaml::Controls::Panel { DEPENDENCY_PROPERTY_OWNER(HorizontalNoOverflowStackPanel); - //Prioritize the last item over all other items (except the first one) - internal: - HorizontalNoOverflowStackPanel() {} + // Prioritize the last item over all other items (except the first one) + internal : HorizontalNoOverflowStackPanel() + { + } + protected: virtual Windows::Foundation::Size MeasureOverride(Windows::Foundation::Size availableSize) override; virtual Windows::Foundation::Size ArrangeOverride(Windows::Foundation::Size finalSize) override; diff --git a/src/Calculator/Controls/OverflowTextBlock.cpp b/src/Calculator/Controls/OverflowTextBlock.cpp index 7d51fd78..900ce882 100644 --- a/src/Calculator/Controls/OverflowTextBlock.cpp +++ b/src/Calculator/Controls/OverflowTextBlock.cpp @@ -35,22 +35,23 @@ void OverflowTextBlock::OnApplyTemplate() auto uiElement = GetTemplateChild("ExpressionContainer"); if (uiElement != nullptr) { - m_expressionContainer = safe_cast(uiElement); + m_expressionContainer = safe_cast(uiElement); m_expressionContainer->ChangeView(m_expressionContainer->ExtentWidth - m_expressionContainer->ViewportWidth, nullptr, nullptr); - m_containerViewChangedToken = m_expressionContainer->ViewChanged += ref new EventHandler(this, &OverflowTextBlock::OnViewChanged); + m_containerViewChangedToken = m_expressionContainer->ViewChanged += + ref new EventHandler(this, &OverflowTextBlock::OnViewChanged); } uiElement = GetTemplateChild("ScrollLeft"); if (uiElement != nullptr) { - m_scrollLeft = safe_cast(uiElement); + m_scrollLeft = safe_cast