mercurial/util.h
author Laurent Charignon <lcharignon@fb.com>
Tue, 24 Mar 2015 11:00:09 -0700
changeset 24443 539b3c7eea44
parent 24442 98042b0e19f9
child 24608 1c533e23ce95
permissions -rw-r--r--
phase: compute phases in C Previously, the phase computation would grow much slower as the oldest draft commit in the repository grew older (which is very common in repos with evolve on) and the number of commits increase. By rewriting the computation in C we can speed it up from 700ms to 7ms on a large repository whose oldest draft commit is a year old.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
21809
e250b8300e6e parsers: inline fields of dirstate values in C version
Siddharth Agarwal <sid0@fb.com>
parents: 19833
diff changeset
   154
typedef struct {
e250b8300e6e parsers: inline fields of dirstate values in C version
Siddharth Agarwal <sid0@fb.com>
parents: 19833
diff changeset
   155
	PyObject_HEAD
e250b8300e6e parsers: inline fields of dirstate values in C version
Siddharth Agarwal <sid0@fb.com>
parents: 19833
diff changeset
   156
	char state;
e250b8300e6e parsers: inline fields of dirstate values in C version
Siddharth Agarwal <sid0@fb.com>
parents: 19833
diff changeset
   157
	int mode;
e250b8300e6e parsers: inline fields of dirstate values in C version
Siddharth Agarwal <sid0@fb.com>
parents: 19833
diff changeset
   158
	int size;
e250b8300e6e parsers: inline fields of dirstate values in C version
Siddharth Agarwal <sid0@fb.com>
parents: 19833
diff changeset
   159
	int mtime;
e250b8300e6e parsers: inline fields of dirstate values in C version
Siddharth Agarwal <sid0@fb.com>
parents: 19833
diff changeset
   160
} dirstateTupleObject;
e250b8300e6e parsers: inline fields of dirstate values in C version
Siddharth Agarwal <sid0@fb.com>
parents: 19833
diff changeset
   161
21838
0022ee690446 util.h: declare dirstateTupleType variable instead of defining it
André Sintzoff <andre.sintzoff@gmail.com>
parents: 21809
diff changeset
   162
extern PyTypeObject dirstateTupleType;
21809
e250b8300e6e parsers: inline fields of dirstate values in C version
Siddharth Agarwal <sid0@fb.com>
parents: 19833
diff changeset
   163
#define dirstate_tuple_check(op) (Py_TYPE(op) == &dirstateTupleType)
e250b8300e6e parsers: inline fields of dirstate values in C version
Siddharth Agarwal <sid0@fb.com>
parents: 19833
diff changeset
   164
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
}
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
   174
24015
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   175
static inline int16_t getbeint16(const char *c)
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   176
{
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   177
	const unsigned char *d = (const unsigned char *)c;
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   178
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   179
	return ((d[0] << 8) |
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   180
		(d[1]));
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   181
}
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   182
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   183
static inline uint16_t getbeuint16(const char *c)
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   184
{
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   185
	const unsigned char *d = (const unsigned char *)c;
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   186
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   187
	return ((d[0] << 8) |
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   188
		(d[1]));
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   189
}
e2bf959a5a0d util: add getbe{u,}int16 utility methods
Augie Fackler <augie@google.com>
parents: 21838
diff changeset
   190
16437
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
   191
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
   192
{
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
   193
	c[0] = (x >> 24) & 0xff;
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
   194
	c[1] = (x >> 16) & 0xff;
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
   195
	c[2] = (x >> 8) & 0xff;
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
   196
	c[3] = (x) & 0xff;
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
   197
}
d126a0d16856 util.h: replace ntohl/htonl with get/putbe32
Matt Mackall <mpm@selenic.com>
parents: 16393
diff changeset
   198
24016
fb93721cc229 util: add getbefloat64
Augie Fackler <augie@google.com>
parents: 24015
diff changeset
   199
