in libgu mark explicitly all functions that belong to the API

This commit is contained in:
krasimir
2017-04-19 12:30:40 +00:00
parent 74ce52d761
commit 5c93f2fba5
35 changed files with 311 additions and 372 deletions

View File

@@ -3,7 +3,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdarg.h> #include <stdarg.h>
const char* static const char*
gu_assert_mode_descs[] = { gu_assert_mode_descs[] = {
[GU_ASSERT_PRECOND] = "precondition failed", [GU_ASSERT_PRECOND] = "precondition failed",
[GU_ASSERT_POSTCOND] = "postcondition failed", [GU_ASSERT_POSTCOND] = "postcondition failed",
@@ -11,7 +11,7 @@ gu_assert_mode_descs[] = {
[GU_ASSERT_NEVER] = "control should not reach here", [GU_ASSERT_NEVER] = "control should not reach here",
}; };
void GU_API void
gu_abort_v_(GuAssertMode mode, gu_abort_v_(GuAssertMode mode,
const char* file, const char* func, int line, const char* file, const char* func, int line,
const char* msg_fmt, va_list args) const char* msg_fmt, va_list args)
@@ -26,7 +26,7 @@ gu_abort_v_(GuAssertMode mode,
abort(); abort();
} }
void GU_API void
gu_abort_(GuAssertMode mode, gu_abort_(GuAssertMode mode,
const char* file, const char* func, int line, const char* file, const char* func, int line,
const char* msg_fmt, ...) const char* msg_fmt, ...)
@@ -37,8 +37,7 @@ gu_abort_(GuAssertMode mode,
va_end(args); va_end(args);
} }
GU_API void
void
gu_fatal(const char* fmt, ...) gu_fatal(const char* fmt, ...)
{ {
va_list args; va_list args;

View File

@@ -10,12 +10,12 @@ typedef enum {
GU_ASSERT_NEVER GU_ASSERT_NEVER
} GuAssertMode; } GuAssertMode;
void GU_API_DECL void
gu_abort_v_(GuAssertMode mode, gu_abort_v_(GuAssertMode mode,
const char* file, const char* func, int line, const char* file, const char* func, int line,
const char* msg_fmt, va_list args); const char* msg_fmt, va_list args);
void GU_API_DECL void
gu_abort_(GuAssertMode mode, gu_abort_(GuAssertMode mode,
const char* file, const char* func, int line, const char* file, const char* func, int line,
const char* msg_fmt, ...); const char* msg_fmt, ...);
@@ -55,7 +55,7 @@ gu_abort_(GuAssertMode mode,
#define gu_impossible() \ #define gu_impossible() \
gu_impossible_msg(NULL) gu_impossible_msg(NULL)
void GU_API_DECL void
gu_fatal(const char* fmt, ...); gu_fatal(const char* fmt, ...);
#endif /* GU_ASSERT_H_ */ #endif /* GU_ASSERT_H_ */

View File

@@ -7,7 +7,8 @@
#include <stdlib.h> #include <stdlib.h>
#include <math.h> #include <math.h>
unsigned gu_ceil2e(unsigned u) GU_INTERNAL unsigned
gu_ceil2e(unsigned u)
{ {
u--; u--;
u |= u >> 1; u |= u >> 1;
@@ -24,7 +25,7 @@ unsigned gu_ceil2e(unsigned u)
return u; return u;
} }
double GU_INTERNAL double
gu_decode_double(uint64_t u) gu_decode_double(uint64_t u)
{ {
bool sign = u >> 63; bool sign = u >> 63;

View File

@@ -13,6 +13,7 @@
* <http://graphics.stanford.edu/~seander/bithacks.html> * <http://graphics.stanford.edu/~seander/bithacks.html>
*/ */
GU_INTERNAL_DECL
unsigned gu_ceil2e(unsigned i); unsigned gu_ceil2e(unsigned i);
static inline int static inline int
@@ -140,7 +141,7 @@ gu_decode_2c64(uint64_t u, GuExn* err)
UINT64_C(0x7fffffffffffffff), INT64_MIN, err); UINT64_C(0x7fffffffffffffff), INT64_MIN, err);
} }
double GU_INTERNAL_DECL double
gu_decode_double(uint64_t u); gu_decode_double(uint64_t u);

View File

