util.h
52 lines
| 1.5 KiB
| text/x-c
|
CLexer
Yuya Nishihara
|
r32384 | /* | ||
util.h - utility functions for interfacing with the various python APIs. | ||||
This software may be used and distributed according to the terms of | ||||
the GNU General Public License, incorporated herein by reference. | ||||
*/ | ||||
#ifndef _HG_UTIL_H_ | ||||
#define _HG_UTIL_H_ | ||||
#include "compat.h" | ||||
#if PY_MAJOR_VERSION >= 3 | ||||
#define IS_PY3K | ||||
#endif | ||||
Augie Fackler
|
r34636 | /* clang-format off */ | ||
Yuya Nishihara
|
r32384 | typedef struct { | ||
PyObject_HEAD | ||||
char state; | ||||
int mode; | ||||
int size; | ||||
int mtime; | ||||
} dirstateTupleObject; | ||||
Augie Fackler
|
r34636 | /* clang-format on */ | ||
Yuya Nishihara
|
r32384 | |||
extern PyTypeObject dirstateTupleType; | ||||
#define dirstate_tuple_check(op) (Py_TYPE(op) == &dirstateTupleType) | ||||
Augie Fackler
|
r34636 | #define MIN(a, b) (((a) < (b)) ? (a) : (b)) | ||
Yuya Nishihara
|
r32384 | /* VC9 doesn't include bool and lacks stdbool.h based on my searching */ | ||
#if defined(_MSC_VER) || __STDC_VERSION__ < 199901L | ||||
#define true 1 | ||||
#define false 0 | ||||
typedef unsigned char bool; | ||||
#else | ||||
#include <stdbool.h> | ||||
#endif | ||||
Yuya Nishihara
|
r33751 | static inline PyObject *_dict_new_presized(Py_ssize_t expected_size) | ||
{ | ||||
/* _PyDict_NewPresized expects a minused parameter, but it actually | ||||
creates a dictionary that's the nearest power of two bigger than the | ||||
parameter. For example, with the initial minused = 1000, the | ||||
dictionary created has size 1024. Of course in a lot of cases that | ||||
can be greater than the maximum load factor Python's dict object | ||||
expects (= 2/3), so as soon as we cross the threshold we'll resize | ||||
anyway. So create a dictionary that's at least 3/2 the size. */ | ||||
return _PyDict_NewPresized(((1 + expected_size) / 2) * 3); | ||||
} | ||||
Yuya Nishihara
|
r32384 | #endif /* _HG_UTIL_H_ */ | ||