view mercurial/cext/util.h @ 34900:3a3adbcbd3a0

obsfate: rename obsfate into obsolete in changeset_printer Yuja's comment on the original obsfate about how we would translate obsfate and the recent discussions about exposing users to new concepts and names lead have led me to think that 'obsfate' should be treated as internal jargon. End- users should not be aware of obsfate, so we replace 'obsfate' by 'obsolete' in changeset_printer. It will be easier to understand for end-users, easier to translate and closer to the original Evolve obsfate output. I'm aware it's extremely late in the cycle but I think it's an UX improvement for the end-users. Differential Revision: https://phab.mercurial-scm.org/D1189
author Boris Feld <boris.feld@octobus.net>
date Thu, 19 Oct 2017 12:32:42 +0200
parents 3455e2e2ce9b
children 440e8fce29e7
line wrap: on
line source

/*
 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

/* clang-format off */
typedef struct {
	PyObject_HEAD
	char state;
	int mode;
	int size;
	int mtime;
} dirstateTupleObject;
/* clang-format on */

extern PyTypeObject dirstateTupleType;
#define dirstate_tuple_check(op) (Py_TYPE(op) == &dirstateTupleType)

#define MIN(a, b) (((a) < (b)) ? (a) : (b))
/* 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

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);
}

#endif /* _HG_UTIL_H_ */