aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/oidint4.c
blob: 2c45edb1ec89aad5f54aff0eef9429064d146255 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*-------------------------------------------------------------------------
 *
 * oidint4.c--
 *	  Functions for the built-in type "oidint4".
 *
 * Copyright (c) 1994, Regents of the University of California
 *
 *
 * IDENTIFICATION
 *	  $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/oidint4.c,v 1.5 1998/02/26 04:37:17 momjian Exp $
 *
 *-------------------------------------------------------------------------
 */
#include <stdio.h>				/* for sprintf() */
#include "postgres.h"
#include "utils/palloc.h"
#include "utils/builtins.h"
#include "utils/oidcompos.h"	/* where function declarations go */

OidInt4
oidint4in(char *o)
{
	OidInt4		oi;
	char	   *p;

	oi = (OidInt4) palloc(sizeof(OidInt4Data));

	for (p = o; *p != '\0' && *p != '/'; p++)
		continue;

	oi->oi_oid = (Oid) pg_atoi(o, sizeof(Oid), '/');
	if (*p == '\0')
	{
		oi->oi_int4 = 0;
	}
	else
	{
		oi->oi_int4 = pg_atoi(++p, sizeof(int4), '\0');
	}

	return (oi);
}

char *
oidint4out(OidInt4 o)
{
	char	   *r;

	/*
	 * -2147483647/-2147483647 0		1		  2
	 * 123456789012345678901234
	 */
	r = (char *) palloc(24);
	sprintf(r, "%d/%d", o->oi_oid, o->oi_int4);

	return (r);
}

bool
oidint4lt(OidInt4 o1, OidInt4 o2)
{
	return
	((bool) (o1->oi_oid < o2->oi_oid ||
			 (o1->oi_oid == o2->oi_oid && o1->oi_int4 < o2->oi_int4)));
}

bool
oidint4le(OidInt4 o1, OidInt4 o2)
{
	return ((bool) (o1->oi_oid < o2->oi_oid ||
			  (o1->oi_oid == o2->oi_oid && o1->oi_int4 <= o2->oi_int4)));
}

bool
oidint4eq(OidInt4 o1, OidInt4 o2)
{
	return ((bool) (o1->oi_oid == o2->oi_oid && o1->oi_int4 == o2->oi_int4));
}

bool
oidint4ge(OidInt4 o1, OidInt4 o2)
{
	return ((bool) (o1->oi_oid > o2->oi_oid ||
			  (o1->oi_oid == o2->oi_oid && o1->oi_int4 >= o2->oi_int4)));
}

bool
oidint4gt(OidInt4 o1, OidInt4 o2)
{
	return ((bool) (o1->oi_oid > o2->oi_oid ||
			   (o1->oi_oid == o2->oi_oid && o1->oi_int4 > o2->oi_int4)));
}

bool
oidint4ne(OidInt4 o1, OidInt4 o2)
{
	return ((bool) (o1->oi_oid != o2->oi_oid || o1->oi_int4 != o2->oi_int4));
}

int
oidint4cmp(OidInt4 o1, OidInt4 o2)
{
	if (oidint4lt(o1, o2))
		return (-1);
	else if (oidint4eq(o1, o2))
		return (0);
	else
		return (1);
}

OidInt4
mkoidint4(Oid v_oid, uint32 v_int4)
{
	OidInt4		o;

	o = (OidInt4) palloc(sizeof(OidInt4Data));
	o->oi_oid = v_oid;
	o->oi_int4 = v_int4;
	return (o);
}