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
|
/*Copyright (C) 2008-2009 Timothy B. Terriberry (tterribe@xiph.org)
You can redistribute this library and/or modify it under the terms of the
GNU Lesser General Public License as published by the Free Software
Foundation; either version 2.1 of the License, or (at your option) any later
version.*/
#if !defined(_qrcode_util_H)
#define _qrcode_util_H (1)
#define QR_MAXI(_a, _b) ((_a) - ((_a) - (_b) & -((_b) > (_a))))
#define QR_MINI(_a, _b) ((_a) + ((_b) - (_a) & -((_b) < (_a))))
#define QR_SIGNI(_x) (((_x) > 0) - ((_x) < 0))
#define QR_SIGNMASK(_x) (-((_x) < 0))
/*Unlike copysign(), simply inverts the sign of _a if _b is negative.*/
#define QR_FLIPSIGNI(_a, _b) ((_a) + QR_SIGNMASK(_b) ^ QR_SIGNMASK(_b))
#define QR_COPYSIGNI(_a, _b) QR_FLIPSIGNI(abs(_a), _b)
/*Divides a signed integer by a positive value with exact rounding.*/
#define QR_DIVROUND(_x, _y) (((_x) + QR_FLIPSIGNI(_y >> 1, _x)) / (_y))
#define QR_CLAMPI(_a, _b, _c) (QR_MAXI(_a, QR_MINI(_b, _c)))
#define QR_CLAMP255(_x) \
((unsigned char)((((_x) < 0) - 1) & ((_x) | -((_x) > 255))))
#define QR_SWAP2I(_a, _b) \
do { \
int t__; \
t__ = (_a); \
(_a) = (_b); \
(_b) = t__; \
} while (0)
/*Swaps two integers _a and _b if _a>_b.*/
#define QR_SORT2I(_a, _b) \
do { \
int t__; \
t__ = QR_MINI(_a, _b) ^ (_a); \
(_a) ^= t__; \
(_b) ^= t__; \
} while (0)
#define QR_ILOG0(_v) (!!((_v)&0x2))
#define QR_ILOG1(_v) (((_v)&0xC) ? 2 + QR_ILOG0((_v) >> 2) : QR_ILOG0(_v))
#define QR_ILOG2(_v) (((_v)&0xF0) ? 4 + QR_ILOG1((_v) >> 4) : QR_ILOG1(_v))
#define QR_ILOG3(_v) (((_v)&0xFF00) ? 8 + QR_ILOG2((_v) >> 8) : QR_ILOG2(_v))
#define QR_ILOG4(_v) \
(((_v)&0xFFFF0000) ? 16 + QR_ILOG3((_v) >> 16) : QR_ILOG3(_v))
/*Computes the integer logarithm of a (positive, 32-bit) constant.*/
#define QR_ILOG(_v) ((int)QR_ILOG4((unsigned)(_v)))
/*Multiplies 32-bit numbers _a and _b, adds (possibly 64-bit) number _r, and
takes bits [_s,_s+31] of the result.*/
#define QR_FIXMUL(_a, _b, _r, _s) ((int)((_a) * (long long)(_b) + (_r) >> (_s)))
/*Multiplies 32-bit numbers _a and _b, adds (possibly 64-bit) number _r, and
gives all 64 bits of the result.*/
#define QR_EXTMUL(_a, _b, _r) ((_a) * (long long)(_b) + (_r))
unsigned qr_isqrt(unsigned _val);
unsigned qr_ihypot(int _x, int _y);
int qr_ilog(unsigned _val);
#endif
|