MobilityDB 1.3
Loading...
Searching...
No Matches
skiplist.h
Go to the documentation of this file.
1/*****************************************************************************
2 *
3 * This MobilityDB code is provided under The PostgreSQL License.
4 * Copyright (c) 2016-2025, Université libre de Bruxelles and MobilityDB
5 * contributors
6 *
7 * MobilityDB includes portions of PostGIS version 3 source code released
8 * under the GNU General Public License (GPLv2 or later).
9 * Copyright (c) 2001-2025, PostGIS contributors
10 *
11 * Permission to use, copy, modify, and distribute this software and its
12 * documentation for any purpose, without fee, and without a written
13 * agreement is hereby granted, provided that the above copyright notice and
14 * this paragraph and the following two paragraphs appear in all copies.
15 *
16 * IN NO EVENT SHALL UNIVERSITE LIBRE DE BRUXELLES BE LIABLE TO ANY PARTY FOR
17 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
18 * LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION,
19 * EVEN IF UNIVERSITE LIBRE DE BRUXELLES HAS BEEN ADVISED OF THE POSSIBILITY
20 * OF SUCH DAMAGE.
21 *
22 * UNIVERSITE LIBRE DE BRUXELLES SPECIFICALLY DISCLAIMS ANY WARRANTIES,
23 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
24 * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON
25 * AN "AS IS" BASIS, AND UNIVERSITE LIBRE DE BRUXELLES HAS NO OBLIGATIONS TO
26 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
27 *
28 *****************************************************************************/
29
34#ifndef __PG_SKIPLIST_H__
35#define __PG_SKIPLIST_H__
36
37/* PostgreSQL */
38#include <postgres.h>
39#include <fmgr.h>
40/* MEOS */
41#include <meos.h>
42
43
44/*****************************************************************************/
45
46extern FunctionCallInfo fetch_fcinfo(void);
47extern void store_fcinfo(FunctionCallInfo fcinfo);
48extern MemoryContext set_aggregation_context(FunctionCallInfo fcinfo);
49extern void unset_aggregation_context(MemoryContext ctx);
50
51/*****************************************************************************/
52
56#define INPUT_AGG_TRANS_STATE(fcinfo, state) \
57 do { \
58 MemoryContext ctx = set_aggregation_context(fcinfo); \
59 state = PG_ARGISNULL(0) ? NULL : (SkipList *) PG_GETARG_POINTER(0); \
60 if (PG_ARGISNULL(1)) \
61 { \
62 if (state) \
63 PG_RETURN_POINTER(state); \
64 else \
65 PG_RETURN_NULL(); \
66 } \
67 unset_aggregation_context(ctx); \
68 } while (0)
69
70#define INPUT_AGG_COMB_STATE(fcinfo, state1, state2) \
71 do { \
72 MemoryContext ctx = set_aggregation_context(fcinfo); \
73 state1 = PG_ARGISNULL(0) ? NULL : (SkipList *) PG_GETARG_POINTER(0); \
74 state2 = PG_ARGISNULL(1) ? NULL : (SkipList *) PG_GETARG_POINTER(1); \
75 if (! state1 && ! state2) \
76 PG_RETURN_NULL(); \
77 unset_aggregation_context(ctx); \
78 } while (0)
79
80/*****************************************************************************/
81
82#endif
External API of the Mobility Engine Open Source (MEOS) library.
FunctionCallInfo fetch_fcinfo(void)
Skiplist data structure used for performing aggregates.
Definition: temporal.c:104
MemoryContext set_aggregation_context(FunctionCallInfo fcinfo)
Switch to the memory context for aggregation.
Definition: skiplist.c:55
void store_fcinfo(FunctionCallInfo fcinfo)
Store in the cache the fcinfo of the external function.
Definition: temporal.c:114
void unset_aggregation_context(MemoryContext ctx)
Switch to the given memory context.
Definition: skiplist.c:68