static inline double getbefloat64(const char *c)
fb93721cc229 util: add getbefloat64
Augie Fackler <augie@google.com>
parents: 24015
diff changeset
   200
{
fb93721cc229 util: add getbefloat64
Augie Fackler <augie@google.com>
parents: 24015
diff changeset
   201
	const unsigned char *d = (const unsigned char *)c;
fb93721cc229 util: add getbefloat64
Augie Fackler <augie@google.com>
parents: 24015
diff changeset
   202
	double ret;
fb93721cc229 util: add getbefloat64
Augie Fackler <augie@google.com>
parents: 24015
diff changeset
   203
	int i;
fb93721cc229 util: add getbefloat64
Augie Fackler <augie@google.com>
parents: 24015
diff changeset
   204
	uint64_t t = 0;
fb93721cc229 util: add getbefloat64
Augie Fackler <augie@google.com>
parents: 24015
diff changeset
   205
	for (i = 0; i < 8; i++) {
fb93721cc229 util: add getbefloat64
Augie Fackler <augie@google.com>
parents: 24015
diff changeset
   206
		t = (t<<8) + d[i];
fb93721cc229 util: add getbefloat64
Augie Fackler <augie@google.com>
parents: 24015
diff changeset
   207
	}
fb93721cc229 util: add getbefloat64
Augie Fackler <augie@google.com>
parents: 24015
diff changeset
   208
	memcpy(&ret, &t, sizeof(t));
fb93721cc229 util: add getbefloat64
Augie Fackler <augie@google.com>
parents: 24015
diff changeset
   209
	return ret;
fb93721cc229 util: add getbefloat64
Augie Fackler <augie@google.com>
parents: 24015
diff changeset
   210
}
fb93721cc229 util: add getbefloat64
Augie Fackler <augie@google.com>
parents: 24015
diff changeset
   211
24443
539b3c7eea44 phase: compute phases in C
Laurent Charignon <lcharignon@fb.com>
parents: 24442
diff changeset
   212
#define MIN(a, b) (((a)<(b))?(a):(b))
24442
98042b0e19f9 manifest: move C bool polyfill into util.h
Matt Mackall <mpm@selenic.com>
parents: 24016
diff changeset
   213
/* VC9 doesn't include bool and lacks stdbool.h based on my searching */
98042b0e19f9 manifest: move C bool polyfill into util.h
Matt Mackall <mpm@selenic.com>
parents: 24016
diff changeset
   214
#ifdef _MSC_VER
98042b0e19f9 manifest: move C bool polyfill into util.h
Matt Mackall <mpm@selenic.com>
parents: 24016
diff changeset
   215
#define true 1
98042b0e19f9 manifest: move C bool polyfill into util.h
Matt Mackall <mpm@selenic.com>
parents: 24016
diff changeset
   216
#define false 0
98042b0e19f9 manifest: move C bool polyfill into util.h
Matt Mackall <mpm@selenic.com>
parents: 24016
diff changeset
   217
typedef unsigned char bool;
98042b0e19f9 manifest: move C bool polyfill into util.h
Matt Mackall <mpm@selenic.com>
parents: 24016
diff changeset
   218
#else
98042b0e19f9 manifest: move C bool polyfill into util.h
Matt Mackall <mpm@selenic.com>
parents: 24016
diff changeset
   219
#include <stdbool.h>
98042b0e19f9 manifest: move C bool polyfill into util.h
Matt Mackall <mpm@selenic.com>
parents: 24016
diff changeset
   220
#endif
98042b0e19f9 manifest: move C bool polyfill into util.h
Matt Mackall <mpm@selenic.com>
parents: 24016
diff changeset
   221
11358
4494fb02d549 util.h: Utility macros for handling different Python APIs.
Renato Cunha <renatoc@gmail.com>
parents:
diff changeset
   222
#endif /* _HG_UTIL_H_ */