NEST main@caf0ae8
 
Loading...
Searching...
No Matches
conn_parameter.h
Go to the documentation of this file.
1/*
2 * conn_parameter.h
3 *
4 * This file is part of NEST.
5 *
6 * Copyright (C) 2004 The NEST Initiative
7 *
8 * NEST is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * NEST is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with NEST. If not, see <http://www.gnu.org/licenses/>.
20 *
21 */
22
23#ifndef CONN_PARAMETER_H
24#define CONN_PARAMETER_H
25
26// C++ includes:
27#include <limits>
28#include <vector>
29
30// Includes from nestkernel:
31#include "exceptions.h"
32#include "parameter.h"
33
46namespace nest
47{
48
50{
51
52public:
54 {
55 }
56
58 {
59 }
60
72 virtual double value_double( size_t, RngPtr, size_t, Node* ) const = 0;
73 virtual long value_int( size_t, RngPtr, size_t, Node* ) const = 0;
74 virtual void
75 skip( size_t, size_t ) const
76 {
77 }
78 virtual bool is_array() const = 0;
79
80 virtual bool
81 is_scalar() const
82 {
83 return false;
84 }
85
86 virtual bool
88 {
89 return false;
90 }
91
92 virtual void
93 reset() const
94 {
95 throw NotImplemented( "Symmetric connections require parameters that can be reset." );
96 }
97
103 virtual size_t
105 {
106 return 0;
107 }
108
115 static ConnParameter* create( const any_type&, const size_t );
116};
117
118
125{
126public:
127 ScalarDoubleParameter( double value, const size_t )
128 : value_( value )
129 {
130 }
131
132 double
133 value_double( size_t, RngPtr, size_t, Node* ) const override
134 {
135 return value_;
136 }
137
138 long
139 value_int( size_t, RngPtr, size_t, Node* ) const override
140 {
141 throw KernelException( "ConnParameter calls value function with false return type." );
142 }
143
144 inline bool
145 is_array() const override
146 {
147 return false;
148 }
149
150 void
151 reset() const override
152 {
153 }
154
155 bool
156 is_scalar() const override
157 {
158 return true;
159 }
160
161private:
162 double value_;
163};
164
171{
172public:
173 ScalarIntegerParameter( long value, const size_t )
174 : value_( value )
175 {
176 }
177
178 double
179 value_double( size_t, RngPtr, size_t, Node* ) const override
180 {
181 return static_cast< double >( value_ );
182 }
183
184 long
185 value_int( size_t, RngPtr, size_t, Node* ) const override
186 {
187 return value_;
188 }
189
190 inline bool
191 is_array() const override
192 {
193 return false;
194 }
195
196 void
197 reset() const override
198 {
199 }
200
201 bool
202 is_scalar() const override
203 {
204 return true;
205 }
206
207 bool
208 provides_long() const override
209 {
210 return true;
211 }
212
213private:
214 long value_;
215};
216
217
233{
234public:
235 ArrayDoubleParameter( const std::vector< double >& values, const size_t nthreads )
236 : values_( values )
237 , next_( nthreads, values_.begin() )
238 {
239 }
240
241 void
242 skip( size_t tid, size_t n_skip ) const override
243 {
244 if ( next_[ tid ] < values_.end() )
245 {
246 next_[ tid ] += n_skip;
247 }
248 else
249 {
250 throw KernelException( "Parameter values exhausted." );
251 }
252 }
253
254 size_t
255 number_of_values() const override
256 {
257 return values_.size();
258 }
259
260 double
261 value_double( size_t tid, RngPtr, size_t, Node* ) const override
262 {
263 if ( next_[ tid ] != values_.end() )
264 {
265 return *next_[ tid ]++;
266 }
267 else
268 {
269 throw KernelException( "Parameter values exhausted." );
270 }
271 }
272
273 long
274 value_int( size_t, RngPtr, size_t, Node* ) const override
275 {
276 throw KernelException( "ConnParameter calls value function with false return type." );
277 }
278
279 inline bool
280 is_array() const override
281 {
282 return true;
283 }
284
285 void
286 reset() const override
287 {
288 for ( std::vector< std::vector< double >::const_iterator >::iterator it = next_.begin(); it != next_.end(); ++it )
289 {
290 *it = values_.begin();
291 }
292 }
293
294private:
295 const std::vector< double > values_;
296 mutable std::vector< std::vector< double >::const_iterator > next_;
297};
298
314{
315public:
316 ArrayLongParameter( const std::vector< long >& values, const size_t nthreads )
317 : values_( values )
318 , next_( nthreads, values_.begin() )
319 {
320 }
321
322 void
323 skip( size_t tid, size_t n_skip ) const override
324 {
325 if ( next_[ tid ] < values_.end() )
326 {
327 next_[ tid ] += n_skip;
328 }
329 else
330 {
331 throw KernelException( "Parameter values exhausted." );
332 }
333 }
334
335 size_t
336 number_of_values() const override
337 {
338 return values_.size();
339 }
340
341 long
342 value_int( size_t tid, RngPtr, size_t, Node* ) const override
343 {
344 if ( next_[ tid ] != values_.end() )
345 {
346 return *next_[ tid ]++;
347 }
348 else
349 {
350 throw KernelException( "Parameter values exhausted." );
351 }
352 }
353
354 double
355 value_double( size_t tid, RngPtr, size_t, Node* ) const override
356 {
357 if ( next_[ tid ] != values_.end() )
358 {
359 return static_cast< double >( *next_[ tid ]++ );
360 }
361 else
362 {
363 throw KernelException( "Parameter values exhausted." );
364 }
365 }
366
367 inline bool
368 is_array() const override
369 {
370 return true;
371 }
372
373 bool
374 provides_long() const override
375 {
376 return true;
377 }
378
379 void
380 reset() const override
381 {
382 for ( std::vector< std::vector< long >::const_iterator >::iterator it = next_.begin(); it != next_.end(); ++it )
383 {
384 *it = values_.begin();
385 }
386 }
387
388private:
389 const std::vector< long > values_;
390 mutable std::vector< std::vector< long >::const_iterator > next_;
391};
392
394{
395public:
397
398 double value_double( size_t target_thread, RngPtr rng, size_t snode_id, Node* target ) const override;
399
400 long
401 value_int( size_t target_thread, RngPtr rng, size_t snode_id, Node* target ) const override
402 {
403 return value_double( target_thread, rng, snode_id, target );
404 }
405
406 inline bool
407 is_array() const override
408 {
409 return false;
410 }
411
412 bool
413 provides_long() const override
414 {
415 return parameter_->returns_int_only();
416 }
417
418private:
420};
421
422} // namespace nest
423
424#endif
Array parameter classes, returning double values in order.
Definition conn_parameter.h:233
ArrayDoubleParameter(const std::vector< double > &values, const size_t nthreads)
Definition conn_parameter.h:235
std::vector< std::vector< double >::const_iterator > next_
Definition conn_parameter.h:296
double value_double(size_t tid, RngPtr, size_t, Node *) const override
Return parameter value.
Definition conn_parameter.h:261
const std::vector< double > values_
Definition conn_parameter.h:295
long value_int(size_t, RngPtr, size_t, Node *) const override
Definition conn_parameter.h:274
bool is_array() const override
Definition conn_parameter.h:280
void skip(size_t tid, size_t n_skip) const override
Definition conn_parameter.h:242
void reset() const override
Definition conn_parameter.h:286
size_t number_of_values() const override
Returns number of values available.
Definition conn_parameter.h:255
Array parameter classes, returning integer values in order.
Definition conn_parameter.h:314
const std::vector< long > values_
Definition conn_parameter.h:389
bool is_array() const override
Definition conn_parameter.h:368
size_t number_of_values() const override
Returns number of values available.
Definition conn_parameter.h:336
bool provides_long() const override
Definition conn_parameter.h:374
void reset() const override
Definition conn_parameter.h:380
ArrayLongParameter(const std::vector< long > &values, const size_t nthreads)
Definition conn_parameter.h:316
double value_double(size_t tid, RngPtr, size_t, Node *) const override
Return parameter value.
Definition conn_parameter.h:355
void skip(size_t tid, size_t n_skip) const override
Definition conn_parameter.h:323
std::vector< std::vector< long >::const_iterator > next_
Definition conn_parameter.h:390
long value_int(size_t tid, RngPtr, size_t, Node *) const override
Definition conn_parameter.h:342
Base class for RNG engine wrappers.
Definition random_generators.h:67
Definition conn_parameter.h:50
static ConnParameter * create(const any_type &, const size_t)
Definition conn_parameter.cpp:32
virtual void reset() const
Definition conn_parameter.h:93
virtual bool is_scalar() const
Definition conn_parameter.h:81
virtual bool is_array() const =0
virtual size_t number_of_values() const
Returns number of values available.
Definition conn_parameter.h:104
virtual double value_double(size_t, RngPtr, size_t, Node *) const =0
Return parameter value.
virtual bool provides_long() const
Definition conn_parameter.h:87
virtual void skip(size_t, size_t) const
Definition conn_parameter.h:75
virtual long value_int(size_t, RngPtr, size_t, Node *) const =0
virtual ~ConnParameter()
Definition conn_parameter.h:57
ConnParameter()
Definition conn_parameter.h:53
Base class for all Kernel exceptions.
Definition exceptions.h:65
Base class for all NEST network objects.
Definition node.h:99
Exception to be thrown if a feature is unavailable.
Definition exceptions.h:108
Definition conn_parameter.h:394
ParameterPTR parameter_
Definition conn_parameter.h:419
double value_double(size_t target_thread, RngPtr rng, size_t snode_id, Node *target) const override
Return parameter value.
Definition conn_parameter.cpp:74
bool is_array() const override
Definition conn_parameter.h:407
bool provides_long() const override
Definition conn_parameter.h:413
long value_int(size_t target_thread, RngPtr rng, size_t snode_id, Node *target) const override
Definition conn_parameter.h:401
Single double value.
Definition conn_parameter.h:125
ScalarDoubleParameter(double value, const size_t)
Definition conn_parameter.h:127
void reset() const override
Definition conn_parameter.h:151
double value_double(size_t, RngPtr, size_t, Node *) const override
Return parameter value.
Definition conn_parameter.h:133
long value_int(size_t, RngPtr, size_t, Node *) const override
Definition conn_parameter.h:139
bool is_array() const override
Definition conn_parameter.h:145
bool is_scalar() const override
Definition conn_parameter.h:156
double value_
Definition conn_parameter.h:162
Single integer value.
Definition conn_parameter.h:171
double value_double(size_t, RngPtr, size_t, Node *) const override
Return parameter value.
Definition conn_parameter.h:179
bool provides_long() const override
Definition conn_parameter.h:208
void reset() const override
Definition conn_parameter.h:197
long value_int(size_t, RngPtr, size_t, Node *) const override
Definition conn_parameter.h:185
bool is_array() const override
Definition conn_parameter.h:191
bool is_scalar() const override
Definition conn_parameter.h:202
ScalarIntegerParameter(long value, const size_t)
Definition conn_parameter.h:173
long value_
Definition conn_parameter.h:214
DictionarySchema::VariantType< std::shared_ptr< nest::NodeCollection >, std::vector< std::vector< double > >, std::vector< std::vector< std::vector< double > > >, std::vector< std::vector< std::vector< long > > >, std::shared_ptr< nest::Parameter >, AnyVector, nest::VerbosityLevel, EmptyList > any_type
Complete any_type by adding specific data types.
Definition dictionary.h:123
Namespace for the NEST simulation kernel.
Definition beta_normalization_factor.h:33
std::shared_ptr< Parameter > ParameterPTR
Definition parameter.h:40