/* src/interfaces/ecpg/pgtypeslib/extern.h */

#ifndef __PGTYPES_COMMON_H__
#define __PGTYPES_COMMON_H__

#include "pgtypes_error.h"

/* These are the constants that decide which printf() format we'll use in
 * order to get a string representation of the value */
#define PGTYPES_TYPE_NOTHING			0
#define PGTYPES_TYPE_STRING_MALLOCED		1
#define PGTYPES_TYPE_STRING_CONSTANT		2
#define PGTYPES_TYPE_CHAR			3
#define PGTYPES_TYPE_DOUBLE_NF			4	/* no fractional part */
#define PGTYPES_TYPE_INT64			5
#define PGTYPES_TYPE_UINT			6
#define PGTYPES_TYPE_UINT_2_LZ			7	/* 2 digits, pad with leading zero */
#define PGTYPES_TYPE_UINT_2_LS			8	/* 2 digits, pad with leading
											 * space */
#define PGTYPES_TYPE_UINT_3_LZ			9
#define PGTYPES_TYPE_UINT_4_LZ			10
#define PGTYPES_TYPE_UINT_LONG			11

#define PGTYPES_FMT_NUM_MAX_DIGITS		40

union un_fmt_comb
{
	char	   *str_val;
	unsigned int uint_val;
	char		char_val;
	unsigned long int luint_val;
	double		double_val;
	int64		int64_val;
};

int			pgtypes_fmt_replace(union un_fmt_comb, int, char **, int *);

char	   *pgtypes_alloc(long);
char	   *pgtypes_strdup(const char *);

#ifndef bool
#define bool char
#endif							/* ndef bool */

#ifndef FALSE
#define FALSE	0
#endif							/* FALSE */

#ifndef TRUE
#define TRUE	   1
#endif							/* TRUE */

#endif							/* __PGTYPES_COMMON_H__ */
