From 9c3e819f066acaf9f5a416630fa7dd83fdc2539d Mon Sep 17 00:00:00 2001 From: Thomas Arnhold Date: Tue, 13 May 2014 08:42:21 +0200 Subject: move boost rng wrapper from sc to comphelper so we can re-use it in other modules Change-Id: I6057b1e955f745019fd48f91a754279df0f2b948 Reviewed-on: https://gerrit.libreoffice.org/9348 Reviewed-by: Thomas Arnhold Tested-by: Thomas Arnhold --- comphelper/Library_comphelper.mk | 1 + comphelper/inc/pch/precompiled_comphelper.hxx | 3 +- comphelper/source/misc/random.cxx | 54 ++++++++++++++++++++++ include/comphelper/random.hxx | 33 +++++++++++++ sc/Library_sc.mk | 1 - sc/source/core/data/global.cxx | 4 +- sc/source/core/inc/random.hxx | 29 ------------ sc/source/core/tool/interpr1.cxx | 4 +- sc/source/core/tool/random.cxx | 54 ---------------------- .../StatisticsDialogs/AnalysisOfVarianceDialog.cxx | 1 - .../DescriptiveStatisticsDialog.cxx | 1 - .../ExponentialSmoothingDialog.cxx | 1 - sc/source/ui/StatisticsDialogs/FTestDialog.cxx | 1 - .../MatrixComparisonGenerator.cxx | 1 - .../ui/StatisticsDialogs/MovingAverageDialog.cxx | 1 - .../RandomNumberGeneratorDialog.cxx | 1 - sc/source/ui/StatisticsDialogs/SamplingDialog.cxx | 1 - .../StatisticsInputOutputDialog.cxx | 1 - .../StatisticsTwoVariableDialog.cxx | 1 - sc/source/ui/StatisticsDialogs/TTestDialog.cxx | 1 - 20 files changed, 94 insertions(+), 100 deletions(-) create mode 100644 comphelper/source/misc/random.cxx create mode 100644 include/comphelper/random.hxx delete mode 100644 sc/source/core/inc/random.hxx delete mode 100644 sc/source/core/tool/random.cxx diff --git a/comphelper/Library_comphelper.mk b/comphelper/Library_comphelper.mk index 623bac6856c7..cfe48f631992 100644 --- a/comphelper/Library_comphelper.mk +++ b/comphelper/Library_comphelper.mk @@ -99,6 +99,7 @@ $(eval $(call gb_Library_add_exception_objects,comphelper,\ comphelper/source/misc/officeresourcebundle \ comphelper/source/misc/officerestartmanager \ comphelper/source/misc/proxyaggregation \ + comphelper/source/misc/random \ comphelper/source/misc/scopeguard \ comphelper/source/misc/SelectionMultiplex \ comphelper/source/misc/sequenceashashmap \ diff --git a/comphelper/inc/pch/precompiled_comphelper.hxx b/comphelper/inc/pch/precompiled_comphelper.hxx index ab660b17a755..36ec107aefb0 100644 --- a/comphelper/inc/pch/precompiled_comphelper.hxx +++ b/comphelper/inc/pch/precompiled_comphelper.hxx @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -62,7 +63,6 @@ #include #include #include -#include #include #include #include @@ -225,4 +225,5 @@ #include #include #include + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/comphelper/source/misc/random.cxx b/comphelper/source/misc/random.cxx new file mode 100644 index 000000000000..a97608649bbf --- /dev/null +++ b/comphelper/source/misc/random.cxx @@ -0,0 +1,54 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * Contributor(s): + * Copyright (C) 2012 Tino Kluge + */ + +#include + +#include + +// this is nothing but a simple wrapper around +// the boost random generators + +namespace comphelper +{ +namespace rng +{ + +// underlying random number generator +// boost::mt19937 implements the Mersenne twister algorithm which +// is fast and has good statistical properties, it produces integers +// in the range of [0, 2^32-1] internally +// memory requirement: 625*sizeof(uint32_t) +// http://en.wikipedia.org/wiki/Mersenne_twister +#define BOOST_RNG_ALGO boost::mt19937 +BOOST_RNG_ALGO global_rng; + +// initialises the state of the global random number generator +// should only be called once at the start of the main programme +// (note, a few boost::variate_generator<> (like normal) have their +// own state which would need a reset as well to guarantee identical +// sequence of numbers, e.g. via myrand.distribution().reset()) +void seed(int i) +{ + global_rng.seed(i); +} + +// uniform [0,1) or [a,b) distribution +double uniform() +{ + static boost::uniform_01 myrand(global_rng); + return myrand(); +} + +} // namespace +} // namespace + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/comphelper/random.hxx b/include/comphelper/random.hxx new file mode 100644 index 000000000000..6b5d6eb86377 --- /dev/null +++ b/include/comphelper/random.hxx @@ -0,0 +1,33 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#ifndef INCLUDED_COMPHELPER_RANDOM_HXX +#define INCLUDED_COMPHELPER_RANDOM_HXX + +#include + +namespace comphelper +{ + +namespace rng +{ + +/// set initial seed (equivalent of libc srand()) +COMPHELPER_DLLPUBLIC void seed(int i); + +/// uniform distribution in [0,1) +COMPHELPER_DLLPUBLIC double uniform(); + +} // namespace + +} // namespace + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/Library_sc.mk b/sc/Library_sc.mk index ef092804baf0..9b55aa4380b3 100644 --- a/sc/Library_sc.mk +++ b/sc/Library_sc.mk @@ -249,7 +249,6 @@ $(eval $(call gb_Library_add_exception_objects,sc,\ sc/source/core/tool/progress \ sc/source/core/tool/queryentry \ sc/source/core/tool/queryparam \ - sc/source/core/tool/random \ sc/source/core/tool/rangelst \ sc/source/core/tool/rangenam \ sc/source/core/tool/rangeseq \ diff --git a/sc/source/core/data/global.cxx b/sc/source/core/data/global.cxx index d3b2bd173f23..5e081a00e12d 100644 --- a/sc/source/core/data/global.cxx +++ b/sc/source/core/data/global.cxx @@ -49,6 +49,7 @@ #include #include #include +#include #include #include #include @@ -77,7 +78,6 @@ #include "sc.hrc" #include "scmod.hxx" #include "appoptio.hxx" -#include "random.hxx" #include "editutil.hxx" @@ -529,7 +529,7 @@ void ScGlobal::Init() // names from the compiler. ScParameterClassification::Init(); srand( (unsigned) time( NULL ) ); // Random Seed Init fuer Interpreter - sc::rng::seed( time( NULL ) ); // seed for libc rand() replacement + ::comphelper::rng::seed( time( NULL ) ); // seed for libc rand() replacement InitAddIns(); diff --git a/sc/source/core/inc/random.hxx b/sc/source/core/inc/random.hxx deleted file mode 100644 index 00765dbaf930..000000000000 --- a/sc/source/core/inc/random.hxx +++ /dev/null @@ -1,29 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#ifndef INCLUDED_SC_SOURCE_CORE_INC_RANDOM_HXX -#define INCLUDED_SC_SOURCE_CORE_INC_RANDOM_HXX - -namespace sc -{ - -namespace rng -{ - -void seed(int i); // set initial seed (equivalent of libc srand()) - -double uniform(); // uniform distribution in [0,1) - -} // namespace - -} // namespace - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx index ab82fc3f92f2..9223dc62853a 100644 --- a/sc/source/core/tool/interpr1.cxx +++ b/sc/source/core/tool/interpr1.cxx @@ -46,7 +46,6 @@ #include "globstr.hrc" #include "attrib.hxx" #include "jumpmatrix.hxx" -#include "random.hxx" #include "cellkeytranslator.hxx" #include "lookupcache.hxx" #include "rangenam.hxx" @@ -61,6 +60,7 @@ #include "compare.hxx" #include +#include #include #include @@ -1680,7 +1680,7 @@ void ScInterpreter::ScPi() void ScInterpreter::ScRandom() { - PushDouble(sc::rng::uniform()); + PushDouble(::comphelper::rng::uniform()); } diff --git a/sc/source/core/tool/random.cxx b/sc/source/core/tool/random.cxx deleted file mode 100644 index 5affe374828e..000000000000 --- a/sc/source/core/tool/random.cxx +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * Contributor(s): - * Copyright (C) 2012 Tino Kluge - */ - -#include - -#include - -// this is nothing but a simple wrapper around -// the boost random generators - -namespace sc -{ -namespace rng -{ - -// underlying random number generator -// boost::mt19937 implements the Mersenne twister algorithm which -// is fast and has good statistical properties, it produces integers -// in the range of [0, 2^32-1] internally -// memory requirement: 625*sizeof(uint32_t) -// http://en.wikipedia.org/wiki/Mersenne_twister -#define BOOST_RNG_ALGO boost::mt19937 -BOOST_RNG_ALGO global_rng; - -// initialises the state of the global random number generator -// should only be called once at the start of the main programme -// (note, a few boost::variate_generator<> (like normal) have their -// own state which would need a reset as well to guarantee identical -// sequence of numbers, e.g. via myrand.distribution().reset()) -void seed(int i) -{ - global_rng.seed(i); -} - -// uniform [0,1) or [a,b) distribution -double uniform() -{ - static boost::uniform_01 myrand(global_rng); - return myrand(); -} - -} // namespace -} // namespace - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/ui/StatisticsDialogs/AnalysisOfVarianceDialog.cxx b/sc/source/ui/StatisticsDialogs/AnalysisOfVarianceDialog.cxx index 77a8f55d9d63..09617603beb9 100644 --- a/sc/source/ui/StatisticsDialogs/AnalysisOfVarianceDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/AnalysisOfVarianceDialog.cxx @@ -20,7 +20,6 @@ #include "uiitems.hxx" #include "reffact.hxx" #include "strload.hxx" -#include "random.hxx" #include "docfunc.hxx" #include "StatisticsDialogs.hrc" #include "TableFillingAndNavigationTools.hxx" diff --git a/sc/source/ui/StatisticsDialogs/DescriptiveStatisticsDialog.cxx b/sc/source/ui/StatisticsDialogs/DescriptiveStatisticsDialog.cxx index 84d493ae5029..3c56be5d48bc 100644 --- a/sc/source/ui/StatisticsDialogs/DescriptiveStatisticsDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/DescriptiveStatisticsDialog.cxx @@ -22,7 +22,6 @@ #include "uiitems.hxx" #include "reffact.hxx" #include "strload.hxx" -#include "random.hxx" #include "docfunc.hxx" #include "StatisticsDialogs.hrc" #include "TableFillingAndNavigationTools.hxx" diff --git a/sc/source/ui/StatisticsDialogs/ExponentialSmoothingDialog.cxx b/sc/source/ui/StatisticsDialogs/ExponentialSmoothingDialog.cxx index a97a48cc1c69..9f2b8e2aac05 100644 --- a/sc/source/ui/StatisticsDialogs/ExponentialSmoothingDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/ExponentialSmoothingDialog.cxx @@ -20,7 +20,6 @@ #include "uiitems.hxx" #include "reffact.hxx" #include "strload.hxx" -#include "random.hxx" #include "docfunc.hxx" #include "StatisticsDialogs.hrc" #include "TableFillingAndNavigationTools.hxx" diff --git a/sc/source/ui/StatisticsDialogs/FTestDialog.cxx b/sc/source/ui/StatisticsDialogs/FTestDialog.cxx index feba4eb019c6..407037669f3d 100644 --- a/sc/source/ui/StatisticsDialogs/FTestDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/FTestDialog.cxx @@ -22,7 +22,6 @@ #include "uiitems.hxx" #include "reffact.hxx" #include "strload.hxx" -#include "random.hxx" #include "docfunc.hxx" #include "StatisticsDialogs.hrc" #include "TableFillingAndNavigationTools.hxx" diff --git a/sc/source/ui/StatisticsDialogs/MatrixComparisonGenerator.cxx b/sc/source/ui/StatisticsDialogs/MatrixComparisonGenerator.cxx index 8757c2e50362..d779f67fe422 100644 --- a/sc/source/ui/StatisticsDialogs/MatrixComparisonGenerator.cxx +++ b/sc/source/ui/StatisticsDialogs/MatrixComparisonGenerator.cxx @@ -20,7 +20,6 @@ #include "uiitems.hxx" #include "reffact.hxx" #include "strload.hxx" -#include "random.hxx" #include "docfunc.hxx" #include "StatisticsDialogs.hrc" #include "TableFillingAndNavigationTools.hxx" diff --git a/sc/source/ui/StatisticsDialogs/MovingAverageDialog.cxx b/sc/source/ui/StatisticsDialogs/MovingAverageDialog.cxx index fe0cf52aaf44..aafe29060525 100644 --- a/sc/source/ui/StatisticsDialogs/MovingAverageDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/MovingAverageDialog.cxx @@ -20,7 +20,6 @@ #include "uiitems.hxx" #include "reffact.hxx" #include "strload.hxx" -#include "random.hxx" #include "docfunc.hxx" #include "StatisticsDialogs.hrc" #include "TableFillingAndNavigationTools.hxx" diff --git a/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx index b58d34ab8b7a..35b72f8aed2a 100644 --- a/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx @@ -20,7 +20,6 @@ #include "uiitems.hxx" #include "reffact.hxx" #include "strload.hxx" -#include "random.hxx" #include "docfunc.hxx" #include "StatisticsDialogs.hrc" diff --git a/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx b/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx index 3602376fa344..24eb99deb5bd 100644 --- a/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx @@ -19,7 +19,6 @@ #include "uiitems.hxx" #include "reffact.hxx" #include "strload.hxx" -#include "random.hxx" #include "docfunc.hxx" #include "StatisticsDialogs.hrc" diff --git a/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx b/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx index 0b20ae08ad89..5d2518bf1908 100644 --- a/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx @@ -20,7 +20,6 @@ #include "uiitems.hxx" #include "reffact.hxx" #include "scresid.hxx" -#include "random.hxx" #include "docfunc.hxx" #include "strload.hxx" diff --git a/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx b/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx index fa9ce7239d51..5d9d5b044e72 100644 --- a/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx @@ -20,7 +20,6 @@ #include "uiitems.hxx" #include "reffact.hxx" #include "scresid.hxx" -#include "random.hxx" #include "docfunc.hxx" #include "strload.hxx" diff --git a/sc/source/ui/StatisticsDialogs/TTestDialog.cxx b/sc/source/ui/StatisticsDialogs/TTestDialog.cxx index c79ff5e99075..228063d6a07b 100644 --- a/sc/source/ui/StatisticsDialogs/TTestDialog.cxx +++ b/sc/source/ui/StatisticsDialogs/TTestDialog.cxx @@ -22,7 +22,6 @@ #include "uiitems.hxx" #include "reffact.hxx" #include "strload.hxx" -#include "random.hxx" #include "docfunc.hxx" #include "StatisticsDialogs.hrc" #include "TableFillingAndNavigationTools.hxx" -- cgit v1.2.3