#include "fmt.h"
#include "assert.h"
#include "mem.h"

#define T Integer_T
typedef int *T;

T Integer_new(int n) {
	T integer;

	NEW(integer);
	*integer = n;
	return integer;
}

int Integer_get(T integer) {
	assert(integer);
	return *integer;
}

int Integer_put(T integer, int n) {
	int prev;

	assert(integer);
	prev = *integer;
	*integer = n;
	return prev;
}

int Integer_cmp(T i1, T i2) {
	assert(i1);
	assert(i2);
	if (*i1 < *i2)
		return -1;
	else if (*i1 > *i2)
		return +1;
	else
		return 0;

}

void Integer_fmt(int code, va_list *app,
	int put(int c, void *cl), void *cl,
	unsigned char flags[], int width, int precision) {
	char buf[44];
	T integer;

	assert(app && flags);
	integer = va_arg(*app, T);
	assert(integer);
 	Fmt_putd(buf, Fmt_sfmt(buf, sizeof buf, "%d", *integer),
		put, cl, flags, width, precision);
}