This commit is contained in:
Andrei Yankovich 2019-07-07 18:28:48 +03:00
parent 93106e7d7a
commit 15c066cae4
11 changed files with 678 additions and 276 deletions

0
GMP.pri Normal file

22
GMP.pro Normal file

@ -0,0 +1,22 @@
QT -= core gui
TARGET = MiniGMP
TEMPLATE = lib
DEFINES += MINIGMP_LIBRARY
DEFINES += QT_DEPRECATED_WARNINGS
VERSION = 6.0.0
DISTFILES += \
README \
gen_export.sh
HEADERS += \
bigint.h \
mini-gmp.h \
minigmp_global.h
SOURCES += \
bigint.cpp \
mini-gmp.c

335
GMP.pro.user Normal file

@ -0,0 +1,335 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.9.2, 2019-07-07T14:13:43. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{b865c35b-cb42-4f89-95c4-ffb97a092c5e}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey"/>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.13.0 GCC 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.13.0 GCC 64bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5130.gcc_64_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/endrii/gitHub/build-GMP-Desktop_Qt_5_13_0_GCC_64bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/endrii/gitHub/build-GMP-Desktop_Qt_5_13_0_GCC_64bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/endrii/gitHub/build-GMP-Desktop_Qt_5_13_0_GCC_64bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">true</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
<value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Профилирование</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Профилирование</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Установка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Конфигурация установки</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.CustomExecutableRunConfiguration.Executable"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Особая программа</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="RunConfiguration.Arguments"></value>
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">21</value>
</data>
<data>
<variable>Version</variable>
<value type="int">21</value>
</data>
</qtcreator>

185
bigint.cpp Normal file

@ -0,0 +1,185 @@
#include "bigint.h"
BigInt::BigInt() {
mpz_init(data);
}
BigInt::BigInt(const BigInt &val):
BigInt() {
mpz_set(data, val.data);
}
BigInt::BigInt(const char *str, int base):
BigInt() {
mpz_set_str(data, str, base);
}
BigInt::BigInt(std::string imput, int base):
BigInt(imput.c_str(), base) {
}
BigInt::BigInt(int val):
BigInt() {
mpz_set_si(data, val);
}
BigInt::BigInt(unsigned int val):
BigInt() {
mpz_set_ui(data, val);
}
BigInt::BigInt(double val):
BigInt() {
mpz_set_d(data, val);
}
std::string BigInt::getString(int base) const {
char *str = nullptr;
mpz_get_str(str, base, data);
return str;
}
BigInt::~BigInt() {
mpz_clear(data);
}
BigInt operator +(BigInt left, unsigned int right) {
mpz_add_ui(left.data, left.data, right);
return left;
}
BigInt operator +(BigInt left, const BigInt &right) {
mpz_add(left.data, left.data, right.data);
return left;
}
BigInt& operator +=(BigInt &left, unsigned int right) {
mpz_add_ui(left.data, left.data, right);
return left;
}
BigInt& operator +=(BigInt &left, const BigInt &right) {
mpz_add(left.data, left.data, right.data);
return left;
}
BigInt operator *(BigInt left, const BigInt &right) {
mpz_mul(left.data, left.data, right.data);
return left;
}
BigInt operator *(BigInt left, int right) {
mpz_mul_si(left.data, left.data, right);
return left;
}
BigInt operator *(BigInt left, unsigned int right) {
mpz_mul_ui(left.data, left.data, right);
return left;
}
BigInt& operator *=(BigInt &left, const BigInt &right) {
mpz_mul(left.data, left.data, right.data);
return left;
}
BigInt& operator *=(BigInt &left, int right) {
mpz_mul_si(left.data, left.data, right);
return left;
}
BigInt& operator *=(BigInt &left, unsigned int right) {
mpz_mul_ui(left.data, left.data, right);
return left;
}
BigInt operator /(BigInt left, const BigInt &right) {
mpz_fdiv_r(left.data, left.data, right.data);
return left;
}
BigInt operator /(BigInt left, unsigned int right) {
mpz_fdiv_r_ui(left.data, left.data, right);
return left;
}
BigInt& operator /=(BigInt &left, const BigInt &right) {
mpz_fdiv_r(left.data, left.data, right.data);
return left;
}
BigInt& operator /=(BigInt &left, unsigned int right) {
mpz_fdiv_r_ui(left.data, left.data, right);
return left;
}
BigInt operator -(BigInt left, const BigInt &right) {
mpz_sub(left.data, left.data, right.data);
return left;
}
BigInt operator -(BigInt left, unsigned int right) {
mpz_sub_ui(left.data, left.data, right);
return left;
}
BigInt operator -(unsigned int left, BigInt right) {
mpz_ui_sub(right.data, left, right.data);
return right;
}
BigInt& operator -=(BigInt &left, const BigInt &right) {
mpz_sub(left.data, left.data, right.data);
return left;
}
BigInt& operator -=(BigInt &left, unsigned int right) {
mpz_sub_ui(left.data, left.data, right);
return left;
}
BigInt operator %(BigInt left, const BigInt &right) {
mpz_mod(left.data, left.data, right.data);
return left;
}
BigInt operator %(BigInt left, unsigned int right) {
mpz_mod_ui(left.data, left.data, right);
return left;
}
BigInt& operator %=(BigInt& left, const BigInt &right) {
mpz_mod(left.data, left.data, right.data);
return left;
}
BigInt& operator %=(BigInt& left, unsigned int right) {
mpz_mod_ui(left.data, left.data, right);
return left;
}
bool operator == (const BigInt& left, const BigInt& right) {
return mpz_cmp(left.data, right.data) == 0;
}
bool operator != (const BigInt &left, const BigInt& right) {
return mpz_cmp(left.data, right.data) != 0;
}
bool operator < ( const BigInt &left, const BigInt& right) {
return mpz_cmp(left.data, right.data) < 0;
}
bool operator > ( const BigInt &left, const BigInt& right) {
return mpz_cmp(left.data, right.data) > 0;
}
bool operator <= ( const BigInt &left, const BigInt& right) {
return mpz_cmp(left.data, right.data) <= 0;
}
bool operator >= ( const BigInt &left, const BigInt& right) {
return mpz_cmp(left.data, right.data) >= 0;
}