@@ -7,7 +7,7 @@ struct GuChoice {
size_t path_idx; size_t path_idx;
}; };
GuChoice* GU_API GuChoice*
gu_new_choice(GuPool* pool) gu_new_choice(GuPool* pool)
{ {
GuChoice* ch = gu_new(GuChoice, pool); GuChoice* ch = gu_new(GuChoice, pool);
@@ -16,14 +16,14 @@ gu_new_choice(GuPool* pool)
return ch; return ch;
} }
GuChoiceMark GU_API GuChoiceMark
gu_choice_mark(GuChoice* ch) gu_choice_mark(GuChoice* ch)
{ {
gu_assert(ch->path_idx <= gu_buf_length(ch->path)); gu_assert(ch->path_idx <= gu_buf_length(ch->path));
return (GuChoiceMark){ch->path_idx}; return (GuChoiceMark){ch->path_idx};
} }
void GU_API void
gu_choice_reset(GuChoice* ch, GuChoiceMark mark) gu_choice_reset(GuChoice* ch, GuChoiceMark mark)
{ {
gu_assert(ch->path_idx <= gu_buf_length(ch->path)); gu_assert(ch->path_idx <= gu_buf_length(ch->path));
@@ -31,7 +31,7 @@ gu_choice_reset(GuChoice* ch, GuChoiceMark mark)
ch->path_idx = mark.path_idx; ch->path_idx = mark.path_idx;
} }
int GU_API int
gu_choice_next(GuChoice* ch, int n_choices) gu_choice_next(GuChoice* ch, int n_choices)
{ {
gu_assert(n_choices >= 0); gu_assert(n_choices >= 0);
@@ -52,7 +52,7 @@ gu_choice_next(GuChoice* ch, int n_choices)
return ret; return ret;
} }
bool GU_API bool
gu_choice_advance(GuChoice* ch) gu_choice_advance(GuChoice* ch)
{ {
gu_assert(ch->path_idx <= gu_buf_length(ch->path)); gu_assert(ch->path_idx <= gu_buf_length(ch->path));

View File

@@ -7,19 +7,19 @@ typedef struct GuChoice GuChoice;
typedef struct GuChoiceMark GuChoiceMark; typedef struct GuChoiceMark GuChoiceMark;
GuChoice* GU_API_DECL GuChoice*
gu_new_choice(GuPool* pool); gu_new_choice(GuPool* pool);
int GU_API_DECL int
gu_choice_next(GuChoice* ch, int n_choices); gu_choice_next(GuChoice* ch, int n_choices);
GuChoiceMark GU_API_DECL GuChoiceMark
gu_choice_mark(GuChoice* ch); gu_choice_mark(GuChoice* ch);
void GU_API_DECL void
gu_choice_reset(GuChoice* ch, GuChoiceMark mark); gu_choice_reset(GuChoice* ch, GuChoiceMark mark);
bool GU_API_DECL bool
gu_choice_advance(GuChoice* ch); gu_choice_advance(GuChoice* ch);

View File

@@ -1,4 +1,4 @@
#include <gu/defs.h> #include <gu/defs.h>
void* const gu_null = NULL; void* const gu_null = NULL;
GU_API_DATA GuStruct* const gu_null_struct = NULL; GU_API GuStruct* const gu_null_struct = NULL;

View File

@@ -1,22 +1,3 @@
/*
* Copyright 2010 University of Helsinki.
*
* This file is part of libgu.
*
* Libgu is free software: you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Libgu is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with libgu. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file /** @file
* *
* Miscellaneous macros. * Miscellaneous macros.
@@ -30,16 +11,19 @@
// for functions, but not for data/variables. // for functions, but not for data/variables.
#if defined(_MSC_VER) #if defined(_MSC_VER)
#if defined(COMPILING_GU) #if defined(COMPILING_GU)
#define GU_API_DATA_DECL __declspec(dllexport) #define GU_API_DECL __declspec(dllexport)
#define GU_API_DATA __declspec(dllexport) #define GU_API __declspec(dllexport)
#else #else
#define GU_API_DATA_DECL __declspec(dllimport) #define GU_API_DECL __declspec(dllimport)
#define GU_API_DATA ERROR_NOT_COMPILING_LIBGU #define GU_API ERROR_NOT_COMPILING_LIBGU
#endif #endif
#else #else
#define GU_API_DATA_DECL extern #define GU_API_DECL
#define GU_API_DATA #define GU_API
#define GU_INTERNAL_DECL __attribute__ ((visibility ("hidden")))
#define GU_INTERNAL __attribute__ ((visibility ("hidden")))
#endif #endif
// end MSVC workaround // end MSVC workaround
@@ -172,7 +156,7 @@ extern void* const gu_null;
// Dummy struct used for generic struct pointers // Dummy struct used for generic struct pointers
typedef struct GuStruct GuStruct; typedef struct GuStruct GuStruct;
GU_API_DATA_DECL GuStruct* const gu_null_struct; GU_API_DECL extern GuStruct* const gu_null_struct;
typedef uintptr_t GuWord; typedef uintptr_t GuWord;

View File

@@ -1,6 +1,6 @@
#include <gu/enum.h> #include <gu/enum.h>
void GU_API void
gu_enum_next(GuEnum* en, void* to, GuPool* pool) gu_enum_next(GuEnum* en, void* to, GuPool* pool)
{ {
en->next(en, to, pool); en->next(en, to, pool);

View File

@@ -9,7 +9,7 @@ struct GuEnum {
void (*next)(GuEnum* self, void* to, GuPool* pool); void (*next)(GuEnum* self, void* to, GuPool* pool);
}; };
void GU_API_DECL void
gu_enum_next(GuEnum* en, void* to, GuPool* pool); gu_enum_next(GuEnum* en, void* to, GuPool* pool);
#ifdef GU_GNUC #ifdef GU_GNUC

View File

@@ -2,7 +2,7 @@
#include <gu/assert.h> #include <gu/assert.h>
GuExn* GU_API GuExn*
gu_new_exn(GuPool* pool) gu_new_exn(GuPool* pool)
{ {
GuExn* exn = gu_new(GuExn, pool); GuExn* exn = gu_new(GuExn, pool);
@@ -13,18 +13,18 @@ gu_new_exn(GuPool* pool)
return exn; return exn;
} }
bool GU_API bool
gu_exn_is_raised(GuExn* err) { gu_exn_is_raised(GuExn* err) {
return err && (err->state == GU_EXN_RAISED); return err && (err->state == GU_EXN_RAISED);
} }
bool GU_API bool
gu_exn_caught_(GuExn* err, const char* type) gu_exn_caught_(GuExn* err, const char* type)
{ {
return (err->caught && strcmp(err->caught, type) == 0); return (err->caught && strcmp(err->caught, type) == 0);
} }
void GU_API void
gu_exn_block(GuExn* err) gu_exn_block(GuExn* err)
{ {
if (err && err->state == GU_EXN_RAISED) { if (err && err->state == GU_EXN_RAISED) {
@@ -32,7 +32,7 @@ gu_exn_block(GuExn* err)
} }
} }
void GU_API void
gu_exn_unblock(GuExn* err) gu_exn_unblock(GuExn* err)
{ {
if (err && err->state == GU_EXN_BLOCKED) { if (err && err->state == GU_EXN_BLOCKED) {
@@ -40,7 +40,7 @@ gu_exn_unblock(GuExn* err)
} }
} }
GuExnData* GU_API GuExnData*
gu_exn_raise_debug_(GuExn* err, const char* type, gu_exn_raise_debug_(GuExn* err, const char* type,
const char* filename, const char* func, int lineno) const char* filename, const char* func, int lineno)
{ {
@@ -60,13 +60,13 @@ gu_exn_raise_debug_(GuExn* err, const char* type,
return NULL; return NULL;
} }
GuExnData* GU_API GuExnData*
gu_exn_raise_(GuExn* base, const char* type) gu_exn_raise_(GuExn* base, const char* type)
{ {
return gu_exn_raise_debug_(base, type, NULL, NULL, -1); return gu_exn_raise_debug_(base, type, NULL, NULL, -1);
} }
void GU_API void
gu_raise_errno(GuExn* err) gu_raise_errno(GuExn* err)
{ {
GuExnData* err_data = gu_raise(err, GuErrno); GuExnData* err_data = gu_raise(err, GuErrno);

View File

@@ -64,11 +64,11 @@ struct GuExn {
/// Allocate a new exception frame. /// Allocate a new exception frame.
GuExn* GU_API_DECL GuExn*
gu_new_exn(GuPool* pool); gu_new_exn(GuPool* pool);
bool GU_API_DECL bool
gu_exn_is_raised(GuExn* err); gu_exn_is_raised(GuExn* err);
static inline void static inline void
@@ -80,7 +80,7 @@ gu_exn_clear(GuExn* err) {
#define gu_exn_caught(err, type) \ #define gu_exn_caught(err, type) \
(err->caught && strcmp(err->caught, #type) == 0) (err->caught && strcmp(err->caught, #type) == 0)
bool GU_API_DECL bool
gu_exn_caught_(GuExn* err, const char* type); gu_exn_caught_(GuExn* err, const char* type);
static inline const void* static inline const void*
@@ -90,19 +90,19 @@ gu_exn_caught_data(GuExn* err)
} }
/// Temporarily block a raised exception. /// Temporarily block a raised exception.
void GU_API_DECL void
gu_exn_block(GuExn* err); gu_exn_block(GuExn* err);
/// Show again a blocked exception. /// Show again a blocked exception.
void GU_API_DECL void
gu_exn_unblock(GuExn* err); gu_exn_unblock(GuExn* err);
//@private //@private
GuExnData* GU_API_DECL GuExnData*
gu_exn_raise_(GuExn* err, const char* type); gu_exn_raise_(GuExn* err, const char* type);
//@private //@private
GuExnData* GU_API_DECL GuExnData*
gu_exn_raise_debug_(GuExn* err, const char* type, gu_exn_raise_debug_(GuExn* err, const char* type,
const char* filename, const char* func, int lineno); const char* filename, const char* func, int lineno);
@@ -163,7 +163,7 @@ gu_ok(GuExn* exn) {
typedef int GuErrno; typedef int GuErrno;
void GU_API_DECL void
gu_raise_errno(GuExn* err); gu_raise_errno(GuExn* err);
/** @} */ /** @} */

View File

@@ -31,7 +31,7 @@ gu_file_flush(GuOutStream* stream, GuExn* err)
} }
} }
GuOut* GU_API GuOut*
gu_file_out(FILE* file, GuPool* pool) gu_file_out(FILE* file, GuPool* pool)
{ {
GuFileOutStream* fos = gu_new(GuFileOutStream, pool); GuFileOutStream* fos = gu_new(GuFileOutStream, pool);
@@ -65,7 +65,7 @@ gu_file_input(GuInStream* stream, uint8_t* buf, size_t sz, GuExn* err)
return got; return got;
} }
GuIn* GU_API GuIn*
gu_file_in(FILE* file, GuPool* pool) gu_file_in(FILE* file, GuPool* pool)
{ {
GuFileInStream* fis = gu_new(GuFileInStream, pool); GuFileInStream* fis = gu_new(GuFileInStream, pool);

View File

@@ -5,10 +5,10 @@
#include <gu/out.h> #include <gu/out.h>
#include <stdio.h> #include <stdio.h>
GuOut* GU_API_DECL GuOut*
gu_file_out(FILE* file, GuPool* pool); gu_file_out(FILE* file, GuPool* pool);
GuIn* GU_API_DECL GuIn*
gu_file_in(FILE* file, GuPool* pool); gu_file_in(FILE* file, GuPool* pool);
#endif // GU_FILE_H_ #endif // GU_FILE_H_

View File

@@ -1,6 +1,6 @@
#include <gu/hash.h> #include <gu/hash.h>
GuHash GU_API GuHash
gu_hash_bytes(GuHash h, const uint8_t* buf, size_t len) gu_hash_bytes(GuHash h, const uint8_t* buf, size_t len)
{ {
for (size_t n = 0; n < len; n++) { for (size_t n = 0; n < len; n++) {
@@ -25,7 +25,7 @@ gu_int_hash_fn(GuHasher* self, const void* p)
return (GuHash) *(const int*) p; return (GuHash) *(const int*) p;
} }
GU_API_DATA GuHasher gu_int_hasher[1] = { GU_API GuHasher gu_int_hasher[1] = {
{ {
{ gu_int_eq_fn }, { gu_int_eq_fn },
gu_int_hash_fn gu_int_hash_fn
@@ -46,7 +46,7 @@ gu_addr_hash_fn(GuHasher* self, const void* p)
return (GuHash) (uintptr_t) p; return (GuHash) (uintptr_t) p;
} }
GU_API_DATA GuHasher gu_addr_hasher[1] = { GU_API GuHasher gu_addr_hasher[1] = {
{ {
{ gu_addr_eq_fn }, { gu_addr_eq_fn },
gu_addr_hash_fn gu_addr_hash_fn
@@ -69,7 +69,7 @@ gu_word_hash_fn(GuHasher* self, const void* p)
return (GuHash) (uintptr_t) p; return (GuHash) (uintptr_t) p;
} }
GU_API_DATA GuHasher gu_word_hasher[1] = { GU_API GuHasher gu_word_hasher[1] = {
{ {
{ gu_word_eq_fn }, { gu_word_eq_fn },
gu_word_hash_fn gu_word_hash_fn

View File

@@ -20,7 +20,7 @@ gu_hash_byte(GuHash h, uint8_t u)
} }
GuHash GU_API GuHash
gu_hash_bytes(GuHash h, const uint8_t* buf, size_t len); gu_hash_bytes(GuHash h, const uint8_t* buf, size_t len);
typedef const struct GuHasher GuHasher; typedef const struct GuHasher GuHasher;
@@ -31,10 +31,10 @@ struct GuHasher {
}; };
GU_API_DATA_DECL GuHasher gu_int_hasher[1]; GU_API_DECL extern GuHasher gu_int_hasher[1];
GU_API_DATA_DECL GuHasher gu_addr_hasher[1]; GU_API_DECL extern GuHasher gu_addr_hasher[1];
GU_API_DATA_DECL GuHasher gu_word_hasher[1]; GU_API_DECL extern GuHasher gu_word_hasher[1];
#endif // GU_HASH_H_ #endif // GU_HASH_H_

View File

@@ -68,7 +68,7 @@ gu_in_input(GuIn* in, uint8_t* dst, size_t sz, GuExn* err)
return 0; return 0;
} }
size_t GU_API size_t
gu_in_some(GuIn* in, uint8_t* dst, size_t sz, GuExn* err) gu_in_some(GuIn* in, uint8_t* dst, size_t sz, GuExn* err)
{ {
gu_require(sz <= PTRDIFF_MAX); gu_require(sz <= PTRDIFF_MAX);
@@ -82,7 +82,7 @@ gu_in_some(GuIn* in, uint8_t* dst, size_t sz, GuExn* err)
return real_sz; return real_sz;
} }
void GU_API void
gu_in_bytes_(GuIn* in, uint8_t* dst, size_t sz, GuExn* err) gu_in_bytes_(GuIn* in, uint8_t* dst, size_t sz, GuExn* err)
{ {
for (;;) { for (;;) {
@@ -102,7 +102,7 @@ gu_in_bytes_(GuIn* in, uint8_t* dst, size_t sz, GuExn* err)
} }
} }
const uint8_t* GU_API const uint8_t*
gu_in_begin_span(GuIn* in, size_t *sz_out, GuExn* err) gu_in_begin_span(GuIn* in, size_t *sz_out, GuExn* err)
{ {
if (!gu_in_begin_buffering(in, err)) { if (!gu_in_begin_buffering(in, err)) {
@@ -112,14 +112,14 @@ gu_in_begin_span(GuIn* in, size_t *sz_out, GuExn* err)
return &in->buf_end[in->buf_curr]; return &in->buf_end[in->buf_curr];
} }
void GU_API void
gu_in_end_span(GuIn* in, size_t consumed) gu_in_end_span(GuIn* in, size_t consumed)
{ {
gu_require(consumed <= (size_t) -in->buf_curr); gu_require(consumed <= (size_t) -in->buf_curr);
in->buf_curr += (ptrdiff_t) consumed; in->buf_curr += (ptrdiff_t) consumed;
} }
uint8_t GU_API uint8_t
gu_in_u8_(GuIn* in, GuExn* err) gu_in_u8_(GuIn* in, GuExn* err)
{ {
if (gu_in_begin_buffering(in, err) && in->buf_curr < 0) { if (gu_in_begin_buffering(in, err) && in->buf_curr < 0) {
@@ -158,94 +158,92 @@ gu_in_le(GuIn* in, GuExn* err, int n)
return u; return u;
} }
int8_t GU_API int8_t
gu_in_s8(GuIn* in, GuExn* err) gu_in_s8(GuIn* in, GuExn* err)
{ {
return gu_decode_2c8(gu_in_u8(in, err), err); return gu_decode_2c8(gu_in_u8(in, err), err);
} }
uint16_t GU_API uint16_t
gu_in_u16le(GuIn* in, GuExn* err) gu_in_u16le(GuIn* in, GuExn* err)
{ {
return gu_in_le(in, err, 2); return gu_in_le(in, err, 2);
} }
int16_t GU_API int16_t
gu_in_s16le(GuIn* in, GuExn* err) gu_in_s16le(GuIn* in, GuExn* err)
{ {
return gu_decode_2c16(gu_in_u16le(in, err), err); return gu_decode_2c16(gu_in_u16le(in, err), err);
} }
uint16_t GU_API uint16_t
gu_in_u16be(GuIn* in, GuExn* err) gu_in_u16be(GuIn* in, GuExn* err)
{ {
return gu_in_be(in, err, 2); return gu_in_be(in, err, 2);
} }
int16_t GU_API int16_t
gu_in_s16be(GuIn* in, GuExn* err) gu_in_s16be(GuIn* in, GuExn* err)
{ {
return gu_decode_2c16(gu_in_u16be(in, err), err); return gu_decode_2c16(gu_in_u16be(in, err), err);
} }
GU_API uint32_t
uint32_t
gu_in_u32le(GuIn* in, GuExn* err) gu_in_u32le(GuIn* in, GuExn* err)
{ {
return gu_in_le(in, err, 4); return gu_in_le(in, err, 4);
} }
int32_t GU_API int32_t
gu_in_s32le(GuIn* in, GuExn* err) gu_in_s32le(GuIn* in, GuExn* err)
{ {
return gu_decode_2c32(gu_in_u32le(in, err), err); return gu_decode_2c32(gu_in_u32le(in, err), err);
} }
uint32_t GU_API uint32_t
gu_in_u32be(GuIn* in, GuExn* err) gu_in_u32be(GuIn* in, GuExn* err)
{ {
return gu_in_be(in, err, 4); return gu_in_be(in, err, 4);
} }
int32_t GU_API int32_t
gu_in_s32be(GuIn* in, GuExn* err) gu_in_s32be(GuIn* in, GuExn* err)
{ {
return gu_decode_2c32(gu_in_u32be(in, err), err); return gu_decode_2c32(gu_in_u32be(in, err), err);
} }
GU_API uint64_t
uint64_t
gu_in_u64le(GuIn* in, GuExn* err) gu_in_u64le(GuIn* in, GuExn* err)
{ {
return gu_in_le(in, err, 8); return gu_in_le(in, err, 8);
} }
int64_t GU_API int64_t
gu_in_s64le(GuIn* in, GuExn* err) gu_in_s64le(GuIn* in, GuExn* err)
{ {
return gu_decode_2c64(gu_in_u64le(in, err), err); return gu_decode_2c64(gu_in_u64le(in, err), err);
} }
uint64_t GU_API uint64_t
gu_in_u64be(GuIn* in, GuExn* err) gu_in_u64be(GuIn* in, GuExn* err)
{ {
return gu_in_be(in, err, 8); return gu_in_be(in, err, 8);
} }
int64_t GU_API int64_t
gu_in_s64be(GuIn* in, GuExn* err) gu_in_s64be(GuIn* in, GuExn* err)
{ {
return gu_decode_2c64(gu_in_u64be(in, err), err); return gu_decode_2c64(gu_in_u64be(in, err), err);
} }
double GU_API double
gu_in_f64le(GuIn* in, GuExn* err) gu_in_f64le(GuIn* in, GuExn* err)
{ {
return gu_decode_double(gu_in_u64le(in, err)); return gu_decode_double(gu_in_u64le(in, err));
} }
double GU_API double
gu_in_f64be(GuIn* in, GuExn* err) gu_in_f64be(GuIn* in, GuExn* err)
{ {
return gu_decode_double(gu_in_u64le(in, err)); return gu_decode_double(gu_in_u64le(in, err));
@@ -261,7 +259,7 @@ gu_in_fini(GuFinalizer* fin)
gu_pool_free(pool); gu_pool_free(pool);
} }
GuIn* GU_API GuIn*
gu_new_in(GuInStream* stream, GuPool* pool) gu_new_in(GuInStream* stream, GuPool* pool)
{ {
gu_require(stream != NULL); gu_require(stream != NULL);
@@ -317,7 +315,7 @@ gu_buffered_in_input(GuInStream* self, uint8_t* dst, size_t sz, GuExn* err)
return gu_in_some(bis->in, dst, sz, err); return gu_in_some(bis->in, dst, sz, err);
} }
GuIn* GU_API GuIn*
gu_buffered_in(GuIn* in, size_t buf_sz, GuPool* pool) gu_buffered_in(GuIn* in, size_t buf_sz, GuPool* pool)
{ {
GuBufferedInStream* bis = gu_new_flex(pool, GuBufferedInStream, GuBufferedInStream* bis = gu_new_flex(pool, GuBufferedInStream,
@@ -355,7 +353,7 @@ gu_data_in_begin_buffer(GuInStream* self, size_t* sz_out, GuExn* err)
return buf; return buf;
} }
GuIn* GU_API GuIn*
gu_data_in(const uint8_t* data, size_t sz, GuPool* pool) gu_data_in(const uint8_t* data, size_t sz, GuPool* pool)
{ {
GuDataIn* di = gu_new(GuDataIn, pool); GuDataIn* di = gu_new(GuDataIn, pool);

View File

@@ -25,16 +25,16 @@ struct GuIn {
GuFinalizer fini; GuFinalizer fini;
}; };
GuIn* GU_API_DECL GuIn*
gu_new_in(GuInStream* stream, GuPool* pool); gu_new_in(GuInStream* stream, GuPool* pool);
const uint8_t* GU_API_DECL const uint8_t*
gu_in_begin_span(GuIn* in, size_t *sz_out, GuExn* err); gu_in_begin_span(GuIn* in, size_t *sz_out, GuExn* err);
void GU_API_DECL void
gu_in_end_span(GuIn* in, size_t consumed); gu_in_end_span(GuIn* in, size_t consumed);
size_t GU_API_DECL size_t
gu_in_some(GuIn* in, uint8_t* buf, size_t max_len, GuExn* err); gu_in_some(GuIn* in, uint8_t* buf, size_t max_len, GuExn* err);
inline void inline void
@@ -69,7 +69,6 @@ gu_in_consume(GuIn* restrict in, size_t sz)
in->buf_curr += sz; in->buf_curr += sz;
} }
inline uint8_t inline uint8_t
gu_in_u8(GuIn* restrict in, GuExn* err) gu_in_u8(GuIn* restrict in, GuExn* err)
{ {
@@ -80,55 +79,55 @@ gu_in_u8(GuIn* restrict in, GuExn* err)
return in->buf_end[in->buf_curr++]; return in->buf_end[in->buf_curr++];
} }
int8_t GU_API_DECL int8_t
gu_in_s8(GuIn* in, GuExn* err); gu_in_s8(GuIn* in, GuExn* err);
uint16_t GU_API_DECL uint16_t
gu_in_u16le(GuIn* in, GuExn* err); gu_in_u16le(GuIn* in, GuExn* err);
uint16_t GU_API_DECL uint16_t
gu_in_u16be(GuIn* in, GuExn* err); gu_in_u16be(GuIn* in, GuExn* err);
int16_t GU_API_DECL int16_t
gu_in_s16le(GuIn* in, GuExn* err); gu_in_s16le(GuIn* in, GuExn* err);
int16_t GU_API_DECL int16_t
gu_in_s16be(GuIn* in, GuExn* err); gu_in_s16be(GuIn* in, GuExn* err);
uint32_t GU_API_DECL uint32_t
gu_in_u32le(GuIn* in, GuExn* err); gu_in_u32le(GuIn* in, GuExn* err);
uint32_t GU_API_DECL uint32_t
gu_in_u32be(GuIn* in, GuExn* err); gu_in_u32be(GuIn* in, GuExn* err);
int32_t GU_API_DECL int32_t
gu_in_s32le(GuIn* in, GuExn* err); gu_in_s32le(GuIn* in, GuExn* err);
int32_t GU_API_DECL int32_t
gu_in_s32be(GuIn* in, GuExn* err); gu_in_s32be(GuIn* in, GuExn* err);
uint64_t GU_API_DECL uint64_t
gu_in_u64le(GuIn* in, GuExn* err); gu_in_u64le(GuIn* in, GuExn* err);
uint64_t GU_API_DECL uint64_t
gu_in_u64be(GuIn* in, GuExn* err); gu_in_u64be(GuIn* in, GuExn* err);
int64_t GU_API_DECL int64_t
gu_in_s64le(GuIn* in, GuExn* err); gu_in_s64le(GuIn* in, GuExn* err);
int64_t GU_API_DECL int64_t
gu_in_s64be(GuIn* in, GuExn* err); gu_in_s64be(GuIn* in, GuExn* err);
double GU_API_DECL double
gu_in_f64le(GuIn* in, GuExn* err); gu_in_f64le(GuIn* in, GuExn* err);
double GU_API_DECL double
gu_in_f64be(GuIn* in, GuExn* err); gu_in_f64be(GuIn* in, GuExn* err);
GuIn* GU_API_DECL GuIn*
gu_buffered_in(GuIn* in, size_t sz, GuPool* pool); gu_buffered_in(GuIn* in, size_t sz, GuPool* pool);
GuIn* GU_API_DECL GuIn*
gu_data_in(const uint8_t* buf, size_t size, GuPool* pool); gu_data_in(const uint8_t* buf, size_t size, GuPool* pool);

View File

@@ -222,7 +222,7 @@ gu_map_maybe_resize(GuMap* map)
return false; return false;
} }
void* GU_API void*
gu_map_find(GuMap* map, const void* key) gu_map_find(GuMap* map, const void* key)
{ {
size_t idx; size_t idx;
@@ -233,14 +233,14 @@ gu_map_find(GuMap* map, const void* key)
return NULL; return NULL;
} }
const void* GU_API const void*
gu_map_find_default(GuMap* map, const void* key) gu_map_find_default(GuMap* map, const void* key)
{ {
void* p = gu_map_find(map, key); void* p = gu_map_find(map, key);
return p ? p : map->default_value; return p ? p : map->default_value;
} }
const void* GU_API const void*
gu_map_find_key(GuMap* map, const void* key) gu_map_find_key(GuMap* map, const void* key)
{ {
size_t idx; size_t idx;
@@ -251,14 +251,14 @@ gu_map_find_key(GuMap* map, const void* key)
return NULL; return NULL;
} }
bool GU_API bool
gu_map_has(GuMap* ht, const void* key) gu_map_has(GuMap* ht, const void* key)
{ {
size_t idx; size_t idx;
return gu_map_lookup(ht, key, &idx); return gu_map_lookup(ht, key, &idx);
} }
void* GU_API void*
gu_map_insert(GuMap* map, const void* key) gu_map_insert(GuMap* map, const void* key)
{ {
size_t idx; size_t idx;
@@ -289,7 +289,7 @@ gu_map_insert(GuMap* map, const void* key)
return &map->data.values[idx * map->value_size]; return &map->data.values[idx * map->value_size];
} }
void GU_API void
gu_map_iter(GuMap* map, GuMapItor* itor, GuExn* err) gu_map_iter(GuMap* map, GuMapItor* itor, GuExn* err)
{ {
for (size_t i = 0; i < map->data.n_entries && gu_ok(err); i++) { for (size_t i = 0; i < map->data.n_entries && gu_ok(err); i++) {
@@ -340,7 +340,7 @@ gu_map_enum_next(GuEnum* self, void* to, GuPool* pool)
en->i = i+1; en->i = i+1;
} }
GuEnum* GU_API GuEnum*
gu_map_enum(GuMap* ht, GuPool* pool) gu_map_enum(GuMap* ht, GuPool* pool)
{ {
GuMapEnum* en = gu_new(GuMapEnum, pool); GuMapEnum* en = gu_new(GuMapEnum, pool);
@@ -350,7 +350,7 @@ gu_map_enum(GuMap* ht, GuPool* pool)
return &en->en; return &en->en;
} }
size_t GU_API size_t
gu_map_count(GuMap* map) gu_map_count(GuMap* map)
{ {
size_t count = 0; size_t count = 0;
@@ -365,7 +365,7 @@ gu_map_count(GuMap* map)
static const uint8_t gu_map_no_values[1] = { 0 }; static const uint8_t gu_map_no_values[1] = { 0 };
GuMap* GU_API GuMap*
gu_make_map(size_t key_size, GuHasher* hasher, gu_make_map(size_t key_size, GuHasher* hasher,
size_t value_size, const void* default_value, size_t value_size, const void* default_value,
size_t init_size, size_t init_size,

View File

@@ -15,7 +15,7 @@ struct GuMapItor {
typedef struct GuMap GuMap; typedef struct GuMap GuMap;
GuMap* GU_API_DECL GuMap*
gu_make_map(size_t key_size, GuHasher* hasher, gu_make_map(size_t key_size, GuHasher* hasher,
size_t value_size, const void* default_value, size_t value_size, const void* default_value,
size_t init_size, size_t init_size,
@@ -32,19 +32,19 @@ gu_make_map(size_t key_size, GuHasher* hasher,
#define gu_new_addr_map(K, V, DV, POOL) \ #define gu_new_addr_map(K, V, DV, POOL) \
(gu_make_map(sizeof(K), gu_addr_hasher, sizeof(V), (DV), GU_MAP_DEFAULT_INIT_SIZE, (POOL))) (gu_make_map(sizeof(K), gu_addr_hasher, sizeof(V), (DV), GU_MAP_DEFAULT_INIT_SIZE, (POOL)))
size_t GU_API_DECL size_t
gu_map_count(GuMap* map); gu_map_count(GuMap* map);
void* GU_API_DECL void*
gu_map_find_full(GuMap* ht, void* key_inout); gu_map_find_full(GuMap* ht, void* key_inout);
const void* GU_API_DECL const void*
gu_map_find_default(GuMap* ht, const void* key); gu_map_find_default(GuMap* ht, const void* key);
#define gu_map_get(MAP, KEYP, V) \ #define gu_map_get(MAP, KEYP, V) \
(*(V*)gu_map_find_default((MAP), (KEYP))) (*(V*)gu_map_find_default((MAP), (KEYP)))
void* GU_API_DECL void*
gu_map_find(GuMap* ht, const void* key); gu_map_find(GuMap* ht, const void* key);
#define gu_map_set(MAP, KEYP, V, VAL) \ #define gu_map_set(MAP, KEYP, V, VAL) \
@@ -53,13 +53,13 @@ gu_map_find(GuMap* ht, const void* key);
*gu_map_set_p_ = (VAL); \ *gu_map_set_p_ = (VAL); \
GU_END GU_END
const void* GU_API_DECL const void*
gu_map_find_key(GuMap* ht, const void* key); gu_map_find_key(GuMap* ht, const void* key);
bool GU_API_DECL bool
gu_map_has(GuMap* ht, const void* key); gu_map_has(GuMap* ht, const void* key);
void* GU_API_DECL void*
gu_map_insert(GuMap* ht, const void* key); gu_map_insert(GuMap* ht, const void* key);
#define gu_map_put(MAP, KEYP, V, VAL) \ #define gu_map_put(MAP, KEYP, V, VAL) \
@@ -68,7 +68,7 @@ gu_map_insert(GuMap* ht, const void* key);
*gu_map_put_p_ = (VAL); \ *gu_map_put_p_ = (VAL); \
GU_END GU_END
void GU_API_DECL void
gu_map_iter(GuMap* ht, GuMapItor* itor, GuExn* err); gu_map_iter(GuMap* ht, GuMapItor* itor, GuExn* err);
typedef struct { typedef struct {
@@ -76,7 +76,7 @@ typedef struct {
void* value; void* value;
} GuMapKeyValue; } GuMapKeyValue;
GuEnum* GU_API_DECL GuEnum*
gu_map_enum(GuMap* ht, GuPool* pool); gu_map_enum(GuMap* ht, GuPool* pool);
typedef GuMap GuIntMap; typedef GuMap GuIntMap;

View File

@@ -23,7 +23,7 @@
static const size_t static const size_t
// Maximum request size for a chunk. The actual maximum chunk size // Maximum request size for a chunk. The actual maximum chunk size
// may be somewhat larger. // may be somewhat larger.
gu_mem_chunk_max_size = 1024 * sizeof(void*), gu_mem_chunk_max_size = 1024 * sizeof(void*),
// number of bytes to allocate in the pool when it is created // number of bytes to allocate in the pool when it is created
gu_mem_pool_initial_size = 24 * sizeof(void*), gu_mem_pool_initial_size = 24 * sizeof(void*),
@@ -90,7 +90,7 @@ gu_mem_padovan(size_t min)
return a; return a;
} }
void* GU_API void*
gu_mem_buf_realloc(void* old_buf, size_t min_size, size_t* real_size_out) gu_mem_buf_realloc(void* old_buf, size_t min_size, size_t* real_size_out)
{ {
size_t min_blocks = ((min_size + gu_malloc_overhead - 1) / size_t min_blocks = ((min_size + gu_malloc_overhead - 1) /
@@ -101,13 +101,14 @@ gu_mem_buf_realloc(void* old_buf, size_t min_size, size_t* real_size_out)
*real_size_out = buf ? size : 0; *real_size_out = buf ? size : 0;
return buf; return buf;
} }
void*
GU_API void*
gu_mem_buf_alloc(size_t min_size, size_t* real_size_out) gu_mem_buf_alloc(size_t min_size, size_t* real_size_out)
{ {
return gu_mem_buf_realloc(NULL, min_size, real_size_out); return gu_mem_buf_realloc(NULL, min_size, real_size_out);
} }
void GU_API void
gu_mem_buf_free(void* buf) gu_mem_buf_free(void* buf)
{ {
gu_mem_free(buf); gu_mem_free(buf);
@@ -162,7 +163,7 @@ gu_init_pool(uint8_t* buf, size_t sz)
return pool; return pool;
} }
GuPool* GU_API GuPool*
gu_local_pool_(uint8_t* buf, size_t sz) gu_local_pool_(uint8_t* buf, size_t sz)
{ {
GuPool* pool = gu_init_pool(buf, sz); GuPool* pool = gu_init_pool(buf, sz);
@@ -170,7 +171,7 @@ gu_local_pool_(uint8_t* buf, size_t sz)
return pool; return pool;
} }
GuPool* GU_API GuPool*
gu_new_pool(void) gu_new_pool(void)
{ {
size_t sz = GU_FLEX_SIZE(GuPool, init_buf, gu_mem_pool_initial_size); size_t sz = GU_FLEX_SIZE(GuPool, init_buf, gu_mem_pool_initial_size);
@@ -179,7 +180,7 @@ gu_new_pool(void)
return pool; return pool;
} }
GuPool* GU_API GuPool*
gu_mmap_pool(char* fpath, void* addr, size_t size, void**pptr) gu_mmap_pool(char* fpath, void* addr, size_t size, void**pptr)
{ {
#if !defined(_WIN32) && !defined(_WIN64) #if !defined(_WIN32) && !defined(_WIN64)
@@ -281,7 +282,7 @@ gu_pool_avail(GuPool* pool)
return (size_t) pool->right_edge - (size_t) pool->left_edge; return (size_t) pool->right_edge - (size_t) pool->left_edge;
} }
void* GU_API void*
gu_pool_malloc_unaligned(GuPool* pool, size_t size) gu_pool_malloc_unaligned(GuPool* pool, size_t size)
{ {
if (size > gu_pool_avail(pool)) { if (size > gu_pool_avail(pool)) {
@@ -294,7 +295,7 @@ gu_pool_malloc_unaligned(GuPool* pool, size_t size)
return addr; return addr;
} }
void* GU_API void*
gu_malloc_prefixed(GuPool* pool, size_t pre_align, size_t pre_size, gu_malloc_prefixed(GuPool* pool, size_t pre_align, size_t pre_size,
size_t align, size_t size) size_t align, size_t size)
{ {
@@ -327,14 +328,13 @@ gu_malloc_prefixed(GuPool* pool, size_t pre_align, size_t pre_size,
return ret; return ret;
} }
void* GU_API void*
gu_malloc_aligned(GuPool* pool, size_t size, size_t align) gu_malloc_aligned(GuPool* pool, size_t size, size_t align)
{ {
return gu_malloc_prefixed(pool, 1, 0, align, size); return gu_malloc_prefixed(pool, 1, 0, align, size);
} }
GU_API void
void
gu_pool_finally(GuPool* pool, GuFinalizer* finalizer) gu_pool_finally(GuPool* pool, GuFinalizer* finalizer)
{ {
gu_require(pool->type != GU_POOL_MMAP); gu_require(pool->type != GU_POOL_MMAP);
@@ -344,7 +344,7 @@ gu_pool_finally(GuPool* pool, GuFinalizer* finalizer)
pool->finalizers = node; pool->finalizers = node;
} }
void GU_API void
gu_pool_free(GuPool* pool) gu_pool_free(GuPool* pool)
{ {
GuFinalizerNode* node = pool->finalizers; GuFinalizerNode* node = pool->finalizers;

View File

@@ -1,22 +1,3 @@
/*
* Copyright 2010 University of Helsinki.
*
* This file is part of libgu.
*
* Libgu is free software: you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Libgu is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with libgu. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file /** @file
* *
* Memory allocation tools. * Memory allocation tools.
@@ -49,7 +30,7 @@ gu_new_pool(void);
//@private //@private
GuPool* GU_API_DECL GuPool*
gu_local_pool_(uint8_t* init_buf, size_t sz); gu_local_pool_(uint8_t* init_buf, size_t sz);
//@private //@private
@@ -75,7 +56,7 @@ gu_local_pool_(uint8_t* init_buf, size_t sz);
*/ */
/// Create a pool stored in a memory mapped file. /// Create a pool stored in a memory mapped file.
GuPool* GU_API_DECL GuPool*
gu_mmap_pool(char* fpath, void* addr, size_t size, void**pptr); gu_mmap_pool(char* fpath, void* addr, size_t size, void**pptr);
//@} //@}
@@ -84,7 +65,7 @@ gu_mmap_pool(char* fpath, void* addr, size_t size, void**pptr);
/// Free a memory pool and all objects allocated from it. /// Free a memory pool and all objects allocated from it.
void GU_API_DECL void
gu_pool_free(GU_ONLY GuPool* pool); gu_pool_free(GU_ONLY GuPool* pool);
/**< /**<
* When the pool is freed, all finalizers registered by * When the pool is freed, all finalizers registered by
@@ -100,10 +81,10 @@ gu_pool_free(GU_ONLY GuPool* pool);
/// Allocate memory with a specified alignment. /// Allocate memory with a specified alignment.
void* GU_API_DECL void*
gu_malloc_aligned(GuPool* pool, size_t size, size_t alignment); gu_malloc_aligned(GuPool* pool, size_t size, size_t alignment);
void* GU_API_DECL void*
gu_malloc_prefixed(GuPool* pool, size_t pre_align, size_t pre_size, gu_malloc_prefixed(GuPool* pool, size_t pre_align, size_t pre_size,
size_t align, size_t size); size_t align, size_t size);
@@ -173,7 +154,7 @@ struct GuFinalizer {
}; };
/// Register a finalizer. /// Register a finalizer.
void gu_pool_finally(GuPool* pool, GuFinalizer* fini); GU_API_DECL void gu_pool_finally(GuPool* pool, GuFinalizer* fini);
/**< Register \p fini to be called when \p pool is destroyed. The /**< Register \p fini to be called when \p pool is destroyed. The
* finalizers are called in reverse order of registration. * finalizers are called in reverse order of registration.
@@ -197,7 +178,7 @@ void gu_pool_finally(GuPool* pool, GuFinalizer* fini);
/// Allocate a new memory buffer. /// Allocate a new memory buffer.
GU_ONLY void* GU_API_DECL void*
gu_mem_buf_alloc(size_t min_size, size_t* real_size); gu_mem_buf_alloc(size_t min_size, size_t* real_size);
/**< /**<
* @param min_size The minimum acceptable size for a returned memory block. * @param min_size The minimum acceptable size for a returned memory block.
@@ -210,7 +191,7 @@ gu_mem_buf_alloc(size_t min_size, size_t* real_size);
/// Allocate a new memory buffer to replace an old one. /// Allocate a new memory buffer to replace an old one.
GU_ONLY void* GU_API_DECL void*
gu_mem_buf_realloc( gu_mem_buf_realloc(
GU_NULL GU_ONLY GU_RETURNED GU_NULL GU_ONLY GU_RETURNED
void* buf, void* buf,
@@ -219,7 +200,7 @@ gu_mem_buf_realloc(
/// Free a memory buffer. /// Free a memory buffer.
void GU_API_DECL void
gu_mem_buf_free(GU_ONLY void* buf); gu_mem_buf_free(GU_ONLY void* buf);

View File

@@ -65,7 +65,7 @@ gu_out_fini(GuFinalizer* self)
} }
} }
GuOut* GU_API GuOut*
gu_new_out(GuOutStream* stream, GuPool* pool) gu_new_out(GuOutStream* stream, GuPool* pool)
{ {
gu_require(stream != NULL); gu_require(stream != NULL);
@@ -82,7 +82,6 @@ gu_new_out(GuOutStream* stream, GuPool* pool)
extern inline bool extern inline bool
gu_out_try_buf_(GuOut* out, const uint8_t* src, size_t len); gu_out_try_buf_(GuOut* out, const uint8_t* src, size_t len);
extern inline size_t extern inline size_t
gu_out_bytes(GuOut* out, const uint8_t* buf, size_t len, GuExn* err); gu_out_bytes(GuOut* out, const uint8_t* buf, size_t len, GuExn* err);
@@ -96,10 +95,7 @@ gu_out_output(GuOut* out, const uint8_t* src, size_t len, GuExn* err)
return out->stream->output(out->stream, src, len, err); return out->stream->output(out->stream, src, len, err);
} }
GU_API void
void
gu_out_flush(GuOut* out, GuExn* err) gu_out_flush(GuOut* out, GuExn* err)
{ {
GuOutStream* stream = out->stream; GuOutStream* stream = out->stream;
@@ -114,7 +110,7 @@ gu_out_flush(GuOut* out, GuExn* err)
} }
} }
uint8_t* GU_API uint8_t*
gu_out_begin_span(GuOut* out, size_t req, size_t* sz_out, GuExn* err) gu_out_begin_span(GuOut* out, size_t req, size_t* sz_out, GuExn* err)
{ {
if (!out->buf_end && !gu_out_begin_buf(out, req, err)) { if (!out->buf_end && !gu_out_begin_buf(out, req, err)) {
@@ -124,7 +120,7 @@ gu_out_begin_span(GuOut* out, size_t req, size_t* sz_out, GuExn* err)
return &out->buf_end[out->buf_curr]; return &out->buf_end[out->buf_curr];
} }
void GU_API void
gu_out_end_span(GuOut* out, size_t sz) gu_out_end_span(GuOut* out, size_t sz)
{ {
ptrdiff_t new_curr = (ptrdiff_t) sz + out->buf_curr; ptrdiff_t new_curr = (ptrdiff_t) sz + out->buf_curr;
@@ -132,7 +128,7 @@ gu_out_end_span(GuOut* out, size_t sz)
out->buf_curr = new_curr; out->buf_curr = new_curr;
} }
size_t GU_API size_t
gu_out_bytes_(GuOut* restrict out, const uint8_t* restrict src, size_t len, gu_out_bytes_(GuOut* restrict out, const uint8_t* restrict src, size_t len,
GuExn* err) GuExn* err)
{ {
@@ -149,8 +145,8 @@ gu_out_bytes_(GuOut* restrict out, const uint8_t* restrict src, size_t len,
return gu_out_output(out, src, len, err); return gu_out_output(out, src, len, err);
} }
GU_API void
void gu_out_u8_(GuOut* restrict out, uint8_t u, GuExn* err) gu_out_u8_(GuOut* restrict out, uint8_t u, GuExn* err)
{ {
if (gu_out_begin_buf(out, 1, err)) { if (gu_out_begin_buf(out, 1, err)) {
if (gu_out_try_u8_(out, u)) { if (gu_out_try_u8_(out, u)) {
@@ -160,7 +156,6 @@ void gu_out_u8_(GuOut* restrict out, uint8_t u, GuExn* err)
gu_out_output(out, &u, 1, err); gu_out_output(out, &u, 1, err);
} }
extern inline void extern inline void
gu_out_u8(GuOut* restrict out, uint8_t u, GuExn* err); gu_out_u8(GuOut* restrict out, uint8_t u, GuExn* err);
@@ -222,7 +217,7 @@ gu_buffered_out_flush(GuOutStream* self, GuExn* err)
gu_out_flush(bos->real_out, err); gu_out_flush(bos->real_out, err);
} }
GuOut* GU_API GuOut*
gu_new_buffered_out(GuOut* out, size_t sz, GuPool* pool) gu_new_buffered_out(GuOut* out, size_t sz, GuPool* pool)
{ {
GuBufferedOutStream* b = GuBufferedOutStream* b =
@@ -238,7 +233,7 @@ gu_new_buffered_out(GuOut* out, size_t sz, GuPool* pool)
return gu_new_out(&b->stream, pool); return gu_new_out(&b->stream, pool);
} }
GuOut* GU_API GuOut*
gu_out_buffered(GuOut* out, GuPool* pool) gu_out_buffered(GuOut* out, GuPool* pool)
{ {
if (gu_out_is_buffered(out)) { if (gu_out_is_buffered(out)) {
@@ -251,13 +246,13 @@ gu_out_buffered(GuOut* out, GuPool* pool)
extern inline void extern inline void
gu_putc(char c, GuOut* out, GuExn* err); gu_putc(char c, GuOut* out, GuExn* err);
void GU_API void
gu_puts(const char* str, GuOut* out, GuExn* err) gu_puts(const char* str, GuOut* out, GuExn* err)
{ {
gu_out_bytes(out, (const uint8_t*) str, strlen(str), err); gu_out_bytes(out, (const uint8_t*) str, strlen(str), err);
} }
void GU_API void
gu_vprintf(const char* fmt, va_list args, GuOut* out, GuExn* err) gu_vprintf(const char* fmt, va_list args, GuOut* out, GuExn* err)
{ {
GuPool* tmp_pool = gu_local_pool(); GuPool* tmp_pool = gu_local_pool();
@@ -274,7 +269,7 @@ gu_vprintf(const char* fmt, va_list args, GuOut* out, GuExn* err)
gu_pool_free(tmp_pool); gu_pool_free(tmp_pool);
} }
void GU_API void
gu_printf(GuOut* out, GuExn* err, const char* fmt, ...) gu_printf(GuOut* out, GuExn* err, const char* fmt, ...)
{ {
va_list args; va_list args;

View File

@@ -28,7 +28,7 @@ struct GuOut {
GuFinalizer fini; GuFinalizer fini;
}; };
GuOut* GU_API_DECL GuOut*
gu_new_out(GuOutStream* stream, GuPool* pool); gu_new_out(GuOutStream* stream, GuPool* pool);
inline bool inline bool
@@ -37,23 +37,23 @@ gu_out_is_buffered(GuOut* out)
return !!out->stream->begin_buf; return !!out->stream->begin_buf;
} }
GuOut* GU_API_DECL GuOut*
gu_new_buffered_out(GuOut* out, size_t buf_sz, GuPool* pool); gu_new_buffered_out(GuOut* out, size_t buf_sz, GuPool* pool);
GuOut* GU_API_DECL GuOut*
gu_out_buffered(GuOut* out, GuPool* pool); gu_out_buffered(GuOut* out, GuPool* pool);
uint8_t* GU_API_DECL uint8_t*
gu_out_begin_span(GuOut* out, size_t req, size_t* sz_out, GuExn* err); gu_out_begin_span(GuOut* out, size_t req, size_t* sz_out, GuExn* err);
uint8_t* GU_API_DECL uint8_t*
gu_out_force_span(GuOut* out, size_t min, size_t max, size_t* sz_out, gu_out_force_span(GuOut* out, size_t min, size_t max, size_t* sz_out,
GuExn* err); GuExn* err);
void GU_API_DECL void
gu_out_end_span(GuOut* out, size_t sz); gu_out_end_span(GuOut* out, size_t sz);
size_t GU_API_DECL size_t
gu_out_bytes_(GuOut* restrict out, const uint8_t* restrict src, gu_out_bytes_(GuOut* restrict out, const uint8_t* restrict src,
size_t len, GuExn* err); size_t len, GuExn* err);
@@ -81,7 +81,7 @@ gu_out_bytes(GuOut* restrict out, const uint8_t* restrict src, size_t len,
return gu_out_bytes_(out, src, len, err); return gu_out_bytes_(out, src, len, err);
} }
void GU_API_DECL void
gu_out_flush(GuOut* out, GuExn* err); gu_out_flush(GuOut* out, GuExn* err);
inline bool inline bool
@@ -113,48 +113,46 @@ gu_out_s8(GuOut* restrict out, int8_t i, GuExn* err)
gu_out_u8(out, (uint8_t) i, err); gu_out_u8(out, (uint8_t) i, err);
} }
GU_API_DECL void
void
gu_out_u16le(GuOut* out, uint16_t u, GuExn* err); gu_out_u16le(GuOut* out, uint16_t u, GuExn* err);
void GU_API_DECL void
gu_out_u16be(GuOut* out, uint16_t u, GuExn* err); gu_out_u16be(GuOut* out, uint16_t u, GuExn* err);
void GU_API_DECL void
gu_out_s16le(GuOut* out, int16_t u, GuExn* err); gu_out_s16le(GuOut* out, int16_t u, GuExn* err);
void GU_API_DECL void
gu_out_s16be(GuOut* out, int16_t u, GuExn* err); gu_out_s16be(GuOut* out, int16_t u, GuExn* err);
void GU_API_DECL void
gu_out_u32le(GuOut* out, uint32_t u, GuExn* err); gu_out_u32le(GuOut* out, uint32_t u, GuExn* err);
void GU_API_DECL void
gu_out_u32be(GuOut* out, uint32_t u, GuExn* err); gu_out_u32be(GuOut* out, uint32_t u, GuExn* err);
void GU_API_DECL void
gu_out_s32le(GuOut* out, int32_t u, GuExn* err); gu_out_s32le(GuOut* out, int32_t u, GuExn* err);
void GU_API_DECL void
gu_out_s32be(GuOut* out, int32_t u, GuExn* err); gu_out_s32be(GuOut* out, int32_t u, GuExn* err);
void GU_API_DECL void
gu_out_u64le(GuOut* out, uint64_t u, GuExn* err); gu_out_u64le(GuOut* out, uint64_t u, GuExn* err);
void GU_API_DECL void
gu_out_u64be(GuOut* out, uint64_t u, GuExn* err); gu_out_u64be(GuOut* out, uint64_t u, GuExn* err);
void GU_API_DECL void
gu_out_s64le(GuOut* out, int64_t u, GuExn* err); gu_out_s64le(GuOut* out, int64_t u, GuExn* err);
void GU_API_DECL void
gu_out_s64be(GuOut* out, int64_t u, GuExn* err); gu_out_s64be(GuOut* out, int64_t u, GuExn* err);
void GU_API_DECL void
gu_out_f64le(GuOut* out, double d, GuExn* err); gu_out_f64le(GuOut* out, double d, GuExn* err);
void GU_API_DECL void
gu_out_f64be(GuOut* out, double d, GuExn* err); gu_out_f64be(GuOut* out, double d, GuExn* err);
inline void inline void
@@ -164,13 +162,13 @@ gu_putc(char c, GuOut* out, GuExn* err)
gu_out_u8(out, (uint8_t) ucs, err); gu_out_u8(out, (uint8_t) ucs, err);
} }
void GU_API_DECL void
gu_puts(const char* str, GuOut* out, GuExn* err); gu_puts(const char* str, GuOut* out, GuExn* err);
void GU_API_DECL void
gu_vprintf(const char* fmt, va_list args, GuOut* out, GuExn* err); gu_vprintf(const char* fmt, va_list args, GuOut* out, GuExn* err);
void GU_API_DECL void
gu_printf(GuOut* out, GuExn* err, const char* fmt, ...); gu_printf(GuOut* out, GuExn* err, const char* fmt, ...);
#endif // GU_OUT_H_ #endif // GU_OUT_H_

View File

@@ -50,7 +50,7 @@ gu_is_wheel_prime(int u)
return true; return true;
} }
int GU_INTERNAL int
gu_prime_inf(int i) gu_prime_inf(int i)
{ {
if (i < 2) { if (i < 2) {
@@ -75,7 +75,7 @@ gu_prime_inf(int i)
return d; return d;
} }
int GU_INTERNAL int
gu_prime_sup(int i) gu_prime_sup(int i)
{ {
if (i <= 2) { if (i <= 2) {
@@ -100,7 +100,7 @@ gu_prime_sup(int i)
return d; return d;
} }
bool GU_INTERNAL bool
gu_is_prime(int i) gu_is_prime(int i)
{ {
if (i < 2) { if (i < 2) {
@@ -114,13 +114,13 @@ gu_is_prime(int i)
} }
} }
bool GU_INTERNAL bool
gu_is_twin_prime(int i) gu_is_twin_prime(int i)
{ {
return gu_is_prime(i) && gu_is_prime(i - 2); return gu_is_prime(i) && gu_is_prime(i - 2);
} }
int GU_INTERNAL int
gu_twin_prime_inf(int i) gu_twin_prime_inf(int i)
{ {
while (true) { while (true) {
@@ -135,7 +135,7 @@ gu_twin_prime_inf(int i)
return i; return i;
} }
int GU_INTERNAL int
gu_twin_prime_sup(int i) gu_twin_prime_sup(int i)
{ {
if (i <= 5) { if (i <= 5) {

View File

@@ -3,14 +3,14 @@
#include <gu/defs.h> #include <gu/defs.h>
bool gu_is_prime(int i); GU_INTERNAL_DECL bool gu_is_prime(int i);
bool gu_is_twin_prime(int i); GU_INTERNAL_DECL bool gu_is_twin_prime(int i);
int gu_prime_inf(int i); GU_INTERNAL_DECL int gu_prime_inf(int i);
int gu_twin_prime_inf(int i); GU_INTERNAL_DECL int gu_twin_prime_inf(int i);
int gu_prime_sup(int i); GU_INTERNAL_DECL int gu_prime_sup(int i);
int gu_twin_prime_sup(int i); GU_INTERNAL_DECL int gu_twin_prime_sup(int i);
#endif // GU_PRIME_H_ #endif // GU_PRIME_H_

View File

@@ -15,7 +15,7 @@ gu_buf_fini(GuFinalizer* fin)
gu_mem_buf_free(buf->seq); gu_mem_buf_free(buf->seq);
} }
GuBuf* GU_API GuBuf*
gu_make_buf(size_t elem_size, GuPool* pool) gu_make_buf(size_t elem_size, GuPool* pool)
{ {
GuBuf* buf = gu_new(GuBuf, pool); GuBuf* buf = gu_new(GuBuf, pool);
@@ -50,12 +50,12 @@ gu_buf_flush(GuBuf* buf);
static GuSeq gu_empty_seq_ = {0}; static GuSeq gu_empty_seq_ = {0};
GuSeq* GU_API GuSeq*
gu_empty_seq() { gu_empty_seq() {
return &gu_empty_seq_; return &gu_empty_seq_;
} }
GuSeq* GU_API GuSeq*
gu_make_seq(size_t elem_size, size_t length, GuPool* pool) gu_make_seq(size_t elem_size, size_t length, GuPool* pool)
{ {
GuSeq* seq = gu_malloc(pool, sizeof(GuSeq) + elem_size * length); GuSeq* seq = gu_malloc(pool, sizeof(GuSeq) + elem_size * length);
@@ -69,7 +69,7 @@ gu_seq_length(GuSeq* seq);
extern void* extern void*
gu_seq_data(GuSeq* seq); gu_seq_data(GuSeq* seq);
GuSeq* GU_API GuSeq*
gu_alloc_seq_(size_t elem_size, size_t length) gu_alloc_seq_(size_t elem_size, size_t length)
{ {
if (length == 0) if (length == 0)
@@ -81,7 +81,7 @@ gu_alloc_seq_(size_t elem_size, size_t length)
return seq; return seq;
} }
GuSeq* GU_API GuSeq*
gu_realloc_seq_(GuSeq* seq, size_t elem_size, size_t length) gu_realloc_seq_(GuSeq* seq, size_t elem_size, size_t length)
{ {
size_t real_size; size_t real_size;
@@ -92,7 +92,7 @@ gu_realloc_seq_(GuSeq* seq, size_t elem_size, size_t length)
return new_seq; return new_seq;
} }
void GU_API void
gu_seq_free(GuSeq* seq) gu_seq_free(GuSeq* seq)
{ {
if (seq == NULL || seq == gu_empty_seq()) if (seq == NULL || seq == gu_empty_seq())
@@ -100,7 +100,7 @@ gu_seq_free(GuSeq* seq)
gu_mem_buf_free(seq); gu_mem_buf_free(seq);
} }
void GU_API void
gu_buf_require(GuBuf* buf, size_t req_len) gu_buf_require(GuBuf* buf, size_t req_len)
{ {
if (req_len <= buf->avail_len) { if (req_len <= buf->avail_len) {
@@ -120,7 +120,7 @@ gu_buf_require(GuBuf* buf, size_t req_len)
buf->avail_len = (real_size - sizeof(GuSeq)) / buf->elem_size; buf->avail_len = (real_size - sizeof(GuSeq)) / buf->elem_size;
} }
void* GU_API void*
gu_buf_extend_n(GuBuf* buf, size_t n_elems) gu_buf_extend_n(GuBuf* buf, size_t n_elems)
{ {
size_t len = gu_buf_length(buf); size_t len = gu_buf_length(buf);
@@ -130,14 +130,14 @@ gu_buf_extend_n(GuBuf* buf, size_t n_elems)
return &buf->seq->data[buf->elem_size * len]; return &buf->seq->data[buf->elem_size * len];
} }
void GU_API void
gu_buf_push_n(GuBuf* buf, const void* data, size_t n_elems) gu_buf_push_n(GuBuf* buf, const void* data, size_t n_elems)
{ {
void* p = gu_buf_extend_n(buf, n_elems); void* p = gu_buf_extend_n(buf, n_elems);
memcpy(p, data, buf->elem_size * n_elems); memcpy(p, data, buf->elem_size * n_elems);
} }
const void* GU_API const void*
gu_buf_trim_n(GuBuf* buf, size_t n_elems) gu_buf_trim_n(GuBuf* buf, size_t n_elems)
{ {
gu_require(n_elems <= gu_buf_length(buf)); gu_require(n_elems <= gu_buf_length(buf));
@@ -146,14 +146,14 @@ gu_buf_trim_n(GuBuf* buf, size_t n_elems)
return &buf->seq->data[buf->elem_size * new_len]; return &buf->seq->data[buf->elem_size * new_len];
} }
void GU_API void
gu_buf_pop_n(GuBuf* buf, size_t n_elems, void* data_out) gu_buf_pop_n(GuBuf* buf, size_t n_elems, void* data_out)
{ {
const void* p = gu_buf_trim_n(buf, n_elems); const void* p = gu_buf_trim_n(buf, n_elems);
memcpy(data_out, p, buf->elem_size * n_elems); memcpy(data_out, p, buf->elem_size * n_elems);
} }
GuSeq* GU_API GuSeq*
gu_buf_freeze(GuBuf* buf, GuPool* pool) gu_buf_freeze(GuBuf* buf, GuPool* pool)
{ {
size_t len = gu_buf_length(buf); size_t len = gu_buf_length(buf);
@@ -164,7 +164,7 @@ gu_buf_freeze(GuBuf* buf, GuPool* pool)
return seq; return seq;
} }
void* GU_API void*
gu_buf_insert(GuBuf* buf, size_t index) gu_buf_insert(GuBuf* buf, size_t index)
{ {
size_t len = buf->seq->len; size_t len = buf->seq->len;
@@ -225,13 +225,13 @@ gu_quick_sort(GuBuf *buf, GuOrder *order, int left, int right)
gu_quick_sort(buf, order, index+1, right); gu_quick_sort(buf, order, index+1, right);
} }
void GU_API void
gu_buf_sort(GuBuf *buf, GuOrder *order) gu_buf_sort(GuBuf *buf, GuOrder *order)
{ {
gu_quick_sort(buf, order, 0, gu_buf_length(buf) - 1); gu_quick_sort(buf, order, 0, gu_buf_length(buf) - 1);
} }
void* GU_API void*
gu_seq_binsearch_(GuSeq *seq, GuOrder *order, size_t elem_size, const void *key) gu_seq_binsearch_(GuSeq *seq, GuOrder *order, size_t elem_size, const void *key)
{ {
int i = 0; int i = 0;
@@ -254,7 +254,7 @@ gu_seq_binsearch_(GuSeq *seq, GuOrder *order, size_t elem_size, const void *key)
return NULL; return NULL;
} }
bool GU_API bool
gu_seq_binsearch_index_(GuSeq *seq, GuOrder *order, size_t elem_size, gu_seq_binsearch_index_(GuSeq *seq, GuOrder *order, size_t elem_size,
const void *key, size_t *pindex) const void *key, size_t *pindex)
{ {
@@ -324,14 +324,14 @@ gu_heap_siftup(GuBuf *buf, GuOrder *order,
gu_heap_siftdown(buf, order, value, startpos, pos); gu_heap_siftdown(buf, order, value, startpos, pos);
} }
void GU_API void
gu_buf_heap_push(GuBuf *buf, GuOrder *order, void *value) gu_buf_heap_push(GuBuf *buf, GuOrder *order, void *value)
{ {
gu_buf_extend(buf); gu_buf_extend(buf);
gu_heap_siftdown(buf, order, value, 0, gu_buf_length(buf)-1); gu_heap_siftdown(buf, order, value, 0, gu_buf_length(buf)-1);
} }
void GU_API void
gu_buf_heap_pop(GuBuf *buf, GuOrder *order, void* data_out) gu_buf_heap_pop(GuBuf *buf, GuOrder *order, void* data_out)
{ {
const void* last = gu_buf_trim(buf); // raises an error if empty const void* last = gu_buf_trim(buf); // raises an error if empty
@@ -344,7 +344,7 @@ gu_buf_heap_pop(GuBuf *buf, GuOrder *order, void* data_out)
} }
} }
void GU_API void
gu_buf_heap_replace(GuBuf *buf, GuOrder *order, void *value, void *data_out) gu_buf_heap_replace(GuBuf *buf, GuOrder *order, void *value, void *data_out)
{ {
gu_require(gu_buf_length(buf) > 0); gu_require(gu_buf_length(buf) > 0);
@@ -353,7 +353,7 @@ gu_buf_heap_replace(GuBuf *buf, GuOrder *order, void *value, void *data_out)
gu_heap_siftup(buf, order, value, 0); gu_heap_siftup(buf, order, value, 0);
} }
void GU_API void
gu_buf_heapify(GuBuf *buf, GuOrder *order) gu_buf_heapify(GuBuf *buf, GuOrder *order)
{ {
size_t middle = gu_buf_length(buf) / 2; size_t middle = gu_buf_length(buf) / 2;

View File

@@ -49,7 +49,7 @@ gu_string_buf_end(GuOutStream* stream, size_t sz, GuExn* err)
sbuf->buf->seq->len = len + sz; sbuf->buf->seq->len = len + sz;
} }
GuStringBuf* GU_API GuStringBuf*
gu_new_string_buf(GuPool* pool) gu_new_string_buf(GuPool* pool)
{ {
GuStringBuf* sbuf = gu_new(GuStringBuf, pool); GuStringBuf* sbuf = gu_new(GuStringBuf, pool);
@@ -62,13 +62,13 @@ gu_new_string_buf(GuPool* pool)
return sbuf; return sbuf;
} }
GuOut* GU_API GuOut*
gu_string_buf_out(GuStringBuf* sb) gu_string_buf_out(GuStringBuf* sb)
{ {
return sb->out; return sb->out;
} }
GuString GU_API GuString
gu_string_buf_freeze(GuStringBuf* sb, GuPool* pool) gu_string_buf_freeze(GuStringBuf* sb, GuPool* pool)
{ {
gu_out_flush(sb->out, NULL); gu_out_flush(sb->out, NULL);
@@ -82,33 +82,33 @@ gu_string_buf_freeze(GuStringBuf* sb, GuPool* pool)
return p; return p;
} }
char* GU_API char*
gu_string_buf_data(GuStringBuf* sb) gu_string_buf_data(GuStringBuf* sb)
{ {
gu_out_flush(sb->out, NULL); gu_out_flush(sb->out, NULL);
return gu_buf_data(sb->buf); return gu_buf_data(sb->buf);
} }
size_t GU_API size_t
gu_string_buf_length(GuStringBuf* sb) gu_string_buf_length(GuStringBuf* sb)
{ {
gu_out_flush(sb->out, NULL); gu_out_flush(sb->out, NULL);
return gu_buf_length(sb->buf); return gu_buf_length(sb->buf);
} }
void GU_API void
gu_string_buf_flush(GuStringBuf* sb) gu_string_buf_flush(GuStringBuf* sb)
{ {
gu_buf_flush(sb->buf); gu_buf_flush(sb->buf);
} }
GuIn* GU_API GuIn*
gu_string_in(GuString s, GuPool* pool) gu_string_in(GuString s, GuPool* pool)
{ {
return gu_data_in((uint8_t*) s, strlen(s), pool); return gu_data_in((uint8_t*) s, strlen(s), pool);
} }
GuString GU_API GuString
gu_string_copy(GuString string, GuPool* pool) gu_string_copy(GuString string, GuPool* pool)
{ {
size_t len = strlen(string); size_t len = strlen(string);
@@ -117,13 +117,13 @@ gu_string_copy(GuString string, GuPool* pool)
return p; return p;
} }
void GU_API void
gu_string_write(GuString s, GuOut* out, GuExn* err) gu_string_write(GuString s, GuOut* out, GuExn* err)
{ {
gu_out_bytes(out, (uint8_t*) s, strlen(s), err); gu_out_bytes(out, (uint8_t*) s, strlen(s), err);
} }
GuString GU_API GuString
gu_string_read(size_t len, GuPool* pool, GuIn* in, GuExn* err) gu_string_read(size_t len, GuPool* pool, GuIn* in, GuExn* err)
{ {
char* buf = alloca(len*6+1); char* buf = alloca(len*6+1);
@@ -139,7 +139,7 @@ gu_string_read(size_t len, GuPool* pool, GuIn* in, GuExn* err)
return p; return p;
} }
GuString GU_API GuString
gu_string_read_latin1(size_t len, GuPool* pool, GuIn* in, GuExn* err) gu_string_read_latin1(size_t len, GuPool* pool, GuIn* in, GuExn* err)
{ {
char* p = gu_malloc_aligned(pool, len+1, 2); char* p = gu_malloc_aligned(pool, len+1, 2);
@@ -148,7 +148,7 @@ gu_string_read_latin1(size_t len, GuPool* pool, GuIn* in, GuExn* err)
return p; return p;
} }
GuString GU_API GuString
gu_format_string_v(const char* fmt, va_list args, GuPool* pool) gu_format_string_v(const char* fmt, va_list args, GuPool* pool)
{ {
GuPool* tmp_pool = gu_local_pool(); GuPool* tmp_pool = gu_local_pool();
@@ -161,7 +161,7 @@ gu_format_string_v(const char* fmt, va_list args, GuPool* pool)
return s; return s;
} }
GuString GU_API GuString
gu_format_string(GuPool* pool, const char* fmt, ...) gu_format_string(GuPool* pool, const char* fmt, ...)
{ {
va_list args; va_list args;
@@ -171,7 +171,7 @@ gu_format_string(GuPool* pool, const char* fmt, ...)
return s; return s;
} }
bool GU_API bool
gu_string_to_int(GuString s, int *res) gu_string_to_int(GuString s, int *res)
{ {
bool neg = false; bool neg = false;
@@ -195,7 +195,7 @@ gu_string_to_int(GuString s, int *res)
return true; return true;
} }
bool GU_API bool
gu_string_to_double(GuString s, double *res) gu_string_to_double(GuString s, double *res)
{ {
bool neg = false; bool neg = false;
@@ -231,7 +231,7 @@ gu_string_to_double(GuString s, double *res)
return true; return true;
} }
void GU_API void
gu_double_to_string(double val, GuOut* out, GuExn* err) gu_double_to_string(double val, GuOut* out, GuExn* err)
{ {
int ival = (int) val; int ival = (int) val;
@@ -254,7 +254,7 @@ gu_double_to_string(double val, GuOut* out, GuExn* err)
} }
} }
bool GU_API bool
gu_string_is_prefix(GuString s1, GuString s2) gu_string_is_prefix(GuString s1, GuString s2)
{ {
size_t len1 = strlen(s1); size_t len1 = strlen(s1);
@@ -274,7 +274,7 @@ gu_string_is_prefix(GuString s1, GuString s2)
return true; return true;
} }
GuHash GU_API GuHash
gu_string_hash(GuHash h, GuString s) gu_string_hash(GuHash h, GuString s)
{ {
return gu_hash_bytes(h, (uint8_t*)s, strlen(s)); return gu_hash_bytes(h, (uint8_t*)s, strlen(s));
@@ -287,7 +287,7 @@ gu_string_eq_fn(GuEquality* self, const void* p1, const void* p2)
return strcmp((GuString) p1, (GuString) p2) == 0; return strcmp((GuString) p1, (GuString) p2) == 0;
} }
GU_API_DATA GuEquality gu_string_equality[1] = { { gu_string_eq_fn } }; GU_API GuEquality gu_string_equality[1] = { { gu_string_eq_fn } };
static int static int
gu_string_cmp_fn(GuOrder* self, const void* p1, const void* p2) gu_string_cmp_fn(GuOrder* self, const void* p1, const void* p2)
@@ -296,7 +296,7 @@ gu_string_cmp_fn(GuOrder* self, const void* p1, const void* p2)
return strcmp((GuString) p1, (GuString) p2); return strcmp((GuString) p1, (GuString) p2);
} }
GU_API_DATA GuOrder gu_string_order[1] = { { gu_string_cmp_fn } }; GU_API GuOrder gu_string_order[1] = { { gu_string_cmp_fn } };
static GuHash static GuHash
gu_string_hasher_hash(GuHasher* self, const void* p) gu_string_hasher_hash(GuHasher* self, const void* p)
@@ -305,7 +305,7 @@ gu_string_hasher_hash(GuHasher* self, const void* p)
return gu_string_hash(0, (GuString) p); return gu_string_hash(0, (GuString) p);
} }
GU_API_DATA GuHasher gu_string_hasher[1] = { GU_API GuHasher gu_string_hasher[1] = {
{ {
.eq = { gu_string_eq_fn }, .eq = { gu_string_eq_fn },
.hash = gu_string_hasher_hash .hash = gu_string_hasher_hash

View File

@@ -7,75 +7,75 @@
typedef const char* GuString; typedef const char* GuString;
GuString GU_API_DECL GuString
gu_string_copy(GuString string, GuPool* pool); gu_string_copy(GuString string, GuPool* pool);
void GU_API_DECL void
gu_string_write(GuString string, GuOut* out, GuExn* err); gu_string_write(GuString string, GuOut* out, GuExn* err);
GuString GU_API_DECL GuString
gu_string_read(size_t len, GuPool* pool, GuIn* in, GuExn* err); gu_string_read(size_t len, GuPool* pool, GuIn* in, GuExn* err);
GuString GU_API_DECL GuString
gu_string_read_latin1(size_t len, GuPool* pool, GuIn* in, GuExn* err); gu_string_read_latin1(size_t len, GuPool* pool, GuIn* in, GuExn* err);
GuIn* GU_API_DECL GuIn*
gu_string_in(GuString string, GuPool* pool); gu_string_in(GuString string, GuPool* pool);
typedef struct GuStringBuf GuStringBuf; typedef struct GuStringBuf GuStringBuf;
GuStringBuf* GU_API_DECL GuStringBuf*
gu_new_string_buf(GuPool* pool); gu_new_string_buf(GuPool* pool);
GuOut* GU_API_DECL GuOut*
gu_string_buf_out(GuStringBuf* sb); gu_string_buf_out(GuStringBuf* sb);
GuString GU_API_DECL GuString
gu_string_buf_freeze(GuStringBuf* sb, GuPool* pool); gu_string_buf_freeze(GuStringBuf* sb, GuPool* pool);
char* GU_API_DECL char*
gu_string_buf_data(GuStringBuf* sb); gu_string_buf_data(GuStringBuf* sb);
size_t GU_API_DECL size_t
gu_string_buf_length(GuStringBuf* sb); gu_string_buf_length(GuStringBuf* sb);
void GU_API_DECL void
gu_string_buf_flush(GuStringBuf* sb); gu_string_buf_flush(GuStringBuf* sb);
GuString GU_API_DECL GuString
gu_format_string_v(const char* fmt, va_list args, GuPool* pool); gu_format_string_v(const char* fmt, va_list args, GuPool* pool);
GuString GU_API_DECL GuString
gu_format_string(GuPool* pool, const char* fmt, ...); gu_format_string(GuPool* pool, const char* fmt, ...);
bool GU_API_DECL bool
gu_string_to_int(GuString s, int *res); gu_string_to_int(GuString s, int *res);
bool GU_API_DECL bool
gu_string_to_double(GuString s, double *res); gu_string_to_double(GuString s, double *res);
void GU_API_DECL void
gu_double_to_string(double val, GuOut* out, GuExn* err); gu_double_to_string(double val, GuOut* out, GuExn* err);
bool GU_API_DECL bool
gu_string_is_prefix(GuString s1, GuString s2); gu_string_is_prefix(GuString s1, GuString s2);
#endif // GU_STRING_H_ #endif // GU_STRING_H_
#if defined(GU_FUN_H_) && !defined(GU_STRING_H_FUN_) #if defined(GU_FUN_H_) && !defined(GU_STRING_H_FUN_)
#define GU_STRING_H_FUN_ #define GU_STRING_H_FUN_
GU_API_DATA_DECL GuEquality gu_string_equality[1]; GU_API_DECL extern GuEquality gu_string_equality[1];
GU_API_DATA_DECL GuOrder gu_string_order[1]; GU_API_DECL extern GuOrder gu_string_order[1];
#endif #endif
#if defined(GU_HASH_H_) && !defined(GU_STRING_H_HASH_) #if defined(GU_HASH_H_) && !defined(GU_STRING_H_HASH_)
#define GU_STRING_H_HASH_ #define GU_STRING_H_HASH_
GuHash GU_API_DECL GuHash
gu_string_hash(GuHash h, GuString s); gu_string_hash(GuHash h, GuString s);
GU_API_DATA GuHasher gu_string_hasher[1]; GU_API_DECL extern GuHasher gu_string_hasher[1];
#endif #endif
#if defined(GU_SEQ_H_) && !defined(GU_STRING_H_SEQ_) #if defined(GU_SEQ_H_) && !defined(GU_STRING_H_SEQ_)

View File

@@ -2,7 +2,7 @@
#include <gu/assert.h> #include <gu/assert.h>
#include <stdlib.h> #include <stdlib.h>
bool GU_API bool
gu_char_is_valid(char c) gu_char_is_valid(char c)
{ {
if (c < 0) { if (c < 0) {
@@ -18,7 +18,7 @@ gu_char_is_valid(char c)
return UINT64_C(0x7ffffffefffffffe) & (UINT64_C(1) << (c - 64)); return UINT64_C(0x7ffffffefffffffe) & (UINT64_C(1) << (c - 64));
} }
char GU_API char
gu_ucs_char(GuUCS uc, GuExn* err) gu_ucs_char(GuUCS uc, GuExn* err)
{ {
if (0 <= uc && uc <= 127) { if (0 <= uc && uc <= 127) {
@@ -31,7 +31,7 @@ gu_ucs_char(GuUCS uc, GuExn* err)
return 0; return 0;
} }
size_t GU_API size_t
gu_str_to_ucs(const char* cbuf, size_t len, GuUCS* ubuf, GuExn* err) gu_str_to_ucs(const char* cbuf, size_t len, GuUCS* ubuf, GuExn* err)
{ {
size_t n = 0; size_t n = 0;
@@ -47,7 +47,7 @@ gu_str_to_ucs(const char* cbuf, size_t len, GuUCS* ubuf, GuExn* err)
return n; return n;
} }
size_t GU_API size_t
gu_ucs_to_str(const GuUCS* ubuf, size_t len, char* cbuf, GuExn* err) gu_ucs_to_str(const GuUCS* ubuf, size_t len, char* cbuf, GuExn* err)
{ {
size_t n = 0; size_t n = 0;
@@ -66,7 +66,7 @@ gu_ucs_to_str(const GuUCS* ubuf, size_t len, char* cbuf, GuExn* err)
extern inline bool extern inline bool
gu_ucs_valid(GuUCS ucs); gu_ucs_valid(GuUCS ucs);
GuUCS GU_API GuUCS
gu_char_ucs(char c) gu_char_ucs(char c)
{ {
gu_require(gu_char_is_valid(c)); gu_require(gu_char_is_valid(c));
@@ -4789,14 +4789,14 @@ bool gu_ucs_is_space(GuUCS c)
} }
unipred(gu_ucs_is_cntrl,GENCAT_CC) GU_API unipred(gu_ucs_is_cntrl,GENCAT_CC)
unipred(gu_ucs_is_print, (GENCAT_MC | GENCAT_NO | GENCAT_SK | GENCAT_ME | GENCAT_ND | GENCAT_PO | GENCAT_LT | GENCAT_PC | GENCAT_SM | GENCAT_ZS | GENCAT_LU | GENCAT_PD | GENCAT_SO | GENCAT_PE | GENCAT_PF | GENCAT_PS | GENCAT_SC | GENCAT_LL | GENCAT_LM | GENCAT_PI | GENCAT_NL | GENCAT_MN | GENCAT_LO)) GU_API unipred(gu_ucs_is_print, (GENCAT_MC | GENCAT_NO | GENCAT_SK | GENCAT_ME | GENCAT_ND | GENCAT_PO | GENCAT_LT | GENCAT_PC | GENCAT_SM | GENCAT_ZS | GENCAT_LU | GENCAT_PD | GENCAT_SO | GENCAT_PE | GENCAT_PF | GENCAT_PS | GENCAT_SC | GENCAT_LL | GENCAT_LM | GENCAT_PI | GENCAT_NL | GENCAT_MN | GENCAT_LO))
unipred(gu_ucs_is_upper,(GENCAT_LU|GENCAT_LT)) GU_API unipred(gu_ucs_is_upper,(GENCAT_LU|GENCAT_LT))
unipred(gu_ucs_is_lower,GENCAT_LL) GU_API unipred(gu_ucs_is_lower,GENCAT_LL)
unipred(gu_ucs_is_alpha,(GENCAT_LL|GENCAT_LU|GENCAT_LT|GENCAT_LM|GENCAT_LO)) GU_API unipred(gu_ucs_is_alpha,(GENCAT_LL|GENCAT_LU|GENCAT_LT|GENCAT_LM|GENCAT_LO))
unipred(gu_ucs_is_digit,GENCAT_ND) GU_API unipred(gu_ucs_is_digit,GENCAT_ND)
unipred(gu_ucs_is_alnum,(GENCAT_LT|GENCAT_LU|GENCAT_LL|GENCAT_LM|GENCAT_LO| GU_API unipred(gu_ucs_is_alnum,(GENCAT_LT|GENCAT_LU|GENCAT_LL|GENCAT_LM|GENCAT_LO|
GENCAT_MC|GENCAT_ME|GENCAT_MN| GENCAT_MC|GENCAT_ME|GENCAT_MN|
GENCAT_NO|GENCAT_ND|GENCAT_NL)) GENCAT_NO|GENCAT_ND|GENCAT_NL))
@@ -4808,11 +4808,11 @@ GuUCS p(GuUCS c) \
return c+rule->to;\ return c+rule->to;\
} }
caseconv(gu_ucs_to_upper,updist) GU_API caseconv(gu_ucs_to_upper,updist)
caseconv(gu_ucs_to_lower,lowdist) GU_API caseconv(gu_ucs_to_lower,lowdist)
caseconv(gu_ucs_to_title,titledist) GU_API caseconv(gu_ucs_to_title,titledist)
int gu_ucs_gen_cat(GuUCS c) GU_API int gu_ucs_gen_cat(GuUCS c)
{ {
return getrule(allchars,NUM_BLOCKS,c)->catnumber; return getrule(allchars,NUM_BLOCKS,c)->catnumber;
} }

View File

@@ -15,7 +15,7 @@ typedef int32_t GuUCS;
#define GU_UCS_MAX ((GuUCS)(0x10FFFF)) #define GU_UCS_MAX ((GuUCS)(0x10FFFF))
bool GU_API_DECL bool
gu_char_is_valid(char c); gu_char_is_valid(char c);
inline bool inline bool
@@ -24,32 +24,32 @@ gu_ucs_valid(GuUCS ucs)
return ucs >= 0 && ucs <= GU_UCS_MAX; return ucs >= 0 && ucs <= GU_UCS_MAX;
} }
GuUCS GU_API_DECL GuUCS
gu_char_ucs(char c); gu_char_ucs(char c);
char GU_API_DECL char
gu_ucs_char(GuUCS uc, GuExn* err); gu_ucs_char(GuUCS uc, GuExn* err);
size_t GU_API_DECL size_t
gu_str_to_ucs(const char* cbuf, size_t len, GuUCS* ubuf, GuExn* err); gu_str_to_ucs(const char* cbuf, size_t len, GuUCS* ubuf, GuExn* err);
size_t GU_API_DECL size_t
gu_ucs_to_str(const GuUCS* ubuf, size_t len, char* cbuf, GuExn* err); gu_ucs_to_str(const GuUCS* ubuf, size_t len, char* cbuf, GuExn* err);
bool gu_ucs_is_upper(GuUCS c); GU_API_DECL bool gu_ucs_is_upper(GuUCS c);
bool gu_ucs_is_digit(GuUCS c); GU_API_DECL bool gu_ucs_is_digit(GuUCS c);
bool gu_ucs_is_alpha(GuUCS c); GU_API_DECL bool gu_ucs_is_alpha(GuUCS c);
bool gu_ucs_is_cntrl(GuUCS c); GU_API_DECL bool gu_ucs_is_cntrl(GuUCS c);
bool gu_ucs_is_space(GuUCS c); GU_API_DECL bool gu_ucs_is_space(GuUCS c);
bool gu_ucs_is_print(GuUCS c); GU_API_DECL bool gu_ucs_is_print(GuUCS c);
bool gu_ucs_is_lower(GuUCS c); GU_API_DECL bool gu_ucs_is_lower(GuUCS c);
bool gu_ucs_is_alnum(GuUCS c); GU_API_DECL bool gu_ucs_is_alnum(GuUCS c);
GuUCS gu_ucs_to_lower(GuUCS c); GU_API_DECL GuUCS gu_ucs_to_lower(GuUCS c);
GuUCS gu_ucs_to_upper(GuUCS c); GU_API_DECL GuUCS gu_ucs_to_upper(GuUCS c);
GuUCS gu_ucs_to_title(GuUCS c); GU_API_DECL GuUCS gu_ucs_to_title(GuUCS c);
int gu_ucs_is_gencat(GuUCS wc); GU_API_DECL int gu_ucs_is_gencat(GuUCS wc);
#endif // GU_ISO10646_H_ #endif // GU_ISO10646_H_

View File

@@ -1,7 +1,7 @@
#include <gu/assert.h> #include <gu/assert.h>
#include <gu/utf8.h> #include <gu/utf8.h>
GuUCS GU_API GuUCS
gu_utf8_decode(const uint8_t** src_inout) gu_utf8_decode(const uint8_t** src_inout)
{ {
const uint8_t* src = *src_inout; const uint8_t* src = *src_inout;
@@ -26,7 +26,7 @@ gu_utf8_decode(const uint8_t** src_inout)
return (GuUCS) u; return (GuUCS) u;
} }
GuUCS GU_API GuUCS
gu_in_utf8_(GuIn* in, GuExn* err) gu_in_utf8_(GuIn* in, GuExn* err)
{ {
uint8_t c = gu_in_u8(in, err); uint8_t c = gu_in_u8(in, err);
@@ -79,7 +79,7 @@ fail:
extern inline GuUCS extern inline GuUCS
gu_in_utf8(GuIn* in, GuExn* err); gu_in_utf8(GuIn* in, GuExn* err);
void GU_API void
gu_in_utf8_buf(uint8_t** buf, GuIn* in, GuExn* err) gu_in_utf8_buf(uint8_t** buf, GuIn* in, GuExn* err)
{ {
uint8_t* p = *buf; uint8_t* p = *buf;
@@ -122,7 +122,7 @@ fail:
return; return;
} }
void GU_API void
gu_utf8_encode(GuUCS ucs, uint8_t** buf) gu_utf8_encode(GuUCS ucs, uint8_t** buf)
{ {
gu_require(gu_ucs_valid(ucs)); gu_require(gu_ucs_valid(ucs));
@@ -163,7 +163,7 @@ gu_utf8_encode(GuUCS ucs, uint8_t** buf)
} }
} }
void GU_API void
gu_out_utf8_(GuUCS ucs, GuOut* out, GuExn* err) gu_out_utf8_(GuUCS ucs, GuOut* out, GuExn* err)
{ {
uint8_t buf[6]; uint8_t buf[6];

View File

@@ -31,13 +31,13 @@ gu_out_utf8(GuUCS ucs, GuOut* out, GuExn* err)
// Helper functions used in other modules // Helper functions used in other modules
GuUCS GU_API_DECL GuUCS
gu_utf8_decode(const uint8_t** buf); gu_utf8_decode(const uint8_t** buf);
void GU_API_DECL void
gu_utf8_encode(GuUCS ucs, uint8_t** buf); gu_utf8_encode(GuUCS ucs, uint8_t** buf);
void GU_API_DECL void
gu_in_utf8_buf(uint8_t** buf, GuIn* in, GuExn* err); gu_in_utf8_buf(uint8_t** buf, GuIn* in, GuExn* err);
#endif // GU_UTF8_H_ #endif // GU_UTF8_H_

View File

@@ -1,22 +1,3 @@
/*
* Copyright 2010 University of Helsinki.
*
* This file is part of libgu.
*
* Libgu is free software: you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Libgu is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with libgu. If not, see <http://www.gnu.org/licenses/>.
*/
#include "variant.h" #include "variant.h"
#include "bits.h" #include "bits.h"
@@ -24,7 +5,7 @@ enum {
GU_VARIANT_ALIGNMENT = sizeof(uintptr_t) GU_VARIANT_ALIGNMENT = sizeof(uintptr_t)
}; };
void* GU_API void*
gu_alloc_variant(uint8_t tag, size_t size, gu_alloc_variant(uint8_t tag, size_t size,
size_t align, GuVariant* variant_out, GuPool* pool) size_t align, GuVariant* variant_out, GuPool* pool)
{ {
@@ -41,7 +22,7 @@ gu_alloc_variant(uint8_t tag, size_t size,
return p; return p;
} }
GuVariant GU_API GuVariant
gu_make_variant(uint8_t tag, size_t size, size_t align, const void* init, gu_make_variant(uint8_t tag, size_t size, size_t align, const void* init,
GuPool* pool) GuPool* pool)
{ {
@@ -51,7 +32,7 @@ gu_make_variant(uint8_t tag, size_t size, size_t align, const void* init,
return v; return v;
} }
int GU_API int
gu_variant_tag(GuVariant variant) gu_variant_tag(GuVariant variant)
{ {
if (gu_variant_is_null(variant)) { if (gu_variant_is_null(variant)) {
@@ -65,7 +46,7 @@ gu_variant_tag(GuVariant variant)
return u - 1; return u - 1;
} }
void* GU_API void*
gu_variant_data(GuVariant variant) gu_variant_data(GuVariant variant)
{ {
if (gu_variant_is_null(variant)) { if (gu_variant_is_null(variant)) {
@@ -74,7 +55,8 @@ gu_variant_data(GuVariant variant)
return (void*)gu_align_backward(variant, GU_VARIANT_ALIGNMENT); return (void*)gu_align_backward(variant, GU_VARIANT_ALIGNMENT);
} }
GuVariantInfo gu_variant_open(GuVariant variant) GU_API GuVariantInfo
gu_variant_open(GuVariant variant)
{ {
GuVariantInfo info = { GuVariantInfo info = {
.tag = gu_variant_tag(variant), .tag = gu_variant_tag(variant),
@@ -83,7 +65,8 @@ GuVariantInfo gu_variant_open(GuVariant variant)
return info; return info;
} }
GuVariant gu_variant_close(GuVariantInfo info) GU_API GuVariant
gu_variant_close(GuVariantInfo info)
{ {
GuVariant variant; GuVariant variant;
@@ -97,7 +80,7 @@ GuVariant gu_variant_close(GuVariantInfo info)
return variant; return variant;
} }
int GU_API int
gu_variant_intval(GuVariant variant) gu_variant_intval(GuVariant variant)
{ {
int u = variant % GU_VARIANT_ALIGNMENT; int u = variant % GU_VARIANT_ALIGNMENT;
@@ -108,4 +91,4 @@ gu_variant_intval(GuVariant variant)
return (variant / GU_VARIANT_ALIGNMENT); return (variant / GU_VARIANT_ALIGNMENT);
} }
GU_API_DATA const GuVariant gu_null_variant = { (GuWord) NULL }; GU_API const GuVariant gu_null_variant = { (GuWord) NULL };

View File

@@ -97,7 +97,7 @@ gu_variant_from_ptr(const void* p)
return (uintptr_t) p; return (uintptr_t) p;
} }
GU_API_DATA_DECL const GuVariant gu_null_variant; GU_API_DECL extern const GuVariant gu_null_variant;
static inline bool static inline bool
gu_variant_is_null(GuVariant v) { gu_variant_is_null(GuVariant v) {