Phase.h
1/***************************************************************************
2 *
3 * Copyright (C) 1999 by Willem van Straten
4 * Licensed under the Academic Free License version 2.1
5 *
6 ***************************************************************************/
7
8#ifndef __POLYCO_PHASE_H
9#define __POLYCO_PHASE_H
10
11#include <inttypes.h>
12#include "MJD.h"
13
14#include <string>
15#include <math.h>
16
17namespace Pulsar
18{
19 class Phase {
20
21 private:
22 int64_t turns;
23 double fturns;
24
25 void settle ();
26
27 public:
28
30 static double rounding_threshold;
31
32 static const Phase zero;
33
35 Phase (double turns=0);
36
37 Phase (int64_t tns, double ftns);
38
39 const Phase& operator= (const Phase&);
40
41 friend Phase operator + (const Phase&, double);
42 friend Phase operator - (const Phase&, double);
43 friend Phase operator + (const Phase&, const Phase&);
44 friend Phase operator - (const Phase&, const Phase&);
45 friend Phase operator - (const Phase&);
46
47 // some may disagree with this usage of the operator
48 friend MJD operator * (const Phase&, double period);
49 friend MJD operator / (const Phase&, double frequency);
50
51 friend bool operator > (const Phase&, const Phase&);
52 friend bool operator < (const Phase&, const Phase&);
53 friend bool operator >= (const Phase&, const Phase&);
54 friend bool operator <= (const Phase&, const Phase&);
55 friend bool operator == (const Phase&, const Phase&);
56 friend bool operator != (const Phase&, const Phase&);
57
58 const Phase& operator += (const Phase&);
59 const Phase& operator -= (const Phase&);
60 const Phase& operator += (double);
61 const Phase& operator -= (double);
62 const Phase& operator += (int);
63 const Phase& operator -= (int);
64 // increment/decrement by one turn
65 const Phase& operator ++ ();
66 const Phase& operator -- ();
67
68 Phase Ceil ();
69 Phase Floor ();
70 Phase Rint ();
71
72 void set (int64_t tns, double ftns);
73
74 double in_turns() const;
75 int64_t intturns() const;
76 double fracturns() const;
77 std::string strprint(int precision) const;
78
79 };
80
81 inline std::ostream& operator<< (std::ostream& ostr, const Phase& sz)
82 { return ostr << sz.strprint(8); }
83
84}
85
86#endif

Generated using doxygen 1.14.0