/* %Z%%M% %I% %E% */

/*
 * Copyright (c) 1993-2005 by Wayne C. Gramlich.
 * All rights reserved.
 */

/*
 * This file implements the integer base type operations in ANSI-C.
 */

#ifndef ERROR_EXPORTS_H
#include "error_exports.h"
#endif

#ifndef STHEADERS_H
#include "stheaders.h"
#endif

#ifndef UNIX_ASSERT_H
#include "unix_assert.h"
#endif

int integer__one = 1;

int integer__zero = 0;

int integer___initial = 0;

extern module___object integer__module__object;
extern type___reference integer_type_ref;

static object___object integer_initial_object = {
	"",				/* Package name */
	"integer",			/* Type name */
	"??",				/* Object name */
	(type___reference *)0,		/* Fix me */
	(int *)0,			/* Size of integer object */
	0,				/* Static needs count */
	(need___entry *)0,		/* Static needs */
	0,				/* Parameter needs count */
	(need___entry *)0,		/* Parameter needs */
	(void **)&integer___initial,	/* Object pointer */
	(instantiation___object *)0	/* Instantiation list */
};
static object___object *object_list[1] = {
	&integer_initial_object,
};

void
integer__external__initialize(void)
{
	integer__module__object.object_count = 1;
	integer__module__object.objects = object_list;
}

int
integer__add(
	int		left,
	int		right)
{
	return left + right;
}

int
integer__and(
	int		left,
	int		right)
{
	return left & right;
}

unsigned
integer__character_convert(
	int		arg)
{
	return (unsigned)arg;
}
		      

int
integer__copy(
	int		arg)
{
	return arg;
}

int
integer__divide(
	int		left,
	int		right)
{
	return left / right;
}

int
integer__equal(
	int		left,
	int		right)
{
	return left == right;
}

int
integer__greater_than(
	int		left,
	int		right)
{
	return left > right;
}

int
integer__hash(
	int		arg)
{
	return arg;
}

int
integer__is_negative(
	int		integer)
{
	return (integer < 0);
}

int
integer__left_shift(
	int		left,
	int		right)
{
	return left << right;
}

int
integer__less_than(
	int		left,
	int		right)
{
	return left < right;
}

int
integer__minus(
	int		arg)
{
	return -arg;
}

int
integer__multiply(
	int		left,
	int		right)
{
	return left * right;
}

int
integer__not(
	int		arg)
{
	return ~arg;
}

int
integer__or(
	int		left,
	int		right)
{
	return left | right;
}

int
integer__power(
	int		left,
	int		right)
{
	error_fatal("integer__power not implemented yet");
	return 0;
}

int
integer__remainder(
	int		left,
	int		right)
{
	return left % right;
}

int
integer__right_shift(
	int		left,
	int		right)
{
	return left >> right;
}

int
integer__subtract(
	int		left,
	int		right)
{
	return left - right;
}

unsigned
integer__unsigned_convert(
	int		integer)
{
	return (unsigned)integer;
}

int
integer__xor(
	int		left,
	int		right)
{
	return left ^ right;
}

