-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathTimeStamp.cc
89 lines (73 loc) · 2.2 KB
/
TimeStamp.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "pdsdata/xtc/TimeStamp.hh"
namespace Pds {
enum {v_ticks = 0, k_ticks = 24};
enum {v_cntrl = 24, k_cntrl = 8};
enum {m_ticks = ((1 << k_ticks)-1), s_ticks = (m_ticks << v_ticks)};
enum {m_cntrl = ((1 << k_cntrl)-1), s_cntrl = (m_cntrl << v_cntrl)};
enum {v_fiduc = 0, k_fiduc = TimeStamp::NumFiducialBits};
enum {v_vecto = TimeStamp::NumFiducialBits, k_vecto = 32-TimeStamp::NumFiducialBits};
enum {m_fiduc = ((1 << k_fiduc)-1), s_fiduc = (m_fiduc <<v_fiduc)};
enum {m_vecto = ((1 << k_vecto)-1), s_vecto = (m_vecto <<v_vecto)};
}
Pds::TimeStamp::TimeStamp() :
_low (0),
_high(0)
{}
Pds::TimeStamp::TimeStamp(const Pds::TimeStamp& input) :
_low (input._low ),
_high(input._high)
{}
Pds::TimeStamp::TimeStamp(const Pds::TimeStamp& input, unsigned control) :
_low((input._low & s_ticks) | ((control & m_cntrl) << v_cntrl)),
_high(input._high)
{}
// Pds::TimeStamp::TimeStamp(unsigned low, unsigned high) :
// _low ((low & s_ticks)),
// _high(high)
// {}
Pds::TimeStamp::TimeStamp(unsigned low, unsigned high, unsigned vector, unsigned control) :
_low ((low & s_ticks) | ((control & m_cntrl) << v_cntrl)),
_high((high & s_fiduc) | ((vector & m_vecto) << v_vecto))
{}
unsigned Pds::TimeStamp::ticks() const
{
return (_low & s_ticks) >> v_ticks;
}
unsigned Pds::TimeStamp::fiducials() const
{
return (_high & s_fiduc) >> v_fiduc;
}
unsigned Pds::TimeStamp::control() const
{
return (_low & s_cntrl) >> v_cntrl;
}
unsigned Pds::TimeStamp::vector() const
{
return (_high & s_vecto) >> v_vecto;
}
Pds::TimeStamp& Pds::TimeStamp::operator=(const Pds::TimeStamp& input)
{
_low = input._low ;
_high = input._high;
return *this;
}
bool Pds::TimeStamp::operator==(const Pds::TimeStamp& ref) const
{
return fiducials() == ref.fiducials();
}
bool Pds::TimeStamp::operator>=(const Pds::TimeStamp& ref) const
{
return fiducials() >= ref.fiducials();
}
bool Pds::TimeStamp::operator<=(const Pds::TimeStamp& ref) const
{
return fiducials() <= ref.fiducials();
}
bool Pds::TimeStamp::operator>(const Pds::TimeStamp& ref) const
{
return fiducials() > ref.fiducials();
}
bool Pds::TimeStamp::operator<(const Pds::TimeStamp& ref) const
{
return fiducials() < ref.fiducials();
}