mercurial/util.h
changeset 29444 284d742e5611
parent 25076 14bf7679fb68
child 30091 d576b7394646
equal deleted inserted replaced
29443:cf092a3d202a 29444:284d742e5611
     5  the GNU General Public License, incorporated herein by reference.
     5  the GNU General Public License, incorporated herein by reference.
     6 */
     6 */
     7 
     7 
     8 #ifndef _HG_UTIL_H_
     8 #ifndef _HG_UTIL_H_
     9 #define _HG_UTIL_H_
     9 #define _HG_UTIL_H_
       
    10 
       
    11 #include "compat.h"
    10 
    12 
    11 #if PY_MAJOR_VERSION >= 3
    13 #if PY_MAJOR_VERSION >= 3
    12 
    14 
    13 #define IS_PY3K
    15 #define IS_PY3K
    14 #define PyInt_FromLong PyLong_FromLong
    16 #define PyInt_FromLong PyLong_FromLong
    55 /* #define PyString_AsStringAndSize */
    57 /* #define PyString_AsStringAndSize */
    56 #define _PyString_InsertThousandsGrouping _PyUnicode_InsertThousandsGrouping
    58 #define _PyString_InsertThousandsGrouping _PyUnicode_InsertThousandsGrouping
    57 
    59 
    58 #endif /* PY_MAJOR_VERSION */
    60 #endif /* PY_MAJOR_VERSION */
    59 
    61 
    60 #ifdef _WIN32
       
    61 #ifdef _MSC_VER
       
    62 /* msvc 6.0 has problems */
       
    63 #define inline __inline
       
    64 typedef signed char int8_t;
       
    65 typedef short int16_t;
       
    66 typedef long int32_t;
       
    67 typedef __int64 int64_t;
       
    68 typedef unsigned char uint8_t;
       
    69 typedef unsigned short uint16_t;
       
    70 typedef unsigned long uint32_t;
       
    71 typedef unsigned __int64 uint64_t;
       
    72 #else
       
    73 #include <stdint.h>
       
    74 #endif
       
    75 #else
       
    76 /* not windows */
       
    77 #include <sys/types.h>
       
    78 #if defined __BEOS__ && !defined __HAIKU__
       
    79 #include <ByteOrder.h>
       
    80 #else
       
    81 #include <arpa/inet.h>
       
    82 #endif
       
    83 #include <inttypes.h>
       
    84 #endif
       
    85 
       
    86 #if defined __hpux || defined __SUNPRO_C || defined _AIX
       
    87 #define inline
       
    88 #endif
       
    89 
       
    90 #ifdef __linux
       
    91 #define inline __inline
       
    92 #endif
       
    93 
       
    94 typedef struct {
    62 typedef struct {
    95 	PyObject_HEAD
    63 	PyObject_HEAD
    96 	char state;
    64 	char state;
    97 	int mode;
    65 	int mode;
    98 	int size;
    66 	int size;
    99 	int mtime;
    67 	int mtime;
   100 } dirstateTupleObject;
    68 } dirstateTupleObject;
   101 
    69 
   102 extern PyTypeObject dirstateTupleType;
    70 extern PyTypeObject dirstateTupleType;
   103 #define dirstate_tuple_check(op) (Py_TYPE(op) == &dirstateTupleType)
    71 #define dirstate_tuple_check(op) (Py_TYPE(op) == &dirstateTupleType)
   104 
       
   105 static inline uint32_t getbe32(const char *c)
       
   106 {
       
   107 	const unsigned char *d = (const unsigned char *)c;
       
   108 
       
   109 	return ((d[0] << 24) |
       
   110 		(d[1] << 16) |
       
   111 		(d[2] << 8) |
       
   112 		(d[3]));
       
   113 }
       
   114 
       
   115 static inline int16_t getbeint16(const char *c)
       
   116 {
       
   117 	const unsigned char *d = (const unsigned char *)c;
       
   118 
       
   119 	return ((d[0] << 8) |
       
   120 		(d[1]));
       
   121 }
       
   122 
       
   123 static inline uint16_t getbeuint16(const char *c)
       
   124 {
       
   125 	const unsigned char *d = (const unsigned char *)c;
       
   126 
       
   127 	return ((d[0] << 8) |
       
   128 		(d[1]));
       
   129 }
       
   130 
       
   131 static inline void putbe32(uint32_t x, char *c)
       
   132 {
       
   133 	c[0] = (x >> 24) & 0xff;
       
   134 	c[1] = (x >> 16) & 0xff;
       
   135 	c[2] = (x >> 8) & 0xff;
       
   136 	c[3] = (x) & 0xff;
       
   137 }
       
   138 
       
   139 static inline double getbefloat64(const char *c)
       
   140 {
       
   141 	const unsigned char *d = (const unsigned char *)c;
       
   142 	double ret;
       
   143 	int i;
       
   144 	uint64_t t = 0;
       
   145 	for (i = 0; i < 8; i++) {
       
   146 		t = (t<<8) + d[i];
       
   147 	}
       
   148 	memcpy(&ret, &t, sizeof(t));
       
   149 	return ret;
       
   150 }
       
   151 
    72 
   152 /* This should be kept in sync with normcasespecs in encoding.py. */
    73 /* This should be kept in sync with normcasespecs in encoding.py. */
   153 enum normcase_spec {
    74 enum normcase_spec {
   154 	NORMCASE_LOWER = -1,
    75 	NORMCASE_LOWER = -1,
   155 	NORMCASE_UPPER = 1,
    76 	NORMCASE_UPPER = 1,