[BACK]Return to varint.sql.in CVS log [TXT][DIR] Up to [pgFoundry] / varint / varint

File: [pgFoundry] / varint / varint / varint.sql.in (download)

Revision 1.1, Sun Sep 21 05:41:01 2008 UTC (23 months, 1 week ago) by jeremyd
Branch: MAIN

Initial commit of an arbitrary precision unsigned integer data type with
bitwise operators.

The following operators are implemented so far (not optimally, but I'm not
worried about that yet):
& (bitwise and)
| (bitwise or)
^ (bitwise xor)
<< (bitwise left shift)
>> (bitwise right shift)
+ (arithmetic add)
- (arithmetic subtract)
* (arithmetic multiply)

I plan to implement comparison operators and division next.

-- vim: set ft=psql :

CREATE TYPE varint;

CREATE OR REPLACE FUNCTION varint_in(cstring, oid, int4)
	RETURNS varint AS 'MODULE_PATHNAME', 'varint_in'
	LANGUAGE C IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION varint_out(varint)
	RETURNS cstring AS 'MODULE_PATHNAME', 'varint_out'
	LANGUAGE C IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION varinttypmodin(cstring[])
	RETURNS int4 AS 'MODULE_PATHNAME', 'varinttypmodin'
	LANGUAGE C IMMUTABLE STRICT;

CREATE OR REPLACE FUNCTION varinttypmodout(int4)
	RETURNS cstring AS 'MODULE_PATHNAME', 'varinttypmodout'
	LANGUAGE C IMMUTABLE STRICT;

CREATE TYPE varint (
	INPUT = varint_in,
	OUTPUT = varint_out,
	TYPMOD_IN = varinttypmodin,
	TYPMOD_OUT = varinttypmodout,
	INTERNALLENGTH = VARIABLE,
	ALIGNMENT = double
);

CREATE OR REPLACE FUNCTION varintand(varint, varint)
	RETURNS varint AS 'MODULE_PATHNAME', 'varintand'
	LANGUAGE C IMMUTABLE STRICT;

CREATE OPERATOR & (
	PROCEDURE = varintand,
	LEFTARG = varint,
	RIGHTARG = varint,
	COMMUTATOR = &
);

CREATE OR REPLACE FUNCTION varintor(varint, varint)
	RETURNS varint AS 'MODULE_PATHNAME', 'varintor'
	LANGUAGE C IMMUTABLE STRICT;

CREATE OPERATOR | (
	PROCEDURE = varintor,
	LEFTARG = varint,
	RIGHTARG = varint,
	COMMUTATOR = |
);

CREATE OR REPLACE FUNCTION varintxor(varint, varint)
	RETURNS varint AS 'MODULE_PATHNAME', 'varintxor'
	LANGUAGE C IMMUTABLE STRICT;

CREATE OPERATOR ^ (
	PROCEDURE = varintxor,
	LEFTARG = varint,
	RIGHTARG = varint,
	COMMUTATOR = ^
);

CREATE OR REPLACE FUNCTION varintnot(varint)
	RETURNS varint AS 'MODULE_PATHNAME', 'varintnot'
	LANGUAGE C IMMUTABLE STRICT;

CREATE OPERATOR ~ (
	PROCEDURE = varintnot,
	RIGHTARG = varint
);

CREATE OR REPLACE FUNCTION varintshl(varint, int4)
	RETURNS varint AS 'MODULE_PATHNAME', 'varintshl'
	LANGUAGE C IMMUTABLE STRICT;

CREATE OPERATOR << (
	PROCEDURE = varintshl,
	LEFTARG = varint,
	RIGHTARG = int4
);

CREATE OR REPLACE FUNCTION varintshr(varint, int4)
	RETURNS varint AS 'MODULE_PATHNAME', 'varintshr'
	LANGUAGE C IMMUTABLE STRICT;

CREATE OPERATOR >> (
	PROCEDURE = varintshr,
	LEFTARG = varint,
	RIGHTARG = int4
);

CREATE OR REPLACE FUNCTION varintadd(varint, varint)
	RETURNS varint AS 'MODULE_PATHNAME', 'varintadd'
	LANGUAGE C IMMUTABLE STRICT;

CREATE OPERATOR + (
	PROCEDURE = varintadd,
	LEFTARG = varint,
	RIGHTARG = varint,
	COMMUTATOR = +
);

CREATE OR REPLACE FUNCTION varintsub(varint, varint)
	RETURNS varint AS 'MODULE_PATHNAME', 'varintsub'
	LANGUAGE C IMMUTABLE STRICT;

CREATE OPERATOR - (
	PROCEDURE = varintsub,
	LEFTARG = varint,
	RIGHTARG = varint
);

CREATE OR REPLACE FUNCTION varintmul(varint, varint)
	RETURNS varint AS 'MODULE_PATHNAME', 'varintmul'
	LANGUAGE C IMMUTABLE STRICT;

CREATE OPERATOR * (
	PROCEDURE = varintmul,
	LEFTARG = varint,
	RIGHTARG = varint,
	COMMUTATOR = *
);