@@ -60,6 +60,29 @@ namespace geode
6060 return do_sample_impl ( spec );
6161 }
6262
63+ template < typename Type >
64+ Type sample_uniform ( const Uniform< Type >& law )
65+ {
66+ // check interval values correctness
67+ if ( law.min .is_included )
68+ {
69+ if ( law.max .is_included )
70+ {
71+ return absl::Uniform (
72+ absl::IntervalClosed, rand_gen_, law.min , law.max );
73+ }
74+ return absl::Uniform (
75+ absl::IntervalClosedOpen, rand_gen_, law.min , law.max );
76+ }
77+ if ( law.max .is_included )
78+ {
79+ return absl::Uniform (
80+ absl::IntervalOpenClosed, rand_gen_, law.min , law.max );
81+ }
82+ return absl::Uniform (
83+ absl::IntervalOpen, rand_gen_, law.min , law.max );
84+ }
85+
6386 private:
6487 int do_sample_impl ( const UniformInt& spec )
6588 {
@@ -103,9 +126,30 @@ namespace geode
103126 return impl_->do_sample ( spec );
104127 }
105128
106- template auto RandomEngine::sample ( const UniformInt& );
107- template auto RandomEngine::sample ( const UniformDouble& );
108- template auto RandomEngine::sample ( const Gaussian& );
109- template auto RandomEngine::sample ( const Bernoulli& );
129+ template < typename Type >
130+ Type RandomEngine::sample_uniform ( const Uniform< Type >& law )
131+ {
132+ return impl_->sample_uniform ( law );
133+ }
134+
135+ template index_t opengeode_stochastic_geometry_api
136+ RandomEngine::sample_uniform ( const Uniform< index_t >& );
137+ template local_index_t opengeode_stochastic_geometry_api
138+ RandomEngine::sample_uniform ( const Uniform< local_index_t >& );
139+ template signed_index_t opengeode_stochastic_geometry_api
140+ RandomEngine::sample_uniform ( const Uniform< signed_index_t >& );
141+ template float opengeode_stochastic_geometry_api
142+ RandomEngine::sample_uniform ( const Uniform< float >& );
143+ template double opengeode_stochastic_geometry_api
144+ RandomEngine::sample_uniform ( const Uniform< double >& );
145+
146+
147+
148+ template auto opengeode_stochastic_geometry_api RandomEngine::sample (
149+ const UniformDouble& );
150+ template auto opengeode_stochastic_geometry_api RandomEngine::sample (
151+ const Gaussian& );
152+ template auto opengeode_stochastic_geometry_api RandomEngine::sample (
153+ const Bernoulli& );
110154
111155} // namespace geode
0 commit comments