68
bigint.h Normal file

@ -0,0 +1,68 @@
#ifndef BIGINT_H
#define BIGINT_H
#include "mini-gmp.h"
#include <string>
#include <vector>
/**
* @brief The BigInt class - c++ minigmp wrapper
*/
class BigInt
{
mpz_t data;
public:
BigInt();
BigInt(const BigInt& val );
BigInt(const char *str, int base = 10);
BigInt(std::string imput, int base = 10);
BigInt(int val);
BigInt(unsigned int val);
BigInt(double val);
std::string getString(int base = 10) const;
~BigInt();
friend BigInt operator + ( BigInt left, const BigInt& right);
friend BigInt operator + ( BigInt left, unsigned int right);
friend BigInt& operator += ( BigInt &left, unsigned int right);
friend BigInt& operator += ( BigInt &left, const BigInt& right);
friend BigInt operator - ( BigInt left, const BigInt& right);
friend BigInt operator - (unsigned int right, BigInt left);
friend BigInt operator - ( BigInt left, unsigned int right);
friend BigInt& operator -= ( BigInt &left, unsigned int right);
friend BigInt& operator -= ( BigInt &left, const BigInt& right);
friend BigInt operator / ( BigInt left, const BigInt& right);
friend BigInt operator / ( BigInt left, unsigned int right);
friend BigInt& operator /= ( BigInt &left, unsigned int right);
friend BigInt& operator /= ( BigInt &left, const BigInt& right);
friend BigInt operator * ( BigInt left, const BigInt& right);
friend BigInt operator * ( BigInt left, unsigned int right);
friend BigInt operator * ( BigInt left, int right);
friend BigInt& operator *= ( BigInt &left, unsigned int right);
friend BigInt& operator *= ( BigInt &left, const BigInt& right);
friend BigInt& operator *= ( BigInt &left, int right);
friend BigInt operator % ( BigInt left, const BigInt& right);
friend BigInt operator % ( BigInt left, unsigned int right);
friend BigInt& operator %= ( BigInt &left, unsigned int right);
friend BigInt& operator %= ( BigInt &left, const BigInt& right);
friend bool operator == ( const BigInt& left, const BigInt& right);
friend bool operator != ( const BigInt& left, const BigInt& right);
friend bool operator < ( const BigInt& left, const BigInt& right);
friend bool operator > ( const BigInt& left, const BigInt& right);
friend bool operator <= ( const BigInt& left, const BigInt& right);
friend bool operator >= ( const BigInt& left, const BigInt& right);
};
#endif // BIGINT_H

@ -1,8 +0,0 @@
#!/bin/sh
EACSL=''
GMP=''
list=$(cat "$EACSL/share/e-acsl/e_acsl_gmp.h" | grep -Poe 'extern.*?\K\b\w+(?=\()' | perl -n -e 'BEGIN{@r=();} chomp; push @r, $_; END{print join("\\b\\|\\b", @r);}')
grep -e "$list" "$GMP/gmp.h" | perl -ne 'chomp; @s=split /\h/; print "$s[0] $s[2] $s[1]\n";'

