From f3f7712675abf9310859e4a1ccf6407dc3a3770e Mon Sep 17 00:00:00 2001 From: "Marc G. Fournier" Date: Sun, 1 Mar 1998 04:51:16 +0000 Subject: Move around files before applying Darren's second patch --- src/tutorial/C-code/complex.c | 186 ------------------------------------------ 1 file changed, 186 deletions(-) delete mode 100644 src/tutorial/C-code/complex.c (limited to 'src/tutorial/C-code/complex.c') diff --git a/src/tutorial/C-code/complex.c b/src/tutorial/C-code/complex.c deleted file mode 100644 index e5bea2d1134..00000000000 --- a/src/tutorial/C-code/complex.c +++ /dev/null @@ -1,186 +0,0 @@ -/****************************************************************************** - This file contains routines that can be bound to a Postgres backend and - called by the backend in the process of processing queries. The calling - format for these routines is dictated by Postgres architecture. -******************************************************************************/ - -#include -/* do not include libpq-fe.h for backend-loaded functions*/ -/* #include "libpq-fe.h" */ -#include "postgres.h" -#include "utils/elog.h" -#include "utils/palloc.h" -#include "utils/mcxt.h" - -typedef struct Complex -{ - double x; - double y; -} Complex; - -/* These prototypes declare the requirements that Postgres places on these - user written functions. -*/ -Complex *complex_in(char *str); -char *complex_out(Complex * complex); -Complex *complex_add(Complex * a, Complex * b); -bool complex_abs_lt(Complex * a, Complex * b); -bool complex_abs_le(Complex * a, Complex * b); -bool complex_abs_eq(Complex * a, Complex * b); -bool complex_abs_ge(Complex * a, Complex * b); -bool complex_abs_gt(Complex * a, Complex * b); -int4 complex_abs_cmp(Complex * a, Complex * b); - - -/***************************************************************************** - * Input/Output functions - *****************************************************************************/ - -Complex * -complex_in(char *str) -{ - double x, - y; - Complex *result; - - if (sscanf(str, " ( %lf , %lf )", &x, &y) != 2) - { - elog(ERROR, "complex_in: error in parsing \"%s\"", str); - return NULL; - } - result = (Complex *) palloc(sizeof(Complex)); - result->x = x; - result->y = y; - return (result); -} - -/* - * You might have noticed a slight inconsistency between the following - * declaration and the SQL definition: - * CREATE FUNCTION complex_out(opaque) RETURNS opaque ... - * The reason is that the argument pass into complex_out is really just a - * pointer. POSTGRES thinks all output functions are: - * char *out_func(char *); - */ -char * -complex_out(Complex * complex) -{ - char *result; - - if (complex == NULL) - return (NULL); - - result = (char *) palloc(60); - sprintf(result, "(%g,%g)", complex->x, complex->y); - return (result); -} - -/***************************************************************************** - * New Operators - *****************************************************************************/ - -Complex * -complex_add(Complex * a, Complex * b) -{ - Complex *result; - - result = (Complex *) palloc(sizeof(Complex)); - result->x = a->x + b->x; - result->y = a->y + b->y; - return (result); -} - - -/***************************************************************************** - * Operator class for defining B-tree index - *****************************************************************************/ - -#define Mag(c) ((c)->x*(c)->x + (c)->y*(c)->y) - -bool -complex_abs_lt(Complex * a, Complex * b) -{ - double amag = Mag(a), - bmag = Mag(b); - - return (amag < bmag); -} - -bool -complex_abs_le(Complex * a, Complex * b) -{ - double amag = Mag(a), - bmag = Mag(b); - - return (amag <= bmag); -} - -bool -complex_abs_eq(Complex * a, Complex * b) -{ - double amag = Mag(a), - bmag = Mag(b); - - return (amag == bmag); -} - -bool -complex_abs_ge(Complex * a, Complex * b) -{ - double amag = Mag(a), - bmag = Mag(b); - - return (amag >= bmag); -} - -bool -complex_abs_gt(Complex * a, Complex * b) -{ - double amag = Mag(a), - bmag = Mag(b); - - return (amag > bmag); -} - -int4 -complex_abs_cmp(Complex * a, Complex * b) -{ - double amag = Mag(a), - bmag = Mag(b); - - if (amag < bmag) - return -1; - else if (amag > bmag) - return 1; - else - return 0; -} - -/***************************************************************************** - * test code - *****************************************************************************/ - -/* - * You should always test your code separately. Trust me, using POSTGRES to - * debug your C function will be very painful and unproductive. In case of - * POSTGRES crashing, it is impossible to tell whether the bug is in your - * code or POSTGRES's. - */ -void test_main(void); -void -test_main() -{ - Complex *a; - Complex *b; - - a = complex_in("(4.01, 3.77 )"); - printf("a = %s\n", complex_out(a)); - b = complex_in("(1.0,2.0)"); - printf("b = %s\n", complex_out(b)); - printf("a + b = %s\n", complex_out(complex_add(a, b))); - printf("a < b = %d\n", complex_abs_lt(a, b)); - printf("a <= b = %d\n", complex_abs_le(a, b)); - printf("a = b = %d\n", complex_abs_eq(a, b)); - printf("a >= b = %d\n", complex_abs_ge(a, b)); - printf("a > b = %d\n", complex_abs_gt(a, b)); -} -- cgit v1.2.3