mirror of
https://github.com/danieleteti/delphimvcframework.git
synced 2024-11-15 07:45:54 +01:00
MVCFramework.Functional.pas has been merged in MVCFramework.Utils.pas
This commit is contained in:
parent
41a6931e7f
commit
4b8b89d4da
@ -14,6 +14,16 @@
|
|||||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||||
<Base>true</Base>
|
<Base>true</Base>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
|
||||||
|
<Base_Android>true</Base_Android>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="('$(Platform)'=='Android64' and '$(Base)'=='true') or '$(Base_Android64)'!=''">
|
||||||
|
<Base_Android64>true</Base_Android64>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||||
<Base_Win32>true</Base_Win32>
|
<Base_Win32>true</Base_Win32>
|
||||||
<CfgParent>Base</CfgParent>
|
<CfgParent>Base</CfgParent>
|
||||||
@ -58,6 +68,16 @@
|
|||||||
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=Daniele Teti;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=Daniele Teti;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
|
||||||
<DllSuffix>120</DllSuffix>
|
<DllSuffix>120</DllSuffix>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Base_Android)'!=''">
|
||||||
|
<VerInfo_Keys>package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=;minSdkVersion=23;targetSdkVersion=34</VerInfo_Keys>
|
||||||
|
<BT_BuildType>Debug</BT_BuildType>
|
||||||
|
<EnabledSysJars>activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar</EnabledSysJars>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Base_Android64)'!=''">
|
||||||
|
<VerInfo_Keys>package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=;minSdkVersion=23;targetSdkVersion=34</VerInfo_Keys>
|
||||||
|
<BT_BuildType>Debug</BT_BuildType>
|
||||||
|
<EnabledSysJars>activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar</EnabledSysJars>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||||
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||||
<BT_BuildType>Debug</BT_BuildType>
|
<BT_BuildType>Debug</BT_BuildType>
|
||||||
@ -1010,6 +1030,9 @@
|
|||||||
<ProjectRoot Platform="Win64x" Name="$(PROJECTNAME)"/>
|
<ProjectRoot Platform="Win64x" Name="$(PROJECTNAME)"/>
|
||||||
</Deployment>
|
</Deployment>
|
||||||
<Platforms>
|
<Platforms>
|
||||||
|
<Platform value="Android">False</Platform>
|
||||||
|
<Platform value="Android64">False</Platform>
|
||||||
|
<Platform value="Linux64">False</Platform>
|
||||||
<Platform value="Win32">True</Platform>
|
<Platform value="Win32">True</Platform>
|
||||||
<Platform value="Win64">False</Platform>
|
<Platform value="Win64">False</Platform>
|
||||||
<Platform value="Win64x">False</Platform>
|
<Platform value="Win64x">False</Platform>
|
||||||
|
@ -14,6 +14,16 @@
|
|||||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||||
<Base>true</Base>
|
<Base>true</Base>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
|
||||||
|
<Base_Android>true</Base_Android>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="('$(Platform)'=='Android64' and '$(Base)'=='true') or '$(Base_Android64)'!=''">
|
||||||
|
<Base_Android64>true</Base_Android64>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||||
<Base_Win32>true</Base_Win32>
|
<Base_Win32>true</Base_Win32>
|
||||||
<CfgParent>Base</CfgParent>
|
<CfgParent>Base</CfgParent>
|
||||||
@ -60,6 +70,18 @@
|
|||||||
<RuntimeOnlyPackage>true</RuntimeOnlyPackage>
|
<RuntimeOnlyPackage>true</RuntimeOnlyPackage>
|
||||||
<DCC_OutputNeverBuildDcps>true</DCC_OutputNeverBuildDcps>
|
<DCC_OutputNeverBuildDcps>true</DCC_OutputNeverBuildDcps>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Base_Android)'!=''">
|
||||||
|
<VerInfo_Keys>package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=;minSdkVersion=23;targetSdkVersion=34</VerInfo_Keys>
|
||||||
|
<BT_BuildType>Debug</BT_BuildType>
|
||||||
|
<VerInfo_IncludeVerInfo>false</VerInfo_IncludeVerInfo>
|
||||||
|
<EnabledSysJars>activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar</EnabledSysJars>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Base_Android64)'!=''">
|
||||||
|
<VerInfo_Keys>package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=;minSdkVersion=23;targetSdkVersion=34</VerInfo_Keys>
|
||||||
|
<BT_BuildType>Debug</BT_BuildType>
|
||||||
|
<VerInfo_IncludeVerInfo>false</VerInfo_IncludeVerInfo>
|
||||||
|
<EnabledSysJars>activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar</EnabledSysJars>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||||
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||||
<BT_BuildType>Debug</BT_BuildType>
|
<BT_BuildType>Debug</BT_BuildType>
|
||||||
@ -1020,6 +1042,9 @@
|
|||||||
<ProjectRoot Platform="Win64x" Name="$(PROJECTNAME)"/>
|
<ProjectRoot Platform="Win64x" Name="$(PROJECTNAME)"/>
|
||||||
</Deployment>
|
</Deployment>
|
||||||
<Platforms>
|
<Platforms>
|
||||||
|
<Platform value="Android">False</Platform>
|
||||||
|
<Platform value="Android64">False</Platform>
|
||||||
|
<Platform value="Linux64">False</Platform>
|
||||||
<Platform value="Win32">True</Platform>
|
<Platform value="Win32">True</Platform>
|
||||||
<Platform value="Win64">False</Platform>
|
<Platform value="Win64">False</Platform>
|
||||||
<Platform value="Win64x">False</Platform>
|
<Platform value="Win64x">False</Platform>
|
||||||
|
@ -14,6 +14,16 @@
|
|||||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||||
<Base>true</Base>
|
<Base>true</Base>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
|
||||||
|
<Base_Android>true</Base_Android>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="('$(Platform)'=='Android64' and '$(Base)'=='true') or '$(Base_Android64)'!=''">
|
||||||
|
<Base_Android64>true</Base_Android64>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||||
<Base_Win32>true</Base_Win32>
|
<Base_Win32>true</Base_Win32>
|
||||||
<CfgParent>Base</CfgParent>
|
<CfgParent>Base</CfgParent>
|
||||||
@ -69,6 +79,16 @@
|
|||||||
<DCC_Description>DelphiMVCFramework IDE Expert</DCC_Description>
|
<DCC_Description>DelphiMVCFramework IDE Expert</DCC_Description>
|
||||||
<DllSuffix>120</DllSuffix>
|
<DllSuffix>120</DllSuffix>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Base_Android)'!=''">
|
||||||
|
<VerInfo_Keys>package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=;minSdkVersion=23;targetSdkVersion=34</VerInfo_Keys>
|
||||||
|
<BT_BuildType>Debug</BT_BuildType>
|
||||||
|
<EnabledSysJars>activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar</EnabledSysJars>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Base_Android64)'!=''">
|
||||||
|
<VerInfo_Keys>package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=;minSdkVersion=23;targetSdkVersion=34</VerInfo_Keys>
|
||||||
|
<BT_BuildType>Debug</BT_BuildType>
|
||||||
|
<EnabledSysJars>activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar</EnabledSysJars>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||||
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||||
<BT_BuildType>Debug</BT_BuildType>
|
<BT_BuildType>Debug</BT_BuildType>
|
||||||
@ -1049,6 +1069,9 @@
|
|||||||
<ProjectRoot Platform="Win64x" Name="$(PROJECTNAME)"/>
|
<ProjectRoot Platform="Win64x" Name="$(PROJECTNAME)"/>
|
||||||
</Deployment>
|
</Deployment>
|
||||||
<Platforms>
|
<Platforms>
|
||||||
|
<Platform value="Android">False</Platform>
|
||||||
|
<Platform value="Android64">False</Platform>
|
||||||
|
<Platform value="Linux64">False</Platform>
|
||||||
<Platform value="Win32">True</Platform>
|
<Platform value="Win32">True</Platform>
|
||||||
<Platform value="Win64">False</Platform>
|
<Platform value="Win64">False</Platform>
|
||||||
<Platform value="Win64x">False</Platform>
|
<Platform value="Win64x">False</Platform>
|
||||||
|
@ -14,6 +14,16 @@
|
|||||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||||
<Base>true</Base>
|
<Base>true</Base>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="('$(Platform)'=='Android' and '$(Base)'=='true') or '$(Base_Android)'!=''">
|
||||||
|
<Base_Android>true</Base_Android>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="('$(Platform)'=='Android64' and '$(Base)'=='true') or '$(Base_Android64)'!=''">
|
||||||
|
<Base_Android64>true</Base_Android64>
|
||||||
|
<CfgParent>Base</CfgParent>
|
||||||
|
<Base>true</Base>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||||
<Base_Win32>true</Base_Win32>
|
<Base_Win32>true</Base_Win32>
|
||||||
<CfgParent>Base</CfgParent>
|
<CfgParent>Base</CfgParent>
|
||||||
@ -70,6 +80,16 @@
|
|||||||
<DCC_Description>DMVCFramework - CopyRight (2010-2020) Daniele Teti and the DMVCFramework Team</DCC_Description>
|
<DCC_Description>DMVCFramework - CopyRight (2010-2020) Daniele Teti and the DMVCFramework Team</DCC_Description>
|
||||||
<DllSuffix>120</DllSuffix>
|
<DllSuffix>120</DllSuffix>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Base_Android)'!=''">
|
||||||
|
<VerInfo_Keys>package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=;minSdkVersion=23;targetSdkVersion=34</VerInfo_Keys>
|
||||||
|
<BT_BuildType>Debug</BT_BuildType>
|
||||||
|
<EnabledSysJars>activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar</EnabledSysJars>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Base_Android64)'!=''">
|
||||||
|
<VerInfo_Keys>package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey=;minSdkVersion=23;targetSdkVersion=34</VerInfo_Keys>
|
||||||
|
<BT_BuildType>Debug</BT_BuildType>
|
||||||
|
<EnabledSysJars>activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar</EnabledSysJars>
|
||||||
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||||
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||||
<BT_BuildType>Debug</BT_BuildType>
|
<BT_BuildType>Debug</BT_BuildType>
|
||||||
@ -1100,6 +1120,9 @@
|
|||||||
<ProjectRoot Platform="Win64x" Name="$(PROJECTNAME)"/>
|
<ProjectRoot Platform="Win64x" Name="$(PROJECTNAME)"/>
|
||||||
</Deployment>
|
</Deployment>
|
||||||
<Platforms>
|
<Platforms>
|
||||||
|
<Platform value="Android">False</Platform>
|
||||||
|
<Platform value="Android64">False</Platform>
|
||||||
|
<Platform value="Linux64">False</Platform>
|
||||||
<Platform value="Win32">True</Platform>
|
<Platform value="Win32">True</Platform>
|
||||||
<Platform value="Win64">False</Platform>
|
<Platform value="Win64">False</Platform>
|
||||||
<Platform value="Win64x">False</Platform>
|
<Platform value="Win64x">False</Platform>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
program FunctionalProgramming;
|
program HigherOrderFunctions;
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Vcl.Forms,
|
Vcl.Forms,
|
@ -1,14 +1,15 @@
|
|||||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ProjectGuid>{2443E8EE-CE91-4279-B049-8119378EB494}</ProjectGuid>
|
<ProjectGuid>{2443E8EE-CE91-4279-B049-8119378EB494}</ProjectGuid>
|
||||||
<ProjectVersion>20.1</ProjectVersion>
|
<ProjectVersion>20.2</ProjectVersion>
|
||||||
<FrameworkType>VCL</FrameworkType>
|
<FrameworkType>VCL</FrameworkType>
|
||||||
<MainSource>FunctionalProgramming.dpr</MainSource>
|
<MainSource>HigherOrderFunctions.dpr</MainSource>
|
||||||
<Base>True</Base>
|
<Base>True</Base>
|
||||||
<Config Condition="'$(Config)'==''">Debug</Config>
|
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||||
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||||
<TargetedPlatforms>1</TargetedPlatforms>
|
<TargetedPlatforms>1</TargetedPlatforms>
|
||||||
<AppType>Application</AppType>
|
<AppType>Application</AppType>
|
||||||
|
<ProjectName Condition="'$(ProjectName)'==''">HigherOrderFunctions</ProjectName>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||||
<Base>true</Base>
|
<Base>true</Base>
|
||||||
@ -40,7 +41,7 @@
|
|||||||
<Base>true</Base>
|
<Base>true</Base>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Base)'!=''">
|
<PropertyGroup Condition="'$(Base)'!=''">
|
||||||
<SanitizedProjectName>FunctionalProgramming</SanitizedProjectName>
|
<SanitizedProjectName>HigherOrderFunctions</SanitizedProjectName>
|
||||||
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
|
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
|
||||||
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
|
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
|
||||||
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
|
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
|
||||||
@ -160,13 +161,14 @@
|
|||||||
<VersionInfoKeys Name="theme"/>
|
<VersionInfoKeys Name="theme"/>
|
||||||
</VersionInfoKeys>
|
</VersionInfoKeys>
|
||||||
<Source>
|
<Source>
|
||||||
<Source Name="MainSource">FunctionalProgramming.dpr</Source>
|
<Source Name="MainSource">HigherOrderFunctions.dpr</Source>
|
||||||
</Source>
|
</Source>
|
||||||
</Delphi.Personality>
|
</Delphi.Personality>
|
||||||
<Deployment Version="4">
|
<Deployment Version="5">
|
||||||
<DeployFile LocalName="Win32\Debug\FunctionalProgramming.exe" Configuration="Debug" Class="ProjectOutput">
|
<DeployFile LocalName="Win32\Debug\HigherOrderFunctions.exe" Configuration="Debug" Class="ProjectOutput"/>
|
||||||
|
<DeployFile LocalName="Win32\Debug\HigherOrderFunctions.exe" Configuration="Debug" Class="ProjectOutput">
|
||||||
<Platform Name="Win32">
|
<Platform Name="Win32">
|
||||||
<RemoteName>FunctionalProgramming.exe</RemoteName>
|
<RemoteName>HigherOrderFunctions.exe</RemoteName>
|
||||||
<Overwrite>true</Overwrite>
|
<Overwrite>true</Overwrite>
|
||||||
</Platform>
|
</Platform>
|
||||||
</DeployFile>
|
</DeployFile>
|
||||||
@ -182,16 +184,6 @@
|
|||||||
<Operation>0</Operation>
|
<Operation>0</Operation>
|
||||||
</Platform>
|
</Platform>
|
||||||
</DeployClass>
|
</DeployClass>
|
||||||
<DeployClass Name="AndroidClasses">
|
|
||||||
<Platform Name="Android">
|
|
||||||
<RemoteDir>classes</RemoteDir>
|
|
||||||
<Operation>64</Operation>
|
|
||||||
</Platform>
|
|
||||||
<Platform Name="Android64">
|
|
||||||
<RemoteDir>classes</RemoteDir>
|
|
||||||
<Operation>64</Operation>
|
|
||||||
</Platform>
|
|
||||||
</DeployClass>
|
|
||||||
<DeployClass Name="AndroidFileProvider">
|
<DeployClass Name="AndroidFileProvider">
|
||||||
<Platform Name="Android">
|
<Platform Name="Android">
|
||||||
<RemoteDir>res\xml</RemoteDir>
|
<RemoteDir>res\xml</RemoteDir>
|
||||||
@ -824,6 +816,9 @@
|
|||||||
<Platform Name="Win64">
|
<Platform Name="Win64">
|
||||||
<Operation>1</Operation>
|
<Operation>1</Operation>
|
||||||
</Platform>
|
</Platform>
|
||||||
|
<Platform Name="Win64x">
|
||||||
|
<Operation>1</Operation>
|
||||||
|
</Platform>
|
||||||
</DeployClass>
|
</DeployClass>
|
||||||
<DeployClass Name="ProjectiOSDeviceDebug">
|
<DeployClass Name="ProjectiOSDeviceDebug">
|
||||||
<Platform Name="iOSDevice32">
|
<Platform Name="iOSDevice32">
|
||||||
@ -1116,11 +1111,13 @@
|
|||||||
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME).app"/>
|
<ProjectRoot Platform="OSXARM64" Name="$(PROJECTNAME).app"/>
|
||||||
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
|
||||||
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
|
||||||
|
<ProjectRoot Platform="Win64x" Name="$(PROJECTNAME)"/>
|
||||||
</Deployment>
|
</Deployment>
|
||||||
<Platforms>
|
<Platforms>
|
||||||
<Platform value="Win32">True</Platform>
|
<Platform value="Win32">True</Platform>
|
||||||
<Platform value="Win64">False</Platform>
|
<Platform value="Win64">False</Platform>
|
||||||
</Platforms>
|
</Platforms>
|
||||||
|
<ModelSupport>False</ModelSupport>
|
||||||
</BorlandProject>
|
</BorlandProject>
|
||||||
<ProjectFileVersion>12</ProjectFileVersion>
|
<ProjectFileVersion>12</ProjectFileVersion>
|
||||||
</ProjectExtensions>
|
</ProjectExtensions>
|
@ -1,49 +1,51 @@
|
|||||||
object MainForm: TMainForm
|
object MainForm: TMainForm
|
||||||
Left = 0
|
Left = 0
|
||||||
Top = 0
|
Top = 0
|
||||||
Caption = 'DMVCFramework | Map, Filter, Reduce sample'
|
BorderStyle = bsDialog
|
||||||
ClientHeight = 326
|
Caption = 'DMVCFramework | Map, Filter, Reduce | Sample'
|
||||||
ClientWidth = 800
|
ClientHeight = 383
|
||||||
|
ClientWidth = 754
|
||||||
Color = clBtnFace
|
Color = clBtnFace
|
||||||
Font.Charset = DEFAULT_CHARSET
|
Font.Charset = DEFAULT_CHARSET
|
||||||
Font.Color = clWindowText
|
Font.Color = clWindowText
|
||||||
Font.Height = -11
|
Font.Height = -11
|
||||||
Font.Name = 'Tahoma'
|
Font.Name = 'Tahoma'
|
||||||
Font.Style = []
|
Font.Style = []
|
||||||
|
Position = poScreenCenter
|
||||||
DesignSize = (
|
DesignSize = (
|
||||||
800
|
754
|
||||||
326)
|
383)
|
||||||
TextHeight = 13
|
TextHeight = 13
|
||||||
object Label1: TLabel
|
object Label1: TLabel
|
||||||
Left = 18
|
Left = 8
|
||||||
Top = 8
|
Top = 8
|
||||||
Width = 20
|
Width = 20
|
||||||
Height = 13
|
Height = 13
|
||||||
Caption = 'Map'
|
Caption = 'Map'
|
||||||
end
|
end
|
||||||
object Label2: TLabel
|
object Label2: TLabel
|
||||||
Left = 204
|
Left = 194
|
||||||
Top = 8
|
Top = 8
|
||||||
Width = 36
|
Width = 36
|
||||||
Height = 13
|
Height = 13
|
||||||
Caption = 'Reduce'
|
Caption = 'Reduce'
|
||||||
end
|
end
|
||||||
object Label3: TLabel
|
object Label3: TLabel
|
||||||
Left = 390
|
Left = 380
|
||||||
Top = 8
|
Top = 8
|
||||||
Width = 24
|
Width = 24
|
||||||
Height = 13
|
Height = 13
|
||||||
Caption = 'Filter'
|
Caption = 'Filter'
|
||||||
end
|
end
|
||||||
object btnForEach: TLabel
|
object btnForEach: TLabel
|
||||||
Left = 576
|
Left = 566
|
||||||
Top = 8
|
Top = 8
|
||||||
Width = 39
|
Width = 39
|
||||||
Height = 13
|
Height = 13
|
||||||
Caption = 'ForEach'
|
Caption = 'ForEach'
|
||||||
end
|
end
|
||||||
object btnMapAddStars: TButton
|
object btnMapAddStars: TButton
|
||||||
Left = 18
|
Left = 8
|
||||||
Top = 27
|
Top = 27
|
||||||
Width = 95
|
Width = 95
|
||||||
Height = 30
|
Height = 30
|
||||||
@ -52,16 +54,17 @@ object MainForm: TMainForm
|
|||||||
OnClick = btnMapAddStarsClick
|
OnClick = btnMapAddStarsClick
|
||||||
end
|
end
|
||||||
object lbMap: TListBox
|
object lbMap: TListBox
|
||||||
Left = 18
|
Left = 8
|
||||||
Top = 99
|
Top = 99
|
||||||
Width = 180
|
Width = 180
|
||||||
Height = 219
|
Height = 276
|
||||||
Anchors = [akLeft, akTop, akBottom]
|
Anchors = [akLeft, akTop, akBottom]
|
||||||
ItemHeight = 13
|
ItemHeight = 13
|
||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
|
ExplicitHeight = 219
|
||||||
end
|
end
|
||||||
object btnFilterBetween: TButton
|
object btnFilterBetween: TButton
|
||||||
Left = 390
|
Left = 380
|
||||||
Top = 63
|
Top = 63
|
||||||
Width = 75
|
Width = 75
|
||||||
Height = 30
|
Height = 30
|
||||||
@ -71,16 +74,17 @@ object MainForm: TMainForm
|
|||||||
OnClick = btnFilterBetwenClick
|
OnClick = btnFilterBetwenClick
|
||||||
end
|
end
|
||||||
object lbFilter: TListBox
|
object lbFilter: TListBox
|
||||||
Left = 390
|
Left = 380
|
||||||
Top = 99
|
Top = 99
|
||||||
Width = 180
|
Width = 180
|
||||||
Height = 219
|
Height = 276
|
||||||
Anchors = [akLeft, akTop, akBottom]
|
Anchors = [akLeft, akTop, akBottom]
|
||||||
ItemHeight = 13
|
ItemHeight = 13
|
||||||
TabOrder = 3
|
TabOrder = 3
|
||||||
|
ExplicitHeight = 219
|
||||||
end
|
end
|
||||||
object btnReduceSum: TButton
|
object btnReduceSum: TButton
|
||||||
Left = 204
|
Left = 194
|
||||||
Top = 27
|
Top = 27
|
||||||
Width = 77
|
Width = 77
|
||||||
Height = 30
|
Height = 30
|
||||||
@ -89,16 +93,17 @@ object MainForm: TMainForm
|
|||||||
OnClick = btnReduceSumClick
|
OnClick = btnReduceSumClick
|
||||||
end
|
end
|
||||||
object lbReduce: TListBox
|
object lbReduce: TListBox
|
||||||
Left = 204
|
Left = 194
|
||||||
Top = 99
|
Top = 99
|
||||||
Width = 180
|
Width = 180
|
||||||
Height = 219
|
Height = 276
|
||||||
Anchors = [akLeft, akTop, akBottom]
|
Anchors = [akLeft, akTop, akBottom]
|
||||||
ItemHeight = 13
|
ItemHeight = 13
|
||||||
TabOrder = 5
|
TabOrder = 5
|
||||||
|
ExplicitHeight = 219
|
||||||
end
|
end
|
||||||
object btnReduceMin: TButton
|
object btnReduceMin: TButton
|
||||||
Left = 204
|
Left = 194
|
||||||
Top = 63
|
Top = 63
|
||||||
Width = 77
|
Width = 77
|
||||||
Height = 30
|
Height = 30
|
||||||
@ -107,7 +112,7 @@ object MainForm: TMainForm
|
|||||||
OnClick = btnReduceMinClick
|
OnClick = btnReduceMinClick
|
||||||
end
|
end
|
||||||
object btnReduceMul: TButton
|
object btnReduceMul: TButton
|
||||||
Left = 287
|
Left = 277
|
||||||
Top = 27
|
Top = 27
|
||||||
Width = 77
|
Width = 77
|
||||||
Height = 30
|
Height = 30
|
||||||
@ -116,7 +121,7 @@ object MainForm: TMainForm
|
|||||||
OnClick = btnReduceMulClick
|
OnClick = btnReduceMulClick
|
||||||
end
|
end
|
||||||
object btnReduceMax: TButton
|
object btnReduceMax: TButton
|
||||||
Left = 287
|
Left = 277
|
||||||
Top = 63
|
Top = 63
|
||||||
Width = 77
|
Width = 77
|
||||||
Height = 30
|
Height = 30
|
||||||
@ -125,7 +130,7 @@ object MainForm: TMainForm
|
|||||||
OnClick = btnReduceMaxClick
|
OnClick = btnReduceMaxClick
|
||||||
end
|
end
|
||||||
object btnFilterOdd: TButton
|
object btnFilterOdd: TButton
|
||||||
Left = 390
|
Left = 380
|
||||||
Top = 27
|
Top = 27
|
||||||
Width = 75
|
Width = 75
|
||||||
Height = 30
|
Height = 30
|
||||||
@ -135,7 +140,7 @@ object MainForm: TMainForm
|
|||||||
OnClick = btnFilterOddClick
|
OnClick = btnFilterOddClick
|
||||||
end
|
end
|
||||||
object btnFilterEven: TButton
|
object btnFilterEven: TButton
|
||||||
Left = 471
|
Left = 461
|
||||||
Top = 27
|
Top = 27
|
||||||
Width = 82
|
Width = 82
|
||||||
Height = 30
|
Height = 30
|
||||||
@ -145,7 +150,7 @@ object MainForm: TMainForm
|
|||||||
OnClick = btnFilterEvenClick
|
OnClick = btnFilterEvenClick
|
||||||
end
|
end
|
||||||
object btnMapCapitalize: TButton
|
object btnMapCapitalize: TButton
|
||||||
Left = 18
|
Left = 8
|
||||||
Top = 63
|
Top = 63
|
||||||
Width = 95
|
Width = 95
|
||||||
Height = 30
|
Height = 30
|
||||||
@ -154,7 +159,7 @@ object MainForm: TMainForm
|
|||||||
OnClick = btnMapCapitalizeClick
|
OnClick = btnMapCapitalizeClick
|
||||||
end
|
end
|
||||||
object btnJustLoop: TButton
|
object btnJustLoop: TButton
|
||||||
Left = 576
|
Left = 566
|
||||||
Top = 27
|
Top = 27
|
||||||
Width = 180
|
Width = 180
|
||||||
Height = 30
|
Height = 30
|
||||||
@ -163,16 +168,17 @@ object MainForm: TMainForm
|
|||||||
OnClick = btnJustLoopClick
|
OnClick = btnJustLoopClick
|
||||||
end
|
end
|
||||||
object lbForEach: TListBox
|
object lbForEach: TListBox
|
||||||
Left = 576
|
Left = 566
|
||||||
Top = 99
|
Top = 99
|
||||||
Width = 180
|
Width = 180
|
||||||
Height = 219
|
Height = 276
|
||||||
Anchors = [akLeft, akTop, akBottom]
|
Anchors = [akLeft, akTop, akBottom]
|
||||||
ItemHeight = 13
|
ItemHeight = 13
|
||||||
TabOrder = 13
|
TabOrder = 13
|
||||||
|
ExplicitHeight = 219
|
||||||
end
|
end
|
||||||
object btnForEachWithException: TButton
|
object btnForEachWithException: TButton
|
||||||
Left = 576
|
Left = 566
|
||||||
Top = 63
|
Top = 63
|
||||||
Width = 180
|
Width = 180
|
||||||
Height = 30
|
Height = 30
|
@ -28,7 +28,7 @@ interface
|
|||||||
|
|
||||||
uses
|
uses
|
||||||
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
|
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
|
||||||
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, MVCFramework.Functional;
|
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, MVCFramework.Utils;
|
||||||
|
|
||||||
type
|
type
|
||||||
TMainForm = class(TForm)
|
TMainForm = class(TForm)
|
||||||
@ -107,18 +107,17 @@ begin
|
|||||||
Result[9] := 'mary';
|
Result[9] := 'mary';
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TMainForm.btnFilterBetwenClick(Sender: TObject);
|
procedure TMainForm.btnFilterBetwenClick(Sender: TObject);
|
||||||
var
|
var
|
||||||
InputData, OutputData: TArray<Integer>;
|
InputData, OutputData: TArray<Integer>;
|
||||||
FilterFunc: TPredicate<Integer>;
|
FilterFunc: TPredicateClosure<Integer>;
|
||||||
begin
|
begin
|
||||||
InputData := GetIntArrayOfData;
|
InputData := GetIntArrayOfData;
|
||||||
FilterFunc := function(const Item: Integer): boolean
|
FilterFunc := function(const Item: Integer): boolean
|
||||||
begin
|
begin
|
||||||
Result := (Item > 2) and (Item < 8)
|
Result := (Item > 2) and (Item < 8)
|
||||||
end;
|
end;
|
||||||
OutputData := Functional.Filter<Integer>(InputData, FilterFunc);
|
OutputData := HigherOrder.Filter<Integer>(InputData, FilterFunc);
|
||||||
FillList(OutputData, lbFilter.Items);
|
FillList(OutputData, lbFilter.Items);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -127,7 +126,7 @@ var
|
|||||||
InputData, OutputData: TArray<Integer>;
|
InputData, OutputData: TArray<Integer>;
|
||||||
begin
|
begin
|
||||||
InputData := GetIntArrayOfData;
|
InputData := GetIntArrayOfData;
|
||||||
OutputData := Functional.Filter<Integer>(InputData,
|
OutputData := HigherOrder.Filter<Integer>(InputData,
|
||||||
function(const Item: Integer): boolean
|
function(const Item: Integer): boolean
|
||||||
begin
|
begin
|
||||||
Result := Item mod 2 = 0;
|
Result := Item mod 2 = 0;
|
||||||
@ -140,7 +139,7 @@ var
|
|||||||
InputData, OutputData: TArray<Integer>;
|
InputData, OutputData: TArray<Integer>;
|
||||||
begin
|
begin
|
||||||
InputData := GetIntArrayOfData;
|
InputData := GetIntArrayOfData;
|
||||||
OutputData := Functional.Filter<Integer>(InputData,
|
OutputData := HigherOrder.Filter<Integer>(InputData,
|
||||||
function(const Item: Integer): boolean
|
function(const Item: Integer): boolean
|
||||||
begin
|
begin
|
||||||
Result := Item mod 2 > 0;
|
Result := Item mod 2 > 0;
|
||||||
@ -151,7 +150,7 @@ end;
|
|||||||
procedure TMainForm.btnForEachWithExceptionClick(Sender: TObject);
|
procedure TMainForm.btnForEachWithExceptionClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
lbForEach.Clear;
|
lbForEach.Clear;
|
||||||
Functional.ForEach<Integer>(GetIntArrayOfData,
|
HigherOrder.ForEach<Integer>(GetIntArrayOfData,
|
||||||
procedure(const Item: Integer)
|
procedure(const Item: Integer)
|
||||||
begin
|
begin
|
||||||
if Item = 5 then
|
if Item = 5 then
|
||||||
@ -164,7 +163,7 @@ end;
|
|||||||
procedure TMainForm.btnJustLoopClick(Sender: TObject);
|
procedure TMainForm.btnJustLoopClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
lbForEach.Clear;
|
lbForEach.Clear;
|
||||||
Functional.ForEach<String>(GetStringArrayOfData,
|
HigherOrder.ForEach<String>(GetStringArrayOfData,
|
||||||
procedure(const Item: String)
|
procedure(const Item: String)
|
||||||
begin
|
begin
|
||||||
lbForEach.Items.Add(Item);
|
lbForEach.Items.Add(Item);
|
||||||
@ -176,7 +175,7 @@ var
|
|||||||
InputData, OutputData: TArray<string>;
|
InputData, OutputData: TArray<string>;
|
||||||
begin
|
begin
|
||||||
InputData := GetStringArrayOfData;
|
InputData := GetStringArrayOfData;
|
||||||
OutputData := Functional.Map<String>(InputData,
|
OutputData := HigherOrder.Map<String>(InputData,
|
||||||
function(const Item: String): String
|
function(const Item: String): String
|
||||||
begin
|
begin
|
||||||
Result := '*' + Item + '*';
|
Result := '*' + Item + '*';
|
||||||
@ -189,7 +188,7 @@ var
|
|||||||
InputData, OutputData: TArray<string>;
|
InputData, OutputData: TArray<string>;
|
||||||
begin
|
begin
|
||||||
InputData := GetStringArrayOfData;
|
InputData := GetStringArrayOfData;
|
||||||
OutputData := Functional.Map<string>(InputData,
|
OutputData := HigherOrder.Map<string>(InputData,
|
||||||
function(const Item: String): String
|
function(const Item: String): String
|
||||||
begin
|
begin
|
||||||
Result := String(Item.Chars[0]).ToUpper + Item.Substring(1);
|
Result := String(Item.Chars[0]).ToUpper + Item.Substring(1);
|
||||||
@ -203,7 +202,7 @@ var
|
|||||||
OutputData: Integer;
|
OutputData: Integer;
|
||||||
begin
|
begin
|
||||||
InputData := GetIntArrayOfData;
|
InputData := GetIntArrayOfData;
|
||||||
OutputData := Functional.Reduce<Integer>(InputData,
|
OutputData := HigherOrder.Reduce<Integer>(InputData,
|
||||||
function(const Item1, Item2: Integer): Integer
|
function(const Item1, Item2: Integer): Integer
|
||||||
begin
|
begin
|
||||||
if Item1 > Item2 then
|
if Item1 > Item2 then
|
||||||
@ -220,7 +219,7 @@ var
|
|||||||
OutputData: Integer;
|
OutputData: Integer;
|
||||||
begin
|
begin
|
||||||
InputData := GetIntArrayOfData;
|
InputData := GetIntArrayOfData;
|
||||||
OutputData := Functional.Reduce<Integer>(InputData,
|
OutputData := HigherOrder.Reduce<Integer>(InputData,
|
||||||
function(const Item1, Item2: Integer): Integer
|
function(const Item1, Item2: Integer): Integer
|
||||||
begin
|
begin
|
||||||
if Item1 < Item2 then
|
if Item1 < Item2 then
|
||||||
@ -237,7 +236,7 @@ var
|
|||||||
OutputData: Integer;
|
OutputData: Integer;
|
||||||
begin
|
begin
|
||||||
InputData := GetIntArrayOfData;
|
InputData := GetIntArrayOfData;
|
||||||
OutputData := Functional.Reduce<Integer>(InputData,
|
OutputData := HigherOrder.Reduce<Integer>(InputData,
|
||||||
function(const Item1, Item2: Integer): Integer
|
function(const Item1, Item2: Integer): Integer
|
||||||
begin
|
begin
|
||||||
Result := Item1 * Item2;
|
Result := Item1 * Item2;
|
||||||
@ -251,7 +250,7 @@ var
|
|||||||
OutputData: Integer;
|
OutputData: Integer;
|
||||||
begin
|
begin
|
||||||
InputData := GetIntArrayOfData;
|
InputData := GetIntArrayOfData;
|
||||||
OutputData := Functional.Reduce<Integer>(InputData,
|
OutputData := HigherOrder.Reduce<Integer>(InputData,
|
||||||
function(const Item1, Item2: Integer): Integer
|
function(const Item1, Item2: Integer): Integer
|
||||||
begin
|
begin
|
||||||
Result := Item1 + Item2;
|
Result := Item1 + Item2;
|
||||||
@ -261,21 +260,21 @@ end;
|
|||||||
|
|
||||||
procedure TMainForm.FillList(Data: TArray<Integer>; AStrings: TStrings);
|
procedure TMainForm.FillList(Data: TArray<Integer>; AStrings: TStrings);
|
||||||
var
|
var
|
||||||
I: Integer;
|
lItem: Integer;
|
||||||
begin
|
begin
|
||||||
AStrings.Clear;
|
AStrings.Clear;
|
||||||
for I in Data do
|
for lItem in Data do
|
||||||
AStrings.Add(I.ToString);
|
AStrings.Add(lItem.ToString);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure TMainForm.FillList(Data: TArray<String>; AStrings: TStrings);
|
procedure TMainForm.FillList(Data: TArray<String>; AStrings: TStrings);
|
||||||
var
|
var
|
||||||
s: string;
|
lItem: string;
|
||||||
begin
|
begin
|
||||||
AStrings.Clear;
|
AStrings.Clear;
|
||||||
for s in Data do
|
for lItem in Data do
|
||||||
AStrings.Add(s);
|
AStrings.Add(lItem);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
@ -1,160 +0,0 @@
|
|||||||
// ***************************************************************************
|
|
||||||
//
|
|
||||||
// Delphi MVC Framework
|
|
||||||
//
|
|
||||||
// Copyright (c) 2010-2024 Daniele Teti and the DMVCFramework Team
|
|
||||||
//
|
|
||||||
// https://github.com/danieleteti/delphimvcframework
|
|
||||||
//
|
|
||||||
// ***************************************************************************
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
//
|
|
||||||
// *************************************************************************** }
|
|
||||||
|
|
||||||
unit MVCFramework.Functional;
|
|
||||||
|
|
||||||
interface
|
|
||||||
|
|
||||||
uses
|
|
||||||
System.SysUtils, System.Classes;
|
|
||||||
|
|
||||||
|
|
||||||
type
|
|
||||||
EFunctionalError = class(Exception)
|
|
||||||
|
|
||||||
end;
|
|
||||||
EFunctionalMapError = class(EFunctionalError)
|
|
||||||
|
|
||||||
end;
|
|
||||||
|
|
||||||
EFunctionalFilterError = class(EFunctionalError)
|
|
||||||
|
|
||||||
end;
|
|
||||||
|
|
||||||
EFunctionalForEachError = class(EFunctionalError)
|
|
||||||
|
|
||||||
end;
|
|
||||||
|
|
||||||
EFunctionalReduceError = class(EFunctionalError)
|
|
||||||
|
|
||||||
end;
|
|
||||||
|
|
||||||
TMapClosure<T> = reference to function(const Item: T): T;
|
|
||||||
TForEachClosure<T> = reference to procedure(const Item: T);
|
|
||||||
TMapReduce<T> = reference to function(const Left: T; const Right: T): T;
|
|
||||||
TPredicate<T> = reference to function(const Item: T): Boolean;
|
|
||||||
Functional = class sealed
|
|
||||||
class function Map<T>(InputArray: TArray<T>; MapClosure: TMapClosure<T>): TArray<T>;
|
|
||||||
class function Reduce<T: record >(InputArray: TArray<T>; ReduceFunction: TMapReduce<T>; InitValue: T): T;
|
|
||||||
class function Filter<T>(InputArray: TArray<T>; FilterFunction: TPredicate<T>): TArray<T>;
|
|
||||||
class procedure ForEach<T>(InputArray: TArray<T>; ForEachClosure: TForEachClosure<T>);
|
|
||||||
end;
|
|
||||||
|
|
||||||
implementation
|
|
||||||
|
|
||||||
uses
|
|
||||||
System.Generics.Collections;
|
|
||||||
|
|
||||||
{ Functional }
|
|
||||||
|
|
||||||
class function Functional.Filter<T>(InputArray: TArray<T>; FilterFunction: TPredicate<T>): TArray<T>;
|
|
||||||
var
|
|
||||||
lIdx, I: Integer;
|
|
||||||
List: TList<T>;
|
|
||||||
begin
|
|
||||||
lIdx := -1;
|
|
||||||
try
|
|
||||||
List := TList<T>.Create;
|
|
||||||
try
|
|
||||||
for I := 0 to length(InputArray) - 1 do
|
|
||||||
begin
|
|
||||||
lIdx := I;
|
|
||||||
if FilterFunction(InputArray[I]) then
|
|
||||||
begin
|
|
||||||
List.add(InputArray[I]);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
Result := List.ToArray;
|
|
||||||
finally
|
|
||||||
List.Free;
|
|
||||||
end;
|
|
||||||
except
|
|
||||||
on E: Exception do
|
|
||||||
begin
|
|
||||||
raise EFunctionalFilterError.CreateFmt('Filter error at index %d - [Class: %s][Message: %s]', [lIdx, E.ClassName, E.Message]);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
class procedure Functional.ForEach<T>(InputArray: TArray<T>; ForEachClosure: TForEachClosure<T>);
|
|
||||||
var
|
|
||||||
I, lIdx: Integer;
|
|
||||||
begin
|
|
||||||
lIdx := 0;
|
|
||||||
try
|
|
||||||
for I := Low(InputArray) to High(InputArray) do
|
|
||||||
begin
|
|
||||||
lIdx := I;
|
|
||||||
ForEachClosure(InputArray[I]);
|
|
||||||
end;
|
|
||||||
except
|
|
||||||
on E: Exception do
|
|
||||||
begin
|
|
||||||
raise EFunctionalForEachError.CreateFmt('ForEach error at index %d - [Class: %s][Message: %s]', [lIdx, E.ClassName, E.Message]);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
class function Functional.Map<T>(InputArray: TArray<T>; MapClosure: TMapClosure<T>): TArray<T>;
|
|
||||||
var
|
|
||||||
lIdx, I: Integer;
|
|
||||||
begin
|
|
||||||
lIdx := 0;
|
|
||||||
try
|
|
||||||
SetLength(Result, Length(InputArray));
|
|
||||||
for I := 0 to length(InputArray) - 1 do
|
|
||||||
begin
|
|
||||||
lIdx := I;
|
|
||||||
Result[I] := MapClosure(InputArray[I]);
|
|
||||||
end;
|
|
||||||
except
|
|
||||||
on E: Exception do
|
|
||||||
begin
|
|
||||||
raise EFunctionalMapError.CreateFmt('Map error at index %d - [Class: %s][Message: %s]', [lIdx, E.ClassName, E.Message]);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
class function Functional.Reduce<T>(InputArray: TArray<T>; ReduceFunction: TMapReduce<T>; InitValue: T): T;
|
|
||||||
var
|
|
||||||
I: T;
|
|
||||||
lIdx: Integer;
|
|
||||||
begin
|
|
||||||
lIdx := 0;
|
|
||||||
Result := InitValue;
|
|
||||||
try
|
|
||||||
for I in InputArray do
|
|
||||||
begin
|
|
||||||
Result := ReduceFunction(Result, I);
|
|
||||||
Inc(lIdx);
|
|
||||||
end;
|
|
||||||
except
|
|
||||||
on E: Exception do
|
|
||||||
begin
|
|
||||||
raise EFunctionalReduceError.CreateFmt('Reduce error at index %d - [Class: %s][Message: %s]', [lIdx, E.ClassName, E.Message]);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
end.
|
|
@ -29,18 +29,54 @@ unit MVCFramework.Utils;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
uses
|
uses
|
||||||
MVCFramework.Serializer.Commons, JsonDataObjects, MVCFramework.DuckTyping,
|
MVCFramework.Serializer.Commons, JsonDataObjects,
|
||||||
System.Classes;
|
MVCFramework.DuckTyping, System.Classes, System.SysUtils;
|
||||||
|
|
||||||
|
type
|
||||||
|
EHOError = class(Exception)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
EHOMapError = class(EHOError)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
EHOFilterError = class(EHOError)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
EHOForEachError = class(EHOError)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
EHOReduceError = class(EHOError)
|
||||||
|
|
||||||
|
end;
|
||||||
|
|
||||||
|
TMapClosure<T> = reference to function(const Item: T): T;
|
||||||
|
TForEachClosure<T> = reference to procedure(const Item: T);
|
||||||
|
TMapReduceClosure<T> = reference to function(const Left: T; const Right: T): T;
|
||||||
|
TPredicateClosure<T> = reference to function(const Item: T): Boolean;
|
||||||
|
|
||||||
|
HigherOrder = class sealed
|
||||||
|
class function Map<T>(const InputArray: TArray<T>;
|
||||||
|
const MapClosure: TMapClosure<T>): TArray<T>;
|
||||||
|
class function Reduce<T>(const InputArray: TArray<T>;
|
||||||
|
const ReduceFunction: TMapReduceClosure<T>; InitValue: T): T;
|
||||||
|
class function Filter<T>(const InputArray: TArray<T>;
|
||||||
|
const FilterFunction: TPredicateClosure<T>): TArray<T>;
|
||||||
|
class procedure ForEach<T>(const InputArray: TArray<T>;
|
||||||
|
const ForEachClosure: TForEachClosure<T>);
|
||||||
|
end;
|
||||||
|
|
||||||
function NewJSONSerializer: IMVCJSONSerializer;
|
function NewJSONSerializer: IMVCJSONSerializer;
|
||||||
function StrToJSONObject(const aString: String; ARaiseExceptionOnError: Boolean = False): TJsonObject;
|
function StrToJSONObject(const aString: String; aRaiseExceptionOnError: Boolean = False): TJsonObject;
|
||||||
function StrToJSONArray(const aString: String; ARaiseExceptionOnError: Boolean = False): TJsonArray;
|
function StrToJSONArray(const aString: String; aRaiseExceptionOnError: Boolean = False): TJsonArray;
|
||||||
function WrapAsList(const AObject: TObject; AOwnsObject: Boolean = False): IMVCList;
|
function WrapAsList(const aObject: TObject; const aOwnsObject: Boolean = False): IMVCList;
|
||||||
function GetMD5HashFromStream(AStream: TStream): string;
|
function GetMD5HashFromStream(const aStream: TStream): string;
|
||||||
function GetMD5HashFromString(const AString: String): string;
|
function GetMD5HashFromString(const aString: String): string;
|
||||||
function GetSHA1HashFromString(const AString: String): string;
|
function GetSHA1HashFromString(const aString: String): string;
|
||||||
function GetSHA1HashFromStream(AStream: TStream): string;
|
function GetSHA1HashFromStream(const aStream: TStream): string;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -51,77 +87,77 @@ uses
|
|||||||
IdHashMessageDigest,
|
IdHashMessageDigest,
|
||||||
IdHashSHA,
|
IdHashSHA,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
System.Generics.Collections,
|
||||||
MVCFramework.Serializer.JsonDataObjects,
|
MVCFramework.Serializer.JsonDataObjects,
|
||||||
MVCFramework.Commons,
|
MVCFramework.Commons,
|
||||||
System.SysUtils,
|
|
||||||
System.TypInfo;
|
System.TypInfo;
|
||||||
|
|
||||||
function GetMD5HashFromStream(AStream: TStream): string;
|
function GetMD5HashFromStream(const aStream: TStream): string;
|
||||||
{$IF not defined(TOKYOORBETTER)}
|
{$IF not defined(TOKYOORBETTER)}
|
||||||
var
|
var
|
||||||
lMD5Hash: TIdHashMessageDigest5;
|
lMD5Hash: TIdHashMessageDigest5;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
begin
|
begin
|
||||||
{$IF defined(TOKYOORBETTER)}
|
{$IF defined(TOKYOORBETTER)}
|
||||||
Result := THashMD5.GetHashString(AStream);
|
Result := THashMD5.GetHashString(aStream);
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
lMD5Hash := TIdHashMessageDigest5.Create;
|
lMD5Hash := TIdHashMessageDigest5.Create;
|
||||||
try
|
try
|
||||||
Result := lMD5Hash.HashStreamAsHex(AStream);
|
Result := lMD5Hash.HashStreamAsHex(aStream);
|
||||||
finally
|
finally
|
||||||
lMD5Hash.Free;
|
lMD5Hash.Free;
|
||||||
end;
|
end;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function GetSHA1HashFromStream(AStream: TStream): string;
|
function GetSHA1HashFromStream(const aStream: TStream): string;
|
||||||
{$IF not defined(TOKYOORBETTER)}
|
{$IF not defined(TOKYOORBETTER)}
|
||||||
var
|
var
|
||||||
lSHA1Hash: TIdHashSHA1;
|
lSHA1Hash: TIdHashSHA1;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
begin
|
begin
|
||||||
{$IF defined(TOKYOORBETTER)}
|
{$IF defined(TOKYOORBETTER)}
|
||||||
Result := THashSHA1.GetHashString(AStream);
|
Result := THashSHA1.GetHashString(aStream);
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
lSHA1Hash := TIdHashSHA1.Create;
|
lSHA1Hash := TIdHashSHA1.Create;
|
||||||
try
|
try
|
||||||
Result := lSHA1Hash.HashStreamAsHex(AStream);
|
Result := lSHA1Hash.HashStreamAsHex(aStream);
|
||||||
finally
|
finally
|
||||||
lSHA1Hash.Free;
|
lSHA1Hash.Free;
|
||||||
end;
|
end;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function GetMD5HashFromString(const AString: String): string;
|
function GetMD5HashFromString(const aString: String): string;
|
||||||
{$IF not defined(TOKYOORBETTER)}
|
{$IF not defined(TOKYOORBETTER)}
|
||||||
var
|
var
|
||||||
lMD5Hash: TIdHashMessageDigest5;
|
lMD5Hash: TIdHashMessageDigest5;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
begin
|
begin
|
||||||
{$IF defined(TOKYOORBETTER)}
|
{$IF defined(TOKYOORBETTER)}
|
||||||
Result := THashMD5.GetHashString(AString);
|
Result := THashMD5.GetHashString(aString);
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
lMD5Hash := TIdHashMessageDigest5.Create;
|
lMD5Hash := TIdHashMessageDigest5.Create;
|
||||||
try
|
try
|
||||||
Result := lMD5Hash.HashStringAsHex(AString);
|
Result := lMD5Hash.HashStringAsHex(aString);
|
||||||
finally
|
finally
|
||||||
lMD5Hash.Free;
|
lMD5Hash.Free;
|
||||||
end;
|
end;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function GetSHA1HashFromString(const AString: String): string;
|
function GetSHA1HashFromString(const aString: String): string;
|
||||||
{$IF not defined(TOKYOORBETTER)}
|
{$IF not defined(TOKYOORBETTER)}
|
||||||
var
|
var
|
||||||
lSHA1Hash: TIdHashSHA1;
|
lSHA1Hash: TIdHashSHA1;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
begin
|
begin
|
||||||
{$IF defined(TOKYOORBETTER)}
|
{$IF defined(TOKYOORBETTER)}
|
||||||
Result := THashSHA1.GetHashString(AString);
|
Result := THashSHA1.GetHashString(aString);
|
||||||
{$ELSE}
|
{$ELSE}
|
||||||
lSHA1Hash := TIdHashSHA1.Create;
|
lSHA1Hash := TIdHashSHA1.Create;
|
||||||
try
|
try
|
||||||
Result := lSHA1Hash.HashStringAsHex(AString);
|
Result := lSHA1Hash.HashStringAsHex(aString);
|
||||||
finally
|
finally
|
||||||
lSHA1Hash.Free;
|
lSHA1Hash.Free;
|
||||||
end;
|
end;
|
||||||
@ -134,19 +170,122 @@ begin
|
|||||||
Result := TMVCJsonDataObjectsSerializer.Create;
|
Result := TMVCJsonDataObjectsSerializer.Create;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function StrToJSONObject(const aString: String; ARaiseExceptionOnError: Boolean = False): TJsonObject;
|
function StrToJSONObject(const aString: String; aRaiseExceptionOnError: Boolean = False): TJsonObject;
|
||||||
begin
|
begin
|
||||||
Result := MVCFramework.Serializer.JSONDataObjects.StrToJSONObject(aString, ARaiseExceptionOnError);
|
Result := MVCFramework.Serializer.JSONDataObjects.StrToJSONObject(aString, aRaiseExceptionOnError);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function StrToJSONArray(const aString: String; ARaiseExceptionOnError: Boolean = False): TJsonArray;
|
function StrToJSONArray(const aString: String; aRaiseExceptionOnError: Boolean = False): TJsonArray;
|
||||||
begin
|
begin
|
||||||
Result := MVCFramework.Serializer.JSONDataObjects.StrToJSONArray(aString, ARaiseExceptionOnError);
|
Result := MVCFramework.Serializer.JSONDataObjects.StrToJSONArray(aString, aRaiseExceptionOnError);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function WrapAsList(const AObject: TObject; AOwnsObject: Boolean = False): IMVCList;
|
function WrapAsList(const aObject: TObject; const aOwnsObject: Boolean = False): IMVCList;
|
||||||
begin
|
begin
|
||||||
Result := MVCFramework.DuckTyping.WrapAsList(AObject, AOwnsObject);
|
Result := MVCFramework.DuckTyping.WrapAsList(aObject, aOwnsObject);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ HigherOrder }
|
||||||
|
|
||||||
|
class function HigherOrder.Filter<T>(const InputArray: TArray<T>;
|
||||||
|
const FilterFunction: TPredicateClosure<T>): TArray<T>;
|
||||||
|
var
|
||||||
|
lIdx, I: Integer;
|
||||||
|
lList: TList<T>;
|
||||||
|
begin
|
||||||
|
lIdx := -1;
|
||||||
|
try
|
||||||
|
lList := TList<T>.Create;
|
||||||
|
try
|
||||||
|
for I := 0 to Length(InputArray) - 1 do
|
||||||
|
begin
|
||||||
|
lIdx := I;
|
||||||
|
if FilterFunction(InputArray[I]) then
|
||||||
|
begin
|
||||||
|
lList.add(InputArray[I]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
Result := lList.ToArray;
|
||||||
|
finally
|
||||||
|
lList.Free;
|
||||||
|
end;
|
||||||
|
except
|
||||||
|
on E: Exception do
|
||||||
|
begin
|
||||||
|
raise EHOFilterError.CreateFmt
|
||||||
|
('Filter error at index %d - [Class: %s][Message: %s]',
|
||||||
|
[lIdx, E.ClassName, E.Message]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
class procedure HigherOrder.ForEach<T>(const InputArray: TArray<T>;
|
||||||
|
const ForEachClosure: TForEachClosure<T>);
|
||||||
|
var
|
||||||
|
I, lIdx: Integer;
|
||||||
|
begin
|
||||||
|
lIdx := 0;
|
||||||
|
try
|
||||||
|
for I := Low(InputArray) to High(InputArray) do
|
||||||
|
begin
|
||||||
|
lIdx := I;
|
||||||
|
ForEachClosure(InputArray[I]);
|
||||||
|
end;
|
||||||
|
except
|
||||||
|
on E: Exception do
|
||||||
|
begin
|
||||||
|
raise EHOForEachError.CreateFmt
|
||||||
|
('ForEach error at index %d - [Class: %s][Message: %s]',
|
||||||
|
[lIdx, E.ClassName, E.Message]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
class function HigherOrder.Map<T>(const InputArray: TArray<T>;
|
||||||
|
const MapClosure: TMapClosure<T>): TArray<T>;
|
||||||
|
var
|
||||||
|
lIdx, I: Integer;
|
||||||
|
begin
|
||||||
|
lIdx := 0;
|
||||||
|
try
|
||||||
|
SetLength(Result, Length(InputArray));
|
||||||
|
for I := 0 to Length(InputArray) - 1 do
|
||||||
|
begin
|
||||||
|
lIdx := I;
|
||||||
|
Result[I] := MapClosure(InputArray[I]);
|
||||||
|
end;
|
||||||
|
except
|
||||||
|
on E: Exception do
|
||||||
|
begin
|
||||||
|
raise EHOMapError.CreateFmt
|
||||||
|
('Map error at index %d - [Class: %s][Message: %s]',
|
||||||
|
[lIdx, E.ClassName, E.Message]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
class function HigherOrder.Reduce<T>(const InputArray: TArray<T>;
|
||||||
|
const ReduceFunction: TMapReduceClosure<T>; InitValue: T): T;
|
||||||
|
var
|
||||||
|
I: T;
|
||||||
|
lIdx: Integer;
|
||||||
|
begin
|
||||||
|
lIdx := 0;
|
||||||
|
Result := InitValue;
|
||||||
|
try
|
||||||
|
for I in InputArray do
|
||||||
|
begin
|
||||||
|
Result := ReduceFunction(Result, I);
|
||||||
|
Inc(lIdx);
|
||||||
|
end;
|
||||||
|
except
|
||||||
|
on E: Exception do
|
||||||
|
begin
|
||||||
|
raise EHOReduceError.CreateFmt
|
||||||
|
('Reduce error at index %d - [Class: %s][Message: %s]',
|
||||||
|
[lIdx, E.ClassName, E.Message]);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
Loading…
Reference in New Issue
Block a user