1 /*------------------------------------------------------------------------------
2 *
3 * Copyright (c) 2011-2021, EURid vzw. All rights reserved.
4 * The YADIFA TM software product is provided under the BSD 3-clause license:
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * * Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * * Neither the name of EURid nor the names of its contributors may be
16 * used to endorse or promote products derived from this software
17 * without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 *
31 *------------------------------------------------------------------------------
32 *
33 */
34
35 /** @defgroup dnscore
36 * @ingroup dnscore
37 * @brief serial arithmetic
38 *
39 * @{
40 *
41 *----------------------------------------------------------------------------*/
42
43 //#include "dnscore/dnscore-config.h"
44
45 #include "dnscore/dnscore-config.h"
46 #include "dnscore/serial.h"
47
48 /*
49 * SERIAL
50 */
51
52 /**
53 *
54 * Returns TRUE iff a > b in serial arithmetic, else FALSE
55 *
56 * @param a
57 * @param b
58 * @return a > b
59 */
60
61 bool
serial_gt(u32 a,u32 b)62 serial_gt(u32 a, u32 b)
63 {
64 return ( (a < b) && ((b - a) > 0x7fffffff)) || ((a > b) && ((a - b) < 0x7fffffff));
65 }
66
67 /**
68 *
69 * Returns TRUE iff a < b in serial arithmetic, else FALSE
70 *
71 * @param a
72 * @param b
73 * @return a < b
74 */
75
76 bool
serial_lt(u32 a,u32 b)77 serial_lt(u32 a, u32 b)
78 {
79 return ( (a < b) && ((b - a) < 0x7fffffff)) || ((a > b) && ((a - b) > 0x7fffffff));
80 }
81
82 /**
83 *
84 * Returns TRUE iff a >= b in serial arithmetic, else FALSE
85 *
86 * @param a
87 * @param b
88 * @return a >= b
89 */
90
91 bool
serial_ge(u32 a,u32 b)92 serial_ge(u32 a, u32 b)
93 {
94 return (a == b) || ((a < b) && ((b - a) > 0x7fffffff)) || ((a > b) && ((a - b) < 0x7fffffff));
95 }
96
97 /**
98 *
99 * Returns TRUE iff a <= b in serial arithmetic, else FALSE
100 *
101 * @param a
102 * @param b
103 * @return a <= b
104 */
105
106 bool
serial_le(u32 a,u32 b)107 serial_le(u32 a, u32 b)
108 {
109 return (a == b) || ((a < b) && ((b - a) < 0x7fffffff)) || ((a > b) && ((a - b) > 0x7fffffff));
110 }
111
112 /** @} */
113