aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/oidint2.c
blob: 4d92821e8d83dbf3b613ddb364cd5d85e0f8a9c6 (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
/*-------------------------------------------------------------------------
 *
 * oidint2.c--
 *    Functions for the built-in type "oidint2".
 *
 * Copyright (c) 1994, Regents of the University of California
 *
 *
 * IDENTIFICATION
 *    $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/oidint2.c,v 1.1.1.1 1996/07/09 06:22:05 scrappy Exp $
 *
 *-------------------------------------------------------------------------
 */
#include <stdio.h>
#include "postgres.h"
#include "utils/palloc.h"
#include "utils/builtins.h"	/* for pg_atoi() */
#include "utils/oidcompos.h"	/* where function declarations go */


OidInt2
oidint2in(char *o)
{
    OidInt2 oi;
    char *p;
    
    oi = (OidInt2) palloc(sizeof(OidInt2Data));
    
    for (p = o; *p != '\0' && *p != '/'; p++)
	continue;
    
    oi->oi_oid = (Oid) pg_atoi(o, sizeof(Oid), '/');
    if (*p == '\0') {
	oi->oi_int2 = 0;
    } else {
	oi->oi_int2 = (int16) pg_atoi(++p, sizeof(int2), '\0');
    }
    
    return (oi);
}

char *
oidint2out(OidInt2 o)
{
    char *r;
    
    /*
     * -2147483647/-32767
     * 0        1
     * 1234567890123456789
     */
    r = (char *) palloc(19);
    sprintf(r, "%d/%d", o->oi_oid, o->oi_int2);
    
    return (r);
}

bool
oidint2lt(OidInt2 o1, OidInt2 o2)
{
    return
	((bool) (o1->oi_oid < o2->oi_oid ||
		 (o1->oi_oid == o2->oi_oid && o1->oi_int2 < o2->oi_int2)));
}

bool
oidint2le(OidInt2 o1, OidInt2 o2)
{
    return ((bool) (o1->oi_oid < o2->oi_oid ||
		    (o1->oi_oid == o2->oi_oid && o1->oi_int2 <= o2->oi_int2)));
}

bool
oidint2eq(OidInt2 o1, OidInt2 o2)
{
    return ((bool) (o1->oi_oid == o2->oi_oid && o1->oi_int2 == o2->oi_int2));
}

bool
oidint2ge(OidInt2 o1, OidInt2 o2)
{
    return ((bool) (o1->oi_oid > o2->oi_oid ||
		    (o1->oi_oid == o2->oi_oid && o1->oi_int2 >= o2->oi_int2)));
}

bool
oidint2gt(OidInt2 o1, OidInt2 o2)
{
    return ((bool) (o1->oi_oid > o2->oi_oid ||
		    (o1->oi_oid == o2->oi_oid && o1->oi_int2 > o2->oi_int2)));
}

bool
oidint2ne(OidInt2 o1, OidInt2 o2)
{
    return ((bool) (o1->oi_oid != o2->oi_oid || o1->oi_int2 != o2->oi_int2));
}

int
oidint2cmp(OidInt2 o1, OidInt2 o2)
{
    if (oidint2lt(o1, o2))
	return (-1);
    else if (oidint2eq(o1, o2))
	return (0);
    else
	return (1);
}

OidInt2
mkoidint2(Oid v_oid, uint16 v_int2)
{
    OidInt2 o;
    
    o = (OidInt2) palloc(sizeof(OidInt2Data));
    o->oi_oid = v_oid;
    o->oi_int2 = v_int2;
    return (o);
}