RTI Connext Micro  Version 2.4.1.0
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
reda_sequenceNumber_impl.h
Go to the documentation of this file.
1 /*
2  * FILE: reda_sequenceNumber_impl.h - Sequence Number implementation
3  *
4  * Copyright 2012-2014 Real-Time Innovations, Inc.
5  *
6  * No duplications, whole or partial, manual or electronic, may be made
7  * without express written permission. Any such copies, or
8  * revisions thereof, must display this notice unaltered.
9  * This code contains trade secrets of Real-Time Innovations, Inc.
10  *
11  * Modification History
12  * --------------------
13  * 20apr2012,tk Written
14  */
15 /*ce
16  * \file
17  */
18 #ifndef reda_sequenceNumber_impl_h
19 #define reda_sequenceNumber_impl_h
20 
21 #define REDA_SequenceNumber_set_zero(sequenceNumber) \
22  (sequenceNumber)->high = 0; \
23  (sequenceNumber)->low = 0
24 
25 #define REDA_SequenceNumber_set_maximum(sequenceNumber) \
26  (sequenceNumber)->high = REDA_SEQUENCE_NUMBER_HIGH_MAX; \
27  (sequenceNumber)->low = REDA_SEQUENCE_NUMBER_LOW_MAX
28 
29 #define REDA_SequenceNumber_compare(sequenceNumber1, sequenceNumber2) \
30  ((((sequenceNumber1)->high) > ((sequenceNumber2)->high)) ? 1 : \
31  ((((sequenceNumber1)->high) < ((sequenceNumber2)->high)) ? -1 : \
32  ((((sequenceNumber1)->low) > ((sequenceNumber2)->low)) ? 1 : \
33  ((((sequenceNumber1)->low) < ((sequenceNumber2)->low)) ? -1 : 0))))
34 
35 #define REDA_SequenceNumber_is_unknown(sn_) \
36  (((sn_)->high == (RTI_INT32)0xffffffff) && \
37  ((sn_)->low == (RTI_UINT32)0xffffffff))
38 
39 #define REDA_SequenceNumber_is_zero(sn_) \
40  (((sn_)->high == 0) && ((sn_)->low == 0))
41 
42 #define REDA_SequenceNumber_add(answer, sn1, sn2) \
43 { \
44  (answer)->high = (sn1)->high + (sn2)->high; \
45  (answer)->low = (sn1)->low + (sn2)->low; \
46  if (((answer)->low < (sn1)->low) || ((answer)->low < (sn2)->low)) { \
47  ++(answer)->high; \
48  } \
49 }
50 
51 #define REDA_SequenceNumber_subtract(answer, sn1, sn2) \
52 { \
53  (answer)->high = (sn1)->high - (sn2)->high; \
54  (answer)->low = (sn1)->low - (sn2)->low; \
55  if ((answer)->low > (sn1)->low) { \
56  --(answer)->high; \
57  } \
58 }
59 
60 #define REDA_SequenceNumber_plusplus(sequenceNumber) \
61  ((++(sequenceNumber)->low) == 0) ? ++(sequenceNumber)->high : 0
62 
63 #define REDA_SequenceNumber_minusminus(sequenceNumber) \
64 { \
65  RTI_UINT32 originalLow = (sequenceNumber)->low; \
66  --(sequenceNumber)->low; \
67  if (((sequenceNumber)->low > originalLow)) { --(sequenceNumber)->high; } \
68 }
69 
70 #define REDA_SequenceNumber_increment(answer, sequenceNumber) \
71 { \
72  RTI_UINT32 currentLow = (answer)->low; \
73  (answer)->high += (sequenceNumber)->high; \
74  (answer)->low += (sequenceNumber)->low; \
75  if (((answer)->low < (sequenceNumber)->low) || \
76  ((answer)->low < currentLow)) { \
77  ++(answer)->high; \
78  } \
79 }
80 
81 #define REDA_SequenceNumber_decrement(answer, sequenceNumber) \
82 { \
83  RTI_UINT32 currentLow = (answer)->low; \
84  (answer)->high -= (sequenceNumber)->high; \
85  (answer)->low -= (sequenceNumber)->low; \
86  if (((answer)->low > currentLow)) { --(answer)->high; } \
87 }
88 
89 #define REDA_SequenceNumber_max(answer, sn1, sn2) \
90 { \
91  if (REDA_SequenceNumber_compare((sn1), (sn2)) > 0) { \
92  (answer)->high = (sn1)->high; (answer)->low = (sn1)->low; \
93  } else { \
94  (answer)->high = (sn2)->high; (answer)->low = (sn2)->low; \
95  } \
96 }
97 
98 #define REDA_SequenceNumber_min(answer, sn1, sn2) \
99 { \
100  if (REDA_SequenceNumber_compare((sn1), (sn2)) < 0) { \
101  (answer)->high = (sn1)->high; (answer)->low = (sn1)->low; \
102  } else { \
103  (answer)->high = (sn2)->high; (answer)->low = (sn2)->low; \
104  } \
105 }
106 
107 
108 #endif /* reda_sequenceNumber_impl_h */

RTI Connext Micro Version 2.4.1.0 Copyright © Thu Nov 20 2014 Real-Time Innovations, Inc