big svn cleanup
[anytun.git] / src / openvpn / integer.h
blob68cf40f06d65227603ea381c557e0281d089d001
1 /*
2 * OpenVPN -- An application to securely tunnel IP networks
3 * over a single UDP port, with support for SSL/TLS-based
4 * session authentication and key exchange,
5 * packet encryption, packet authentication, and
6 * packet compression.
8 * Copyright (C) 2002-2005 OpenVPN Solutions LLC <info@openvpn.net>
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License version 2
12 * as published by the Free Software Foundation.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program (see the file COPYING included with this
21 * distribution); if not, write to the Free Software Foundation, Inc.,
22 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 #ifndef INTEGER_H
26 #define INTEGER_H
28 #include "error.h"
31 * min/max functions
34 static inline int
35 max_int (int x, int y)
37 if (x > y)
38 return x;
39 else
40 return y;
43 static inline int
44 min_int (int x, int y)
46 if (x < y)
47 return x;
48 else
49 return y;
52 static inline int
53 constrain_int (int x, int min, int max)
55 if (min > max)
56 return min;
57 if (x < min)
58 return min;
59 else if (x > max)
60 return max;
61 else
62 return x;
66 * Functions used for circular buffer index arithmetic.
70 * Return x - y on a circle of circumference mod by shortest path.
72 * 0 <= x < mod
73 * 0 <= y < mod
75 static inline int
76 modulo_subtract(int x, int y, int mod)
78 const int d1 = x - y;
79 const int d2 = (x > y ? -mod : mod) + d1;
80 ASSERT (0 <= x && x < mod && 0 <= y && y < mod);
81 return abs(d1) > abs(d2) ? d2 : d1;
85 * Return x + y on a circle of circumference mod.
87 * 0 <= x < mod
88 * -mod <= y <= mod
90 static inline int
91 modulo_add(int x, int y, int mod)
93 int sum = x + y;
94 ASSERT (0 <= x && x < mod && -mod <= y && y <= mod);
95 if (sum >= mod)
96 sum -= mod;
97 if (sum < 0)
98 sum += mod;
99 return sum;
102 static inline int
103 index_verify (int index, int size, const char *file, int line)
105 if (index < 0 || index >= size)
106 msg (M_FATAL, "Assertion Failed: Array index=%d out of bounds for array size=%d in %s:%d",
107 index,
108 size,
109 file,
110 line);
111 return index;
114 #endif