OpenDDS  Snapshot(2023/04/28-20:55)
FibonacciSequence.h
Go to the documentation of this file.
1 #ifndef OPENDDS_DCPS_FIBONACCI_SEQUENCE_H
2 #define OPENDDS_DCPS_FIBONACCI_SEQUENCE_H
3 
4 #if !defined (ACE_LACKS_PRAGMA_ONCE)
5 # pragma once
6 #endif /* ACE_LACKS_PRAGMA_ONCE */
7 
9 
10 namespace OpenDDS {
11 namespace DCPS {
12 
13 template <typename T>
15 {
16 public:
17  explicit FibonacciSequence(const T& f1, const T& f1_minus_1 = T(0))
18  : f_n_(f1)
19  , f_n_minus_1_(f1_minus_1)
20  {}
21 
22  T get() const
23  {
24  return f_n_;
25  }
26 
27  void advance(const T& fmax = T(0))
28  {
29  const T f_n_plus_1 = f_n_minus_1_ + f_n_;
31  f_n_ = f_n_plus_1;
32  if (fmax != T(0)) {
33  f_n_ = (std::min)(f_n_, fmax);
34  }
35  }
36 
37  void set(const T& f1, const T& f1_minus_1 = T(0))
38  {
39  f_n_ = f1;
40  f_n_minus_1_ = f1_minus_1;
41  }
42 
43 private:
44  T f_n_;
46 };
47 
48 } // namespace DCPS
49 } // namespace OpenDDS
50 
52 
53 #endif
FibonacciSequence(const T &f1, const T &f1_minus_1=T(0))
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
void advance(const T &fmax=T(0))
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28