2525#include < ql/math/randomnumbers/sobolbrownianbridgersg.hpp>
2626
2727namespace QuantLib {
28+
29+ namespace {
30+ void nextSequence (const SobolBrownianGeneratorBaseG& gen, std::vector<Real>& seq) {
31+ gen.nextPath ();
32+ std::vector<Real> output (gen.numberOfFactors ());
33+ for (Size i = 0 ; i < gen.numberOfSetps (); ++i) {
34+ gen.nextStep (output);
35+ std::copy (output.begin (), output.end (), seq.begin () + i * factors_);
36+ }
37+ }
38+ }
39+
2840 SobolBrownianBridgeRsg::SobolBrownianBridgeRsg (
2941 Size factors, Size steps,
3042 SobolBrownianGenerator::Ordering ordering,
@@ -37,14 +49,7 @@ namespace QuantLib {
3749
3850 const SobolBrownianBridgeRsg::sample_type&
3951 SobolBrownianBridgeRsg::nextSequence () const {
40- gen_.nextPath ();
41- std::vector<Real> output (factors_);
42- for (Size i=0 ; i < steps_; ++i) {
43- gen_.nextStep (output);
44- std::copy (output.begin (), output.end (),
45- seq_.value .begin ()+i*factors_);
46- }
47-
52+ nextSequence (gen_, seq_);
4853 return seq_;
4954 }
5055
@@ -56,4 +61,31 @@ namespace QuantLib {
5661 Size SobolBrownianBridgeRsg::dimension () const {
5762 return dim_;
5863 }
64+
65+ Burley2020SobolBrownianBridgeRsg::Burley2020SobolBrownianBridgeRsg (
66+ Size factors, Size steps,
67+ SobolBrownianGenerator::Ordering ordering,
68+ unsigned long seed,
69+ SobolRsg::DirectionIntegers directionIntegers,
70+ unsigned long scrambleSeed)
71+ : factors_(factors), steps_(steps), dim_(factors*steps),
72+ seq_(sample_type::value_type(factors*steps), 1.0),
73+ gen_(factors, steps, ordering, seed, directionIntegers, scrambleSeed) {
74+ }
75+
76+ const Burley2020SobolBrownianBridgeRsg::sample_type&
77+ Burley2020SobolBrownianBridgeRsg::nextSequence () const {
78+ nextSequence (gen_, seq_);
79+ return seq_;
80+ }
81+
82+ const Burley2020SobolBrownianBridgeRsg::sample_type&
83+ Burley2020SobolBrownianBridgeRsg::lastSequence () const {
84+ return seq_;
85+ }
86+
87+ Size Burley2020SobolBrownianBridgeRsg::dimension () const {
88+ return dim_;
89+ }
90+
5991}
0 commit comments