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 = *
);