1/*
2 * This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 *
6 * Copyright 1997 - July 2008 CWI, August 2008 - 2019 MonetDB B.V.
7 */
8
9#ifndef _GDK_UTILS_H_
10#define _GDK_UTILS_H_
11
12#include <setjmp.h>
13
14gdk_export const char *GDKgetenv(const char *name);
15
16gdk_export bool GDKgetenv_istext(const char *name, const char* text);
17gdk_export bool GDKgetenv_isyes(const char *name);
18gdk_export bool GDKgetenv_istrue(const char *name);
19
20gdk_export int GDKgetenv_int(const char *name, int def);
21
22gdk_export gdk_return GDKsetenv(const char *name, const char *value);
23gdk_export gdk_return GDKcopyenv(BAT **key, BAT **val, bool writable);
24
25/*
26 * @+ Memory management
27 * Memory management in GDK mostly relies on the facilities offered by
28 * the underlying OS. The below routines monitor the available memory
29 * resources which consist of physical swap space and logical vm
30 * space. There are three kinds of memory, that affect these two
31 * resources in different ways:
32 *
33 * - memory mapping
34 * which ask for a logical region of virtual memory space. In
35 * principle, no physical memory is needed to keep the system afloat
36 * here, as the memory mapped file is swapped onto a disk object
37 * that already exists.
38 *
39 * Actually, there are two kings of memory mapping used in GDK,
40 * namely read-only direct mapped and writable copy-on write. For
41 * the dirty pages, the latter actually also consumes physical
42 * memory resources, but that is ignored here for simplicity.
43 *
44 * - anonymous virtual memory
45 * This is virtual memory that is mapped on the swap file. Hence,
46 * this consumes both logical VM space resources and physical memory
47 * space.
48 *
49 * - malloced memory
50 * comes from the heap and directly consumes physical memory
51 * resources.
52 *
53 * The malloc routine checks the memory consumption every 1000 calls,
54 * or for calls larger that 50000 bytes. Consequently, at least every
55 * 50MB increase, alloc memory is checked. The VM calls always check
56 * the memory consumption.
57 */
58/* default setting to administer everything */
59#define GDK_MEM_NULLALLOWED
60
61#if SIZEOF_VOID_P==8
62#define GDK_VM_MAXSIZE LL_CONSTANT(4398046511104) /* :-) a 64-bit OS: 4TB */
63#else
64#define GDK_VM_MAXSIZE LL_CONSTANT(1610612736) /* :-| a 32-bit OS: 1.5GB */
65#endif
66/* virtual memory defines */
67gdk_export size_t _MT_npages;
68gdk_export size_t _MT_pagesize;
69
70#define MT_pagesize() _MT_pagesize
71#define MT_npages() _MT_npages
72
73gdk_export void MT_init(void); /* init the package. */
74struct opt;
75gdk_export gdk_return GDKinit(struct opt *set, int setlen);
76
77/* used for testing only */
78gdk_export void GDKsetmallocsuccesscount(lng count);
79
80/*
81 * Upon closing the session, all persistent BATs should be saved and
82 * the transient BATs should be removed. The buffer pool manager
83 * takes care of this.
84 */
85#ifndef HAVE_EMBEDDED
86gdk_export _Noreturn void GDKexit(int status);
87#else
88gdk_export void GDKexit(int status);
89#endif
90gdk_export bool GDKexiting(void);
91
92gdk_export void GDKprepareExit(void);
93gdk_export void GDKreset(int status);
94gdk_export const char *GDKversion(void);
95
96// these are used in embedded mode to jump out of GDKfatal
97gdk_export jmp_buf GDKfataljump;
98gdk_export str GDKfatalmsg;
99gdk_export bit GDKfataljumpenable;
100
101/* Timers
102 * The following relative timers are available for inspection.
103 * Note that they may consume recognizable overhead.
104 *
105 */
106gdk_export lng GDKusec(void);
107gdk_export int GDKms(void);
108
109
110#endif /* _GDK_UTILS_H_ */
111