144
export.c

@ -1,144 +0,0 @@
#include <linux/kernel.h>
#include "mini-gmp.h"
EXPORT_SYMBOL_GPL(mp_set_memory_functions);
EXPORT_SYMBOL_GPL(mp_get_memory_functions);
EXPORT_SYMBOL_GPL(mpn_copyi);
EXPORT_SYMBOL_GPL(mpn_copyd);
EXPORT_SYMBOL_GPL(mpn_zero);
EXPORT_SYMBOL_GPL(mpn_cmp);
EXPORT_SYMBOL_GPL(mpn_zero_p);
EXPORT_SYMBOL_GPL(mpn_add_1);
EXPORT_SYMBOL_GPL(mpn_add_n);
EXPORT_SYMBOL_GPL(mpn_add);
EXPORT_SYMBOL_GPL(mpn_sub_1);
EXPORT_SYMBOL_GPL(mpn_sub_n);
EXPORT_SYMBOL_GPL(mpn_sub);
EXPORT_SYMBOL_GPL(mpn_mul_1);
EXPORT_SYMBOL_GPL(mpn_addmul_1);
EXPORT_SYMBOL_GPL(mpn_submul_1);
EXPORT_SYMBOL_GPL(mpn_mul);
EXPORT_SYMBOL_GPL(mpn_mul_n);
EXPORT_SYMBOL_GPL(mpn_sqr);
EXPORT_SYMBOL_GPL(mpn_perfect_square_p);
EXPORT_SYMBOL_GPL(mpn_sqrtrem);
EXPORT_SYMBOL_GPL(mpn_lshift);
EXPORT_SYMBOL_GPL(mpn_rshift);
EXPORT_SYMBOL_GPL(mpn_scan0);
EXPORT_SYMBOL_GPL(mpn_scan1);
EXPORT_SYMBOL_GPL(mpn_popcount);
EXPORT_SYMBOL_GPL(mpn_invert_3by2);
EXPORT_SYMBOL_GPL(mpn_get_str);
EXPORT_SYMBOL_GPL(mpn_set_str);
EXPORT_SYMBOL_GPL(mpz_init);
EXPORT_SYMBOL_GPL(mpz_init2);
EXPORT_SYMBOL_GPL(mpz_clear);
EXPORT_SYMBOL_GPL(mpz_sgn);
EXPORT_SYMBOL_GPL(mpz_cmp_si);
EXPORT_SYMBOL_GPL(mpz_cmp_ui);
EXPORT_SYMBOL_GPL(mpz_cmp);
EXPORT_SYMBOL_GPL(mpz_cmpabs_ui);
EXPORT_SYMBOL_GPL(mpz_cmpabs);
EXPORT_SYMBOL_GPL(mpz_abs);
EXPORT_SYMBOL_GPL(mpz_neg);
EXPORT_SYMBOL_GPL(mpz_swap);
EXPORT_SYMBOL_GPL(mpz_add_ui);
EXPORT_SYMBOL_GPL(mpz_add);
EXPORT_SYMBOL_GPL(mpz_sub_ui);
EXPORT_SYMBOL_GPL(mpz_ui_sub);
EXPORT_SYMBOL_GPL(mpz_sub);
EXPORT_SYMBOL_GPL(mpz_mul_si);
EXPORT_SYMBOL_GPL(mpz_mul_ui);
EXPORT_SYMBOL_GPL(mpz_mul);
EXPORT_SYMBOL_GPL(mpz_mul_2exp);
EXPORT_SYMBOL_GPL(mpz_addmul_ui);
EXPORT_SYMBOL_GPL(mpz_addmul);
EXPORT_SYMBOL_GPL(mpz_submul_ui);
EXPORT_SYMBOL_GPL(mpz_submul);
EXPORT_SYMBOL_GPL(mpz_cdiv_qr);
EXPORT_SYMBOL_GPL(mpz_fdiv_qr);
EXPORT_SYMBOL_GPL(mpz_tdiv_qr);
EXPORT_SYMBOL_GPL(mpz_cdiv_q);
EXPORT_SYMBOL_GPL(mpz_fdiv_q);
EXPORT_SYMBOL_GPL(mpz_tdiv_q);
EXPORT_SYMBOL_GPL(mpz_cdiv_r);
EXPORT_SYMBOL_GPL(mpz_fdiv_r);
EXPORT_SYMBOL_GPL(mpz_tdiv_r);
EXPORT_SYMBOL_GPL(mpz_cdiv_q_2exp);
EXPORT_SYMBOL_GPL(mpz_fdiv_q_2exp);
EXPORT_SYMBOL_GPL(mpz_tdiv_q_2exp);
EXPORT_SYMBOL_GPL(mpz_cdiv_r_2exp);
EXPORT_SYMBOL_GPL(mpz_fdiv_r_2exp);
EXPORT_SYMBOL_GPL(mpz_tdiv_r_2exp);
EXPORT_SYMBOL_GPL(mpz_mod);
EXPORT_SYMBOL_GPL(mpz_divexact);
EXPORT_SYMBOL_GPL(mpz_divisible_p);
EXPORT_SYMBOL_GPL(mpz_congruent_p);
EXPORT_SYMBOL_GPL(mpz_cdiv_qr_ui);
EXPORT_SYMBOL_GPL(mpz_fdiv_qr_ui);
EXPORT_SYMBOL_GPL(mpz_tdiv_qr_ui);
EXPORT_SYMBOL_GPL(mpz_cdiv_q_ui);
EXPORT_SYMBOL_GPL(mpz_fdiv_q_ui);
EXPORT_SYMBOL_GPL(mpz_tdiv_q_ui);
EXPORT_SYMBOL_GPL(mpz_cdiv_r_ui);
EXPORT_SYMBOL_GPL(mpz_fdiv_r_ui);
EXPORT_SYMBOL_GPL(mpz_tdiv_r_ui);
EXPORT_SYMBOL_GPL(mpz_cdiv_ui);
EXPORT_SYMBOL_GPL(mpz_fdiv_ui);
EXPORT_SYMBOL_GPL(mpz_tdiv_ui);
EXPORT_SYMBOL_GPL(mpz_mod_ui);
EXPORT_SYMBOL_GPL(mpz_divexact_ui);
EXPORT_SYMBOL_GPL(mpz_divisible_ui_p);
EXPORT_SYMBOL_GPL(mpz_gcd_ui);
EXPORT_SYMBOL_GPL(mpz_gcd);
EXPORT_SYMBOL_GPL(mpz_gcdext);
EXPORT_SYMBOL_GPL(mpz_lcm_ui);
EXPORT_SYMBOL_GPL(mpz_lcm);
EXPORT_SYMBOL_GPL(mpz_invert);
EXPORT_SYMBOL_GPL(mpz_sqrtrem);
EXPORT_SYMBOL_GPL(mpz_sqrt);
EXPORT_SYMBOL_GPL(mpz_perfect_square_p);
EXPORT_SYMBOL_GPL(mpz_pow_ui);
EXPORT_SYMBOL_GPL(mpz_ui_pow_ui);
EXPORT_SYMBOL_GPL(mpz_powm);
EXPORT_SYMBOL_GPL(mpz_powm_ui);
EXPORT_SYMBOL_GPL(mpz_rootrem);
EXPORT_SYMBOL_GPL(mpz_root);
EXPORT_SYMBOL_GPL(mpz_fac_ui);
EXPORT_SYMBOL_GPL(mpz_bin_uiui);
EXPORT_SYMBOL_GPL(mpz_probab_prime_p);
EXPORT_SYMBOL_GPL(mpz_tstbit);
EXPORT_SYMBOL_GPL(mpz_setbit);
EXPORT_SYMBOL_GPL(mpz_clrbit);
EXPORT_SYMBOL_GPL(mpz_combit);
EXPORT_SYMBOL_GPL(mpz_com);
EXPORT_SYMBOL_GPL(mpz_and);
EXPORT_SYMBOL_GPL(mpz_ior);
EXPORT_SYMBOL_GPL(mpz_xor);
EXPORT_SYMBOL_GPL(mpz_popcount);
EXPORT_SYMBOL_GPL(mpz_hamdist);
EXPORT_SYMBOL_GPL(mpz_scan0);
EXPORT_SYMBOL_GPL(mpz_scan1);
EXPORT_SYMBOL_GPL(mpz_fits_slong_p);
EXPORT_SYMBOL_GPL(mpz_fits_ulong_p);
EXPORT_SYMBOL_GPL(mpz_get_si);
EXPORT_SYMBOL_GPL(mpz_get_ui);
EXPORT_SYMBOL_GPL(mpz_size);
EXPORT_SYMBOL_GPL(mpz_getlimbn);
EXPORT_SYMBOL_GPL(mpz_realloc2);
EXPORT_SYMBOL_GPL(mpz_limbs_read);
EXPORT_SYMBOL_GPL(mpz_limbs_modify);
EXPORT_SYMBOL_GPL(mpz_limbs_write);
EXPORT_SYMBOL_GPL(mpz_limbs_finish);
EXPORT_SYMBOL_GPL(mpz_roinit_n);
EXPORT_SYMBOL_GPL(mpz_set_si);
EXPORT_SYMBOL_GPL(mpz_set_ui);
EXPORT_SYMBOL_GPL(mpz_set);
EXPORT_SYMBOL_GPL(mpz_init_set_si);
EXPORT_SYMBOL_GPL(mpz_init_set_ui);
EXPORT_SYMBOL_GPL(mpz_init_set);
EXPORT_SYMBOL_GPL(mpz_sizeinbase);
EXPORT_SYMBOL_GPL(mpz_get_str);
EXPORT_SYMBOL_GPL(mpz_set_str);
EXPORT_SYMBOL_GPL(mpz_init_set_str);
EXPORT_SYMBOL_GPL(mpz_import);
EXPORT_SYMBOL_GPL(mpz_export);

