annotate mercurial/util.h @ 19826:4b1cbcfdabf7

mq: extract strip function as its standalone extension (issue3824) Strip now lives in its own extension reminder: The extension is surprisingly called `strip`. The `mq` extension force the use of the strip extension when its enabled. This is both necessary for backward compatibility (people expect `mq` to comes with strip) and become some utility function used by `mq` are now in the strip extension.
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Thu, 26 Sep 2013 23:57:21 +0200
parents 2c9645c0a582
children 1935e8383a9e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11358
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
1 /*
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
2 util.h - utility functions for interfacing with the various python APIs.
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
3
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
4 This software may be used and distributed according to the terms of
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
5 the GNU General Public License, incorporated herein by reference.
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
6 */
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
7
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
8 #ifndef _HG_UTIL_H_
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
9 #define _HG_UTIL_H_
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
10
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
11 #if PY_MAJOR_VERSION >= 3
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
12
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
13 #define IS_PY3K
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
14 #define PyInt_FromLong PyLong_FromLong
11534
9777a3b19efe util.h: Add a PyInt_AsLong definition for usage in the inotify module.
Renato Cunha <renatoc@gmail.com>
parents: 11358
diff changeset
15 #define PyInt_AsLong PyLong_AsLong
11358
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
16
11535
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
17 /*
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
18 Mapping of some of the python < 2.x PyString* functions to py3k's PyUnicode.
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
19
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
20 The commented names below represent those that are present in the PyBytes
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
21 definitions for python < 2.6 (below in this file) that don't have a direct
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
22 implementation.
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
23 */
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
24
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
25 #define PyStringObject PyUnicodeObject
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
26 #define PyString_Type PyUnicode_Type
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
27
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
28 #define PyString_Check PyUnicode_Check
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
29 #define PyString_CheckExact PyUnicode_CheckExact
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
30 #define PyString_CHECK_INTERNED PyUnicode_CHECK_INTERNED
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
31 #define PyString_AS_STRING PyUnicode_AsLatin1String
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
32 #define PyString_GET_SIZE PyUnicode_GET_SIZE
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
33
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
34 #define PyString_FromStringAndSize PyUnicode_FromStringAndSize
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
35 #define PyString_FromString PyUnicode_FromString
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
36 #define PyString_FromFormatV PyUnicode_FromFormatV
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
37 #define PyString_FromFormat PyUnicode_FromFormat
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
38 /* #define PyString_Size PyUnicode_GET_SIZE */
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
39 /* #define PyString_AsString */
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
40 /* #define PyString_Repr */
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
41 #define PyString_Concat PyUnicode_Concat
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
42 #define PyString_ConcatAndDel PyUnicode_AppendAndDel
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
43 #define _PyString_Resize PyUnicode_Resize
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
44 /* #define _PyString_Eq */
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
45 #define PyString_Format PyUnicode_Format
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
46 /* #define _PyString_FormatLong */
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
47 /* #define PyString_DecodeEscape */
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
48 #define _PyString_Join PyUnicode_Join
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
49 #define PyString_Decode PyUnicode_Decode
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
50 #define PyString_Encode PyUnicode_Encode
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
51 #define PyString_AsEncodedObject PyUnicode_AsEncodedObject
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
52 #define PyString_AsEncodedString PyUnicode_AsEncodedString
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
53 #define PyString_AsDecodedObject PyUnicode_AsDecodedObject
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
54 #define PyString_AsDecodedString PyUnicode_AsDecodedUnicode
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
55 /* #define PyString_AsStringAndSize */
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
56 #define _PyString_InsertThousandsGrouping _PyUnicode_InsertThousandsGrouping
09cb56b760b4 util.h: Defined macros for working "with" PyStrings in py3k.
Renato Cunha <renatoc@gmail.com>
parents: 11534
diff changeset
57
11358
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
58 #endif /* PY_MAJOR_VERSION */
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
59
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
60 /* Backports from 2.6 */
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
61 #if PY_VERSION_HEX < 0x02060000
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
62
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
63 #define Py_TYPE(ob) (ob)->ob_type
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
64 #define Py_SIZE(ob) (ob)->ob_size
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
65 #define PyVarObject_HEAD_INIT(type, size) PyObject_HEAD_INIT(type) size,
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
66
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
67 /* Shamelessly stolen from bytesobject.h */
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
68 #define PyBytesObject PyStringObject
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
69 #define PyBytes_Type PyString_Type
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
70
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
71 #define PyBytes_Check PyString_Check
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
72 #define PyBytes_CheckExact PyString_CheckExact
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
73 #define PyBytes_CHECK_INTERNED PyString_CHECK_INTERNED
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
74 #define PyBytes_AS_STRING PyString_AS_STRING
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
75 #define PyBytes_GET_SIZE PyString_GET_SIZE
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
76 #define Py_TPFLAGS_BYTES_SUBCLASS Py_TPFLAGS_STRING_SUBCLASS
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
77
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
78 #define PyBytes_FromStringAndSize PyString_FromStringAndSize
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
79 #define PyBytes_FromString PyString_FromString
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
80 #define PyBytes_FromFormatV PyString_FromFormatV
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
81 #define PyBytes_FromFormat PyString_FromFormat
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
82 #define PyBytes_Size PyString_Size
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
83 #define PyBytes_AsString PyString_AsString
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
84 #define PyBytes_Repr PyString_Repr
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
85 #define PyBytes_Concat PyString_Concat
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
86 #define PyBytes_ConcatAndDel PyString_ConcatAndDel
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
87 #define _PyBytes_Resize _PyString_Resize
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
88 #define _PyBytes_Eq _PyString_Eq
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
89 #define PyBytes_Format PyString_Format
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
90 #define _PyBytes_FormatLong _PyString_FormatLong
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
91 #define PyBytes_DecodeEscape PyString_DecodeEscape
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
92 #define _PyBytes_Join _PyString_Join
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
93 #define PyBytes_Decode PyString_Decode
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
94 #define PyBytes_Encode PyString_Encode
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
95 #define PyBytes_AsEncodedObject PyString_AsEncodedObject
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
96 #define PyBytes_AsEncodedString PyString_AsEncodedString
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
97 #define PyBytes_AsDecodedObject PyString_AsDecodedObject
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
98 #define PyBytes_AsDecodedString PyString_AsDecodedString
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
99 #define PyBytes_AsStringAndSize PyString_AsStringAndSize
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
100 #define _PyBytes_InsertThousandsGrouping _PyString_InsertThousandsGrouping
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
101
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
102 #endif /* PY_VERSION_HEX */
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
103
16382
f542d291c4f2 util.h: add a typedef for Py_ssize_t with Python 2.4
Matt Mackall <mpm@selenic.com>
parents: 13302
diff changeset
104 #if (PY_VERSION_HEX < 0x02050000)
16384
8d821a173e4e util.h: move Py_ssize_t bits from mpatch.c
Matt Mackall <mpm@selenic.com>
parents: 16382
diff changeset
105 /* Definitions to get compatibility with python 2.4 and earlier which
8d821a173e4e util.h: move Py_ssize_t bits from mpatch.c
Matt Mackall <mpm@selenic.com>
parents: 16382
diff changeset
106 does not have Py_ssize_t. See also PEP 353.
8d821a173e4e util.h: move Py_ssize_t bits from mpatch.c
Matt Mackall <mpm@selenic.com>
parents: 16382
diff changeset
107 Note: msvc (8 or earlier) does not have ssize_t, so we use Py_ssize_t.
8d821a173e4e util.h: move Py_ssize_t bits from mpatch.c
Matt Mackall <mpm@selenic.com>
parents: 16382
diff changeset
108 */
16382
f542d291c4f2 util.h: add a typedef for Py_ssize_t with Python 2.4
Matt Mackall <mpm@selenic.com>
parents: 13302
diff changeset
109 typedef int Py_ssize_t;
16393
ee163a9cf37c util.h: more Python 2.4 fixes
Matt Mackall <mpm@selenic.com>
parents: 16385
diff changeset
110 typedef Py_ssize_t (*lenfunc)(PyObject *);
ee163a9cf37c util.h: more Python 2.4 fixes
Matt Mackall <mpm@selenic.com>
parents: 16385
diff changeset
111 typedef PyObject *(*ssizeargfunc)(PyObject *, Py_ssize_t);
16629
1435866c1937 parser: use PyInt_FromSsize_t in index_stats
Adrian Buehlmann <adrian@cadifra.com>
parents: 16437
diff changeset
112 #define PyInt_FromSsize_t PyInt_FromLong
16393
ee163a9cf37c util.h: more Python 2.4 fixes
Matt Mackall <mpm@selenic.com>
parents: 16385
diff changeset
113
16384
8d821a173e4e util.h: move Py_ssize_t bits from mpatch.c
Matt Mackall <mpm@selenic.com>
parents: 16382
diff changeset
114 #if !defined(PY_SSIZE_T_MIN)
8d821a173e4e util.h: move Py_ssize_t bits from mpatch.c
Matt Mackall <mpm@selenic.com>
parents: 16382
diff changeset
115 #define PY_SSIZE_T_MAX INT_MAX
8d821a173e4e util.h: move Py_ssize_t bits from mpatch.c
Matt Mackall <mpm@selenic.com>
parents: 16382
diff changeset
116 #define PY_SSIZE_T_MIN INT_MIN
8d821a173e4e util.h: move Py_ssize_t bits from mpatch.c
Matt Mackall <mpm@selenic.com>
parents: 16382
diff changeset
117 #endif
16382
f542d291c4f2 util.h: add a typedef for Py_ssize_t with Python 2.4
Matt Mackall <mpm@selenic.com>
parents: 13302
diff changeset
118 #endif
f542d291c4f2 util.h: add a typedef for Py_ssize_t with Python 2.4
Matt Mackall <mpm@selenic.com>
parents: 13302
diff changeset
119
16385
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
120 #ifdef _WIN32
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
121 #ifdef _MSC_VER
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
122 /* msvc 6.0 has problems */
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
123 #define inline __inline
19723
7999f4fa155a util.h: add stdint basic type definitions
Wei, Elson <elson.wei@gmail.com>
parents: 17616
diff changeset
124 typedef signed char int8_t;
7999f4fa155a util.h: add stdint basic type definitions
Wei, Elson <elson.wei@gmail.com>
parents: 17616
diff changeset
125 typedef short int16_t;
7999f4fa155a util.h: add stdint basic type definitions
Wei, Elson <elson.wei@gmail.com>
parents: 17616
diff changeset
126 typedef long int32_t;
7999f4fa155a util.h: add stdint basic type definitions
Wei, Elson <elson.wei@gmail.com>
parents: 17616
diff changeset
127 typedef __int64 int64_t;
17616
9535a0dc41f2 store: implement fncache basic path encoding in C
Bryan O'Sullivan <bryano@fb.com>
parents: 16629
diff changeset
128 typedef unsigned char uint8_t;
19723
7999f4fa155a util.h: add stdint basic type definitions
Wei, Elson <elson.wei@gmail.com>
parents: 17616
diff changeset
129 typedef unsigned short uint16_t;
16385
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
130 typedef unsigned long uint32_t;
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
131 typedef unsigned __int64 uint64_t;
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
132 #else
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
133 #include <stdint.h>
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
134 #endif
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
135 #else
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
136 /* not windows */
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
137 #include <sys/types.h>
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
138 #if defined __BEOS__ && !defined __HAIKU__
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
139 #include <ByteOrder.h>
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
140 #else
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
141 #include <arpa/inet.h>
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
142 #endif
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
143 #include <inttypes.h>
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
144 #endif
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
145
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
146 #if defined __hpux || defined __SUNPRO_C || defined _AIX
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
147 #define inline
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
148 #endif
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
149
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
150 #ifdef __linux
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
151 #define inline __inline
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
152 #endif
e501f45b0eba util.h: unify some common platform tweaks
Matt Mackall <mpm@selenic.com>
parents: 16384
diff changeset
153
19744
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
154 #if defined(_MSC_VER) && (_MSC_VER >= 1300)
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
155 static inline uint32_t getbe32(const char *c)
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
156 {
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
157 return _byteswap_ulong(*(uint32_t *)c);
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
158 }
19753
2c9645c0a582 util.h: fix gcc version checking
Siddharth Agarwal <sid0@fb.com>
parents: 19744
diff changeset
159 #elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
19744
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
160 static inline uint32_t getbe32(const char *c)
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
161 {
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
162 return __builtin_bswap32(*(uint32_t *)c);
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
163 }
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
164 #else
16437
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
165 static inline uint32_t getbe32(const char *c)
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
166 {
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
167 const unsigned char *d = (const unsigned char *)c;
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
168
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
169 return ((d[0] << 24) |
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
170 (d[1] << 16) |
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
171 (d[2] << 8) |
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
172 (d[3]));
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
173 }
19744
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
174 #endif
16437
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
175
19744
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
176 #if defined(_MSC_VER) && (_MSC_VER >= 1300)
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
177 static inline void putbe32(uint32_t x, char *c)
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
178 {
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
179 x = _byteswap_ulong(x);
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
180 *(uint32_t *)c = x;
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
181 }
19753
2c9645c0a582 util.h: fix gcc version checking
Siddharth Agarwal <sid0@fb.com>
parents: 19744
diff changeset
182 #elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
19744
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
183 static inline void putbe32(uint32_t x, char *c)
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
184 {
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
185 x = __builtin_bswap32(x);
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
186 *(uint32_t *)c = x;
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
187 }
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
188 #else
16437
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
189 static inline void putbe32(uint32_t x, char *c)
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
190 {
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
191 c[0] = (x >> 24) & 0xff;
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
192 c[1] = (x >> 16) & 0xff;
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
193 c[2] = (x >> 8) & 0xff;
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
194 c[3] = (x) & 0xff;
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
195 }
19744
06badf7d10dc util.h: getbe32() and putbe32() use intrinsic function to improve performance
Wei, Elson <elson.wei@gmail.com>
parents: 19723
diff changeset
196 #endif
16437
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
197
11358
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
198 #endif /* _HG_UTIL_H_ */