@ -1,9 +0,0 @@
#!/bin/sh
echo '#include <linux/kernel.h>' > export.c
echo '#include "mini-gmp.h"' >> export.c
gcc -P -E -DKERNEL=1 ./mini-gmp.h |
perl -e 'my $all=join("",<>); my @d; push @d, "EXPORT_SYMBOL_GPL($1);" while $all =~ m/(\w++)\h*(\((?:[^()]++|(?2))*\))\s*;/g; print join("\n", @d) . "\n";' >> export.c

@ -2,7 +2,7 @@
Contributed to the GNU project by Niels Möller
Copyright 1991-1997, 1999-2015 Free Software Foundation, Inc.
Copyright 1991-1997, 1999-2014 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
@ -41,35 +41,15 @@ see https://www.gnu.org/licenses/. */
mpn/generic/sbpi1_div_qr.c, mpn/generic/sub_n.c,
mpn/generic/submul_1.c. */
#ifdef KERNEL
# include <linux/module.h>
# include <linux/kernel.h>
# include <linux/bitops.h>
# include <linux/slab.h>
# include <linux/ctype.h>
#else
# include <assert.h>
# include <ctype.h>
# include <limits.h>
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
#endif
#include <assert.h>
#include <ctype.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mini-gmp.h"
#ifdef KERNEL
# define CHAR_BIT BITS_PER_BYTE
# define assert BUG_ON
# define free(p) kfree(p)
# define malloc(s) kmalloc(s, GFP_KERNEL)
# define realloc(o,n) krealloc(o, n, GFP_KERNEL)
#endif
#ifdef KERNEL
MODULE_LICENSE("GPL");
#endif
/* Macros */
#define GMP_LIMB_BITS (sizeof(mp_limb_t) * CHAR_BIT)
@ -260,20 +240,12 @@ const int mp_bits_per_limb = GMP_LIMB_BITS;
/* Memory allocation and other helper functions. */
#ifdef KERNEL
static void
gmp_die (const char *msg)
{
panic(msg);
}
#else
static void
gmp_die (const char *msg)
{
fprintf (stderr, "%s\n", msg);
abort();
}
#endif
static void *
gmp_default_alloc (size_t size)
@ -292,12 +264,12 @@ gmp_default_alloc (size_t size)
static void *
gmp_default_realloc (void *old, size_t old_size, size_t new_size)
{
void * p;
mp_ptr p;
p = realloc (old, new_size);
if (!p)
gmp_die("gmp_default_realloc: Virtual memory exhausted.");
gmp_die("gmp_default_realoc: Virtual memory exhausted.");
return p;
}
@ -350,14 +322,14 @@ mp_set_memory_functions (void *(*alloc_func) (size_t),
static mp_ptr
gmp_xalloc_limbs (mp_size_t size)
{
return (mp_ptr) gmp_xalloc (size * sizeof (mp_limb_t));
return gmp_xalloc (size * sizeof (mp_limb_t));
}
static mp_ptr
gmp_xrealloc_limbs (mp_ptr old, mp_size_t size)
{
assert (size > 0);
return (mp_ptr) (*gmp_reallocate_func) (old, 0, size * sizeof (mp_limb_t));
return (*gmp_reallocate_func) (old, 0, size * sizeof (mp_limb_t));
}
@ -374,7 +346,7 @@ mpn_copyi (mp_ptr d, mp_srcptr s, mp_size_t n)
void
mpn_copyd (mp_ptr d, mp_srcptr s, mp_size_t n)
{
while (--n >= 0)
while (n-- > 0)
d[n] = s[n];
}
@ -401,22 +373,20 @@ mpn_cmp4 (mp_srcptr ap, mp_size_t an, mp_srcptr bp, mp_size_t bn)
static mp_size_t
mpn_normalized_size (mp_srcptr xp, mp_size_t n)
{
while (n > 0 && xp[n-1] == 0)
--n;
for (; n > 0 && xp[n-1] == 0; n--)
;
return n;
}
int
mpn_zero_p(mp_srcptr rp, mp_size_t n)
{
return mpn_normalized_size (rp, n) == 0;
}
#define mpn_zero_p(xp, n) (mpn_normalized_size ((xp), (n)) == 0)
void
mpn_zero (mp_ptr rp, mp_size_t n)
{
while (--n >= 0)
rp[n] = 0;
mp_size_t i;
for (i = 0; i < n; i++)
rp[i] = 0;
}
mp_limb_t
@ -608,16 +578,17 @@ mpn_mul (mp_ptr rp, mp_srcptr up, mp_size_t un, mp_srcptr vp, mp_size_t vn)
way. */
rp[un] = mpn_mul_1 (rp, up, un, vp[0]);
rp += 1, vp += 1, vn -= 1;
/* Now accumulate the product of up[] and the next higher limb from
vp[]. */
while (--vn >= 1)
while (vn >= 1)
{
rp += 1, vp += 1;
rp[un] = mpn_addmul_1 (rp, up, un, vp[0]);
rp += 1, vp += 1, vn -= 1;
}
return rp[un];
return rp[un - 1];
}
void
@ -637,6 +608,7 @@ mpn_lshift (mp_ptr rp, mp_srcptr up, mp_size_t n, unsigned int cnt)
{
mp_limb_t high_limb, low_limb;
unsigned int tnc;
mp_size_t i;
mp_limb_t retval;
assert (n >= 1);
@ -651,7 +623,7 @@ mpn_lshift (mp_ptr rp, mp_srcptr up, mp_size_t n, unsigned int cnt)
retval = low_limb >> tnc;
high_limb = (low_limb << cnt);
while (--n != 0)
for (i = n; --i != 0;)
{
low_limb = *--up;
*--rp = high_limb | (low_limb >> tnc);
@ -667,6 +639,7 @@ mpn_rshift (mp_ptr rp, mp_srcptr up, mp_size_t n, unsigned int cnt)
{
mp_limb_t high_limb, low_limb;
unsigned int tnc;
mp_size_t i;
mp_limb_t retval;
assert (n >= 1);
@ -678,7 +651,7 @@ mpn_rshift (mp_ptr rp, mp_srcptr up, mp_size_t n, unsigned int cnt)
retval = (high_limb << tnc);
low_limb = high_limb >> cnt;
while (--n != 0)
for (i = n; --i != 0;)
{
high_limb = *up++;
*rp++ = low_limb | (high_limb << tnc);
@ -903,7 +876,7 @@ mpn_div_qr_1_preinv (mp_ptr qp, mp_srcptr np, mp_size_t nn,
d = inv->d1;
di = inv->di;
while (--nn >= 0)
while (nn-- > 0)
{
mp_limb_t q;
@ -1341,7 +1314,7 @@ mpn_set_str_other (mp_ptr rp, const unsigned char *sp, size_t sn,
j = 0;
w = sp[j++];
while (--k != 0)
for (; --k > 0; )
w = w * b + sp[j++];
rp[0] = w;
@ -1415,7 +1388,7 @@ mpz_clear (mpz_t r)
gmp_free (r->_mp_d);
}
static mp_ptr
static void *
mpz_realloc (mpz_t r, mp_size_t size)
{
size = GMP_MAX (size, 1);
@ -1502,12 +1475,14 @@ mpz_fits_slong_p (const mpz_t u)
{
mp_size_t us = u->_mp_size;
if (us == 1)
if (us == 0)
return 1;
else if (us == 1)
return u->_mp_d[0] < GMP_LIMB_HIGHBIT;
else if (us == -1)
return u->_mp_d[0] <= GMP_LIMB_HIGHBIT;
else
return (us == 0);
return 0;
}
int
@ -1594,7 +1569,6 @@ mpz_roinit_n (mpz_t x, mp_srcptr xp, mp_size_t xs)
return x;
}
#ifndef KERNEL
/* Conversions and comparison to double. */
void
@ -1736,7 +1710,6 @@ mpz_cmp_d (const mpz_t x, double d)
return mpz_cmpabs_d (x, d);
}
}
#endif
/* MPZ comparisons and the like. */
@ -1823,14 +1796,18 @@ mpz_cmpabs (const mpz_t u, const mpz_t v)
void
mpz_abs (mpz_t r, const mpz_t u)
{
mpz_set (r, u);
if (r != u)
mpz_set (r, u);
r->_mp_size = GMP_ABS (r->_mp_size);
}
void
mpz_neg (mpz_t r, const mpz_t u)
{
mpz_set (r, u);
if (r != u)
mpz_set (r, u);
r->_mp_size = -r->_mp_size;
}
@ -2100,7 +2077,8 @@ mpz_mul_2exp (mpz_t r, const mpz_t u, mp_bitcnt_t bits)
else
mpn_copyd (rp + limbs, u->_mp_d, un);
mpn_zero (rp, limbs);
while (limbs > 0)
rp[--limbs] = 0;
r->_mp_size = (u->_mp_size < 0) ? - rn : rn;
}
@ -3096,7 +3074,9 @@ void
mpz_ui_pow_ui (mpz_t r, unsigned long blimb, unsigned long e)
{
mpz_t b;
mpz_pow_ui (r, mpz_roinit_n (b, &blimb, 1), e);
mpz_init_set_ui (b, blimb);
mpz_pow_ui (r, b, e);
mpz_clear (b);
}
void
@ -3168,7 +3148,7 @@ mpz_powm (mpz_t r, const mpz_t b, const mpz_t e, const mpz_t m)
}
mpz_init_set_ui (tr, 1);
while (--en >= 0)
while (en-- > 0)
{
mp_limb_t w = e->_mp_d[en];
mp_limb_t bit;
@ -3208,7 +3188,9 @@ void
mpz_powm_ui (mpz_t r, const mpz_t b, unsigned long elimb, const mpz_t m)
{
mpz_t e;
mpz_powm (r, b, mpz_roinit_n (e, &elimb, 1), m);
mpz_init_set_ui (e, elimb);
mpz_powm (r, b, e, m);
mpz_clear (e);
}
/* x=trunc(y^(1/z)), r=y-x^z */
@ -3236,7 +3218,7 @@ mpz_rootrem (mpz_t x, mpz_t r, const mpz_t y, unsigned long z)
{
mp_bitcnt_t tb;
tb = mpz_sizeinbase (y, 2) / z + 1;
mpz_init2 (t, tb + 1);
mpz_init2 (t, tb);
mpz_setbit (t, tb);
}
@ -3351,7 +3333,7 @@ void
mpz_fac_ui (mpz_t x, unsigned long n)
{
mpz_set_ui (x, n + (n == 0));
while (n > 2)
for (;n > 2;)
mpz_mul_ui (x, x, --n);
}
@ -3522,7 +3504,7 @@ mpz_tstbit (const mpz_t d, mp_bitcnt_t bit_index)
must be complemented. */
if (shift > 0 && (w << (GMP_LIMB_BITS - shift)) > 0)
return bit ^ 1;
while (--limb_index >= 0)
while (limb_index-- > 0)
if (d->_mp_d[limb_index] > 0)
return bit ^ 1;
}
@ -3587,7 +3569,7 @@ mpz_abs_sub_bit (mpz_t d, mp_bitcnt_t bit_index)
gmp_assert_nocarry (mpn_sub_1 (dp + limb_index, dp + limb_index,
dn - limb_index, bit));
dn = mpn_normalized_size (dp, dn);
dn -= (dp[dn-1] == 0);
d->_mp_size = (d->_mp_size < 0) ? - dn : dn;
}
@ -4083,7 +4065,7 @@ mpz_get_str (char *sp, int base, const mpz_t u)
sn = 1 + mpz_sizeinbase (u, base);
if (!sp)
sp = (char *) gmp_xalloc (1 + sn);
sp = gmp_xalloc (1 + sn);
un = GMP_ABS (u->_mp_size);
@ -4165,7 +4147,7 @@ mpz_set_str (mpz_t r, const char *sp, int base)
}
sn = strlen (sp);
dp = (unsigned char *) gmp_xalloc (sn + (sn == 0));
dp = gmp_xalloc (sn + (sn == 0));
for (sn = 0; *sp; sp++)
{
@ -4223,7 +4205,6 @@ mpz_init_set_str (mpz_t r, const char *sp, int base)
return mpz_set_str (r, sp, base);
}
#ifndef KERNEL
size_t
mpz_out_str (FILE *stream, int base, const mpz_t x)
{
@ -4236,7 +4217,6 @@ mpz_out_str (FILE *stream, int base, const mpz_t x)
gmp_free (str);
return len;
}
#endif
static int

@ -1,6 +1,6 @@
/* mini-gmp, a minimalistic implementation of a GNU GMP subset.
Copyright 2011-2015 Free Software Foundation, Inc.
Copyright 2011-2014 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
@ -38,14 +38,8 @@ see https://www.gnu.org/licenses/. */
#ifndef __MINI_GMP_H__
#define __MINI_GMP_H__
#ifndef KERNEL
/* For size_t */
# include <stddef.h>
#endif
#if defined (__cplusplus)
extern "C" {
#endif
#include <stddef.h>
void mp_set_memory_functions (void *(*) (size_t),
void *(*) (void *, size_t, size_t),
@ -84,7 +78,6 @@ void mpn_copyd (mp_ptr, mp_srcptr, mp_size_t);
void mpn_zero (mp_ptr, mp_size_t);
int mpn_cmp (mp_srcptr, mp_srcptr, mp_size_t);
int mpn_zero_p (mp_srcptr, mp_size_t);
mp_limb_t mpn_add_1 (mp_ptr, mp_srcptr, mp_size_t, mp_limb_t);
mp_limb_t mpn_add_n (mp_ptr, mp_srcptr, mp_srcptr, mp_size_t);
@ -131,10 +124,8 @@ int mpz_cmp_ui (const mpz_t, unsigned long);
int mpz_cmp (const mpz_t, const mpz_t);
int mpz_cmpabs_ui (const mpz_t, unsigned long);
int mpz_cmpabs (const mpz_t, const mpz_t);
#ifndef KERNEL
int mpz_cmp_d (const mpz_t, double);
int mpz_cmpabs_d (const mpz_t, double);
#endif
void mpz_abs (mpz_t, const mpz_t);
void mpz_neg (mpz_t, const mpz_t);
@ -241,9 +232,7 @@ int mpz_fits_slong_p (const mpz_t);
int mpz_fits_ulong_p (const mpz_t);
long int mpz_get_si (const mpz_t);
unsigned long int mpz_get_ui (const mpz_t);
#ifndef KERNEL
double mpz_get_d (const mpz_t);
#endif
size_t mpz_size (const mpz_t);
mp_limb_t mpz_getlimbn (const mpz_t, mp_size_t);
@ -259,16 +248,12 @@ mpz_srcptr mpz_roinit_n (mpz_t, mp_srcptr, mp_size_t);
void mpz_set_si (mpz_t, signed long int);
void mpz_set_ui (mpz_t, unsigned long int);
void mpz_set (mpz_t, const mpz_t);
#ifndef KERNEL
void mpz_set_d (mpz_t, double);
#endif
void mpz_init_set_si (mpz_t, signed long int);
void mpz_init_set_ui (mpz_t, unsigned long int);
void mpz_init_set (mpz_t, const mpz_t);
#ifndef KERNEL
void mpz_init_set_d (mpz_t, double);
#endif
size_t mpz_sizeinbase (const mpz_t, int);
char *mpz_get_str (char *, int, const mpz_t);
@ -278,7 +263,7 @@ int mpz_init_set_str (mpz_t, const char *, int);
/* This long list taken from gmp.h. */
/* For reference, "defined(EOF)" cannot be used here. In g++ 2.95.4,
<iostream> defines EOF but not FILE. */
#if defined (FILE) && !defined(KERNEL) \
#if defined (FILE) \
|| defined (H_STDIO) \
|| defined (_H_STDIO) /* AIX */ \
|| defined (_STDIO_H) /* glibc, Sun, SCO */ \
@ -299,27 +284,5 @@ size_t mpz_out_str (FILE *, int, const mpz_t);
void mpz_import (mpz_t, size_t, int, size_t, int, size_t, const void *);
void *mpz_export (void *, size_t *, int, size_t, int, size_t, const mpz_t);
#define __gmpz_add mpz_add
#define __gmpz_clear mpz_clear
#define __gmpz_cmp mpz_cmp
#define __gmpz_com mpz_com
#define __gmpz_get_si mpz_get_si
#define __gmpz_get_ui mpz_get_ui
#define __gmpz_init mpz_init
#define __gmpz_init_set mpz_init_set
#define __gmpz_init_set_si mpz_init_set_si
#define __gmpz_init_set_str mpz_init_set_str
#define __gmpz_init_set_ui mpz_init_set_ui
#define __gmpz_mul mpz_mul
#define __gmpz_neg mpz_neg
#define __gmpz_set mpz_set
#define __gmpz_set_si mpz_set_si
#define __gmpz_set_ui mpz_set_ui
#define __gmpz_sub mpz_sub
#define __gmpz_tdiv_q mpz_tdiv_q
#define __gmpz_tdiv_r mpz_tdiv_r
#if defined (__cplusplus)
}
#endif
#endif /* __MINI_GMP_H__ */

10
minigmp_global.h Normal file

@ -0,0 +1,10 @@
#ifndef MINIGMP_GLOBAL_H
#define MINIGMP_GLOBAL_H
#if defined(MINIGMP_LIBRARY)
# define UNTITLEDSHARED_EXPORT __declspec(dllexport)
#else
# define UNTITLEDSHARED_EXPORT __attribute__((visibility("default")))
#endif
#endif //MINIGMP_GLOBAL_H