# HG changeset patch # User Mike Becker # Date 1612635104 -3600 # Node ID d345541018fae434c5fd28098f353d4fc510f895 # Parent 92e4824104532ffd3364f741a535c208d6d9a73f starts ucx 3.0 development diff -r 92e482410453 -r d345541018fa .hgignore --- a/.hgignore Mon Dec 30 09:54:10 2019 +0100 +++ b/.hgignore Sat Feb 06 19:11:44 2021 +0100 @@ -26,7 +26,7 @@ /\.deps/ /\.libs/ ^stamp-h -^test/ucxtest +test/test_list.c /test-suite.log$ ^ucx-.*\.tar.gz$ ^.idea/ diff -r 92e482410453 -r d345541018fa CHANGELOG --- a/CHANGELOG Mon Dec 30 09:54:10 2019 +0100 +++ b/CHANGELOG Sat Feb 06 19:11:44 2021 +0100 @@ -1,3 +1,8 @@ +Version 3.0 M1 +-------------- +work in progress + + Version 2.1 - 2019-12-30 ------------------------ diff -r 92e482410453 -r d345541018fa CMakeLists.txt --- a/CMakeLists.txt Mon Dec 30 09:54:10 2019 +0100 +++ b/CMakeLists.txt Sat Feb 06 19:11:44 2021 +0100 @@ -1,5 +1,5 @@ -cmake_minimum_required(VERSION 3.10) -project(ucx VERSION 2.1 DESCRIPTION "UAP Common Extensions") +cmake_minimum_required(VERSION 3.14) +project(ucx VERSION 3.0 DESCRIPTION "UAP Common Extensions") # Configuration set(CMAKE_C_STANDARD 11) @@ -11,7 +11,6 @@ # Tests enable_testing() add_subdirectory(test) -add_test(NAME test COMMAND ucxtest WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test") # Web Documentation add_subdirectory(docs/src) @@ -31,10 +30,18 @@ configure_file(${CMAKE_SOURCE_DIR}/cmake_infile.doxygen ${CMAKE_BINARY_DIR}/Doxyfile) + add_custom_target(docs-api-21 + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/docs/api-2.1 ${CMAKE_BINARY_DIR}/docs/web/api-2.1 + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Copying UCX 2.1 API documentation.") + add_custom_target(docs-api COMMAND ${DOXYGEN_EXECUTABLE} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMENT "Generating API documentation with Doxygen") + COMMENT "Generating API documentation with Doxygen.") + + add_custom_target(docs-all DEPENDS docs-html docs-api docs-api-21) +else() + add_custom_target(docs-all DEPENDS docs-html) endif() -add_custom_target(docs-all DEPENDS docs-html docs-api) diff -r 92e482410453 -r d345541018fa COPYING --- a/COPYING Mon Dec 30 09:54:10 2019 +0100 +++ b/COPYING Sat Feb 06 19:11:44 2021 +0100 @@ -1,4 +1,4 @@ -Copyright 2017 Mike Becker, Olaf Wintermann. All rights reserved. +Copyright 2021 Mike Becker, Olaf Wintermann. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff -r 92e482410453 -r d345541018fa Makefile.am --- a/Makefile.am Mon Dec 30 09:54:10 2019 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. -# -# Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# - -SUBDIRS = src test -ACLOCAL_AMFLAGS = -I m4 diff -r 92e482410453 -r d345541018fa README --- a/README Mon Dec 30 09:54:10 2019 +0100 +++ b/README Sat Feb 06 19:11:44 2021 +0100 @@ -5,11 +5,10 @@ 0. Table of Contents: 1. Introduction ........................................................ 15 - 2. Build ............................................................... 26 - 3. Install ............................................................. 37 - 4. Documentation ....................................................... 50 - 5. Contact ............................................................. 63 - 6. License ............................................................. 69 + 2. Build ............................................................... 25 + 3. Documentation ....................................................... 44 + 4. Contact ............................................................. 57 + 5. License ............................................................. 64 1. Introduction @@ -26,28 +25,23 @@ 2. Build -------- -Untar the source archive and simply run +Untar the source archive and run - ./configure && make + mkdir build + cd build + cmake .. + make -If you want to verify your build, you may then run +Optionally install UCX by running the following command as privileged user + + make install + +If you want to verify your build, you can run make check -3. Install ----------- -Build the binaries as described above. Then install UCX, by running - - make install - -or - - make install PREFIX= - -The default prefix is /usr/local and will require privileged access. - -4. Documentation +3. Documentation ---------------- Documentation is available at: @@ -60,16 +54,17 @@ https://develop.uap-core.de/ucx/api/index.html -5. Contact +4. Contact ---------- Olaf Wintermann (olaf.wintermann@gmail.com) Mike Becker (universe@uap-core.de) -6. License + +5. License ---------- -Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. +Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff -r 92e482410453 -r d345541018fa autogen.sh --- a/autogen.sh Mon Dec 30 09:54:10 2019 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -#!/bin/sh -autoreconf --install - diff -r 92e482410453 -r d345541018fa cmake_infile.doxygen --- a/cmake_infile.doxygen Mon Dec 30 09:54:10 2019 +0100 +++ b/cmake_infile.doxygen Sat Feb 06 19:11:44 2021 +0100 @@ -230,12 +230,6 @@ ALIASES = -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For # instance, some of the names that are used will be different. The list of all @@ -989,13 +983,6 @@ ALPHABETICAL_INDEX = YES -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored @@ -2008,12 +1995,6 @@ EXTERNAL_PAGES = YES -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of 'which perl'). -# The default file (with absolute path) is: /usr/bin/perl. - -PERL_PATH = /usr/bin/perl - #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- @@ -2027,15 +2008,6 @@ CLASS_DIAGRAMS = YES -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see: -# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. diff -r 92e482410453 -r d345541018fa configure.ac --- a/configure.ac Mon Dec 30 09:54:10 2019 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. -# -# Copyright 2019 Mike Becker, Olaf Wintermann All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# - -# the package version must match the macros in ucx.h -# the lib version must follow the libtool versioning convention -AC_PREREQ([2.60]) -AC_INIT([ucx], [2.1.0], [olaf.wintermann@gmail.com]) -AC_SUBST([UCX_LIB_VERSION], [4:0:1]) - -# don't place everything in the project root -AC_CONFIG_AUX_DIR([build-aux]) -AC_CONFIG_MACRO_DIR([m4]) - -# we use our own directory structure -AM_INIT_AUTOMAKE([foreign -Wall -Werror]) - -# if there is an archiver, use it -m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) - -# we are compiling a library -LT_INIT - -# we want c11, and may fall back to c99 -AC_PROG_CC_C99 - -# we want to support automake < 1.14, so we need this deprecated macro -# it tests, whether the compiler allows -c and -o simultaneously -# in modern versions of autoconf, this is done by AC_PROG_CC -AM_PROG_CC_C_O - -# where to place config macros -AC_CONFIG_HEADERS([config.h]) - -# our Makefiles -AC_CONFIG_FILES([Makefile src/Makefile test/Makefile]) - -# GO -AC_OUTPUT - diff -r 92e482410453 -r d345541018fa docs/api-2.1/allocator_8h.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/allocator_8h.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,600 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/allocator.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
allocator.h File Reference
+
+
+ +

Allocator for custom memory management. +More...

+
#include "ucx.h"
+
+

Go to the source code of this file.

+ + + + + +

+Data Structures

struct  UcxAllocator
 UCX allocator data structure containing memory management functions. More...
 
+ + + + + + + + + + + + + + + + +

+Macros

#define almalloc(allocator, n)   ((allocator)->malloc((allocator)->pool, n))
 Shorthand for calling an allocators malloc function. More...
 
#define alcalloc(allocator, n, size)   ((allocator)->calloc((allocator)->pool, n, size))
 Shorthand for calling an allocators calloc function. More...
 
#define alrealloc(allocator, ptr, n)   ((allocator)->realloc((allocator)->pool, ptr, n))
 Shorthand for calling an allocators realloc function. More...
 
#define alfree(allocator, ptr)   ((allocator)->free((allocator)->pool, ptr))
 Shorthand for calling an allocators free function. More...
 
#define UCX_ALLOCATOR_DEFAULT
 Convenient macro for a default allocator struct definition. More...
 
+ + + + + + + + + + + + + +

+Typedefs

typedef void *(* ucx_allocator_malloc) (void *pool, size_t n)
 A function pointer to the allocators malloc() function. More...
 
typedef void *(* ucx_allocator_calloc) (void *pool, size_t n, size_t size)
 A function pointer to the allocators calloc() function. More...
 
typedef void *(* ucx_allocator_realloc) (void *pool, void *data, size_t n)
 A function pointer to the allocators realloc() function. More...
 
typedef void(* ucx_allocator_free) (void *pool, void *data)
 A function pointer to the allocators free() function. More...
 
+ + + + + + + + + + + + + + + + +

+Functions

UcxAllocatorucx_default_allocator ()
 Returns a pointer to the default allocator. More...
 
void * ucx_default_malloc (void *ignore, size_t n)
 A wrapper for the standard libc malloc() function. More...
 
void * ucx_default_calloc (void *ignore, size_t n, size_t size)
 A wrapper for the standard libc calloc() function. More...
 
void * ucx_default_realloc (void *ignore, void *data, size_t n)
 A wrapper for the standard libc realloc() function. More...
 
void ucx_default_free (void *ignore, void *data)
 A wrapper for the standard libc free() function. More...
 
+

Detailed Description

+

Allocator for custom memory management.

+

A UCX allocator consists of a pointer to the memory area / pool and four function pointers to memory management functions operating on this memory area / pool. These functions shall behave equivalent to the standard libc functions malloc(), calloc(), realloc() and free().

+

The signature of the memory management functions is based on the signature of the respective libc function but each of them takes the pointer to the memory area / pool as first argument.

+

As the pointer to the memory area / pool can be arbitrarily chosen, any data can be provided to the memory management functions. A UcxMempool is just one example.

+
See also
mempool.h
+
+UcxMap
+
Author
Mike Becker
+
+Olaf Wintermann
+

Macro Definition Documentation

+ +

◆ alcalloc

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define alcalloc( allocator,
 n,
 size 
)   ((allocator)->calloc((allocator)->pool, n, size))
+
+ +

Shorthand for calling an allocators calloc function.

+
Parameters
+ + + + +
allocatorthe allocator to use
nthe count of elements the space should be allocated for
sizethe size of each element
+
+
+
Returns
a pointer to the allocated memory area
+ +
+
+ +

◆ alfree

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define alfree( allocator,
 ptr 
)   ((allocator)->free((allocator)->pool, ptr))
+
+ +

Shorthand for calling an allocators free function.

+
Parameters
+ + + +
allocatorthe allocator to use
ptrthe pointer to the memory area that shall be freed
+
+
+ +
+
+ +

◆ almalloc

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define almalloc( allocator,
 
)   ((allocator)->malloc((allocator)->pool, n))
+
+ +

Shorthand for calling an allocators malloc function.

+
Parameters
+ + + +
allocatorthe allocator to use
nsize of space to allocate
+
+
+
Returns
a pointer to the allocated memory area
+ +
+
+ +

◆ alrealloc

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define alrealloc( allocator,
 ptr,
 
)   ((allocator)->realloc((allocator)->pool, ptr, n))
+
+ +

Shorthand for calling an allocators realloc function.

+
Parameters
+ + + + +
allocatorthe allocator to use
ptrthe pointer to the memory area that shall be reallocated
nthe new size of the allocated memory area
+
+
+
Returns
a pointer to the reallocated memory area
+ +
+
+ +

◆ UCX_ALLOCATOR_DEFAULT

+ +
+
+ + + + +
#define UCX_ALLOCATOR_DEFAULT
+
+Value:
{NULL, \
ucx_default_malloc, ucx_default_calloc, ucx_default_realloc, \
ucx_default_free }
void * ucx_default_calloc(void *ignore, size_t n, size_t size)
A wrapper for the standard libc calloc() function.
Definition: allocator.c:50
+
void * ucx_default_realloc(void *ignore, void *data, size_t n)
A wrapper for the standard libc realloc() function.
Definition: allocator.c:54
+
+

Convenient macro for a default allocator struct definition.

+ +
+
+

Typedef Documentation

+ +

◆ ucx_allocator_calloc

+ +
+
+ + + + +
typedef void*(* ucx_allocator_calloc) (void *pool, size_t n, size_t size)
+
+ +

A function pointer to the allocators calloc() function.

+
See also
UcxAllocator
+ +
+
+ +

◆ ucx_allocator_free

+ +
+
+ + + + +
typedef void(* ucx_allocator_free) (void *pool, void *data)
+
+ +

A function pointer to the allocators free() function.

+
See also
UcxAllocator
+ +
+
+ +

◆ ucx_allocator_malloc

+ +
+
+ + + + +
typedef void*(* ucx_allocator_malloc) (void *pool, size_t n)
+
+ +

A function pointer to the allocators malloc() function.

+
See also
UcxAllocator
+ +
+
+ +

◆ ucx_allocator_realloc

+ +
+
+ + + + +
typedef void*(* ucx_allocator_realloc) (void *pool, void *data, size_t n)
+
+ +

A function pointer to the allocators realloc() function.

+
See also
UcxAllocator
+ +
+
+

Function Documentation

+ +

◆ ucx_default_allocator()

+ +
+
+ + + + + + + +
UcxAllocator* ucx_default_allocator ()
+
+ +

Returns a pointer to the default allocator.

+

The default allocator contains wrappers to the standard libc memory management functions. Use this function to get a pointer to a globally available allocator. You may also define an own UcxAllocator by assigning UCX_ALLOCATOR_DEFAULT to a variable and pass the address of this variable to any function that takes a UcxAllocator as argument. Note that using this function is the recommended way of passing a default allocator, thus it never runs out of scope.

+
Returns
a pointer to the default allocator
+
See also
UCX_ALLOCATOR_DEFAULT
+ +
+
+ +

◆ ucx_default_calloc()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void* ucx_default_calloc (void * ignore,
size_t n,
size_t size 
)
+
+ +

A wrapper for the standard libc calloc() function.

+
Parameters
+ + + + +
ignoreignored (may be used by allocators for pooled memory)
nargument passed to calloc()
sizeargument passed to calloc()
+
+
+
Returns
return value of calloc()
+ +
+
+ +

◆ ucx_default_free()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void ucx_default_free (void * ignore,
void * data 
)
+
+ +

A wrapper for the standard libc free() function.

+
Parameters
+ + + +
ignoreignored (may be used by allocators for pooled memory)
dataargument passed to free()
+
+
+ +
+
+ +

◆ ucx_default_malloc()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void* ucx_default_malloc (void * ignore,
size_t n 
)
+
+ +

A wrapper for the standard libc malloc() function.

+
Parameters
+ + + +
ignoreignored (may be used by allocators for pooled memory)
nargument passed to malloc()
+
+
+
Returns
return value of malloc()
+ +
+
+ +

◆ ucx_default_realloc()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void* ucx_default_realloc (void * ignore,
void * data,
size_t n 
)
+
+ +

A wrapper for the standard libc realloc() function.

+
Parameters
+ + + + +
ignoreignored (may be used by allocators for pooled memory)
dataargumend passed to realloc()
nargument passed to realloc()
+
+
+
Returns
return value of realloc()
+ +
+
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/allocator_8h_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/allocator_8h_source.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,95 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/allocator.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
allocator.h
+
+
+Go to the documentation of this file.
1 /*
2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3  *
4  * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
52 #ifndef UCX_ALLOCATOR_H
53 #define UCX_ALLOCATOR_H
54 
55 #include "ucx.h"
56 
57 #ifdef __cplusplus
58 extern "C" {
59 #endif
60 
65 typedef void*(*ucx_allocator_malloc)(void *pool, size_t n);
66 
71 typedef void*(*ucx_allocator_calloc)(void *pool, size_t n, size_t size);
72 
77 typedef void*(*ucx_allocator_realloc)(void *pool, void *data, size_t n);
78 
83 typedef void(*ucx_allocator_free)(void *pool, void *data);
84 
88 typedef struct {
93  void *pool;
110 } UcxAllocator;
111 
128 
135 void *ucx_default_malloc(void *ignore, size_t n);
143 void *ucx_default_calloc(void *ignore, size_t n, size_t size);
151 void *ucx_default_realloc(void *ignore, void *data, size_t n);
157 void ucx_default_free(void *ignore, void *data);
158 
165 #define almalloc(allocator, n) ((allocator)->malloc((allocator)->pool, n))
166 
174 #define alcalloc(allocator, n, size) \
175  ((allocator)->calloc((allocator)->pool, n, size))
176 
184 #define alrealloc(allocator, ptr, n) \
185  ((allocator)->realloc((allocator)->pool, ptr, n))
186 
192 #define alfree(allocator, ptr) ((allocator)->free((allocator)->pool, ptr))
193 
197 #define UCX_ALLOCATOR_DEFAULT {NULL, \
198  ucx_default_malloc, ucx_default_calloc, ucx_default_realloc, \
199  ucx_default_free }
200 
201 #ifdef __cplusplus
202 }
203 #endif
204 
205 #endif /* UCX_ALLOCATOR_H */
206 
Main UCX Header providing most common definitions.
+
void * ucx_default_malloc(void *ignore, size_t n)
A wrapper for the standard libc malloc() function.
Definition: allocator.c:46
+
UCX allocator data structure containing memory management functions.
Definition: allocator.h:88
+
ucx_allocator_malloc malloc
The malloc() function for this allocator.
Definition: allocator.h:97
+
void *(* ucx_allocator_calloc)(void *pool, size_t n, size_t size)
A function pointer to the allocators calloc() function.
Definition: allocator.h:71
+
ucx_allocator_free free
The free() function for this allocator.
Definition: allocator.h:109
+
void *(* ucx_allocator_malloc)(void *pool, size_t n)
A function pointer to the allocators malloc() function.
Definition: allocator.h:65
+
UcxAllocator * ucx_default_allocator()
Returns a pointer to the default allocator.
Definition: allocator.c:41
+
void * ucx_default_calloc(void *ignore, size_t n, size_t size)
A wrapper for the standard libc calloc() function.
Definition: allocator.c:50
+
void *(* ucx_allocator_realloc)(void *pool, void *data, size_t n)
A function pointer to the allocators realloc() function.
Definition: allocator.h:77
+
void * ucx_default_realloc(void *ignore, void *data, size_t n)
A wrapper for the standard libc realloc() function.
Definition: allocator.c:54
+
void(* ucx_allocator_free)(void *pool, void *data)
A function pointer to the allocators free() function.
Definition: allocator.h:83
+
ucx_allocator_calloc calloc
The calloc() function for this allocator.
Definition: allocator.h:101
+
void ucx_default_free(void *ignore, void *data)
A wrapper for the standard libc free() function.
Definition: allocator.c:58
+
ucx_allocator_realloc realloc
The realloc() function for this allocator.
Definition: allocator.h:105
+
void * pool
Pointer to an area of memory or a complex memory pool.
Definition: allocator.h:93
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/annotated.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/annotated.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,101 @@ + + + + + + + +ucx: Data Structures + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Data Structures
+
+
+
Here are the data structures with brief descriptions:
+ + + + + + + + + + + + + + + + + + + + + + + +
 Cscstr_tThe UCX string structure for immutable (constant) strings
 Csstr_tThe UCX string structure
 Cucx_memchunkCapsule for destructible memory chunks
 Cucx_regdestrCapsule for data and its destructor
 Cucx_stack_metadataMetadata for each UCX stack element
 CUcxAllocatorUCX allocator data structure containing memory management functions
 CUcxArrayUCX array type
 CUcxAVLNodeUCX AVL Node
 CUcxAVLTreeUCX AVL Tree
 CUcxBufferUCX Buffer
 CUcxKeyStructure to publicly denote a key of a UcxMap
 CUcxListUCX list structure
 CUcxLoggerThe UCX Logger object
 CUcxMapStructure for the UCX map
 CUcxMapElementStructure for an element of a UcxMap
 CUcxMapIteratorStructure for an iterator over a UcxMap
 CUcxMapKeyInternal structure for a key of a UcxMap
 CUcxMempoolUCX mempool structure
 CUcxPropertiesUcxProperties object for parsing properties data
 CUcxStackUCX stack structure
 CUcxTestListStructure for the internal list of test cases
 CUcxTestSuiteA test suite containing multiple test cases
+
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/array_8h.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/array_8h.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,1376 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/array.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
array.h File Reference
+
+
+ +

Dynamically allocated array implementation. +More...

+
#include "ucx.h"
+#include "allocator.h"
+
+

Go to the source code of this file.

+ + + + + +

+Data Structures

struct  UcxArray
 UCX array type. More...
 
+ + + + + + + +

+Macros

#define ucx_array_util_set(array, capacity, elmsize, idx, data)
 Sets an element in an arbitrary user defined array. More...
 
#define ucx_array_util_setptr(array, capacity, idx, ptr)
 Stores a pointer in an arbitrary user defined array. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

int ucx_array_util_set_a (UcxAllocator *alloc, void **array, size_t *capacity, size_t elmsize, size_t idx, void *data)
 Sets an element in an arbitrary user defined array. More...
 
int ucx_array_util_setptr_a (UcxAllocator *alloc, void **array, size_t *capacity, size_t idx, void *ptr)
 Stores a pointer in an arbitrary user defined array. More...
 
UcxArrayucx_array_new (size_t capacity, size_t elemsize)
 Creates a new UCX array with the given capacity and element size. More...
 
UcxArrayucx_array_new_a (size_t capacity, size_t elemsize, UcxAllocator *allocator)
 Creates a new UCX array using the specified allocator. More...
 
void ucx_array_init (UcxArray *array, size_t capacity, size_t elemsize)
 Initializes a UCX array structure with the given capacity and element size. More...
 
void ucx_array_init_a (UcxArray *array, size_t capacity, size_t elemsize, UcxAllocator *allocator)
 Initializes a UCX array structure using the specified allocator. More...
 
int ucx_array_clone (UcxArray *dest, UcxArray const *src)
 Creates an shallow copy of an array. More...
 
int ucx_array_equals (UcxArray const *array1, UcxArray const *array2, cmp_func cmpfnc, void *data)
 Compares two UCX arrays element-wise by using a compare function. More...
 
void ucx_array_destroy (UcxArray *array)
 Destroys the array. More...
 
void ucx_array_free (UcxArray *array)
 Destroys and frees the array. More...
 
int ucx_array_append_from (UcxArray *array, void *data, size_t count)
 Inserts elements at the end of the array. More...
 
int ucx_array_prepend_from (UcxArray *array, void *data, size_t count)
 Inserts elements at the beginning of the array. More...
 
int ucx_array_set_from (UcxArray *array, size_t index, void *data, size_t count)
 Sets elements starting at the specified index. More...
 
int ucx_array_concat (UcxArray *array1, const UcxArray *array2)
 Concatenates two arrays. More...
 
void * ucx_array_at (UcxArray const *array, size_t index)
 Returns a pointer to the array element at the specified index. More...
 
size_t ucx_array_find (UcxArray const *array, void *elem, cmp_func cmpfnc, void *data)
 Returns the index of an element containing the specified data. More...
 
int ucx_array_contains (UcxArray const *array, void *elem, cmp_func cmpfnc, void *data)
 Checks, if an array contains a specific element. More...
 
void ucx_array_sort (UcxArray *array, cmp_func cmpfnc, void *data)
 Sorts a UcxArray with the best available sort algorithm. More...
 
void ucx_array_remove (UcxArray *array, size_t index)
 Removes an element from the array. More...
 
void ucx_array_remove_fast (UcxArray *array, size_t index)
 Removes an element from the array. More...
 
int ucx_array_shrink (UcxArray *array)
 Shrinks the memory to exactly fit the contents. More...
 
int ucx_array_resize (UcxArray *array, size_t capacity)
 Sets the capacity of the array. More...
 
int ucx_array_reserve (UcxArray *array, size_t capacity)
 Resizes the array only, if the capacity is insufficient. More...
 
int ucx_array_grow (UcxArray *array, size_t count)
 Resizes the capacity, if the specified number of elements would not fit. More...
 
+

Detailed Description

+

Dynamically allocated array implementation.

+
Author
Mike Becker
+
+Olaf Wintermann
+

Macro Definition Documentation

+ +

◆ ucx_array_util_set

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#define ucx_array_util_set( array,
 capacity,
 elmsize,
 idx,
 data 
)
+
+Value:
ucx_array_util_set_a(ucx_default_allocator(), (void**)(array), capacity, \
elmsize, idx, data)
int ucx_array_util_set_a(UcxAllocator *alloc, void **array, size_t *capacity, size_t elmsize, size_t idx, void *data)
Sets an element in an arbitrary user defined array.
Definition: array.c:72
+
UcxAllocator * ucx_default_allocator()
Returns a pointer to the default allocator.
Definition: allocator.c:41
+
+

Sets an element in an arbitrary user defined array.

+

The data is copied from the specified data location.

+

If the capacity is insufficient, the array is automatically reallocated and the possibly new pointer is stored in the array argument.

+

On reallocation the capacity of the array is doubled until it is sufficient. The new capacity is stored back to capacity.

+
Parameters
+ + + + + + +
arraya pointer to location of the array pointer
capacitya pointer to the capacity
elmsizethe size of each element
idxthe index of the element to set
dataa pointer to the element data
+
+
+
Returns
zero on success or non-zero on error (errno will be set)
+ +
+
+ +

◆ ucx_array_util_setptr

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#define ucx_array_util_setptr( array,
 capacity,
 idx,
 ptr 
)
+
+Value:
capacity, idx, ptr)
UcxAllocator * ucx_default_allocator()
Returns a pointer to the default allocator.
Definition: allocator.c:41
+
int ucx_array_util_setptr_a(UcxAllocator *alloc, void **array, size_t *capacity, size_t idx, void *ptr)
Stores a pointer in an arbitrary user defined array.
Definition: array.c:112
+
+

Stores a pointer in an arbitrary user defined array.

+

The element size of the array must be sizeof(void*).

+

If the capacity is insufficient, the array is automatically reallocated and the possibly new pointer is stored in the array argument.

+

On reallocation the capacity of the array is doubled until it is sufficient. The new capacity is stored back to capacity.

+
Parameters
+ + + + + +
arraya pointer to location of the array pointer
capacitya pointer to the capacity
idxthe index of the element to set
ptrthe pointer to store
+
+
+
Returns
zero on success or non-zero on error (errno will be set)
+ +
+
+

Function Documentation

+ +

◆ ucx_array_append_from()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_array_append_from (UcxArrayarray,
void * data,
size_t count 
)
+
+ +

Inserts elements at the end of the array.

+

This is an O(1) operation. The array will automatically grow, if the capacity is exceeded. If a pointer to data is provided, the data is copied into the array with memcpy(). Otherwise the new elements are completely zeroed.

+
Parameters
+ + + + +
arraya pointer the array where to append the data
dataa pointer to the data to insert (may be NULL)
countnumber of elements to copy from data (if data is NULL, zeroed elements are appended)
+
+
+
Returns
zero on success, non-zero if a reallocation was necessary but failed
+
See also
ucx_array_set_from()
+
+ucx_array_append()
+ +
+
+ +

◆ ucx_array_at()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void* ucx_array_at (UcxArray const * array,
size_t index 
)
+
+ +

Returns a pointer to the array element at the specified index.

+
Parameters
+ + + +
arraythe array to retrieve the element from
indexindex of the element to return
+
+
+
Returns
a pointer to the element at the specified index or NULL, if the index is greater than the array size
+ +
+
+ +

◆ ucx_array_clone()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int ucx_array_clone (UcxArraydest,
UcxArray const * src 
)
+
+ +

Creates an shallow copy of an array.

+

This function clones the specified array by using memcpy(). If the destination capacity is insufficient, an automatic reallocation is attempted.

+

Note: if the destination array is uninitialized, the behavior is undefined.

+
Parameters
+ + + +
destthe array to copy to
srcthe array to copy from
+
+
+
Returns
zero on success, non-zero on reallocation failure.
+ +
+
+ +

◆ ucx_array_concat()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int ucx_array_concat (UcxArrayarray1,
const UcxArrayarray2 
)
+
+ +

Concatenates two arrays.

+

The contents of the second array are appended to the first array in one single operation. The second array is otherwise left untouched.

+

The first array may grow automatically. If this fails, both arrays remain unmodified.

+
Parameters
+ + + +
array1first array
array2second array
+
+
+
Returns
zero on success, non-zero if reallocation was necessary but failed or the element size does not match
+ +
+
+ +

◆ ucx_array_contains()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_array_contains (UcxArray const * array,
void * elem,
cmp_func cmpfnc,
void * data 
)
+
+ +

Checks, if an array contains a specific element.

+

An element is found, if ucx_array_find() returns a value less than the size.

+
Parameters
+ + + + + +
arraythe array where to search for the data
elemthe element data
cmpfncthe compare function
dataadditional data for the compare function
+
+
+
Returns
1, if and only if the array contains the specified element data
+
See also
ucx_array_find()
+ +
+
+ +

◆ ucx_array_destroy()

+ +
+
+ + + + + + + + +
void ucx_array_destroy (UcxArrayarray)
+
+ +

Destroys the array.

+

The data is freed and both capacity and count are reset to zero. If the array structure itself has been dynamically allocated, it has to be freed separately.

+
Parameters
+ + +
arraythe array to destroy
+
+
+ +
+
+ +

◆ ucx_array_equals()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_array_equals (UcxArray const * array1,
UcxArray const * array2,
cmp_func cmpfnc,
void * data 
)
+
+ +

Compares two UCX arrays element-wise by using a compare function.

+

Elements of the two specified arrays are compared by using the specified compare function and the additional data. The type and content of this additional data depends on the cmp_func() used.

+

This function always returns zero, if the element sizes of the arrays do not match and performs no comparisons in this case.

+
Parameters
+ + + + + +
array1the first array
array2the second array
cmpfncthe compare function
dataadditional data for the compare function
+
+
+
Returns
1, if and only if the two arrays equal element-wise, 0 otherwise
+ +
+
+ +

◆ ucx_array_find()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
size_t ucx_array_find (UcxArray const * array,
void * elem,
cmp_func cmpfnc,
void * data 
)
+
+ +

Returns the index of an element containing the specified data.

+

This function uses a cmp_func() to compare the data of each list element with the specified data. If no cmp_func is provided, memcmp() is used.

+

If the array contains the data more than once, the index of the first occurrence is returned. If the array does not contain the data, the size of array is returned.

+
Parameters
+ + + + + +
arraythe array where to search for the data
elemthe element data
cmpfncthe compare function
dataadditional data for the compare function
+
+
+
Returns
the index of the element containing the specified data or the size of the array, if the data is not found in this array
+ +
+
+ +

◆ ucx_array_free()

+ +
+
+ + + + + + + + +
void ucx_array_free (UcxArrayarray)
+
+ +

Destroys and frees the array.

+
Parameters
+ + +
arraythe array to free
+
+
+ +
+
+ +

◆ ucx_array_grow()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int ucx_array_grow (UcxArrayarray,
size_t count 
)
+
+ +

Resizes the capacity, if the specified number of elements would not fit.

+

A call to ucx_array_grow(array, count) is effectively the same as ucx_array_reserve(array, array->size+count).

+
Parameters
+ + + +
arraya pointer to the array
countthe number of elements that should additionally fit into the array
+
+
+
Returns
zero on success, non-zero if reallocation failed
+ +
+
+ +

◆ ucx_array_init()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void ucx_array_init (UcxArrayarray,
size_t capacity,
size_t elemsize 
)
+
+ +

Initializes a UCX array structure with the given capacity and element size.

+

The structure must be uninitialized as the data pointer will be overwritten.

+
Parameters
+ + + + +
arraythe structure to initialize
capacitythe initial capacity
elemsizethe element size
+
+
+ +
+
+ +

◆ ucx_array_init_a()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void ucx_array_init_a (UcxArrayarray,
size_t capacity,
size_t elemsize,
UcxAllocatorallocator 
)
+
+ +

Initializes a UCX array structure using the specified allocator.

+

The structure must be uninitialized as the data pointer will be overwritten.

+
Parameters
+ + + + + +
arraythe structure to initialize
capacitythe initial capacity
elemsizethe element size
allocatorthe allocator to use
+
+
+ +
+
+ +

◆ ucx_array_new()

+ +
+
+ + + + + + + + + + + + + + + + + + +
UcxArray* ucx_array_new (size_t capacity,
size_t elemsize 
)
+
+ +

Creates a new UCX array with the given capacity and element size.

+
Parameters
+ + + +
capacitythe initial capacity
elemsizethe element size
+
+
+
Returns
a pointer to a new UCX array structure
+ +
+
+ +

◆ ucx_array_new_a()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
UcxArray* ucx_array_new_a (size_t capacity,
size_t elemsize,
UcxAllocatorallocator 
)
+
+ +

Creates a new UCX array using the specified allocator.

+
Parameters
+ + + + +
capacitythe initial capacity
elemsizethe element size
allocatorthe allocator to use
+
+
+
Returns
a pointer to new UCX array structure
+ +
+
+ +

◆ ucx_array_prepend_from()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_array_prepend_from (UcxArrayarray,
void * data,
size_t count 
)
+
+ +

Inserts elements at the beginning of the array.

+

This is an expensive operation, because the contents must be moved. If there is no particular reason to prepend data, you should use ucx_array_append_from() instead.

+
Parameters
+ + + + +
arraya pointer the array where to prepend the data
dataa pointer to the data to insert (may be NULL)
countnumber of elements to copy from data (if data is NULL, zeroed elements are inserted)
+
+
+
Returns
zero on success, non-zero if a reallocation was necessary but failed
+
See also
ucx_array_append_from()
+
+ucx_array_set_from()
+
+ucx_array_prepend()
+ +
+
+ +

◆ ucx_array_remove()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void ucx_array_remove (UcxArrayarray,
size_t index 
)
+
+ +

Removes an element from the array.

+

This is in general an expensive operation, because several elements may be moved. If the order of the elements is not relevant, use ucx_array_remove_fast() instead.

+
Parameters
+ + + +
arraypointer to the array from which the element shall be removed
indexthe index of the element to remove
+
+
+ +
+
+ +

◆ ucx_array_remove_fast()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void ucx_array_remove_fast (UcxArrayarray,
size_t index 
)
+
+ +

Removes an element from the array.

+

This is an O(1) operation, but does not maintain the order of the elements. The last element in the array is moved to the location of the removed element.

+
Parameters
+ + + +
arraypointer to the array from which the element shall be removed
indexthe index of the element to remove
+
+
+ +
+
+ +

◆ ucx_array_reserve()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int ucx_array_reserve (UcxArrayarray,
size_t capacity 
)
+
+ +

Resizes the array only, if the capacity is insufficient.

+

If the requested capacity is smaller than the current capacity, this function does nothing.

+
Parameters
+ + + +
arraya pointer to the array
capacitythe guaranteed capacity
+
+
+
Returns
zero on success, non-zero if reallocation failed
+ +
+
+ +

◆ ucx_array_resize()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int ucx_array_resize (UcxArrayarray,
size_t capacity 
)
+
+ +

Sets the capacity of the array.

+

If the new capacity is smaller than the size of the array, the elements are removed and the size is adjusted accordingly.

+
Parameters
+ + + +
arraya pointer to the array
capacitythe new capacity
+
+
+
Returns
zero on success, non-zero if reallocation failed
+ +
+
+ +

◆ ucx_array_set_from()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_array_set_from (UcxArrayarray,
size_t index,
void * data,
size_t count 
)
+
+ +

Sets elements starting at the specified index.

+

If the any index is out of bounds, the array automatically grows. The pointer to the data may be NULL, in which case the elements are zeroed.

+
Parameters
+ + + + + +
arraya pointer the array where to set the data
indexthe index of the element to set
dataa pointer to the data to insert (may be NULL)
countnumber of elements to copy from data (if data is NULL, the memory in the array is zeroed)
+
+
+
Returns
zero on success, non-zero if a reallocation was necessary but failed
+
See also
ucx_array_append_from()
+
+ucx_array_set()
+ +
+
+ +

◆ ucx_array_shrink()

+ +
+
+ + + + + + + + +
int ucx_array_shrink (UcxArrayarray)
+
+ +

Shrinks the memory to exactly fit the contents.

+

After this operation, the capacity equals the size.

+
Parameters
+ + +
arraya pointer to the array
+
+
+
Returns
zero on success, non-zero if reallocation failed
+ +
+
+ +

◆ ucx_array_sort()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void ucx_array_sort (UcxArrayarray,
cmp_func cmpfnc,
void * data 
)
+
+ +

Sorts a UcxArray with the best available sort algorithm.

+

The qsort_r() function is used, if available (glibc, FreeBSD or MacOS). The order of arguments is automatically adjusted for the FreeBSD and MacOS version of qsort_r().

+

If qsort_r() is not available, a merge sort algorithm is used, which is guaranteed to use no more additional memory than for exactly one element.

+
Parameters
+ + + + +
arraythe array to sort
cmpfncthe function that shall be used to compare the element data
dataadditional data for the cmp_func() or NULL
+
+
+ +
+
+ +

◆ ucx_array_util_set_a()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_array_util_set_a (UcxAllocatoralloc,
void ** array,
size_t * capacity,
size_t elmsize,
size_t idx,
void * data 
)
+
+ +

Sets an element in an arbitrary user defined array.

+

The data is copied from the specified data location.

+

If the capacity is insufficient, the array is automatically reallocated using the specified allocator and the possibly new pointer is stored in the array argument.

+

On reallocation the capacity of the array is doubled until it is sufficient. The new capacity is stored back to capacity.

+
Parameters
+ + + + + + + +
allocthe allocator that shall be used to reallocate the array
arraya pointer to location of the array pointer
capacitya pointer to the capacity
elmsizethe size of each element
idxthe index of the element to set
dataa pointer to the element data
+
+
+
Returns
zero on success or non-zero on error (errno will be set)
+ +
+
+ +

◆ ucx_array_util_setptr_a()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_array_util_setptr_a (UcxAllocatoralloc,
void ** array,
size_t * capacity,
size_t idx,
void * ptr 
)
+
+ +

Stores a pointer in an arbitrary user defined array.

+

The element size of the array must be sizeof(void*).

+

If the capacity is insufficient, the array is automatically reallocated using the specified allocator and the possibly new pointer is stored in the array argument.

+

On reallocation the capacity of the array is doubled until it is sufficient. The new capacity is stored back to capacity.

+
Parameters
+ + + + + + +
allocthe allocator that shall be used to reallocate the array
arraya pointer to location of the array pointer
capacitya pointer to the capacity
idxthe index of the element to set
ptrthe pointer to store
+
+
+
Returns
zero on success or non-zero on error (errno will be set)
+ +
+
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/array_8h_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/array_8h_source.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,113 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/array.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
array.h
+
+
+Go to the documentation of this file.
1 /*
2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3  *
4  * Copyright 2019 Mike Becker, Olaf Wintermann All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
36 #ifndef UCX_ARRAY_H
37 #define UCX_ARRAY_H
38 
39 #include "ucx.h"
40 #include "allocator.h"
41 
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45 
49 typedef struct {
53  size_t capacity;
57  size_t size;
61  size_t elemsize;
65  void* data;
70 } UcxArray;
71 
89 #define ucx_array_util_set(array, capacity, elmsize, idx, data) \
90  ucx_array_util_set_a(ucx_default_allocator(), (void**)(array), capacity, \
91  elmsize, idx, data)
92 
112 int ucx_array_util_set_a(UcxAllocator* alloc, void** array, size_t* capacity,
113  size_t elmsize, size_t idx, void* data);
114 
131 #define ucx_array_util_setptr(array, capacity, idx, ptr) \
132  ucx_array_util_setptr_a(ucx_default_allocator(), (void**)(array), \
133  capacity, idx, ptr)
134 
153 int ucx_array_util_setptr_a(UcxAllocator* alloc, void** array, size_t* capacity,
154  size_t idx, void* ptr);
155 
156 
163 UcxArray* ucx_array_new(size_t capacity, size_t elemsize);
164 
173 UcxArray* ucx_array_new_a(size_t capacity, size_t elemsize,
174  UcxAllocator* allocator);
175 
184 void ucx_array_init(UcxArray* array, size_t capacity, size_t elemsize);
185 
195 void ucx_array_init_a(UcxArray* array, size_t capacity, size_t elemsize,
196  UcxAllocator* allocator);
197 
211 int ucx_array_clone(UcxArray* dest, UcxArray const* src);
212 
213 
230 int ucx_array_equals(UcxArray const *array1, UcxArray const *array2,
231  cmp_func cmpfnc, void* data);
232 
242 void ucx_array_destroy(UcxArray *array);
243 
249 void ucx_array_free(UcxArray *array);
250 
267 int ucx_array_append_from(UcxArray *array, void *data, size_t count);
268 
269 
286 int ucx_array_prepend_from(UcxArray *array, void *data, size_t count);
287 
288 
304 int ucx_array_set_from(UcxArray *array, size_t index, void *data, size_t count);
305 
320 int ucx_array_concat(UcxArray *array1, const UcxArray *array2);
321 
330 void *ucx_array_at(UcxArray const* array, size_t index);
331 
349 size_t ucx_array_find(UcxArray const *array, void *elem,
350  cmp_func cmpfnc, void *data);
351 
364 int ucx_array_contains(UcxArray const *array, void *elem,
365  cmp_func cmpfnc, void *data);
366 
381 void ucx_array_sort(UcxArray* array, cmp_func cmpfnc, void *data);
382 
393 void ucx_array_remove(UcxArray *array, size_t index);
394 
405 void ucx_array_remove_fast(UcxArray *array, size_t index);
406 
415 int ucx_array_shrink(UcxArray* array);
416 
427 int ucx_array_resize(UcxArray* array, size_t capacity);
428 
439 int ucx_array_reserve(UcxArray* array, size_t capacity);
440 
452 int ucx_array_grow(UcxArray* array, size_t count);
453 
454 
455 #ifdef __cplusplus
456 }
457 #endif
458 
459 #endif /* UCX_ARRAY_H */
460 
int ucx_array_append_from(UcxArray *array, void *data, size_t count)
Inserts elements at the end of the array.
Definition: array.c:206
+
int ucx_array_prepend_from(UcxArray *array, void *data, size_t count)
Inserts elements at the beginning of the array.
Definition: array.c:221
+
int ucx_array_grow(UcxArray *array, size_t count)
Resizes the capacity, if the specified number of elements would not fit.
Definition: array.c:465
+
int(* cmp_func)(const void *, const void *, void *)
Function pointer to a compare function.
Definition: ucx.h:84
+
int ucx_array_shrink(UcxArray *array)
Shrinks the memory to exactly fit the contents.
Definition: array.c:418
+
int ucx_array_concat(UcxArray *array1, const UcxArray *array2)
Concatenates two arrays.
Definition: array.c:259
+
Main UCX Header providing most common definitions.
+
size_t capacity
The current capacity of the array.
Definition: array.h:53
+
int ucx_array_util_set_a(UcxAllocator *alloc, void **array, size_t *capacity, size_t elmsize, size_t idx, void *data)
Sets an element in an arbitrary user defined array.
Definition: array.c:72
+
int ucx_array_equals(UcxArray const *array1, UcxArray const *array2, cmp_func cmpfnc, void *data)
Compares two UCX arrays element-wise by using a compare function.
Definition: array.c:166
+
void ucx_array_init_a(UcxArray *array, size_t capacity, size_t elemsize, UcxAllocator *allocator)
Initializes a UCX array structure using the specified allocator.
Definition: array.c:136
+
void ucx_array_sort(UcxArray *array, cmp_func cmpfnc, void *data)
Sorts a UcxArray with the best available sort algorithm.
Definition: array.c:395
+
void * data
A pointer to the data.
Definition: array.h:65
+
UcxArray * ucx_array_new(size_t capacity, size_t elemsize)
Creates a new UCX array with the given capacity and element size.
Definition: array.c:119
+
void ucx_array_remove(UcxArray *array, size_t index)
Removes an element from the array.
Definition: array.c:400
+
UcxAllocator * allocator
The allocator used for the data.
Definition: array.h:69
+
int ucx_array_set_from(UcxArray *array, size_t index, void *data, size_t count)
Sets elements starting at the specified index.
Definition: array.c:240
+
void ucx_array_remove_fast(UcxArray *array, size_t index)
Removes an element from the array.
Definition: array.c:409
+
UCX allocator data structure containing memory management functions.
Definition: allocator.h:88
+
int ucx_array_contains(UcxArray const *array, void *elem, cmp_func cmpfnc, void *data)
Checks, if an array contains a specific element.
Definition: array.c:309
+
size_t ucx_array_find(UcxArray const *array, void *elem, cmp_func cmpfnc, void *data)
Returns the index of an element containing the specified data.
Definition: array.c:286
+
UCX array type.
Definition: array.h:49
+
size_t size
The actual number of elements in the array.
Definition: array.h:57
+
void ucx_array_destroy(UcxArray *array)
Destroys the array.
Definition: array.c:194
+
int ucx_array_util_setptr_a(UcxAllocator *alloc, void **array, size_t *capacity, size_t idx, void *ptr)
Stores a pointer in an arbitrary user defined array.
Definition: array.c:112
+
Allocator for custom memory management.
+
void ucx_array_free(UcxArray *array)
Destroys and frees the array.
Definition: array.c:201
+
int ucx_array_clone(UcxArray *dest, UcxArray const *src)
Creates an shallow copy of an array.
Definition: array.c:151
+
void * ucx_array_at(UcxArray const *array, size_t index)
Returns a pointer to the array element at the specified index.
Definition: array.c:280
+
int ucx_array_resize(UcxArray *array, size_t capacity)
Sets the capacity of the array.
Definition: array.c:430
+
void ucx_array_init(UcxArray *array, size_t capacity, size_t elemsize)
Initializes a UCX array structure with the given capacity and element size.
Definition: array.c:132
+
size_t elemsize
The size of an individual element in bytes.
Definition: array.h:61
+
int ucx_array_reserve(UcxArray *array, size_t capacity)
Resizes the array only, if the capacity is insufficient.
Definition: array.c:449
+
UcxArray * ucx_array_new_a(size_t capacity, size_t elemsize, UcxAllocator *allocator)
Creates a new UCX array using the specified allocator.
Definition: array.c:123
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/avl_8h.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/avl_8h.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,883 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/avl.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
avl.h File Reference
+
+
+ +

AVL tree implementation. +More...

+
#include "ucx.h"
+#include "allocator.h"
+#include <inttypes.h>
+
+

Go to the source code of this file.

+ + + + + + + + +

+Data Structures

struct  UcxAVLNode
 UCX AVL Node. More...
 
struct  UcxAVLTree
 UCX AVL Tree. More...
 
+ + + + + + + + + + + + + + + + +

+Macros

#define ucx_avl_default_new()   ucx_avl_new_a(ucx_cmp_ptr, ucx_default_allocator())
 Macro for initializing a new UcxAVLTree with the default allocator and a ucx_cmp_ptr() compare function. More...
 
+#define UCX_AVL_FIND_EXACT   0
 A mode for ucx_avl_find_node() with the same behavior as ucx_avl_get_node().
 
+#define UCX_AVL_FIND_LOWER_BOUNDED   1
 A mode for ucx_avl_find_node() finding the node whose key is at least as large as the specified key.
 
+#define UCX_AVL_FIND_UPPER_BOUNDED   2
 A mode for ucx_avl_find_node() finding the node whose key is at most as large as the specified key.
 
#define UCX_AVL_FIND_CLOSEST   3
 A mode for ucx_avl_find_node() finding the node with a key that is as close to the specified key as possible. More...
 
+ + + + +

+Typedefs

typedef struct UcxAVLNode UcxAVLNode
 UCX AVL Node type. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

UcxAVLTreeucx_avl_new (cmp_func cmpfunc)
 Initializes a new UcxAVLTree with a default allocator. More...
 
UcxAVLTreeucx_avl_new_a (cmp_func cmpfunc, UcxAllocator *allocator)
 Initializes a new UcxAVLTree with the specified allocator. More...
 
void ucx_avl_free (UcxAVLTree *tree)
 Destroys a UcxAVLTree. More...
 
void ucx_avl_free_content (UcxAVLTree *tree, ucx_destructor destr)
 Frees the contents of a UcxAVLTree. More...
 
UcxAVLNodeucx_avl_get_node (UcxAVLTree *tree, intptr_t key)
 Gets the node from the tree, that is associated with the specified key. More...
 
void * ucx_avl_get (UcxAVLTree *tree, intptr_t key)
 Gets the value from the tree, that is associated with the specified key. More...
 
UcxAVLNodeucx_avl_find_node (UcxAVLTree *tree, intptr_t key, distance_func dfnc, int mode)
 Finds a node within the tree. More...
 
void * ucx_avl_find (UcxAVLTree *tree, intptr_t key, distance_func dfnc, int mode)
 Finds a value within the tree. More...
 
int ucx_avl_put (UcxAVLTree *tree, intptr_t key, void *value)
 Puts a key/value pair into the tree. More...
 
int ucx_avl_put_s (UcxAVLTree *tree, intptr_t key, void *value, void **oldvalue)
 Puts a key/value pair into the tree. More...
 
int ucx_avl_remove_node (UcxAVLTree *tree, UcxAVLNode *node)
 Removes a node from the AVL tree. More...
 
int ucx_avl_remove (UcxAVLTree *tree, intptr_t key)
 Removes an element from the AVL tree. More...
 
int ucx_avl_remove_s (UcxAVLTree *tree, intptr_t key, intptr_t *oldkey, void **oldvalue)
 Removes an element from the AVL tree. More...
 
size_t ucx_avl_count (UcxAVLTree *tree)
 Counts the nodes in the specified UcxAVLTree. More...
 
UcxAVLNodeucx_avl_pred (UcxAVLNode *node)
 Finds the in-order predecessor of the given node. More...
 
UcxAVLNodeucx_avl_succ (UcxAVLNode *node)
 Finds the in-order successor of the given node. More...
 
+

Detailed Description

+

AVL tree implementation.

+

This binary search tree implementation allows average O(1) insertion and removal of elements (excluding binary search time).

+
Author
Mike Becker
+
+Olaf Wintermann
+

Macro Definition Documentation

+ +

◆ ucx_avl_default_new

+ +
+
+ + + + + + + +
#define ucx_avl_default_new()   ucx_avl_new_a(ucx_cmp_ptr, ucx_default_allocator())
+
+ +

Macro for initializing a new UcxAVLTree with the default allocator and a ucx_cmp_ptr() compare function.

+
Returns
a new default UcxAVLTree object
+ +
+
+ +

◆ UCX_AVL_FIND_CLOSEST

+ +
+
+ + + + +
#define UCX_AVL_FIND_CLOSEST   3
+
+ +

A mode for ucx_avl_find_node() finding the node with a key that is as close to the specified key as possible.

+

If the key is present, the behavior is like ucx_avl_get_node(). This mode only returns NULL on empty trees.

+ +
+
+

Typedef Documentation

+ +

◆ UcxAVLNode

+ +
+
+ + + + +
typedef struct UcxAVLNode UcxAVLNode
+
+ +

UCX AVL Node type.

+
See also
UcxAVLNode
+ +
+
+

Function Documentation

+ +

◆ ucx_avl_count()

+ +
+
+ + + + + + + + +
size_t ucx_avl_count (UcxAVLTreetree)
+
+ +

Counts the nodes in the specified UcxAVLTree.

+
Parameters
+ + +
treethe AVL tree
+
+
+
Returns
the node count
+ +
+
+ +

◆ ucx_avl_find()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void* ucx_avl_find (UcxAVLTreetree,
intptr_t key,
distance_func dfnc,
int mode 
)
+
+ +

Finds a value within the tree.

+

See ucx_avl_find_node() for details.

+
Parameters
+ + + + + +
treethe UcxAVLTree
keythe key
dfncthe distance function
modethe find mode
+
+
+
Returns
the value (or NULL, if no value can be found)
+ +
+
+ +

◆ ucx_avl_find_node()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxAVLNode* ucx_avl_find_node (UcxAVLTreetree,
intptr_t key,
distance_func dfnc,
int mode 
)
+
+ +

Finds a node within the tree.

+

The following modes are supported:

+

The distance function provided MUST agree with the compare function of the AVL tree.

+
Parameters
+ + + + + +
treethe UcxAVLTree
keythe key
dfncthe distance function
modethe find mode
+
+
+
Returns
the node (or NULL, if no node can be found)
+ +
+
+ +

◆ ucx_avl_free()

+ +
+
+ + + + + + + + +
void ucx_avl_free (UcxAVLTreetree)
+
+ +

Destroys a UcxAVLTree.

+

Note, that the contents are not automatically freed. Use may use ucx_avl_free_content() before calling this function.

+
Parameters
+ + +
treethe tree to destroy
+
+
+
See also
ucx_avl_free_content()
+ +
+
+ +

◆ ucx_avl_free_content()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void ucx_avl_free_content (UcxAVLTreetree,
ucx_destructor destr 
)
+
+ +

Frees the contents of a UcxAVLTree.

+

This is a convenience function that iterates over the tree and passes all values to the specified destructor function.

+

If no destructor is specified (NULL), the free() function of the tree's own allocator is used.

+

You must ensure, that it is valid to pass each value in the map to the same destructor function.

+

You should free the entire tree afterwards, as the contents will be invalid.

+
Parameters
+ + + +
treefor which the contents shall be freed
destroptional pointer to a destructor function
+
+
+
See also
ucx_avl_free()
+ +
+
+ +

◆ ucx_avl_get()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void* ucx_avl_get (UcxAVLTreetree,
intptr_t key 
)
+
+ +

Gets the value from the tree, that is associated with the specified key.

+
Parameters
+ + + +
treethe UcxAVLTree
keythe key
+
+
+
Returns
the value (or NULL, if the key is not present)
+ +
+
+ +

◆ ucx_avl_get_node()

+ +
+
+ + + + + + + + + + + + + + + + + + +
UcxAVLNode* ucx_avl_get_node (UcxAVLTreetree,
intptr_t key 
)
+
+ +

Gets the node from the tree, that is associated with the specified key.

+
Parameters
+ + + +
treethe UcxAVLTree
keythe key
+
+
+
Returns
the node (or NULL, if the key is not present)
+ +
+
+ +

◆ ucx_avl_new()

+ +
+
+ + + + + + + + +
UcxAVLTree* ucx_avl_new (cmp_func cmpfunc)
+
+ +

Initializes a new UcxAVLTree with a default allocator.

+
Parameters
+ + +
cmpfuncthe compare function that shall be used
+
+
+
Returns
a new UcxAVLTree object
+
See also
ucx_avl_new_a()
+ +
+
+ +

◆ ucx_avl_new_a()

+ +
+
+ + + + + + + + + + + + + + + + + + +
UcxAVLTree* ucx_avl_new_a (cmp_func cmpfunc,
UcxAllocatorallocator 
)
+
+ +

Initializes a new UcxAVLTree with the specified allocator.

+

The cmpfunc should be capable of comparing two keys within this AVL tree. So if you want to use null terminated strings as keys, you could use the ucx_cmp_str() function here.

+
Parameters
+ + + +
cmpfuncthe compare function that shall be used
allocatorthe UcxAllocator that shall be used
+
+
+
Returns
a new UcxAVLTree object
+ +
+
+ +

◆ ucx_avl_pred()

+ +
+
+ + + + + + + + +
UcxAVLNode* ucx_avl_pred (UcxAVLNodenode)
+
+ +

Finds the in-order predecessor of the given node.

+
Parameters
+ + +
nodean AVL node
+
+
+
Returns
the in-order predecessor of the given node, or NULL if the given node is the in-order minimum
+ +
+
+ +

◆ ucx_avl_put()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_avl_put (UcxAVLTreetree,
intptr_t key,
void * value 
)
+
+ +

Puts a key/value pair into the tree.

+

Attention: use this function only, if a possible old value does not need to be preserved.

+
Parameters
+ + + + +
treethe UcxAVLTree
keythe key
valuethe new value
+
+
+
Returns
zero, if and only if the operation succeeded
+ +
+
+ +

◆ ucx_avl_put_s()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_avl_put_s (UcxAVLTreetree,
intptr_t key,
void * value,
void ** oldvalue 
)
+
+ +

Puts a key/value pair into the tree.

+

This is a secure function which saves the old value to the variable pointed at by oldvalue.

+
Parameters
+ + + + + +
treethe UcxAVLTree
keythe key
valuethe new value
oldvalueoptional: a pointer to the location where a possible old value shall be stored
+
+
+
Returns
zero, if and only if the operation succeeded
+ +
+
+ +

◆ ucx_avl_remove()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int ucx_avl_remove (UcxAVLTreetree,
intptr_t key 
)
+
+ +

Removes an element from the AVL tree.

+
Parameters
+ + + +
treethe UcxAVLTree
keythe key
+
+
+
Returns
zero, if and only if an element has been removed
+ +
+
+ +

◆ ucx_avl_remove_node()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int ucx_avl_remove_node (UcxAVLTreetree,
UcxAVLNodenode 
)
+
+ +

Removes a node from the AVL tree.

+

Note: the specified node is logically removed. The tree implementation decides which memory area is freed. In most cases the here provided node is freed, so its further use is generally undefined.

+
Parameters
+ + + +
treethe UcxAVLTree
nodethe node to remove
+
+
+
Returns
zero, if and only if an element has been removed
+ +
+
+ +

◆ ucx_avl_remove_s()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_avl_remove_s (UcxAVLTreetree,
intptr_t key,
intptr_t * oldkey,
void ** oldvalue 
)
+
+ +

Removes an element from the AVL tree.

+

This is a secure function which saves the old key and value data from node to the variables at the location of oldkey and oldvalue (if specified), so they can be freed afterwards (if necessary).

+

Note: the returned key in oldkey is possibly not the same as the provided key for the lookup (in terms of memory location).

+
Parameters
+ + + + + +
treethe UcxAVLTree
keythe key of the element to remove
oldkeyoptional: a pointer to the location where the old key shall be stored
oldvalueoptional: a pointer to the location where the old value shall be stored
+
+
+
Returns
zero, if and only if an element has been removed
+ +
+
+ +

◆ ucx_avl_succ()

+ +
+
+ + + + + + + + +
UcxAVLNode* ucx_avl_succ (UcxAVLNodenode)
+
+ +

Finds the in-order successor of the given node.

+
Parameters
+ + +
nodean AVL node
+
+
+
Returns
the in-order successor of the given node, or NULL if the given node is the in-order maximum
+ +
+
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/avl_8h_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/avl_8h_source.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,113 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/avl.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
avl.h
+
+
+Go to the documentation of this file.
1 /*
2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3  *
4  * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 
42 #ifndef UCX_AVL_H
43 #define UCX_AVL_H
44 
45 #include "ucx.h"
46 #include "allocator.h"
47 #include <inttypes.h>
48 
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
52 
58 typedef struct UcxAVLNode UcxAVLNode;
59 
63 struct UcxAVLNode {
67  intptr_t key;
71  void *value;
75  size_t height;
88 };
89 
93 typedef struct {
111  void *userdata;
112 } UcxAVLTree;
113 
122 
134 UcxAVLTree *ucx_avl_new_a(cmp_func cmpfunc, UcxAllocator *allocator);
135 
145 void ucx_avl_free(UcxAVLTree *tree);
146 
166 
173 #define ucx_avl_default_new() \
174  ucx_avl_new_a(ucx_cmp_ptr, ucx_default_allocator())
175 
182 UcxAVLNode *ucx_avl_get_node(UcxAVLTree *tree, intptr_t key);
183 
190 void *ucx_avl_get(UcxAVLTree *tree, intptr_t key);
191 
196 #define UCX_AVL_FIND_EXACT 0
197 
201 #define UCX_AVL_FIND_LOWER_BOUNDED 1
202 
206 #define UCX_AVL_FIND_UPPER_BOUNDED 2
207 
213 #define UCX_AVL_FIND_CLOSEST 3
214 
238 UcxAVLNode *ucx_avl_find_node(UcxAVLTree *tree, intptr_t key,
239  distance_func dfnc, int mode);
240 
251 void *ucx_avl_find(UcxAVLTree *tree, intptr_t key,
252  distance_func dfnc, int mode);
253 
265 int ucx_avl_put(UcxAVLTree *tree, intptr_t key, void *value);
266 
280 int ucx_avl_put_s(UcxAVLTree *tree, intptr_t key, void *value, void **oldvalue);
281 
293 int ucx_avl_remove_node(UcxAVLTree *tree, UcxAVLNode *node);
294 
302 int ucx_avl_remove(UcxAVLTree *tree, intptr_t key);
303 
322 int ucx_avl_remove_s(UcxAVLTree *tree, intptr_t key,
323  intptr_t *oldkey, void **oldvalue);
324 
330 size_t ucx_avl_count(UcxAVLTree *tree);
331 
339 
347 
348 #ifdef __cplusplus
349 }
350 #endif
351 
352 #endif /* UCX_AVL_H */
353 
UcxAVLTree * ucx_avl_new(cmp_func cmpfunc)
Initializes a new UcxAVLTree with a default allocator.
Definition: avl.c:109
+
int ucx_avl_remove(UcxAVLTree *tree, intptr_t key)
Removes an element from the AVL tree.
Definition: avl.c:266
+
UCX AVL Node.
Definition: avl.h:63
+
int(* cmp_func)(const void *, const void *, void *)
Function pointer to a compare function.
Definition: ucx.h:84
+
UcxAVLNode * parent
Parent node.
Definition: avl.h:79
+
UcxAVLNode * ucx_avl_pred(UcxAVLNode *node)
Finds the in-order predecessor of the given node.
Definition: avl.c:335
+
int ucx_avl_put(UcxAVLTree *tree, intptr_t key, void *value)
Puts a key/value pair into the tree.
Definition: avl.c:211
+
Main UCX Header providing most common definitions.
+
UCX AVL Tree.
Definition: avl.h:93
+
size_t ucx_avl_count(UcxAVLTree *tree)
Counts the nodes in the specified UcxAVLTree.
Definition: avl.c:331
+
UcxAVLTree * ucx_avl_new_a(cmp_func cmpfunc, UcxAllocator *allocator)
Initializes a new UcxAVLTree with the specified allocator.
Definition: avl.c:113
+
void * userdata
Custom user data.
Definition: avl.h:111
+
int ucx_avl_remove_node(UcxAVLTree *tree, UcxAVLNode *node)
Removes a node from the AVL tree.
Definition: avl.c:270
+
cmp_func cmpfunc
Compare function that shall be used to compare the UcxAVLNode keys.
Definition: avl.h:106
+
UcxAVLNode * ucx_avl_succ(UcxAVLNode *node)
Finds the in-order successor of the given node.
Definition: avl.c:355
+
void ucx_avl_free_content(UcxAVLTree *tree, ucx_destructor destr)
Frees the contents of a UcxAVLTree.
Definition: avl.c:152
+
UcxAllocator * allocator
The UcxAllocator that shall be used to manage the memory for node data.
Definition: avl.h:97
+
int ucx_avl_remove_s(UcxAVLTree *tree, intptr_t key, intptr_t *oldkey, void **oldvalue)
Removes an element from the AVL tree.
Definition: avl.c:274
+
void * ucx_avl_find(UcxAVLTree *tree, intptr_t key, distance_func dfnc, int mode)
Finds a value within the tree.
Definition: avl.c:205
+
UCX allocator data structure containing memory management functions.
Definition: allocator.h:88
+
int ucx_avl_put_s(UcxAVLTree *tree, intptr_t key, void *value, void **oldvalue)
Puts a key/value pair into the tree.
Definition: avl.c:215
+
UcxAVLNode * root
Root node of the tree.
Definition: avl.h:101
+
intmax_t(* distance_func)(const void *, const void *, void *)
Function pointer to a distance function.
Definition: ucx.h:93
+
Allocator for custom memory management.
+
void * ucx_avl_get(UcxAVLTree *tree, intptr_t key)
Gets the value from the tree, that is associated with the specified key.
Definition: avl.c:166
+
UcxAVLNode * left
Root node of left subtree.
Definition: avl.h:83
+
void ucx_avl_free(UcxAVLTree *tree)
Destroys a UcxAVLTree.
Definition: avl.c:133
+
void * value
Data contained by this node.
Definition: avl.h:71
+
UcxAVLNode * ucx_avl_find_node(UcxAVLTree *tree, intptr_t key, distance_func dfnc, int mode)
Finds a node within the tree.
Definition: avl.c:171
+
intptr_t key
The key for this node.
Definition: avl.h:67
+
UcxAVLNode * right
Root node of right subtree.
Definition: avl.h:87
+
UcxAVLNode * ucx_avl_get_node(UcxAVLTree *tree, intptr_t key)
Gets the node from the tree, that is associated with the specified key.
Definition: avl.c:156
+
size_t height
The height of this (sub)-tree.
Definition: avl.h:75
+
void(* ucx_destructor)(void *)
A function pointer to a destructor function.
Definition: ucx.h:72
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/bc_s.png Binary file docs/api-2.1/bc_s.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/bdwn.png Binary file docs/api-2.1/bdwn.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/buffer_8h.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/buffer_8h.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,844 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/buffer.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
buffer.h File Reference
+
+
+ +

Advanced buffer implementation. +More...

+
#include "ucx.h"
+#include <sys/types.h>
+#include <stdio.h>
+
+

Go to the source code of this file.

+ + + + + +

+Data Structures

struct  UcxBuffer
 UCX Buffer. More...
 
+ + + + + + + + + + + + + + + + + + + +

+Macros

+#define UCX_BUFFER_DEFAULT   0x00
 No buffer features enabled (all flags cleared).
 
+#define UCX_BUFFER_AUTOFREE   0x01
 If this flag is enabled, the buffer will automatically free its contents.
 
+#define UCX_BUFFER_AUTOEXTEND   0x02
 If this flag is enabled, the buffer will automatically extends its capacity.
 
#define ucx_buffer_clone(src, flags)   ucx_buffer_extract(src, 0, (src)->capacity, flags)
 A shorthand macro for the full extraction of the buffer. More...
 
#define ucx_buffer_clear(buffer)
 Clears the buffer by resetting the position and deleting the data. More...
 
#define ucx_buffer_to_sstr(buffer)   sstrn((buffer)->space, (buffer)->size)
 Returns the complete buffer content as sstr_t. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

UcxBufferucx_buffer_new (void *space, size_t capacity, int flags)
 Creates a new buffer. More...
 
void ucx_buffer_free (UcxBuffer *buffer)
 Destroys a buffer. More...
 
UcxBufferucx_buffer_extract (UcxBuffer *src, size_t start, size_t length, int flags)
 Creates a new buffer and fills it with extracted content from another buffer. More...
 
int ucx_buffer_shift (UcxBuffer *buffer, off_t shift)
 Shifts the contents of the buffer by the given offset. More...
 
int ucx_buffer_shift_right (UcxBuffer *buffer, size_t shift)
 Shifts the buffer to the right. More...
 
int ucx_buffer_shift_left (UcxBuffer *buffer, size_t shift)
 Shifts the buffer to the left. More...
 
int ucx_buffer_seek (UcxBuffer *buffer, off_t offset, int whence)
 Moves the position of the buffer. More...
 
int ucx_buffer_eof (UcxBuffer *buffer)
 Tests, if the buffer position has exceeded the buffer capacity. More...
 
int ucx_buffer_extend (UcxBuffer *buffer, size_t additional_bytes)
 Extends the capacity of the buffer. More...
 
size_t ucx_buffer_write (const void *ptr, size_t size, size_t nitems, UcxBuffer *buffer)
 Writes data to a UcxBuffer. More...
 
size_t ucx_buffer_read (void *ptr, size_t size, size_t nitems, UcxBuffer *buffer)
 Reads data from a UcxBuffer. More...
 
int ucx_buffer_putc (UcxBuffer *buffer, int c)
 Writes a character to a buffer. More...
 
int ucx_buffer_getc (UcxBuffer *buffer)
 Gets a character from a buffer. More...
 
size_t ucx_buffer_puts (UcxBuffer *buffer, const char *str)
 Writes a string to a buffer. More...
 
+

Detailed Description

+

Advanced buffer implementation.

+

Instances of UcxBuffer can be used to read from or to write to like one would do with a stream. This allows the use of ucx_stream_copy() to copy contents from one buffer to another.

+

Some features for convenient use of the buffer can be enabled. See the documentation of the macro constants for more information.

+
Author
Mike Becker
+
+Olaf Wintermann
+

Macro Definition Documentation

+ +

◆ ucx_buffer_clear

+ +
+
+ + + + + + + + +
#define ucx_buffer_clear( buffer)
+
+Value:
memset((buffer)->space, 0, (buffer)->size); \
(buffer)->size = 0; (buffer)->pos = 0;
+

Clears the buffer by resetting the position and deleting the data.

+

The data is deleted by a zeroing it with call to memset().

+
Parameters
+ + +
bufferthe buffer to be cleared
+
+
+ +
+
+ +

◆ ucx_buffer_clone

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define ucx_buffer_clone( src,
 flags 
)   ucx_buffer_extract(src, 0, (src)->capacity, flags)
+
+ +

A shorthand macro for the full extraction of the buffer.

+
Parameters
+ + + +
srcthe source buffer
flagsfeature mask for the new buffer
+
+
+
Returns
a new buffer with the extracted content
+ +
+
+ +

◆ ucx_buffer_to_sstr

+ +
+
+ + + + + + + + +
#define ucx_buffer_to_sstr( buffer)   sstrn((buffer)->space, (buffer)->size)
+
+ +

Returns the complete buffer content as sstr_t.

+
Parameters
+ + +
bufferthe buffer
+
+
+
Returns
the result of sstrn() with the buffer space and size as arguments
+ +
+
+

Function Documentation

+ +

◆ ucx_buffer_eof()

+ +
+
+ + + + + + + + +
int ucx_buffer_eof (UcxBufferbuffer)
+
+ +

Tests, if the buffer position has exceeded the buffer capacity.

+
Parameters
+ + +
bufferthe buffer to test
+
+
+
Returns
non-zero, if the current buffer position has exceeded the last available byte of the buffer.
+ +
+
+ +

◆ ucx_buffer_extend()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int ucx_buffer_extend (UcxBufferbuffer,
size_t additional_bytes 
)
+
+ +

Extends the capacity of the buffer.

+

Note: The buffer capacity increased by a power of two. I.e. the buffer capacity is doubled, as long as it would not hold the current content plus the additional required bytes.

+

Attention: the argument provided is the number of additional bytes the buffer shall hold. It is NOT the total number of bytes the buffer shall hold.

+
Parameters
+ + + +
bufferthe buffer to extend
additional_bytesthe number of additional bytes the buffer shall at least hold
+
+
+
Returns
0 on success or a non-zero value on failure
+ +
+
+ +

◆ ucx_buffer_extract()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxBuffer* ucx_buffer_extract (UcxBuffersrc,
size_t start,
size_t length,
int flags 
)
+
+ +

Creates a new buffer and fills it with extracted content from another buffer.

+

Note: the UCX_BUFFER_AUTOFREE feature is enforced for the new buffer.

+
Parameters
+ + + + + +
srcthe source buffer
startthe start position of extraction
lengththe count of bytes to extract (must not be zero)
flagsfeature mask for the new buffer
+
+
+
Returns
a new buffer containing the extraction
+ +
+
+ +

◆ ucx_buffer_free()

+ +
+
+ + + + + + + + +
void ucx_buffer_free (UcxBufferbuffer)
+
+ +

Destroys a buffer.

+

If the UCX_BUFFER_AUTOFREE feature is enabled, the contents of the buffer are also freed.

+
Parameters
+ + +
bufferthe buffer to destroy
+
+
+ +
+
+ +

◆ ucx_buffer_getc()

+ +
+
+ + + + + + + + +
int ucx_buffer_getc (UcxBufferbuffer)
+
+ +

Gets a character from a buffer.

+

The current position of the buffer is increased after a successful read.

+
Parameters
+ + +
bufferthe buffer to read from
+
+
+
Returns
the character as int value or EOF, if the end of the buffer is reached
+ +
+
+ +

◆ ucx_buffer_new()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
UcxBuffer* ucx_buffer_new (void * space,
size_t capacity,
int flags 
)
+
+ +

Creates a new buffer.

+

Note: you may provide NULL as argument for space. Then this function will allocate the space and enforce the UCX_BUFFER_AUTOFREE flag.

+
Parameters
+ + + + +
spacepointer to the memory area, or NULL to allocate new memory
capacitythe capacity of the buffer
flagsbuffer features (see UcxBuffer.flags)
+
+
+
Returns
the new buffer
+ +
+
+ +

◆ ucx_buffer_putc()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int ucx_buffer_putc (UcxBufferbuffer,
int c 
)
+
+ +

Writes a character to a buffer.

+

The least significant byte of the argument is written to the buffer. If the end of the buffer is reached and UCX_BUFFER_AUTOEXTEND feature is enabled, the buffer capacity is extended by ucx_buffer_extend(). If the feature is disabled or buffer extension fails, EOF is returned.

+

On successful write the position of the buffer is increased.

+
Parameters
+ + + +
bufferthe buffer to write to
cthe character to write as int value
+
+
+
Returns
the byte that has bean written as int value or EOF when the end of the stream is reached and automatic extension is not enabled or not possible
+ +
+
+ +

◆ ucx_buffer_puts()

+ +
+
+ + + + + + + + + + + + + + + + + + +
size_t ucx_buffer_puts (UcxBufferbuffer,
const char * str 
)
+
+ +

Writes a string to a buffer.

+
Parameters
+ + + +
bufferthe buffer
strthe string
+
+
+
Returns
the number of bytes written
+ +
+
+ +

◆ ucx_buffer_read()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
size_t ucx_buffer_read (void * ptr,
size_t size,
size_t nitems,
UcxBufferbuffer 
)
+
+ +

Reads data from a UcxBuffer.

+

The position of the buffer is increased by the number of bytes read.

+
Parameters
+ + + + + +
ptra pointer to the memory area where to store the read data
sizethe length of one element
nitemsthe element count
bufferthe UcxBuffer to read from
+
+
+
Returns
the total number of elements read
+ +
+
+ +

◆ ucx_buffer_seek()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_buffer_seek (UcxBufferbuffer,
off_t offset,
int whence 
)
+
+ +

Moves the position of the buffer.

+

The new position is relative to the whence argument.

+

SEEK_SET marks the start of the buffer. SEEK_CUR marks the current position. SEEK_END marks the end of the buffer.

+

With an offset of zero, this function sets the buffer position to zero (SEEK_SET), the buffer size (SEEK_END) or leaves the buffer position unchanged (SEEK_CUR).

+
Parameters
+ + + + +
buffer
offsetposition offset relative to whence
whenceone of SEEK_SET, SEEK_CUR or SEEK_END
+
+
+
Returns
0 on success, non-zero if the position is invalid
+ +
+
+ +

◆ ucx_buffer_shift()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int ucx_buffer_shift (UcxBufferbuffer,
off_t shift 
)
+
+ +

Shifts the contents of the buffer by the given offset.

+

If the offset is positive, the contents are shifted to the right. If auto extension is enabled, the buffer grows, if necessary. In case the auto extension fails, this function returns a non-zero value and no contents are changed. If auto extension is disabled, the contents that do not fit into the buffer are discarded.

+

If the offset is negative, the contents are shifted to the left where the first shift bytes are discarded. The new size of the buffer is the old size minus the absolute shift value. If this value is larger than the buffer size, the buffer is emptied (but not cleared, see the security note below).

+

The buffer position gets shifted alongside with the content but is kept within the boundaries of the buffer.

+

Security note: the shifting operation does not erase the previously occupied memory cells. You can easily do that manually, e.g. by calling memset(buffer->space, 0, shift) for a right shift or memset(buffer->size, 0, buffer->capacity-buffer->size) for a left shift.

+
Parameters
+ + + +
bufferthe buffer
shiftthe shift offset (negative means left shift)
+
+
+
Returns
0 on success, non-zero if a required auto-extension fails
+ +
+
+ +

◆ ucx_buffer_shift_left()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int ucx_buffer_shift_left (UcxBufferbuffer,
size_t shift 
)
+
+ +

Shifts the buffer to the left.

+

See ucx_buffer_shift() for details. Note, however, that this method expects a positive shift offset.

+

Since a left shift cannot fail due to memory allocation problems, this function always returns zero.

+
Parameters
+ + + +
bufferthe buffer
shiftthe shift offset
+
+
+
Returns
always zero
+
See also
ucx_buffer_shift()
+ +
+
+ +

◆ ucx_buffer_shift_right()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int ucx_buffer_shift_right (UcxBufferbuffer,
size_t shift 
)
+
+ +

Shifts the buffer to the right.

+

See ucx_buffer_shift() for details.

+
Parameters
+ + + +
bufferthe buffer
shiftthe shift offset
+
+
+
Returns
0 on success, non-zero if a required auto-extension fails
+
See also
ucx_buffer_shift()
+ +
+
+ +

◆ ucx_buffer_write()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
size_t ucx_buffer_write (const void * ptr,
size_t size,
size_t nitems,
UcxBufferbuffer 
)
+
+ +

Writes data to a UcxBuffer.

+

The position of the buffer is increased by the number of bytes written.

+
Parameters
+ + + + + +
ptra pointer to the memory area containing the bytes to be written
sizethe length of one element
nitemsthe element count
bufferthe UcxBuffer to write to
+
+
+
Returns
the total count of bytes written
+ +
+
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/buffer_8h_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/buffer_8h_source.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,100 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/buffer.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
buffer.h
+
+
+Go to the documentation of this file.
1 /*
2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3  *
4  * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28 
46 #ifndef UCX_BUFFER_H
47 #define UCX_BUFFER_H
48 
49 #include "ucx.h"
50 #include <sys/types.h>
51 #include <stdio.h>
52 
53 #ifdef __cplusplus
54 extern "C" {
55 #endif
56 
60 #define UCX_BUFFER_DEFAULT 0x00
61 
65 #define UCX_BUFFER_AUTOFREE 0x01
66 
70 #define UCX_BUFFER_AUTOEXTEND 0x02
71 
73 typedef struct {
75  char *space;
77  size_t pos;
79  size_t capacity;
81  size_t size;
88  int flags;
89 } UcxBuffer;
90 
104 UcxBuffer *ucx_buffer_new(void *space, size_t capacity, int flags);
105 
114 void ucx_buffer_free(UcxBuffer* buffer);
115 
128  size_t start, size_t length, int flags);
129 
137 #define ucx_buffer_clone(src,flags) \
138  ucx_buffer_extract(src, 0, (src)->capacity, flags)
139 
140 
171 int ucx_buffer_shift(UcxBuffer* buffer, off_t shift);
172 
182 int ucx_buffer_shift_right(UcxBuffer* buffer, size_t shift);
183 
198 int ucx_buffer_shift_left(UcxBuffer* buffer, size_t shift);
199 
200 
220 int ucx_buffer_seek(UcxBuffer *buffer, off_t offset, int whence);
221 
229 #define ucx_buffer_clear(buffer) memset((buffer)->space, 0, (buffer)->size); \
230  (buffer)->size = 0; (buffer)->pos = 0;
231 
239 int ucx_buffer_eof(UcxBuffer *buffer);
240 
241 
258 int ucx_buffer_extend(UcxBuffer *buffer, size_t additional_bytes);
259 
271 size_t ucx_buffer_write(const void *ptr, size_t size, size_t nitems,
272  UcxBuffer *buffer);
273 
285 size_t ucx_buffer_read(void *ptr, size_t size, size_t nitems,
286  UcxBuffer *buffer);
287 
304 int ucx_buffer_putc(UcxBuffer *buffer, int c);
305 
315 int ucx_buffer_getc(UcxBuffer *buffer);
316 
324 size_t ucx_buffer_puts(UcxBuffer *buffer, const char *str);
325 
332 #define ucx_buffer_to_sstr(buffer) sstrn((buffer)->space, (buffer)->size)
333 
334 #ifdef __cplusplus
335 }
336 #endif
337 
338 #endif /* UCX_BUFFER_H */
339 
int flags
Flag register for buffer features.
Definition: buffer.h:88
+
int ucx_buffer_seek(UcxBuffer *buffer, off_t offset, int whence)
Moves the position of the buffer.
Definition: buffer.c:90
+
size_t ucx_buffer_read(void *ptr, size_t size, size_t nitems, UcxBuffer *buffer)
Reads data from a UcxBuffer.
Definition: buffer.c:189
+
int ucx_buffer_shift_left(UcxBuffer *buffer, size_t shift)
Shifts the buffer to the left.
Definition: buffer.c:244
+
Main UCX Header providing most common definitions.
+
int ucx_buffer_extend(UcxBuffer *buffer, size_t additional_bytes)
Extends the capacity of the buffer.
Definition: buffer.c:126
+
void ucx_buffer_free(UcxBuffer *buffer)
Destroys a buffer.
Definition: buffer.c:59
+
size_t pos
Current position of the buffer.
Definition: buffer.h:77
+
size_t ucx_buffer_write(const void *ptr, size_t size, size_t nitems, UcxBuffer *buffer)
Writes data to a UcxBuffer.
Definition: buffer.c:152
+
size_t capacity
Current capacity (i.e.
Definition: buffer.h:79
+
char * space
A pointer to the buffer contents.
Definition: buffer.h:75
+
int ucx_buffer_eof(UcxBuffer *buffer)
Tests, if the buffer position has exceeded the buffer capacity.
Definition: buffer.c:122
+
UCX Buffer.
Definition: buffer.h:73
+
size_t ucx_buffer_puts(UcxBuffer *buffer, const char *str)
Writes a string to a buffer.
Definition: buffer.c:240
+
int ucx_buffer_putc(UcxBuffer *buffer, int c)
Writes a character to a buffer.
Definition: buffer.c:210
+
int ucx_buffer_shift(UcxBuffer *buffer, off_t shift)
Shifts the contents of the buffer by the given offset.
Definition: buffer.c:289
+
UcxBuffer * ucx_buffer_new(void *space, size_t capacity, int flags)
Creates a new buffer.
Definition: buffer.c:35
+
UcxBuffer * ucx_buffer_extract(UcxBuffer *src, size_t start, size_t length, int flags)
Creates a new buffer and fills it with extracted content from another buffer.
Definition: buffer.c:66
+
size_t size
Current size of the buffer content.
Definition: buffer.h:81
+
int ucx_buffer_getc(UcxBuffer *buffer)
Gets a character from a buffer.
Definition: buffer.c:230
+
int ucx_buffer_shift_right(UcxBuffer *buffer, size_t shift)
Shifts the buffer to the right.
Definition: buffer.c:260
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/classes.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/classes.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,89 @@ + + + + + + + +ucx: Data Structure Index + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
Data Structure Index
+
+
+
s | u
+ + + + + + + + + +
  s  
+
ucx_regdestr   UcxBuffer   UcxMapIterator   UcxTestSuite   
ucx_stack_metadata   UcxKey   UcxMapKey   
scstr_t   UcxAllocator   UcxList   UcxMempool   
sstr_t   UcxArray   UcxLogger   UcxProperties   
  u  
+
UcxAVLNode   UcxMap   UcxStack   
UcxAVLTree   UcxMapElement   UcxTestList   
ucx_memchunk   
+
s | u
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/closed.png Binary file docs/api-2.1/closed.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/dir_68267d1309a1af8e8297ef4c3efbcdba.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/dir_68267d1309a1af8e8297ef4c3efbcdba.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,83 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src Directory Reference + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
src Directory Reference
+
+
+ + +

+Directories

+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/dir_69f4ea29401808fe6229564976cde3ce.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/dir_69f4ea29401808fe6229564976cde3ce.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,125 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx Directory Reference + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
ucx Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  allocator.h [code]
 Allocator for custom memory management.
 
file  array.h [code]
 Dynamically allocated array implementation.
 
file  avl.h [code]
 AVL tree implementation.
 
file  buffer.h [code]
 Advanced buffer implementation.
 
file  list.h [code]
 Doubly linked list implementation.
 
file  logging.h [code]
 Logging API.
 
file  map.h [code]
 Hash map implementation.
 
file  mempool.h [code]
 Memory pool implementation.
 
file  properties.h [code]
 Load / store utilities for properties files.
 
file  stack.h [code]
 Default stack memory allocation implementation.
 
file  string.h [code]
 Bounded string implementation.
 
file  test.h [code]
 UCX Test Framework.
 
file  ucx.h [code]
 Main UCX Header providing most common definitions.
 
file  utils.h [code]
 Compare, copy and printf functions.
 
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/doc.png Binary file docs/api-2.1/doc.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/doxygen.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/doxygen.css Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,1596 @@ +/* The standard CSS for doxygen 1.8.13 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +/* +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTableHead tr { +} + +table.markdownTableBodyLeft td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft { + text-align: left +} + +th.markdownTableHeadRight { + text-align: right +} + +th.markdownTableHeadCenter { + text-align: center +} +*/ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + + +/* @end */ diff -r 92e482410453 -r d345541018fa docs/api-2.1/doxygen.png Binary file docs/api-2.1/doxygen.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/dynsections.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/dynsections.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +ucx: File List + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + +
  src
  ucx
 allocator.hAllocator for custom memory management
 array.hDynamically allocated array implementation
 avl.hAVL tree implementation
 buffer.hAdvanced buffer implementation
 list.hDoubly linked list implementation
 logging.hLogging API
 map.hHash map implementation
 mempool.hMemory pool implementation
 properties.hLoad / store utilities for properties files
 stack.hDefault stack memory allocation implementation
 string.hBounded string implementation
 test.hUCX Test Framework
 ucx.hMain UCX Header providing most common definitions
 utils.hCompare, copy and printf functions
+
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/folderclosed.png Binary file docs/api-2.1/folderclosed.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/folderopen.png Binary file docs/api-2.1/folderopen.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/functions.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/functions.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,343 @@ + + + + + + + +ucx: Data Fields + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- h -

+ + +

- i -

+ + +

- k -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+ + +

- w -

+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/functions_vars.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/functions_vars.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,343 @@ + + + + + + + +ucx: Data Fields - Variables + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- h -

+ + +

- i -

+ + +

- k -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+ + +

- w -

+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/globals.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/globals.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,78 @@ + + + + + + + +ucx: Globals + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- _ -

+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/globals_a.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/globals_a.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,87 @@ + + + + + + + +ucx: Globals + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- a -

+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/globals_c.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/globals_c.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,81 @@ + + + + + + + +ucx: Globals + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- c -

+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/globals_d.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/globals_d.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,78 @@ + + + + + + + +ucx: Globals + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- d -

    +
  • distance_func +: ucx.h +
  • +
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/globals_defs.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/globals_defs.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,364 @@ + + + + + + + +ucx: Globals + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- _ -

+ + +

- a -

+ + +

- p -

+ + +

- s -

+ + +

- u -

+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/globals_func.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/globals_func.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,174 @@ + + + + + + + +ucx: Globals + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- s -

+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/globals_func_u.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/globals_func_u.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,621 @@ + + + + + + + +ucx: Globals + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+  + +

- u -

+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/globals_p.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/globals_p.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,78 @@ + + + + + + + +ucx: Globals + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- p -

+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/globals_r.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/globals_r.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,78 @@ + + + + + + + +ucx: Globals + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- r -

+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/globals_s.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/globals_s.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,246 @@ + + + + + + + +ucx: Globals + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- s -

+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/globals_type.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/globals_type.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,130 @@ + + + + + + + +ucx: Globals + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/globals_u.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/globals_u.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,846 @@ + + + + + + + +ucx: Globals + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- u -

+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/globals_w.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/globals_w.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,78 @@ + + + + + + + +ucx: Globals + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+ +

- w -

    +
  • write_func +: ucx.h +
  • +
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/index.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/index.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,88 @@ + + + + + + + +ucx: UAP Common Extensions + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+
UAP Common Extensions
+
+
+

Library with common and useful functions, macros and data structures.

+

Latest available source:
+ https://sourceforge.net/projects/ucx/files/

+

Repositories:
+ https://sourceforge.net/p/ucx/code - or - https://develop.uap-core.de/hg/ucx

+

LICENCE

+

Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.

+

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

+
    +
  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. +
  3. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  4. +
+

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/jquery.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/jquery.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,87 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! + * jQuery UI Widget 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! + * jQuery UI Mouse 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' + + + + +
+ +
+
list.h File Reference
+
+
+ +

Doubly linked list implementation. +More...

+
#include "ucx.h"
+#include "allocator.h"
+
+

Go to the source code of this file.

+
+ + + + +

+Data Structures

struct  UcxList
 UCX list structure. More...
 
+ + + + +

+Macros

#define UCX_FOREACH(elem, list)   for (UcxList* elem = (UcxList*) list ; elem != NULL ; elem = elem->next)
 Loop statement for UCX lists. More...
 
+ + + + +

+Typedefs

typedef struct UcxList UcxList
 UCX list type. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

UcxListucx_list_clone (const UcxList *list, copy_func cpyfnc, void *data)
 Creates an element-wise copy of a list. More...
 
UcxListucx_list_clone_a (UcxAllocator *allocator, const UcxList *list, copy_func cpyfnc, void *data)
 Creates an element-wise copy of a list using a UcxAllocator. More...
 
int ucx_list_equals (const UcxList *list1, const UcxList *list2, cmp_func cmpfnc, void *data)
 Compares two UCX lists element-wise by using a compare function. More...
 
void ucx_list_free (UcxList *list)
 Destroys the entire list. More...
 
void ucx_list_free_a (UcxAllocator *allocator, UcxList *list)
 Destroys the entire list using a UcxAllocator. More...
 
void ucx_list_free_content (UcxList *list, ucx_destructor destr)
 Destroys the contents of the specified list by calling the specified destructor on each of them. More...
 
UcxListucx_list_append (UcxList *list, void *data)
 Inserts an element at the end of the list. More...
 
UcxListucx_list_append_a (UcxAllocator *allocator, UcxList *list, void *data)
 Inserts an element at the end of the list using a UcxAllocator. More...
 
UcxListucx_list_prepend (UcxList *list, void *data)
 Inserts an element at the beginning of the list. More...
 
UcxListucx_list_prepend_a (UcxAllocator *allocator, UcxList *list, void *data)
 Inserts an element at the beginning of the list using a UcxAllocator. More...
 
UcxListucx_list_concat (UcxList *list1, UcxList *list2)
 Concatenates two lists. More...
 
UcxListucx_list_first (const UcxList *elem)
 Returns the first element of a list. More...
 
UcxListucx_list_last (const UcxList *elem)
 Returns the last element of a list. More...
 
UcxListucx_list_get (const UcxList *list, size_t index)
 Returns the list element at the specified index. More...
 
ssize_t ucx_list_indexof (const UcxList *list, const UcxList *elem)
 Returns the index of an element. More...
 
size_t ucx_list_size (const UcxList *list)
 Returns the element count of the list. More...
 
ssize_t ucx_list_find (const UcxList *list, void *elem, cmp_func cmpfnc, void *data)
 Returns the index of an element containing the specified data. More...
 
int ucx_list_contains (const UcxList *list, void *elem, cmp_func cmpfnc, void *data)
 Checks, if a list contains a specific element. More...
 
UcxListucx_list_sort (UcxList *list, cmp_func cmpfnc, void *data)
 Sorts a UcxList with natural merge sort. More...
 
UcxListucx_list_remove (UcxList *list, UcxList *element)
 Removes an element from the list. More...
 
UcxListucx_list_remove_a (UcxAllocator *allocator, UcxList *list, UcxList *element)
 Removes an element from the list using a UcxAllocator. More...
 
UcxListucx_list_union (const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)
 Returns the union of two lists. More...
 
UcxListucx_list_union_a (UcxAllocator *allocator, const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)
 Returns the union of two lists. More...
 
UcxListucx_list_intersection (const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)
 Returns the intersection of two lists. More...
 
UcxListucx_list_intersection_a (UcxAllocator *allocator, const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)
 Returns the intersection of two lists. More...
 
UcxListucx_list_difference (const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)
 Returns the difference of two lists. More...
 
UcxListucx_list_difference_a (UcxAllocator *allocator, const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)
 Returns the difference of two lists. More...
 
+

Detailed Description

+

Doubly linked list implementation.

+
Author
Mike Becker
+
+Olaf Wintermann
+

Macro Definition Documentation

+ +

◆ UCX_FOREACH

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define UCX_FOREACH( elem,
 list 
)   for (UcxList* elem = (UcxList*) list ; elem != NULL ; elem = elem->next)
+
+ +

Loop statement for UCX lists.

+

The first argument is the name of the iteration variable. The scope of this variable is limited to the UCX_FOREACH statement.

+

The second argument is a pointer to the list. In most cases this will be the pointer to the first element of the list, but it may also be an arbitrary element of the list. The iteration will then start with that element.

+
Parameters
+ + + +
listThe first element of the list
elemThe variable name of the element
+
+
+ +
+
+

Typedef Documentation

+ +

◆ UcxList

+ +
+
+ + + + +
typedef struct UcxList UcxList
+
+ +

UCX list type.

+
See also
UcxList
+ +
+
+

Function Documentation

+ +

◆ ucx_list_append()

+ +
+
+ + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_append (UcxListlist,
void * data 
)
+
+ +

Inserts an element at the end of the list.

+

This is generally an O(n) operation, as the end of the list is retrieved with ucx_list_last().

+
Parameters
+ + + +
listthe list where to append the data, or NULL to create a new list
datathe data to insert
+
+
+
Returns
list, if it is not NULL or a pointer to the newly created list otherwise
+ +
+
+ +

◆ ucx_list_append_a()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_append_a (UcxAllocatorallocator,
UcxListlist,
void * data 
)
+
+ +

Inserts an element at the end of the list using a UcxAllocator.

+

See ucx_list_append() for details.

+
Parameters
+ + + + +
allocatorthe allocator to use
listthe list where to append the data, or NULL to create a new list
datathe data to insert
+
+
+
Returns
list, if it is not NULL or a pointer to the newly created list otherwise
+
See also
ucx_list_append()
+ +
+
+ +

◆ ucx_list_clone()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_clone (const UcxListlist,
copy_func cpyfnc,
void * data 
)
+
+ +

Creates an element-wise copy of a list.

+

This function clones the specified list by creating new list elements and copying the data with the specified copy_func(). If no copy_func() is specified, a shallow copy is created and the new list will reference the same data as the source list.

+
Parameters
+ + + + +
listthe list to copy
cpyfnca pointer to the function that shall copy an element (may be NULL)
dataadditional data for the copy_func()
+
+
+
Returns
a pointer to the copy
+ +
+
+ +

◆ ucx_list_clone_a()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_clone_a (UcxAllocatorallocator,
const UcxListlist,
copy_func cpyfnc,
void * data 
)
+
+ +

Creates an element-wise copy of a list using a UcxAllocator.

+

See ucx_list_clone() for details.

+

You might want to pass the allocator via the data parameter, to access it within the copy function for making deep copies.

+
Parameters
+ + + + + +
allocatorthe allocator to use
listthe list to copy
cpyfnca pointer to the function that shall copy an element (may be NULL)
dataadditional data for the copy_func()
+
+
+
Returns
a pointer to the copy
+
See also
ucx_list_clone()
+ +
+
+ +

◆ ucx_list_concat()

+ +
+
+ + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_concat (UcxListlist1,
UcxListlist2 
)
+
+ +

Concatenates two lists.

+

Either of the two arguments may be NULL.

+

This function modifies the references to the next/previous element of the last/first element of list1/ list2.

+
Parameters
+ + + +
list1first list
list2second list
+
+
+
Returns
if list1 is NULL, list2 is returned, otherwise list1 is returned
+ +
+
+ +

◆ ucx_list_contains()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_list_contains (const UcxListlist,
void * elem,
cmp_func cmpfnc,
void * data 
)
+
+ +

Checks, if a list contains a specific element.

+

An element is found, if ucx_list_find() returns a value greater than -1.

+
Parameters
+ + + + + +
listthe list where to search for the data
elemthe element data
cmpfncthe compare function
dataadditional data for the compare function
+
+
+
Returns
1, if and only if the list contains the specified element data
+
See also
ucx_list_find()
+ +
+
+ +

◆ ucx_list_difference()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_difference (const UcxListleft,
const UcxListright,
cmp_func cmpfnc,
void * cmpdata,
copy_func cpfnc,
void * cpdata 
)
+
+ +

Returns the difference of two lists.

+

The difference contains all elements of the left list (including duplicates) that are not equal to any element of the right list.

+
Parameters
+ + + + + + + +
leftthe left source list
rightthe right source list
cmpfnca function to compare elements
cmpdataadditional data for the compare function
cpfnca function to copy the elements
cpdataadditional data for the copy function
+
+
+
Returns
a new list containing the difference
+ +
+
+ +

◆ ucx_list_difference_a()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_difference_a (UcxAllocatorallocator,
const UcxListleft,
const UcxListright,
cmp_func cmpfnc,
void * cmpdata,
copy_func cpfnc,
void * cpdata 
)
+
+ +

Returns the difference of two lists.

+

The difference contains all elements of the left list (including duplicates) that are not equal to any element of the right list.

+
Parameters
+ + + + + + + + +
allocatorallocates the new list elements
leftthe left source list
rightthe right source list
cmpfnca function to compare elements
cmpdataadditional data for the compare function
cpfnca function to copy the elements
cpdataadditional data for the copy function
+
+
+
Returns
a new list containing the difference
+ +
+
+ +

◆ ucx_list_equals()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_list_equals (const UcxListlist1,
const UcxListlist2,
cmp_func cmpfnc,
void * data 
)
+
+ +

Compares two UCX lists element-wise by using a compare function.

+

Each element of the two specified lists are compared by using the specified compare function and the additional data. The type and content of this additional data depends on the cmp_func() used.

+

If the list pointers denote elements within a list, the lists are compared starting with the denoted elements. Thus any previous elements are not taken into account. This might be useful to check, if certain list tails match each other.

+
Parameters
+ + + + + +
list1the first list
list2the second list
cmpfncthe compare function
dataadditional data for the compare function
+
+
+
Returns
1, if and only if the two lists equal element-wise, 0 otherwise
+ +
+
+ +

◆ ucx_list_find()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ssize_t ucx_list_find (const UcxListlist,
void * elem,
cmp_func cmpfnc,
void * data 
)
+
+ +

Returns the index of an element containing the specified data.

+

This function uses a cmp_func() to compare the data of each list element with the specified data. If no cmp_func is provided, the pointers are compared.

+

If the list contains the data more than once, the index of the first occurrence is returned.

+
Parameters
+ + + + + +
listthe list where to search for the data
elemthe element data
cmpfncthe compare function
dataadditional data for the compare function
+
+
+
Returns
the index of the element containing the specified data or -1 if the data is not found in this list
+ +
+
+ +

◆ ucx_list_first()

+ +
+
+ + + + + + + + +
UcxList* ucx_list_first (const UcxListelem)
+
+ +

Returns the first element of a list.

+

If the argument is the list pointer, it is directly returned. Otherwise this function traverses to the first element of the list and returns the list pointer.

+
Parameters
+ + +
elemone element of the list
+
+
+
Returns
the first element of the list, the specified element is a member of
+ +
+
+ +

◆ ucx_list_free()

+ +
+
+ + + + + + + + +
void ucx_list_free (UcxListlist)
+
+ +

Destroys the entire list.

+

The members of the list are not automatically freed, so ensure they are otherwise referenced or destroyed by ucx_list_free_contents(). Otherwise, a memory leak is likely to occur.

+

Caution: the argument MUST denote an entire list (i.e. a call to ucx_list_first() on the argument must return the argument itself)

+
Parameters
+ + +
listthe list to free
+
+
+
See also
ucx_list_free_contents()
+ +
+
+ +

◆ ucx_list_free_a()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void ucx_list_free_a (UcxAllocatorallocator,
UcxListlist 
)
+
+ +

Destroys the entire list using a UcxAllocator.

+

See ucx_list_free() for details.

+
Parameters
+ + + +
allocatorthe allocator to use
listthe list to free
+
+
+
See also
ucx_list_free()
+ +
+
+ +

◆ ucx_list_free_content()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void ucx_list_free_content (UcxListlist,
ucx_destructor destr 
)
+
+ +

Destroys the contents of the specified list by calling the specified destructor on each of them.

+

Note, that the contents are not usable afterwards and the list should be destroyed with ucx_list_free().

+

If no destructor is specified (NULL), stdlib's free() is used.

+
Parameters
+ + + +
listthe list for which the contents shall be freed
destroptional destructor function
+
+
+
See also
ucx_list_free()
+ +
+
+ +

◆ ucx_list_get()

+ +
+
+ + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_get (const UcxListlist,
size_t index 
)
+
+ +

Returns the list element at the specified index.

+
Parameters
+ + + +
listthe list to retrieve the element from
indexindex of the element to return
+
+
+
Returns
the element at the specified index or NULL, if the index is greater than the list size
+ +
+
+ +

◆ ucx_list_indexof()

+ +
+
+ + + + + + + + + + + + + + + + + + +
ssize_t ucx_list_indexof (const UcxListlist,
const UcxListelem 
)
+
+ +

Returns the index of an element.

+
Parameters
+ + + +
listthe list where to search for the element
elemthe element to find
+
+
+
Returns
the index of the element or -1 if the list does not contain the element
+ +
+
+ +

◆ ucx_list_intersection()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_intersection (const UcxListleft,
const UcxListright,
cmp_func cmpfnc,
void * cmpdata,
copy_func cpfnc,
void * cpdata 
)
+
+ +

Returns the intersection of two lists.

+

The intersection contains all elements of the left list (including duplicates) that can be found in the right list.

+
Parameters
+ + + + + + + +
leftthe left source list
rightthe right source list
cmpfnca function to compare elements
cmpdataadditional data for the compare function
cpfnca function to copy the elements
cpdataadditional data for the copy function
+
+
+
Returns
a new list containing the intersection
+ +
+
+ +

◆ ucx_list_intersection_a()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_intersection_a (UcxAllocatorallocator,
const UcxListleft,
const UcxListright,
cmp_func cmpfnc,
void * cmpdata,
copy_func cpfnc,
void * cpdata 
)
+
+ +

Returns the intersection of two lists.

+

The intersection contains all elements of the left list (including duplicates) that can be found in the right list.

+
Parameters
+ + + + + + + + +
allocatorallocates the new list elements
leftthe left source list
rightthe right source list
cmpfnca function to compare elements
cmpdataadditional data for the compare function
cpfnca function to copy the elements
cpdataadditional data for the copy function
+
+
+
Returns
a new list containing the intersection
+ +
+
+ +

◆ ucx_list_last()

+ +
+
+ + + + + + + + +
UcxList* ucx_list_last (const UcxListelem)
+
+ +

Returns the last element of a list.

+

If the argument has no successor, it is the last element and therefore directly returned. Otherwise this function traverses to the last element of the list and returns it.

+
Parameters
+ + +
elemone element of the list
+
+
+
Returns
the last element of the list, the specified element is a member of
+ +
+
+ +

◆ ucx_list_prepend()

+ +
+
+ + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_prepend (UcxListlist,
void * data 
)
+
+ +

Inserts an element at the beginning of the list.

+

You should overwrite the old list pointer by calling mylist = ucx_list_prepend(mylist, mydata);. However, you may also perform successive calls of ucx_list_prepend() on the same list pointer, as this function always searchs for the head of the list with ucx_list_first().

+
Parameters
+ + + +
listthe list where to insert the data or NULL to create a new list
datathe data to insert
+
+
+
Returns
a pointer to the new list head
+ +
+
+ +

◆ ucx_list_prepend_a()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_prepend_a (UcxAllocatorallocator,
UcxListlist,
void * data 
)
+
+ +

Inserts an element at the beginning of the list using a UcxAllocator.

+

See ucx_list_prepend() for details.

+
Parameters
+ + + + +
allocatorthe allocator to use
listthe list where to insert the data or NULL to create a new list
datathe data to insert
+
+
+
Returns
a pointer to the new list head
+
See also
ucx_list_prepend()
+ +
+
+ +

◆ ucx_list_remove()

+ +
+
+ + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_remove (UcxListlist,
UcxListelement 
)
+
+ +

Removes an element from the list.

+

If the first element is removed, the list pointer changes. So it is highly recommended to always update the pointer by calling mylist = ucx_list_remove(mylist, myelem);.

+
Parameters
+ + + +
listthe list from which the element shall be removed
elementthe element to remove
+
+
+
Returns
returns the updated list pointer or NULL, if the list is now empty
+ +
+
+ +

◆ ucx_list_remove_a()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_remove_a (UcxAllocatorallocator,
UcxListlist,
UcxListelement 
)
+
+ +

Removes an element from the list using a UcxAllocator.

+

See ucx_list_remove() for details.

+
Parameters
+ + + + +
allocatorthe allocator to use
listthe list from which the element shall be removed
elementthe element to remove
+
+
+
Returns
returns the updated list pointer or NULL, if the list
+
See also
ucx_list_remove()
+ +
+
+ +

◆ ucx_list_size()

+ +
+
+ + + + + + + + +
size_t ucx_list_size (const UcxListlist)
+
+ +

Returns the element count of the list.

+
Parameters
+ + +
listthe list whose elements are counted
+
+
+
Returns
the element count
+ +
+
+ +

◆ ucx_list_sort()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_sort (UcxListlist,
cmp_func cmpfnc,
void * data 
)
+
+ +

Sorts a UcxList with natural merge sort.

+

This function uses O(n) additional temporary memory for merge operations that is automatically freed after each merge.

+

As the head of the list might change, you MUST call this function as follows: mylist = ucx_list_sort(mylist, mycmpfnc, mydata);.

+
Parameters
+ + + + +
listthe list to sort
cmpfncthe function that shall be used to compare the element data
dataadditional data for the cmp_func()
+
+
+
Returns
the sorted list
+ +
+
+ +

◆ ucx_list_union()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_union (const UcxListleft,
const UcxListright,
cmp_func cmpfnc,
void * cmpdata,
copy_func cpfnc,
void * cpdata 
)
+
+ +

Returns the union of two lists.

+

The union is a list of unique elements regarding cmpfnc obtained from both source lists.

+
Parameters
+ + + + + + + +
leftthe left source list
rightthe right source list
cmpfnca function to compare elements
cmpdataadditional data for the compare function
cpfnca function to copy the elements
cpdataadditional data for the copy function
+
+
+
Returns
a new list containing the union
+ +
+
+ +

◆ ucx_list_union_a()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxList* ucx_list_union_a (UcxAllocatorallocator,
const UcxListleft,
const UcxListright,
cmp_func cmpfnc,
void * cmpdata,
copy_func cpfnc,
void * cpdata 
)
+
+ +

Returns the union of two lists.

+

The union is a list of unique elements regarding cmpfnc obtained from both source lists.

+
Parameters
+ + + + + + + + +
allocatorallocates the new list elements
leftthe left source list
rightthe right source list
cmpfnca function to compare elements
cmpdataadditional data for the compare function
cpfnca function to copy the elements
cpdataadditional data for the copy function
+
+
+
Returns
a new list containing the union
+ +
+
+ + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/list_8h_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/list_8h_source.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,116 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/list.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
list.h
+
+
+Go to the documentation of this file.
1 /*
2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3  *
4  * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
36 #ifndef UCX_LIST_H
37 #define UCX_LIST_H
38 
39 #include "ucx.h"
40 #include "allocator.h"
41 
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45 
59 #define UCX_FOREACH(elem,list) \
60  for (UcxList* elem = (UcxList*) list ; elem != NULL ; elem = elem->next)
61 
66 typedef struct UcxList UcxList;
67 
71 struct UcxList {
75  void *data;
86 };
87 
102 UcxList *ucx_list_clone(const UcxList *list, copy_func cpyfnc, void* data);
103 
120 UcxList *ucx_list_clone_a(UcxAllocator *allocator, const UcxList *list,
121  copy_func cpyfnc, void* data);
122 
141 int ucx_list_equals(const UcxList *list1, const UcxList *list2,
142  cmp_func cmpfnc, void* data);
143 
157 void ucx_list_free(UcxList *list);
158 
168 void ucx_list_free_a(UcxAllocator *allocator, UcxList *list);
169 
183 void ucx_list_free_content(UcxList* list, ucx_destructor destr);
184 
185 
198 UcxList *ucx_list_append(UcxList *list, void *data);
199 
213 UcxList *ucx_list_append_a(UcxAllocator *allocator, UcxList *list, void *data);
214 
215 
230 UcxList *ucx_list_prepend(UcxList *list, void *data);
231 
244 UcxList *ucx_list_prepend_a(UcxAllocator *allocator, UcxList *list, void *data);
245 
260 UcxList *ucx_list_concat(UcxList *list1, UcxList *list2);
261 
272 UcxList *ucx_list_first(const UcxList *elem);
273 
284 UcxList *ucx_list_last(const UcxList *elem);
285 
294 UcxList *ucx_list_get(const UcxList *list, size_t index);
295 
304 ssize_t ucx_list_indexof(const UcxList *list, const UcxList *elem);
305 
312 size_t ucx_list_size(const UcxList *list);
313 
331 ssize_t ucx_list_find(const UcxList *list, void *elem,
332  cmp_func cmpfnc, void *data);
333 
346 int ucx_list_contains(const UcxList *list, void *elem,
347  cmp_func cmpfnc, void *data);
348 
363 UcxList *ucx_list_sort(UcxList *list, cmp_func cmpfnc, void *data);
364 
377 UcxList *ucx_list_remove(UcxList *list, UcxList *element);
378 
390 UcxList *ucx_list_remove_a(UcxAllocator *allocator, UcxList *list,
391  UcxList *element);
392 
407 UcxList* ucx_list_union(const UcxList *left, const UcxList *right,
408  cmp_func cmpfnc, void* cmpdata,
409  copy_func cpfnc, void* cpdata);
410 
427  const UcxList *left, const UcxList *right,
428  cmp_func cmpfnc, void* cmpdata,
429  copy_func cpfnc, void* cpdata);
430 
445 UcxList* ucx_list_intersection(const UcxList *left, const UcxList *right,
446  cmp_func cmpfnc, void* cmpdata,
447  copy_func cpfnc, void* cpdata);
448 
465  const UcxList *left, const UcxList *right,
466  cmp_func cmpfnc, void* cmpdata,
467  copy_func cpfnc, void* cpdata);
468 
483 UcxList* ucx_list_difference(const UcxList *left, const UcxList *right,
484  cmp_func cmpfnc, void* cmpdata,
485  copy_func cpfnc, void* cpdata);
486 
503  const UcxList *left, const UcxList *right,
504  cmp_func cmpfnc, void* cmpdata,
505  copy_func cpfnc, void* cpdata);
506 
507 #ifdef __cplusplus
508 }
509 #endif
510 
511 #endif /* UCX_LIST_H */
512 
void *(* copy_func)(const void *, void *)
Function pointer to a copy function.
Definition: ucx.h:106
+
UcxList * ucx_list_append_a(UcxAllocator *allocator, UcxList *list, void *data)
Inserts an element at the end of the list using a UcxAllocator.
Definition: list.c:91
+
UcxList * ucx_list_get(const UcxList *list, size_t index)
Returns the list element at the specified index.
Definition: list.c:163
+
UcxList * ucx_list_append(UcxList *list, void *data)
Inserts an element at the end of the list.
Definition: list.c:87
+
int(* cmp_func)(const void *, const void *, void *)
Function pointer to a compare function.
Definition: ucx.h:84
+
UcxList * ucx_list_prepend(UcxList *list, void *data)
Inserts an element at the beginning of the list.
Definition: list.c:110
+
Main UCX Header providing most common definitions.
+
UcxList * ucx_list_first(const UcxList *elem)
Returns the first element of a list.
Definition: list.c:307
+
void ucx_list_free_a(UcxAllocator *allocator, UcxList *list)
Destroys the entire list using a UcxAllocator.
Definition: list.c:70
+
UCX list structure.
Definition: list.h:71
+
ssize_t ucx_list_find(const UcxList *list, void *elem, cmp_func cmpfnc, void *data)
Returns the index of an element containing the specified data.
Definition: list.c:175
+
UcxList * ucx_list_difference_a(UcxAllocator *allocator, const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)
Returns the difference of two lists.
Definition: list.c:421
+
UcxList * ucx_list_clone_a(UcxAllocator *allocator, const UcxList *list, copy_func cpyfnc, void *data)
Creates an element-wise copy of a list using a UcxAllocator.
Definition: list.c:35
+
UcxList * ucx_list_union(const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)
Returns the union of two lists.
Definition: list.c:382
+
UcxList * ucx_list_concat(UcxList *list1, UcxList *list2)
Concatenates two lists.
Definition: list.c:128
+
UcxList * ucx_list_last(const UcxList *elem)
Returns the last element of a list.
Definition: list.c:141
+
UcxList * ucx_list_remove(UcxList *list, UcxList *element)
Removes an element from the list.
Definition: list.c:319
+
void * data
List element payload.
Definition: list.h:75
+
ssize_t ucx_list_indexof(const UcxList *list, const UcxList *elem)
Returns the index of an element.
Definition: list.c:151
+
UcxList * ucx_list_remove_a(UcxAllocator *allocator, UcxList *list, UcxList *element)
Removes an element from the list using a UcxAllocator.
Definition: list.c:323
+
UcxList * ucx_list_difference(const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)
Returns the difference of two lists.
Definition: list.c:414
+
UCX allocator data structure containing memory management functions.
Definition: allocator.h:88
+
void ucx_list_free_content(UcxList *list, ucx_destructor destr)
Destroys the contents of the specified list by calling the specified destructor on each of them...
Definition: list.c:79
+
UcxList * next
Pointer to the next list element or NULL, if this is the last element.
Definition: list.h:80
+
UcxList * ucx_list_intersection_a(UcxAllocator *allocator, const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)
Returns the intersection of two lists.
Definition: list.c:405
+
UcxList * ucx_list_intersection(const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)
Returns the intersection of two lists.
Definition: list.c:398
+
UcxList * ucx_list_sort(UcxList *list, cmp_func cmpfnc, void *data)
Sorts a UcxList with natural merge sort.
Definition: list.c:254
+
UcxList * ucx_list_clone(const UcxList *list, copy_func cpyfnc, void *data)
Creates an element-wise copy of a list.
Definition: list.c:31
+
Allocator for custom memory management.
+
UcxList * ucx_list_prepend_a(UcxAllocator *allocator, UcxList *list, void *data)
Inserts an element at the beginning of the list using a UcxAllocator.
Definition: list.c:114
+
void ucx_list_free(UcxList *list)
Destroys the entire list.
Definition: list.c:66
+
UcxList * prev
Pointer to the previous list element or NULL, if this is the first element.
Definition: list.h:85
+
UcxList * ucx_list_union_a(UcxAllocator *allocator, const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)
Returns the union of two lists.
Definition: list.c:389
+
int ucx_list_equals(const UcxList *list1, const UcxList *list2, cmp_func cmpfnc, void *data)
Compares two UCX lists element-wise by using a compare function.
Definition: list.c:49
+
int ucx_list_contains(const UcxList *list, void *elem, cmp_func cmpfnc, void *data)
Checks, if a list contains a specific element.
Definition: list.c:193
+
size_t ucx_list_size(const UcxList *list)
Returns the element count of the list.
Definition: list.c:198
+
void(* ucx_destructor)(void *)
A function pointer to a destructor function.
Definition: ucx.h:72
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/logging_8h.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/logging_8h.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,716 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/logging.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
logging.h File Reference
+
+
+ +

Logging API. +More...

+
#include "ucx.h"
+#include "map.h"
+#include "string.h"
+#include <stdio.h>
+
+

Go to the source code of this file.

+ + + + + +

+Data Structures

struct  UcxLogger
 The UCX Logger object. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

#define UCX_LOGGER_ERROR   0x00
 Log level for error messages. More...
 
#define UCX_LOGGER_WARN   0x10
 Log level for warning messages. More...
 
#define UCX_LOGGER_INFO   0x20
 Log level for information messages. More...
 
#define UCX_LOGGER_DEBUG   0x30
 Log level for debug messages. More...
 
#define UCX_LOGGER_TRACE   0x40
 Log level for trace messages. More...
 
#define UCX_LOGGER_LEVEL   0x01
 Output flag for the log level. More...
 
#define UCX_LOGGER_TIMESTAMP   0x02
 Output flag for the timestmap. More...
 
#define UCX_LOGGER_SOURCE   0x04
 Output flag for the source. More...
 
#define ucx_logger_register_level(logger, level, name)
 Registers a custom log level. More...
 
#define ucx_logger_log(logger, level, ...)   ucx_logger_logf(logger, level, __FILE__, __LINE__, __VA_ARGS__)
 Logs a message at the specified level. More...
 
#define ucx_logger_error(logger, ...)   ucx_logger_log(logger, UCX_LOGGER_ERROR, __VA_ARGS__)
 Shortcut for logging an error message. More...
 
#define ucx_logger_info(logger, ...)   ucx_logger_log(logger, UCX_LOGGER_INFO, __VA_ARGS__)
 Shortcut for logging an information message. More...
 
#define ucx_logger_warn(logger, ...)   ucx_logger_log(logger, UCX_LOGGER_WARN, __VA_ARGS__)
 Shortcut for logging a warning message. More...
 
#define ucx_logger_debug(logger, ...)   ucx_logger_log(logger, UCX_LOGGER_DEBUG, __VA_ARGS__)
 Shortcut for logging a debug message. More...
 
#define ucx_logger_trace(logger, ...)   ucx_logger_log(logger, UCX_LOGGER_TRACE, __VA_ARGS__)
 Shortcut for logging a trace message. More...
 
+ + + + + + + + + + +

+Functions

UcxLoggerucx_logger_new (void *stream, unsigned int level, unsigned int mask)
 Creates a new logger. More...
 
void ucx_logger_free (UcxLogger *logger)
 Destroys the logger. More...
 
void ucx_logger_logf (UcxLogger *logger, unsigned int level, const char *file, const unsigned int line, const char *format,...)
 Internal log function - use macros instead. More...
 
+

Detailed Description

+

Logging API.

+
Author
Mike Becker, Olaf Wintermann
+

Macro Definition Documentation

+ +

◆ UCX_LOGGER_DEBUG

+ +
+
+ + + + +
#define UCX_LOGGER_DEBUG   0x30
+
+ +

Log level for debug messages.

+ +
+
+ +

◆ ucx_logger_debug

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define ucx_logger_debug( logger,
 ... 
)   ucx_logger_log(logger, UCX_LOGGER_DEBUG, __VA_ARGS__)
+
+ +

Shortcut for logging a debug message.

+
Parameters
+ + + +
loggerthe logger to use
...format string and arguments
+
+
+
See also
ucx_logger_logf()
+ +
+
+ +

◆ UCX_LOGGER_ERROR

+ +
+
+ + + + +
#define UCX_LOGGER_ERROR   0x00
+
+ +

Log level for error messages.

+ +
+
+ +

◆ ucx_logger_error

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define ucx_logger_error( logger,
 ... 
)   ucx_logger_log(logger, UCX_LOGGER_ERROR, __VA_ARGS__)
+
+ +

Shortcut for logging an error message.

+
Parameters
+ + + +
loggerthe logger to use
...format string and arguments
+
+
+
See also
ucx_logger_logf()
+ +
+
+ +

◆ UCX_LOGGER_INFO

+ +
+
+ + + + +
#define UCX_LOGGER_INFO   0x20
+
+ +

Log level for information messages.

+ +
+
+ +

◆ ucx_logger_info

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define ucx_logger_info( logger,
 ... 
)   ucx_logger_log(logger, UCX_LOGGER_INFO, __VA_ARGS__)
+
+ +

Shortcut for logging an information message.

+
Parameters
+ + + +
loggerthe logger to use
...format string and arguments
+
+
+
See also
ucx_logger_logf()
+ +
+
+ +

◆ UCX_LOGGER_LEVEL

+ +
+
+ + + + +
#define UCX_LOGGER_LEVEL   0x01
+
+ +

Output flag for the log level.

+

If this flag is set, the log message will contain the log level.

See also
UcxLogger.mask
+ +
+
+ +

◆ ucx_logger_log

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define ucx_logger_log( logger,
 level,
 ... 
)   ucx_logger_logf(logger, level, __FILE__, __LINE__, __VA_ARGS__)
+
+ +

Logs a message at the specified level.

+
Parameters
+ + + + +
loggerthe logger to use
levelthe level to log the message on
...format string and arguments
+
+
+
See also
ucx_logger_logf()
+ +
+
+ +

◆ ucx_logger_register_level

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define ucx_logger_register_level( logger,
 level,
 name 
)
+
+Value:
{\
unsigned int l; \
l = level; \
ucx_map_int_put(logger->levels, l, (void*) "[" name "]"); \
} while (0);
+

Registers a custom log level.

+
Parameters
+ + + + +
loggerthe logger
levelthe log level as unsigned integer
namea string literal describing the level
+
+
+ +
+
+ +

◆ UCX_LOGGER_SOURCE

+ +
+
+ + + + +
#define UCX_LOGGER_SOURCE   0x04
+
+ +

Output flag for the source.

+

If this flag is set, the log message will contain the source file and line number.

See also
UcxLogger.mask
+ +
+
+ +

◆ UCX_LOGGER_TIMESTAMP

+ +
+
+ + + + +
#define UCX_LOGGER_TIMESTAMP   0x02
+
+ +

Output flag for the timestmap.

+

If this flag is set, the log message will contain the timestmap.

See also
UcxLogger.mask
+ +
+
+ +

◆ UCX_LOGGER_TRACE

+ +
+
+ + + + +
#define UCX_LOGGER_TRACE   0x40
+
+ +

Log level for trace messages.

+ +
+
+ +

◆ ucx_logger_trace

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define ucx_logger_trace( logger,
 ... 
)   ucx_logger_log(logger, UCX_LOGGER_TRACE, __VA_ARGS__)
+
+ +

Shortcut for logging a trace message.

+
Parameters
+ + + +
loggerthe logger to use
...format string and arguments
+
+
+
See also
ucx_logger_logf()
+ +
+
+ +

◆ UCX_LOGGER_WARN

+ +
+
+ + + + +
#define UCX_LOGGER_WARN   0x10
+
+ +

Log level for warning messages.

+ +
+
+ +

◆ ucx_logger_warn

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define ucx_logger_warn( logger,
 ... 
)   ucx_logger_log(logger, UCX_LOGGER_WARN, __VA_ARGS__)
+
+ +

Shortcut for logging a warning message.

+
Parameters
+ + + +
loggerthe logger to use
...format string and arguments
+
+
+
See also
ucx_logger_logf()
+ +
+
+

Function Documentation

+ +

◆ ucx_logger_free()

+ +
+
+ + + + + + + + +
void ucx_logger_free (UcxLoggerlogger)
+
+ +

Destroys the logger.

+

The map containing the valid log levels is also automatically destroyed.

+
Parameters
+ + +
loggerthe logger to destroy
+
+
+ +
+
+ +

◆ ucx_logger_logf()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void ucx_logger_logf (UcxLoggerlogger,
unsigned int level,
const char * file,
const unsigned int line,
const char * format,
 ... 
)
+
+ +

Internal log function - use macros instead.

+

This function uses the format and variadic arguments for a printf()-style output of the log message.

+

Dependent on the UcxLogger.mask some information is prepended. The complete format is:

+

[LEVEL] [TIMESTAMP] [SOURCEFILE]:[LINENO] message

+

Attention: the message (including automatically generated information) is limited to 4096 characters. The level description is limited to 256 characters and the timestamp string is limited to 128 characters.

+
Parameters
+ + + + + + + +
loggerthe logger to use
levelthe level to log on
fileinformation about the source file
lineinformation about the source line number
formatformat string
...arguments
+
+
+
See also
ucx_logger_log()
+ +
+
+ +

◆ ucx_logger_new()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
UcxLogger* ucx_logger_new (void * stream,
unsigned int level,
unsigned int mask 
)
+
+ +

Creates a new logger.

+
Parameters
+ + + + +
streamthe stream, which the logger shall write to
levelthe level on which the logger shall operate
maskconfiguration mask (cf. UcxLogger.mask)
+
+
+
Returns
a new logger object
+ +
+
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/logging_8h_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/logging_8h_source.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,94 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/logging.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
logging.h
+
+
+Go to the documentation of this file.
1 /*
2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3  *
4  * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
34 #ifndef UCX_LOGGING_H
35 #define UCX_LOGGING_H
36 
37 #include "ucx.h"
38 #include "map.h"
39 #include "string.h"
40 #include <stdio.h>
41 
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45 
46 /* leave enough space for custom log levels */
47 
49 #define UCX_LOGGER_ERROR 0x00
50 
52 #define UCX_LOGGER_WARN 0x10
53 
55 #define UCX_LOGGER_INFO 0x20
56 
58 #define UCX_LOGGER_DEBUG 0x30
59 
61 #define UCX_LOGGER_TRACE 0x40
62 
68 #define UCX_LOGGER_LEVEL 0x01
69 
75 #define UCX_LOGGER_TIMESTAMP 0x02
76 
83 #define UCX_LOGGER_SOURCE 0x04
84 
88 typedef struct {
90  void *stream;
91 
98 
104  char *dateformat;
105 
111  unsigned int level;
112 
119  unsigned int mask;
120 
133 } UcxLogger;
134 
142 UcxLogger *ucx_logger_new(void *stream, unsigned int level, unsigned int mask);
143 
151 void ucx_logger_free(UcxLogger* logger);
152 
176 void ucx_logger_logf(UcxLogger *logger, unsigned int level, const char* file,
177  const unsigned int line, const char* format, ...);
178 
185 #define ucx_logger_register_level(logger, level, name) {\
186  unsigned int l; \
187  l = level; \
188  ucx_map_int_put(logger->levels, l, (void*) "[" name "]"); \
189  } while (0);
190 
198 #define ucx_logger_log(logger, level, ...) \
199  ucx_logger_logf(logger, level, __FILE__, __LINE__, __VA_ARGS__)
200 
207 #define ucx_logger_error(logger, ...) \
208  ucx_logger_log(logger, UCX_LOGGER_ERROR, __VA_ARGS__)
209 
216 #define ucx_logger_info(logger, ...) \
217  ucx_logger_log(logger, UCX_LOGGER_INFO, __VA_ARGS__)
218 
225 #define ucx_logger_warn(logger, ...) \
226  ucx_logger_log(logger, UCX_LOGGER_WARN, __VA_ARGS__)
227 
234 #define ucx_logger_debug(logger, ...) \
235  ucx_logger_log(logger, UCX_LOGGER_DEBUG, __VA_ARGS__)
236 
243 #define ucx_logger_trace(logger, ...) \
244  ucx_logger_log(logger, UCX_LOGGER_TRACE, __VA_ARGS__)
245 
246 #ifdef __cplusplus
247 }
248 #endif
249 
250 #endif /* UCX_LOGGING_H */
write_func writer
The write function that shall be used.
Definition: logging.h:97
+
Bounded string implementation.
+
Main UCX Header providing most common definitions.
+
The UCX Logger object.
Definition: logging.h:88
+
char * dateformat
The date format for timestamp outputs including the delimiter (default: "%F %T %z ")...
Definition: logging.h:104
+
unsigned int mask
A configuration mask for automatic output.
Definition: logging.h:119
+
UcxLogger * ucx_logger_new(void *stream, unsigned int level, unsigned int mask)
Creates a new logger.
Definition: logging.c:36
+
void * stream
The stream this logger writes its messages to.
Definition: logging.h:90
+
Structure for the UCX map.
Definition: map.h:81
+
Hash map implementation.
+
size_t(* write_func)(const void *, size_t, size_t, void *)
Function pointer to a write function.
Definition: ucx.h:119
+
UcxMap * levels
A map of valid log levels for this logger.
Definition: logging.h:132
+
unsigned int level
The level, this logger operates on.
Definition: logging.h:111
+
void ucx_logger_logf(UcxLogger *logger, unsigned int level, const char *file, const unsigned int line, const char *format,...)
Internal log function - use macros instead.
Definition: logging.c:70
+
void ucx_logger_free(UcxLogger *logger)
Destroys the logger.
Definition: logging.c:62
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/map_8h.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/map_8h.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,1689 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/map.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
map.h File Reference
+
+
+ +

Hash map implementation. +More...

+
#include "ucx.h"
+#include "string.h"
+#include "allocator.h"
+#include <stdio.h>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + +

+Data Structures

struct  UcxMap
 Structure for the UCX map. More...
 
struct  UcxKey
 Structure to publicly denote a key of a UcxMap. More...
 
struct  UcxMapKey
 Internal structure for a key of a UcxMap. More...
 
struct  UcxMapElement
 Structure for an element of a UcxMap. More...
 
struct  UcxMapIterator
 Structure for an iterator over a UcxMap. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

#define UCX_MAP_FOREACH(key, value, iter)   for(UcxKey key;ucx_map_iter_next(&iter,&key, (void**)&value);)
 Loop statement for UCX maps. More...
 
#define ucx_map_sstr_put(map, key, value)   ucx_map_put(map, ucx_key(key.ptr, key.length), (void*)value)
 Shorthand for putting data with a sstr_t key into the map. More...
 
#define ucx_map_cstr_put(map, key, value)   ucx_map_put(map, ucx_key(key, strlen(key)), (void*)value)
 Shorthand for putting data with a C string key into the map. More...
 
#define ucx_map_int_put(map, key, value)   ucx_map_put(map, ucx_key(&key, sizeof(key)), (void*)value)
 Shorthand for putting data with an integer key into the map. More...
 
#define ucx_map_sstr_get(map, key)   ucx_map_get(map, ucx_key(key.ptr, key.length))
 Shorthand for getting data from the map with a sstr_t key. More...
 
#define ucx_map_cstr_get(map, key)   ucx_map_get(map, ucx_key(key, strlen(key)))
 Shorthand for getting data from the map with a C string key. More...
 
#define ucx_map_int_get(map, key)   ucx_map_get(map, ucx_key(&key, sizeof(int)))
 Shorthand for getting data from the map with an integer key. More...
 
#define ucx_map_sstr_remove(map, key)   ucx_map_remove(map, ucx_key(key.ptr, key.length))
 Shorthand for removing data from the map with a sstr_t key. More...
 
#define ucx_map_cstr_remove(map, key)   ucx_map_remove(map, ucx_key(key, strlen(key)))
 Shorthand for removing data from the map with a C string key. More...
 
#define ucx_map_int_remove(map, key)   ucx_map_remove(map, ucx_key(&key, sizeof(key)))
 Shorthand for removing data from the map with an integer key. More...
 
+ + + + + + + + + + + + + +

+Typedefs

typedef struct UcxMap UcxMap
 Type for the UCX map. More...
 
typedef struct UcxKey UcxKey
 Type for a key of a UcxMap. More...
 
typedef struct UcxMapElement UcxMapElement
 Type for an element of a UcxMap. More...
 
typedef struct UcxMapIterator UcxMapIterator
 Type for an iterator over a UcxMap. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

UcxMapucx_map_new (size_t size)
 Creates a new hash map with the specified size. More...
 
UcxMapucx_map_new_a (UcxAllocator *allocator, size_t size)
 Creates a new hash map with the specified size using a UcxAllocator. More...
 
void ucx_map_free (UcxMap *map)
 Frees a hash map. More...
 
void ucx_map_free_content (UcxMap *map, ucx_destructor destr)
 Frees the contents of a hash map. More...
 
void ucx_map_clear (UcxMap *map)
 Clears a hash map. More...
 
int ucx_map_copy (UcxMap const *from, UcxMap *to, copy_func fnc, void *data)
 Copies contents from a map to another map using a copy function. More...
 
UcxMapucx_map_clone (UcxMap const *map, copy_func fnc, void *data)
 Clones the map and rehashes if necessary. More...
 
UcxMapucx_map_clone_a (UcxAllocator *allocator, UcxMap const *map, copy_func fnc, void *data)
 Clones the map and rehashes if necessary. More...
 
int ucx_map_rehash (UcxMap *map)
 Increases size of the hash map, if necessary. More...
 
int ucx_map_put (UcxMap *map, UcxKey key, void *value)
 Puts a key/value-pair into the map. More...
 
void * ucx_map_get (UcxMap const *map, UcxKey key)
 Retrieves a value by using a key. More...
 
void * ucx_map_remove (UcxMap *map, UcxKey key)
 Removes a key/value-pair from the map by using the key. More...
 
UcxKey ucx_key (const void *data, size_t len)
 Creates a UcxKey based on the given data. More...
 
int ucx_hash (const char *data, size_t len)
 Computes a murmur hash-2. More...
 
UcxMapIterator ucx_map_iterator (UcxMap const *map)
 Creates an iterator for a map. More...
 
int ucx_map_iter_next (UcxMapIterator *iterator, UcxKey *key, void **value)
 Proceeds to the next element of the map (if any). More...
 
UcxMapucx_map_union (const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)
 Returns the union of two maps. More...
 
UcxMapucx_map_union_a (UcxAllocator *allocator, const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)
 Returns the union of two maps. More...
 
UcxMapucx_map_intersection (const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)
 Returns the intersection of two maps. More...
 
UcxMapucx_map_intersection_a (UcxAllocator *allocator, const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)
 Returns the intersection of two maps. More...
 
UcxMapucx_map_difference (const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)
 Returns the difference of two maps. More...
 
UcxMapucx_map_difference_a (UcxAllocator *allocator, const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)
 Returns the difference of two maps. More...
 
+

Detailed Description

+

Hash map implementation.

+

This implementation uses murmur hash 2 and separate chaining with linked lists.

+
Author
Mike Becker
+
+Olaf Wintermann
+

Macro Definition Documentation

+ +

◆ ucx_map_cstr_get

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define ucx_map_cstr_get( map,
 key 
)   ucx_map_get(map, ucx_key(key, strlen(key)))
+
+ +

Shorthand for getting data from the map with a C string key.

+
Parameters
+ + + +
mapthe map
keythe key
+
+
+
Returns
the value
+
See also
ucx_map_get()
+ +
+
+ +

◆ ucx_map_cstr_put

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define ucx_map_cstr_put( map,
 key,
 value 
)   ucx_map_put(map, ucx_key(key, strlen(key)), (void*)value)
+
+ +

Shorthand for putting data with a C string key into the map.

+
Parameters
+ + + + +
mapthe map
keythe key
valuethe value
+
+
+
Returns
0 on success, non-zero value on failure
+
See also
ucx_map_put()
+ +
+
+ +

◆ ucx_map_cstr_remove

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define ucx_map_cstr_remove( map,
 key 
)   ucx_map_remove(map, ucx_key(key, strlen(key)))
+
+ +

Shorthand for removing data from the map with a C string key.

+
Parameters
+ + + +
mapthe map
keythe key
+
+
+
Returns
the removed value
+
See also
ucx_map_remove()
+ +
+
+ +

◆ UCX_MAP_FOREACH

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define UCX_MAP_FOREACH( key,
 value,
 iter 
)   for(UcxKey key;ucx_map_iter_next(&iter,&key, (void**)&value);)
+
+ +

Loop statement for UCX maps.

+

The key variable is implicitly defined, but the value variable must be already declared as type information cannot be inferred.

+
Parameters
+ + + + +
keythe variable name for the key
valuethe variable name for the value
itera UcxMapIterator
+
+
+
See also
ucx_map_iterator()
+ +
+
+ +

◆ ucx_map_int_get

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define ucx_map_int_get( map,
 key 
)   ucx_map_get(map, ucx_key(&key, sizeof(int)))
+
+ +

Shorthand for getting data from the map with an integer key.

+
Parameters
+ + + +
mapthe map
keythe key
+
+
+
Returns
the value
+
See also
ucx_map_get()
+ +
+
+ +

◆ ucx_map_int_put

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define ucx_map_int_put( map,
 key,
 value 
)   ucx_map_put(map, ucx_key(&key, sizeof(key)), (void*)value)
+
+ +

Shorthand for putting data with an integer key into the map.

+
Parameters
+ + + + +
mapthe map
keythe key
valuethe value
+
+
+
Returns
0 on success, non-zero value on failure
+
See also
ucx_map_put()
+ +
+
+ +

◆ ucx_map_int_remove

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define ucx_map_int_remove( map,
 key 
)   ucx_map_remove(map, ucx_key(&key, sizeof(key)))
+
+ +

Shorthand for removing data from the map with an integer key.

+
Parameters
+ + + +
mapthe map
keythe key
+
+
+
Returns
the removed value
+
See also
ucx_map_remove()
+ +
+
+ +

◆ ucx_map_sstr_get

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define ucx_map_sstr_get( map,
 key 
)   ucx_map_get(map, ucx_key(key.ptr, key.length))
+
+ +

Shorthand for getting data from the map with a sstr_t key.

+
Parameters
+ + + +
mapthe map
keythe key
+
+
+
Returns
the value
+
See also
ucx_map_get()
+ +
+
+ +

◆ ucx_map_sstr_put

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
#define ucx_map_sstr_put( map,
 key,
 value 
)   ucx_map_put(map, ucx_key(key.ptr, key.length), (void*)value)
+
+ +

Shorthand for putting data with a sstr_t key into the map.

+
Parameters
+ + + + +
mapthe map
keythe key
valuethe value
+
+
+
Returns
0 on success, non-zero value on failure
+
See also
ucx_map_put()
+ +
+
+ +

◆ ucx_map_sstr_remove

+ +
+
+ + + + + + + + + + + + + + + + + + +
#define ucx_map_sstr_remove( map,
 key 
)   ucx_map_remove(map, ucx_key(key.ptr, key.length))
+
+ +

Shorthand for removing data from the map with a sstr_t key.

+
Parameters
+ + + +
mapthe map
keythe key
+
+
+
Returns
the removed value
+
See also
ucx_map_remove()
+ +
+
+

Typedef Documentation

+ +

◆ UcxKey

+ +
+
+ + + + +
typedef struct UcxKey UcxKey
+
+ +

Type for a key of a UcxMap.

+
See also
UcxKey
+ +
+
+ +

◆ UcxMap

+ +
+
+ + + + +
typedef struct UcxMap UcxMap
+
+ +

Type for the UCX map.

+
See also
UcxMap
+ +
+
+ +

◆ UcxMapElement

+ +
+
+ + + + +
typedef struct UcxMapElement UcxMapElement
+
+ +

Type for an element of a UcxMap.

+
See also
UcxMapElement
+ +
+
+ +

◆ UcxMapIterator

+ +
+
+ + + + +
typedef struct UcxMapIterator UcxMapIterator
+
+ +

Type for an iterator over a UcxMap.

+
See also
UcxMapIterator
+ +
+
+

Function Documentation

+ +

◆ ucx_hash()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int ucx_hash (const char * data,
size_t len 
)
+
+ +

Computes a murmur hash-2.

+
Parameters
+ + + +
datathe data to hash
lenthe length of the data
+
+
+
Returns
the murmur hash-2 of the data
+ +
+
+ +

◆ ucx_key()

+ +
+
+ + + + + + + + + + + + + + + + + + +
UcxKey ucx_key (const void * data,
size_t len 
)
+
+ +

Creates a UcxKey based on the given data.

+

This function implicitly computes the hash.

+
Parameters
+ + + +
datathe data for the key
lenthe length of the data
+
+
+
Returns
a UcxKey with implicitly computed hash
+
See also
ucx_hash()
+ +
+
+ +

◆ ucx_map_clear()

+ +
+
+ + + + + + + + +
void ucx_map_clear (UcxMapmap)
+
+ +

Clears a hash map.

+

Note: the contents are not freed, use ucx_map_free_content() before calling this function to achieve that.

+
Parameters
+ + +
mapthe map to be cleared
+
+
+
See also
ucx_map_free_content()
+ +
+
+ +

◆ ucx_map_clone()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
UcxMap* ucx_map_clone (UcxMap const * map,
copy_func fnc,
void * data 
)
+
+ +

Clones the map and rehashes if necessary.

+

Note: In contrast to ucx_map_rehash() the load factor is irrelevant. This function always ensures a new UcxMap.size of at least 2.5*UcxMap.count.

+
Parameters
+ + + + +
mapthe map to clone
fncthe copy function to use or NULL if the new and the old map shall share the data pointers
dataadditional data for the copy function
+
+
+
Returns
the cloned map
+
See also
ucx_map_copy()
+ +
+
+ +

◆ ucx_map_clone_a()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxMap* ucx_map_clone_a (UcxAllocatorallocator,
UcxMap const * map,
copy_func fnc,
void * data 
)
+
+ +

Clones the map and rehashes if necessary.

+

Note: In contrast to ucx_map_rehash() the load factor is irrelevant. This function always ensures a new UcxMap.size of at least 2.5*UcxMap.count.

+
Parameters
+ + + + + +
allocatorthe allocator to use for the cloned map
mapthe map to clone
fncthe copy function to use or NULL if the new and the old map shall share the data pointers
dataadditional data for the copy function
+
+
+
Returns
the cloned map
+
See also
ucx_map_copy()
+ +
+
+ +

◆ ucx_map_copy()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_map_copy (UcxMap const * from,
UcxMapto,
copy_func fnc,
void * data 
)
+
+ +

Copies contents from a map to another map using a copy function.

+

Note: The destination map does not need to be empty. However, if it contains data with keys that are also present in the source map, the contents are overwritten.

+
Parameters
+ + + + + +
fromthe source map
tothe destination map
fncthe copy function or NULL if the pointer address shall be copied
dataadditional data for the copy function
+
+
+
Returns
0 on success or a non-zero value on memory allocation errors
+ +
+
+ +

◆ ucx_map_difference()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxMap* ucx_map_difference (const UcxMapfirst,
const UcxMapsecond,
copy_func cpfnc,
void * cpdata 
)
+
+ +

Returns the difference of two maps.

+

The difference contains a copy of all elements of the first map for which the corresponding keys cannot be found in the second map.

+
Parameters
+ + + + + +
firstthe first source map
secondthe second source map
cpfnca function to copy the elements
cpdataadditional data for the copy function
+
+
+
Returns
a new list containing the difference
+ +
+
+ +

◆ ucx_map_difference_a()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxMap* ucx_map_difference_a (UcxAllocatorallocator,
const UcxMapfirst,
const UcxMapsecond,
copy_func cpfnc,
void * cpdata 
)
+
+ +

Returns the difference of two maps.

+

The difference contains a copy of all elements of the first map for which the corresponding keys cannot be found in the second map.

+
Parameters
+ + + + + + +
allocatorthe allocator that shall be used by the new map
firstthe first source map
secondthe second source map
cpfnca function to copy the elements
cpdataadditional data for the copy function
+
+
+
Returns
a new list containing the difference
+ +
+
+ +

◆ ucx_map_free()

+ +
+
+ + + + + + + + +
void ucx_map_free (UcxMapmap)
+
+ +

Frees a hash map.

+

Note: the contents are not freed, use ucx_map_free_content() before calling this function to achieve that.

+
Parameters
+ + +
mapthe map to be freed
+
+
+
See also
ucx_map_free_content()
+ +
+
+ +

◆ ucx_map_free_content()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void ucx_map_free_content (UcxMapmap,
ucx_destructor destr 
)
+
+ +

Frees the contents of a hash map.

+

This is a convenience function that iterates over the map and passes all values to the specified destructor function.

+

If no destructor is specified (NULL), the free() function of the map's own allocator is used.

+

You must ensure, that it is valid to pass each value in the map to the same destructor function.

+

You should free or clear the map afterwards, as the contents will be invalid.

+
Parameters
+ + + +
mapfor which the contents shall be freed
destroptional pointer to a destructor function
+
+
+
See also
ucx_map_free()
+
+ucx_map_clear()
+ +
+
+ +

◆ ucx_map_get()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void* ucx_map_get (UcxMap const * map,
UcxKey key 
)
+
+ +

Retrieves a value by using a key.

+
Parameters
+ + + +
mapthe map
keythe key
+
+
+
Returns
the value
+ +
+
+ +

◆ ucx_map_intersection()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxMap* ucx_map_intersection (const UcxMapfirst,
const UcxMapsecond,
copy_func cpfnc,
void * cpdata 
)
+
+ +

Returns the intersection of two maps.

+

The intersection is defined as a copy of the first map with every element removed that has no valid key in the second map.

+
Parameters
+ + + + + +
firstthe first source map
secondthe second source map
cpfnca function to copy the elements
cpdataadditional data for the copy function
+
+
+
Returns
a new map containing the intersection
+ +
+
+ +

◆ ucx_map_intersection_a()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxMap* ucx_map_intersection_a (UcxAllocatorallocator,
const UcxMapfirst,
const UcxMapsecond,
copy_func cpfnc,
void * cpdata 
)
+
+ +

Returns the intersection of two maps.

+

The intersection is defined as a copy of the first map with every element removed that has no valid key in the second map.

+
Parameters
+ + + + + + +
allocatorthe allocator that shall be used by the new map
firstthe first source map
secondthe second source map
cpfnca function to copy the elements
cpdataadditional data for the copy function
+
+
+
Returns
a new map containing the intersection
+ +
+
+ +

◆ ucx_map_iter_next()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_map_iter_next (UcxMapIteratoriterator,
UcxKeykey,
void ** value 
)
+
+ +

Proceeds to the next element of the map (if any).

+

Subsequent calls on the same iterator proceed to the next element and store the key/value-pair into the memory specified as arguments of this function.

+

If no further elements are found, this function returns zero and leaves the last found key/value-pair in memory.

+
Parameters
+ + + + +
iteratorthe iterator to use
keya pointer to the memory where to store the key
valuea pointer to the memory where to store the value
+
+
+
Returns
1, if another element was found, 0 if all elements has been processed
+
See also
ucx_map_iterator()
+ +
+
+ +

◆ ucx_map_iterator()

+ +
+
+ + + + + + + + +
UcxMapIterator ucx_map_iterator (UcxMap const * map)
+
+ +

Creates an iterator for a map.

+

Note: A UcxMapIterator iterates over all elements in all element lists successively. Therefore the order highly depends on the key hashes and may vary under different map sizes. So generally you may NOT rely on the iteration order.

+

Note: The iterator is NOT initialized. You need to call ucx_map_iter_next() at least once before accessing any information. However, it is not recommended to access the fields of a UcxMapIterator directly.

+
Parameters
+ + +
mapthe map to create the iterator for
+
+
+
Returns
an iterator initialized on the first element of the first element list
+
See also
ucx_map_iter_next()
+ +
+
+ +

◆ ucx_map_new()

+ +
+
+ + + + + + + + +
UcxMap* ucx_map_new (size_t size)
+
+ +

Creates a new hash map with the specified size.

+
Parameters
+ + +
sizethe size of the hash map
+
+
+
Returns
a pointer to the new hash map
+ +
+
+ +

◆ ucx_map_new_a()

+ +
+
+ + + + + + + + + + + + + + + + + + +
UcxMap* ucx_map_new_a (UcxAllocatorallocator,
size_t size 
)
+
+ +

Creates a new hash map with the specified size using a UcxAllocator.

+
Parameters
+ + + +
allocatorthe allocator to use
sizethe size of the hash map
+
+
+
Returns
a pointer to the new hash map
+ +
+
+ +

◆ ucx_map_put()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
int ucx_map_put (UcxMapmap,
UcxKey key,
void * value 
)
+
+ +

Puts a key/value-pair into the map.

+
Parameters
+ + + + +
mapthe map
keythe key
valuethe value
+
+
+
Returns
0 on success, non-zero value on failure
+ +
+
+ +

◆ ucx_map_rehash()

+ +
+
+ + + + + + + + +
int ucx_map_rehash (UcxMapmap)
+
+ +

Increases size of the hash map, if necessary.

+

The load value is 0.75*UcxMap.size. If the element count exceeds the load value, the map needs to be rehashed. Otherwise no action is performed and this function simply returns 0.

+

The rehashing process ensures, that the UcxMap.size is at least 2.5*UcxMap.count. So there is enough room for additional elements without the need of another soon rehashing.

+

You can use this function to dramatically increase access performance.

+
Parameters
+ + +
mapthe map to rehash
+
+
+
Returns
1, if a memory allocation error occurred, 0 otherwise
+ +
+
+ +

◆ ucx_map_remove()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void* ucx_map_remove (UcxMapmap,
UcxKey key 
)
+
+ +

Removes a key/value-pair from the map by using the key.

+
Parameters
+ + + +
mapthe map
keythe key
+
+
+
Returns
the removed value
+ +
+
+ +

◆ ucx_map_union()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxMap* ucx_map_union (const UcxMapfirst,
const UcxMapsecond,
copy_func cpfnc,
void * cpdata 
)
+
+ +

Returns the union of two maps.

+

The union is a fresh map which is filled by two successive calls of ucx_map_copy() on the two input maps.

+
Parameters
+ + + + + +
firstthe first source map
secondthe second source map
cpfnca function to copy the elements
cpdataadditional data for the copy function
+
+
+
Returns
a new map containing the union
+ +
+
+ +

◆ ucx_map_union_a()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
UcxMap* ucx_map_union_a (UcxAllocatorallocator,
const UcxMapfirst,
const UcxMapsecond,
copy_func cpfnc,
void * cpdata 
)
+
+ +

Returns the union of two maps.

+

The union is a fresh map which is filled by two successive calls of ucx_map_copy() on the two input maps.

+
Parameters
+ + + + + + +
allocatorthe allocator that shall be used by the new map
firstthe first source map
secondthe second source map
cpfnca function to copy the elements
cpdataadditional data for the copy function
+
+
+
Returns
a new map containing the union
+ +
+
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/map_8h_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/map_8h_source.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,127 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/map.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
map.h
+
+
+Go to the documentation of this file.
1 /*
2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3  *
4  * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28 
41 #ifndef UCX_MAP_H
42 #define UCX_MAP_H
43 
44 #include "ucx.h"
45 #include "string.h"
46 #include "allocator.h"
47 #include <stdio.h>
48 
49 #ifdef __cplusplus
50 extern "C" {
51 #endif
52 
65 #define UCX_MAP_FOREACH(key,value,iter) \
66  for(UcxKey key;ucx_map_iter_next(&iter,&key, (void**)&value);)
67 
69 typedef struct UcxMap UcxMap;
70 
72 typedef struct UcxKey UcxKey;
73 
76 
79 
81 struct UcxMap {
87  size_t size;
89  size_t count;
90 };
91 
93 struct UcxKey {
95  const void *data;
97  size_t len;
99  int hash;
100 };
101 
103 struct UcxMapKey {
105  void *data;
107  size_t len;
109  int hash;
110 };
111 
115  void *data;
116 
119 
121  struct UcxMapKey key;
122 };
123 
127  UcxMap const *map;
128 
131 
138  size_t index;
139 };
140 
146 UcxMap *ucx_map_new(size_t size);
147 
155 
165 void ucx_map_free(UcxMap *map);
166 
187 
197 void ucx_map_clear(UcxMap *map);
198 
199 
214 int ucx_map_copy(UcxMap const *from, UcxMap *to, copy_func fnc, void *data);
215 
230 UcxMap *ucx_map_clone(UcxMap const *map, copy_func fnc, void *data);
231 
248  UcxMap const *map, copy_func fnc, void *data);
249 
267 
276 int ucx_map_put(UcxMap *map, UcxKey key, void *value);
277 
285 void* ucx_map_get(UcxMap const *map, UcxKey key);
286 
294 void* ucx_map_remove(UcxMap *map, UcxKey key);
295 
304 #define ucx_map_sstr_put(map, key, value) \
305  ucx_map_put(map, ucx_key(key.ptr, key.length), (void*)value)
306 
315 #define ucx_map_cstr_put(map, key, value) \
316  ucx_map_put(map, ucx_key(key, strlen(key)), (void*)value)
317 
326 #define ucx_map_int_put(map, key, value) \
327  ucx_map_put(map, ucx_key(&key, sizeof(key)), (void*)value)
328 
336 #define ucx_map_sstr_get(map, key) \
337  ucx_map_get(map, ucx_key(key.ptr, key.length))
338 
346 #define ucx_map_cstr_get(map, key) \
347  ucx_map_get(map, ucx_key(key, strlen(key)))
348 
356 #define ucx_map_int_get(map, key) \
357  ucx_map_get(map, ucx_key(&key, sizeof(int)))
358 
366 #define ucx_map_sstr_remove(map, key) \
367  ucx_map_remove(map, ucx_key(key.ptr, key.length))
368 
376 #define ucx_map_cstr_remove(map, key) \
377  ucx_map_remove(map, ucx_key(key, strlen(key)))
378 
386 #define ucx_map_int_remove(map, key) \
387  ucx_map_remove(map, ucx_key(&key, sizeof(key)))
388 
399 UcxKey ucx_key(const void *data, size_t len);
400 
408 int ucx_hash(const char *data, size_t len);
409 
428 
445 int ucx_map_iter_next(UcxMapIterator *iterator, UcxKey *key, void **value);
446 
459 UcxMap* ucx_map_union(const UcxMap *first, const UcxMap *second,
460  copy_func cpfnc, void* cpdata);
461 
476  const UcxMap *first, const UcxMap *second,
477  copy_func cpfnc, void* cpdata);
478 
491 UcxMap* ucx_map_intersection(const UcxMap *first, const UcxMap *second,
492  copy_func cpfnc, void* cpdata);
493 
508  const UcxMap *first, const UcxMap *second,
509  copy_func cpfnc, void* cpdata);
510 
523 UcxMap* ucx_map_difference(const UcxMap *first, const UcxMap *second,
524  copy_func cpfnc, void* cpdata);
525 
540  const UcxMap *first, const UcxMap *second,
541  copy_func cpfnc, void* cpdata);
542 
543 
544 #ifdef __cplusplus
545 }
546 #endif
547 
548 #endif /* UCX_MAP_H */
549 
void *(* copy_func)(const void *, void *)
Function pointer to a copy function.
Definition: ucx.h:106
+
size_t index
The current index of the element list array.
Definition: map.h:138
+
size_t len
The length of the key data.
Definition: map.h:107
+
UcxMap * ucx_map_difference_a(UcxAllocator *allocator, const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)
Returns the difference of two maps.
Definition: map.c:386
+
Bounded string implementation.
+
Main UCX Header providing most common definitions.
+
int ucx_hash(const char *data, size_t len)
Computes a murmur hash-2.
Definition: map.c:260
+
int hash
The hash value of the key data.
Definition: map.h:109
+
void ucx_map_free_content(UcxMap *map, ucx_destructor destr)
Frees the contents of a hash map.
Definition: map.c:85
+
void * ucx_map_get(UcxMap const *map, UcxKey key)
Retrieves a value by using a key.
Definition: map.c:243
+
UcxMapIterator ucx_map_iterator(UcxMap const *map)
Creates an iterator for a map.
Definition: map.c:302
+
UcxMap * ucx_map_union(const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)
Returns the union of two maps.
Definition: map.c:343
+
int hash
A cache for the hash value of the key data.
Definition: map.h:99
+
void ucx_map_clear(UcxMap *map)
Clears a hash map.
Definition: map.c:97
+
UcxMap * ucx_map_difference(const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)
Returns the difference of two maps.
Definition: map.c:380
+
Structure for an element of a UcxMap.
Definition: map.h:113
+
Structure to publicly denote a key of a UcxMap.
Definition: map.h:93
+
size_t count
The count of elements currently stored in this map.
Definition: map.h:89
+
UcxMapElement * next
A pointer to the next element in the current list.
Definition: map.h:118
+
UcxMap * ucx_map_union_a(UcxAllocator *allocator, const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)
Returns the union of two maps.
Definition: map.c:349
+
UcxMap const * map
The map to iterate over.
Definition: map.h:127
+
Structure for an iterator over a UcxMap.
Definition: map.h:125
+
void * data
The value data.
Definition: map.h:115
+
int ucx_map_copy(UcxMap const *from, UcxMap *to, copy_func fnc, void *data)
Copies contents from a map to another map using a copy function.
Definition: map.c:106
+
UCX allocator data structure containing memory management functions.
Definition: allocator.h:88
+
UcxKey ucx_key(const void *data, size_t len)
Creates a UcxKey based on the given data.
Definition: map.c:251
+
UcxMap * ucx_map_new(size_t size)
Creates a new hash map with the specified size.
Definition: map.c:34
+
UcxMapElement * cur
The current map element.
Definition: map.h:130
+
UcxMap * ucx_map_new_a(UcxAllocator *allocator, size_t size)
Creates a new hash map with the specified size using a UcxAllocator.
Definition: map.c:38
+
UcxAllocator * allocator
An allocator that is used for the map elements.
Definition: map.h:83
+
Internal structure for a key of a UcxMap.
Definition: map.h:103
+
int ucx_map_put(UcxMap *map, UcxKey key, void *value)
Puts a key/value-pair into the map.
Definition: map.c:158
+
UcxMap * ucx_map_clone_a(UcxAllocator *allocator, UcxMap const *map, copy_func fnc, void *data)
Clones the map and rehashes if necessary.
Definition: map.c:121
+
size_t size
The size of the map is the length of the element list array.
Definition: map.h:87
+
int ucx_map_iter_next(UcxMapIterator *iterator, UcxKey *key, void **value)
Proceeds to the next element of the map (if any).
Definition: map.c:310
+
const void * data
The key data.
Definition: map.h:95
+
Allocator for custom memory management.
+
Structure for the UCX map.
Definition: map.h:81
+
void * ucx_map_remove(UcxMap *map, UcxKey key)
Removes a key/value-pair from the map by using the key.
Definition: map.c:247
+
size_t len
The length of the key data.
Definition: map.h:97
+
UcxMap * ucx_map_intersection(const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)
Returns the intersection of two maps.
Definition: map.c:357
+
int ucx_map_rehash(UcxMap *map)
Increases size of the hash map, if necessary.
Definition: map.c:132
+
void ucx_map_free(UcxMap *map)
Frees a hash map.
Definition: map.c:79
+
UcxMap * ucx_map_clone(UcxMap const *map, copy_func fnc, void *data)
Clones the map and rehashes if necessary.
Definition: map.c:117
+
UcxMapElement ** map
The array of map element lists.
Definition: map.h:85
+
UcxMap * ucx_map_intersection_a(UcxAllocator *allocator, const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)
Returns the intersection of two maps.
Definition: map.c:363
+
void * data
The key data.
Definition: map.h:105
+
void(* ucx_destructor)(void *)
A function pointer to a destructor function.
Definition: ucx.h:72
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/mempool_8h.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/mempool_8h.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,517 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/mempool.h File Reference + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+ +
+
mempool.h File Reference
+
+
+ +

Memory pool implementation. +More...

+
#include "ucx.h"
+#include "allocator.h"
+#include <stddef.h>
+
+

Go to the source code of this file.

+ + + + + +

+Data Structures

struct  UcxMempool
 UCX mempool structure. More...
 
+ + + + +

+Macros

#define ucx_mempool_new_default()   ucx_mempool_new(16)
 Shorthand for a new default memory pool with a capacity of 16 elements. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

UcxMempoolucx_mempool_new (size_t n)
 Creates a memory pool with the specified initial size. More...
 
int ucx_mempool_chcap (UcxMempool *pool, size_t newcap)
 Resizes a memory pool. More...
 
void * ucx_mempool_malloc (UcxMempool *pool, size_t n)
 Allocates pooled memory. More...
 
void * ucx_mempool_calloc (UcxMempool *pool, size_t nelem, size_t elsize)
 Allocates a pooled memory array. More...
 
void * ucx_mempool_realloc (UcxMempool *pool, void *ptr, size_t n)
 Reallocates pooled memory. More...
 
void ucx_mempool_free (UcxMempool *pool, void *ptr)
 Frees pooled memory. More...
 
void ucx_mempool_destroy (UcxMempool *pool)
 Destroys a memory pool. More...
 
void ucx_mempool_set_destr (void *ptr, ucx_destructor func)
 Sets a destructor function for the specified memory. More...
 
void ucx_mempool_reg_destr (UcxMempool *pool, void *ptr, ucx_destructor destr)
 Registers a destructor function for the specified (non-pooled) memory. More...
 
+

Detailed Description

+

Memory pool implementation.

+
Author
Mike Becker
+
+Olaf Wintermann
+

Macro Definition Documentation

+ +

◆ ucx_mempool_new_default

+ +
+
+ + + + + + + +
#define ucx_mempool_new_default()   ucx_mempool_new(16)
+
+ +

Shorthand for a new default memory pool with a capacity of 16 elements.

+ +
+
+

Function Documentation

+ +

◆ ucx_mempool_calloc()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void* ucx_mempool_calloc (UcxMempoolpool,
size_t nelem,
size_t elsize 
)
+
+ +

Allocates a pooled memory array.

+

The content of the allocated memory is set to zero.

+
Parameters
+ + + + +
poolthe memory pool
nelemamount of elements to allocate
elsizeamount of memory per element
+
+
+
Returns
a pointer to the allocated memory
+
See also
ucx_allocator_calloc()
+ +
+
+ +

◆ ucx_mempool_chcap()

+ +
+
+ + + + + + + + + + + + + + + + + + +
int ucx_mempool_chcap (UcxMempoolpool,
size_t newcap 
)
+
+ +

Resizes a memory pool.

+

This function will fail if the new capacity is not sufficient for the present data.

+
Parameters
+ + + +
poolthe pool to resize
newcapthe new capacity
+
+
+
Returns
zero on success or non-zero on failure
+ +
+
+ +

◆ ucx_mempool_destroy()

+ +
+
+ + + + + + + + +
void ucx_mempool_destroy (UcxMempoolpool)
+
+ +

Destroys a memory pool.

+

For each element the destructor function (if any) is called and the element is freed.

+

Each of the registered destructor function that has no corresponding element within the pool (namely those registered by ucx_mempool_reg_destr) is called interleaving with the element destruction, but with guarantee to the order in which they were registered (FIFO order).

+
Parameters
+ + +
poolthe mempool to destroy
+
+
+ +
+
+ +

◆ ucx_mempool_free()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void ucx_mempool_free (UcxMempoolpool,
void * ptr 
)
+
+ +

Frees pooled memory.

+

Before freeing the memory, the specified destructor function (if any) is called.

+

If you specify memory, that is not pooled by the specified memory pool, the program will terminate with a call to abort().

+
Parameters
+ + + +
poolthe memory pool
ptra pointer to the memory that shall be freed
+
+
+
See also
ucx_mempool_set_destr()
+ +
+
+ +

◆ ucx_mempool_malloc()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void* ucx_mempool_malloc (UcxMempoolpool,
size_t n 
)
+
+ +

Allocates pooled memory.

+
Parameters
+ + + +
poolthe memory pool
namount of memory to allocate
+
+
+
Returns
a pointer to the allocated memory
+
See also
ucx_allocator_malloc()
+ +
+
+ +

◆ ucx_mempool_new()

+ +
+
+ + + + + + + + +
UcxMempool* ucx_mempool_new (size_t n)
+
+ +

Creates a memory pool with the specified initial size.

+

As the created memory pool automatically grows in size by factor two when trying to allocate memory on a full pool, it is recommended that you use a power of two for the initial size.

+
Parameters
+ + +
ninitial pool size (should be a power of two, e.g. 16)
+
+
+
Returns
a pointer to the new memory pool
+
See also
ucx_mempool_new_default()
+ +
+
+ +

◆ ucx_mempool_realloc()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void* ucx_mempool_realloc (UcxMempoolpool,
void * ptr,
size_t n 
)
+
+ +

Reallocates pooled memory.

+

If the memory to be reallocated is not contained by the specified pool, the behavior is undefined.

+
Parameters
+ + + + +
poolthe memory pool
ptra pointer to the memory that shall be reallocated
nthe new size of the memory
+
+
+
Returns
a pointer to the new location of the memory
+
See also
ucx_allocator_realloc()
+ +
+
+ +

◆ ucx_mempool_reg_destr()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void ucx_mempool_reg_destr (UcxMempoolpool,
void * ptr,
ucx_destructor destr 
)
+
+ +

Registers a destructor function for the specified (non-pooled) memory.

+

This is useful, if you have memory that has not been allocated by a mempool, but shall be managed by a mempool.

+

This function creates an entry in the specified mempool and the memory will therefore (logically) convert to pooled memory. However, this does not cause the memory to be freed automatically!. If you want to use this function, make the memory pool free non-pooled memory, the specified destructor function must call free() by itself. But keep in mind, that you then MUST NOT use this destructor function with pooled memory (e.g. in ucx_mempool_set_destr()), as it would cause a double-free.

+
Parameters
+ + + + +
poolthe memory pool
ptrdata the destructor is registered for
destra pointer to the destructor function
+
+
+ +
+
+ +

◆ ucx_mempool_set_destr()

+ +
+
+ + + + + + + + + + + + + + + + + + +
void ucx_mempool_set_destr (void * ptr,
ucx_destructor func 
)
+
+ +

Sets a destructor function for the specified memory.

+

The destructor is automatically called when the memory is freed or the pool is destroyed. A destructor for pooled memory MUST NOT free the memory itself, as this is done by the pool. Use a destructor to free any resources managed by the pooled object.

+

The only requirement for the specified memory is, that it MUST be pooled memory by a UcxMempool or an element-compatible mempool. The pointer to the destructor function is saved in a reserved area before the actual memory.

+
Parameters
+ + + +
ptrpooled memory
funca pointer to the destructor function
+
+
+
See also
ucx_mempool_free()
+
+ucx_mempool_destroy()
+ +
+
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/mempool_8h_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/mempool_8h_source.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,97 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/mempool.h Source File + + + + + + + + + +
+
+ + + + + + + +
+
ucx +
+
UAP Common Extensions
+
+
+ + + + + + + + +
+
+ + +
+ +
+ + +
+
+
+
mempool.h
+
+
+Go to the documentation of this file.
1 /*
2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3  *
4  * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * 2. Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28 
38 #ifndef UCX_MEMPOOL_H
39 #define UCX_MEMPOOL_H
40 
41 #include "ucx.h"
42 #include "allocator.h"
43 #include <stddef.h>
44 
45 #ifdef __cplusplus
46 extern "C" {
47 #endif
48 
52 typedef struct {
55 
57  void **data;
58 
60  size_t ndata;
61 
63  size_t size;
64 } UcxMempool;
65 
67 #define ucx_mempool_new_default() ucx_mempool_new(16)
68 
69 
81 UcxMempool *ucx_mempool_new(size_t n);
82 
93 int ucx_mempool_chcap(UcxMempool *pool, size_t newcap);
94 
103 void *ucx_mempool_malloc(UcxMempool *pool, size_t n);
115 void *ucx_mempool_calloc(UcxMempool *pool, size_t nelem, size_t elsize);
116 
129 void *ucx_mempool_realloc(UcxMempool *pool, void *ptr, size_t n);
130 
144 void ucx_mempool_free(UcxMempool *pool, void *ptr);
145 
160 void ucx_mempool_destroy(UcxMempool *pool);
161 
181 void ucx_mempool_set_destr(void *ptr, ucx_destructor func);
182 
202 void ucx_mempool_reg_destr(UcxMempool *pool, void *ptr, ucx_destructor destr);
203 
204 #ifdef __cplusplus
205 }
206 #endif
207 
208 #endif /* UCX_MEMPOOL_H */
209 
void ucx_mempool_free(UcxMempool *pool, void *ptr)
Frees pooled memory.
Definition: mempool.c:187
+
UCX mempool structure.
Definition: mempool.h:52
+
void ucx_mempool_destroy(UcxMempool *pool)
Destroys a memory pool.
Definition: mempool.c:209
+
Main UCX Header providing most common definitions.
+
int ucx_mempool_chcap(UcxMempool *pool, size_t newcap)
Resizes a memory pool.
Definition: mempool.c:103
+
void ucx_mempool_reg_destr(UcxMempool *pool, void *ptr, ucx_destructor destr)
Registers a destructor function for the specified (non-pooled) memory.
Definition: mempool.c:229
+
void * ucx_mempool_malloc(UcxMempool *pool, size_t n)
Allocates pooled memory.
Definition: mempool.c:123
+
size_t size
Memory pool size.
Definition: mempool.h:63
+
size_t ndata
Count of pooled memory items.
Definition: mempool.h:60
+
UCX allocator data structure containing memory management functions.
Definition: allocator.h:88
+
void * ucx_mempool_calloc(UcxMempool *pool, size_t nelem, size_t elsize)
Allocates a pooled memory array.
Definition: mempool.c:148
+
void ** data
List of pointers to pooled memory.
Definition: mempool.h:57
+
UcxMempool * ucx_mempool_new(size_t n)
Creates a memory pool with the specified initial size.
Definition: mempool.c:67
+
void * ucx_mempool_realloc(UcxMempool *pool, void *ptr, size_t n)
Reallocates pooled memory.
Definition: mempool.c:162
+
Allocator for custom memory management.
+
UcxAllocator * allocator
UcxAllocator based on this pool.
Definition: mempool.h:54
+
void ucx_mempool_set_destr(void *ptr, ucx_destructor func)
Sets a destructor function for the specified memory.
Definition: mempool.c:225
+
void(* ucx_destructor)(void *)
A function pointer to a destructor function.
Definition: ucx.h:72
+
+ + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/menu.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/menu.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} diff -r 92e482410453 -r d345541018fa docs/api-2.1/menudata.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/menudata.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,69 @@ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Data Structures",url:"annotated.html",children:[ +{text:"Data Structures",url:"annotated.html"}, +{text:"Data Structure Index",url:"classes.html"}, +{text:"Data Fields",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions.html#index_b"}, +{text:"c",url:"functions.html#index_c"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"f",url:"functions.html#index_f"}, +{text:"h",url:"functions.html#index_h"}, +{text:"i",url:"functions.html#index_i"}, +{text:"k",url:"functions.html#index_k"}, +{text:"l",url:"functions.html#index_l"}, +{text:"m",url:"functions.html#index_m"}, +{text:"n",url:"functions.html#index_n"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}, +{text:"u",url:"functions.html#index_u"}, +{text:"v",url:"functions.html#index_v"}, +{text:"w",url:"functions.html#index_w"}]}, +{text:"Variables",url:"functions_vars.html",children:[ +{text:"a",url:"functions_vars.html#index_a"}, +{text:"b",url:"functions_vars.html#index_b"}, +{text:"c",url:"functions_vars.html#index_c"}, +{text:"d",url:"functions_vars.html#index_d"}, +{text:"e",url:"functions_vars.html#index_e"}, +{text:"f",url:"functions_vars.html#index_f"}, +{text:"h",url:"functions_vars.html#index_h"}, +{text:"i",url:"functions_vars.html#index_i"}, +{text:"k",url:"functions_vars.html#index_k"}, +{text:"l",url:"functions_vars.html#index_l"}, +{text:"m",url:"functions_vars.html#index_m"}, +{text:"n",url:"functions_vars.html#index_n"}, +{text:"p",url:"functions_vars.html#index_p"}, +{text:"r",url:"functions_vars.html#index_r"}, +{text:"s",url:"functions_vars.html#index_s"}, +{text:"t",url:"functions_vars.html#index_t"}, +{text:"u",url:"functions_vars.html#index_u"}, +{text:"v",url:"functions_vars.html#index_v"}, +{text:"w",url:"functions_vars.html#index_w"}]}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"Globals",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"_",url:"globals.html#index__"}, +{text:"a",url:"globals_a.html#index_a"}, +{text:"c",url:"globals_c.html#index_c"}, +{text:"d",url:"globals_d.html#index_d"}, +{text:"p",url:"globals_p.html#index_p"}, +{text:"r",url:"globals_r.html#index_r"}, +{text:"s",url:"globals_s.html#index_s"}, +{text:"u",url:"globals_u.html#index_u"}, +{text:"w",url:"globals_w.html#index_w"}]}, +{text:"Functions",url:"globals_func.html",children:[ +{text:"s",url:"globals_func.html#index_s"}, +{text:"u",url:"globals_func_u.html#index_u"}]}, +{text:"Typedefs",url:"globals_type.html"}, +{text:"Macros",url:"globals_defs.html",children:[ +{text:"_",url:"globals_defs.html#index__"}, +{text:"a",url:"globals_defs.html#index_a"}, +{text:"p",url:"globals_defs.html#index_p"}, +{text:"s",url:"globals_defs.html#index_s"}, +{text:"u",url:"globals_defs.html#index_u"}]}]}]}]} diff -r 92e482410453 -r d345541018fa docs/api-2.1/nav_f.png Binary file docs/api-2.1/nav_f.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/nav_g.png Binary file docs/api-2.1/nav_g.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/nav_h.png Binary file docs/api-2.1/nav_h.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/open.png Binary file docs/api-2.1/open.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/properties_8h.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/properties_8h.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,393 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/properties.h File Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    properties.h File Reference
    +
    +
    + +

    Load / store utilities for properties files. +More...

    +
    #include "ucx.h"
    +#include "map.h"
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Data Structures

    struct  UcxProperties
     UcxProperties object for parsing properties data. More...
     
    + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    UcxPropertiesucx_properties_new ()
     Constructs a new UcxProperties object. More...
     
    void ucx_properties_free (UcxProperties *prop)
     Destroys a UcxProperties object. More...
     
    void ucx_properties_fill (UcxProperties *prop, char *buf, size_t len)
     Sets the input buffer for the properties parser. More...
     
    int ucx_properties_next (UcxProperties *prop, sstr_t *name, sstr_t *value)
     Retrieves the next key/value-pair. More...
     
    int ucx_properties2map (UcxProperties *prop, UcxMap *map)
     Retrieves all available key/value-pairs and puts them into a UcxMap. More...
     
    int ucx_properties_load (UcxMap *map, FILE *file)
     Loads a properties file to a UcxMap. More...
     
    int ucx_properties_store (UcxMap *map, FILE *file)
     Stores a UcxMap to a file. More...
     
    +

    Detailed Description

    +

    Load / store utilities for properties files.

    +
    Author
    Mike Becker
    +
    +Olaf Wintermann
    +

    Function Documentation

    + +

    ◆ ucx_properties2map()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int ucx_properties2map (UcxPropertiesprop,
    UcxMapmap 
    )
    +
    + +

    Retrieves all available key/value-pairs and puts them into a UcxMap.

    +

    This is done by successive calls to ucx_properties_next() until no more key/value-pairs can be retrieved.

    +

    The memory for the map values is allocated by the map's own allocator.

    +
    Parameters
    + + + +
    propthe UcxProperties object
    mapthe target map
    +
    +
    +
    Returns
    The UcxProperties.error code (i.e. 0 on success).
    +
    See also
    ucx_properties_fill()
    +
    +UcxMap.allocator
    + +
    +
    + +

    ◆ ucx_properties_fill()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void ucx_properties_fill (UcxPropertiesprop,
    char * buf,
    size_t len 
    )
    +
    + +

    Sets the input buffer for the properties parser.

    +

    After calling this function, you may parse the data by calling ucx_properties_next() until it returns 0. The function ucx_properties2map() is a convenience function that reads as much data as possible by using this function.

    +
    Parameters
    + + + + +
    propthe UcxProperties object
    bufa pointer to the new buffer
    lenthe payload length of the buffer
    +
    +
    +
    See also
    ucx_properties_next()
    +
    +ucx_properties2map()
    + +
    +
    + +

    ◆ ucx_properties_free()

    + +
    +
    + + + + + + + + +
    void ucx_properties_free (UcxPropertiesprop)
    +
    + +

    Destroys a UcxProperties object.

    +
    Parameters
    + + +
    propthe UcxProperties object to destroy
    +
    +
    + +
    +
    + +

    ◆ ucx_properties_load()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int ucx_properties_load (UcxMapmap,
    FILE * file 
    )
    +
    + +

    Loads a properties file to a UcxMap.

    +

    This is a convenience function that reads data from an input stream until the end of the stream is reached.

    +
    Parameters
    + + + +
    mapthe map object to write the key/value-pairs to
    filethe FILE* stream to read from
    +
    +
    +
    Returns
    0 on success, or a non-zero value on error
    +
    See also
    ucx_properties_fill()
    +
    +ucx_properties2map()
    + +
    +
    + +

    ◆ ucx_properties_new()

    + +
    +
    + + + + + + + +
    UcxProperties* ucx_properties_new ()
    +
    + +

    Constructs a new UcxProperties object.

    +
    Returns
    a pointer to the new UcxProperties object
    + +
    +
    + +

    ◆ ucx_properties_next()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_properties_next (UcxPropertiesprop,
    sstr_tname,
    sstr_tvalue 
    )
    +
    + +

    Retrieves the next key/value-pair.

    +

    This function returns a nonzero value as long as there are key/value-pairs found. If no more key/value-pairs are found, you may refill the input buffer with ucx_properties_fill().

    +

    Attention: the sstr_t.ptr pointers of the output parameters point to memory within the input buffer of the parser and will get invalid some time. If you want long term copies of the key/value-pairs, use sstrdup() after calling this function.

    +
    Parameters
    + + + + +
    propthe UcxProperties object
    namea pointer to the sstr_t that shall contain the property name
    valuea pointer to the sstr_t that shall contain the property value
    +
    +
    +
    Returns
    Nonzero, if a key/value-pair was successfully retrieved
    +
    See also
    ucx_properties_fill()
    + +
    +
    + +

    ◆ ucx_properties_store()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int ucx_properties_store (UcxMapmap,
    FILE * file 
    )
    +
    + +

    Stores a UcxMap to a file.

    +

    The key/value-pairs are written by using the following format:

    +

    [key] = [value]\n

    +
    Parameters
    + + + +
    mapthe map to store
    filethe FILE* stream to write to
    +
    +
    +
    Returns
    0 on success, or a non-zero value on error
    + +
    +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/properties_8h_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/properties_8h_source.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,102 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/properties.h Source File + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    properties.h
    +
    +
    +Go to the documentation of this file.
    1 /*
    2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    3  *
    4  * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions are met:
    8  *
    9  * 1. Redistributions of source code must retain the above copyright
    10  * notice, this list of conditions and the following disclaimer.
    11  *
    12  * 2. Redistributions in binary form must reproduce the above copyright
    13  * notice, this list of conditions and the following disclaimer in the
    14  * documentation and/or other materials provided with the distribution.
    15  *
    16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
    20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    26  * POSSIBILITY OF SUCH DAMAGE.
    27  */
    37 #ifndef UCX_PROPERTIES_H
    38 #define UCX_PROPERTIES_H
    39 
    40 #include "ucx.h"
    41 #include "map.h"
    42 
    43 #ifdef __cplusplus
    44 extern "C" {
    45 #endif
    46 
    53 typedef struct {
    58  char *buffer;
    59 
    64  size_t buflen;
    65 
    70  size_t pos;
    71 
    76  char *tmp;
    77 
    82  size_t tmplen;
    83 
    88  size_t tmpcap;
    89 
    95  int error;
    96 
    101  char delimiter;
    102 
    107  char comment1;
    108 
    113  char comment2;
    114 
    119  char comment3;
    120 } UcxProperties;
    121 
    122 
    128 
    134 
    150 void ucx_properties_fill(UcxProperties *prop, char *buf, size_t len);
    151 
    170 int ucx_properties_next(UcxProperties *prop, sstr_t *name, sstr_t *value);
    171 
    186 int ucx_properties2map(UcxProperties *prop, UcxMap *map);
    187 
    201 int ucx_properties_load(UcxMap *map, FILE *file);
    202 
    214 int ucx_properties_store(UcxMap *map, FILE *file);
    215 
    216 #ifdef __cplusplus
    217 }
    218 #endif
    219 
    220 #endif /* UCX_PROPERTIES_H */
    221 
    The UCX string structure.
    Definition: string.h:90
    +
    UcxProperties * ucx_properties_new()
    Constructs a new UcxProperties object.
    Definition: properties.c:35
    +
    char comment3
    The third comment character.
    Definition: properties.h:119
    +
    Main UCX Header providing most common definitions.
    +
    size_t pos
    Current buffer position (don&#39;t set manually).
    Definition: properties.h:70
    +
    char comment2
    The second comment character.
    Definition: properties.h:113
    +
    int ucx_properties_load(UcxMap *map, FILE *file)
    Loads a properties file to a UcxMap.
    Definition: properties.c:222
    +
    UcxProperties object for parsing properties data.
    Definition: properties.h:53
    +
    size_t buflen
    Length of the input buffer (don&#39;t set manually).
    Definition: properties.h:64
    +
    char * buffer
    Input buffer (don&#39;t set manually).
    Definition: properties.h:58
    +
    int error
    Parser error code.
    Definition: properties.h:95
    +
    size_t tmplen
    Internal temporary buffer length (don&#39;t set manually).
    Definition: properties.h:82
    +
    char comment1
    The first comment character.
    Definition: properties.h:107
    +
    int ucx_properties_next(UcxProperties *prop, sstr_t *name, sstr_t *value)
    Retrieves the next key/value-pair.
    Definition: properties.c:80
    +
    int ucx_properties2map(UcxProperties *prop, UcxMap *map)
    Retrieves all available key/value-pairs and puts them into a UcxMap.
    Definition: properties.c:200
    +
    char delimiter
    The delimiter that shall be used.
    Definition: properties.h:101
    +
    char * tmp
    Internal temporary buffer (don&#39;t set manually).
    Definition: properties.h:76
    +
    Structure for the UCX map.
    Definition: map.h:81
    +
    size_t tmpcap
    Internal temporary buffer capacity (don&#39;t set manually).
    Definition: properties.h:88
    +
    Hash map implementation.
    +
    void ucx_properties_fill(UcxProperties *prop, char *buf, size_t len)
    Sets the input buffer for the properties parser.
    Definition: properties.c:64
    +
    int ucx_properties_store(UcxMap *map, FILE *file)
    Stores a UcxMap to a file.
    Definition: properties.c:242
    +
    void ucx_properties_free(UcxProperties *prop)
    Destroys a UcxProperties object.
    Definition: properties.c:57
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_0.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_0.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_0.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_0.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5f_5ffunction_5f_5f',['__FUNCTION__',['../test_8h.html#a828bb1dfda1afd67ca795075903d227d',1,'test.h']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_1.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_1.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_1.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_1.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,11 @@ +var searchData= +[ + ['alcalloc',['alcalloc',['../allocator_8h.html#a8d71470816f88f78cb9a9686c57e1b10',1,'allocator.h']]], + ['alfree',['alfree',['../allocator_8h.html#acd775785b54e97dc2b33a432c12c8fb2',1,'allocator.h']]], + ['allocator',['allocator',['../structUcxArray.html#a2ef31303b7548b9aa8e2b9187e295212',1,'UcxArray::allocator()'],['../structUcxAVLTree.html#a30652776b540156ad54c7d52833e4e28',1,'UcxAVLTree::allocator()'],['../structUcxMap.html#a531f3e481c1c331cf037b916192e974d',1,'UcxMap::allocator()'],['../structUcxMempool.html#ac45fd1e9269399e4c434d6bdaa770d92',1,'UcxMempool::allocator()'],['../structUcxStack.html#a33cda4f6890ac56ab31701598bc1ae10',1,'UcxStack::allocator()']]], + ['allocator_2eh',['allocator.h',['../allocator_8h.html',1,'']]], + ['almalloc',['almalloc',['../allocator_8h.html#ae1bc218fea8a35f4a3706f0beefcfb19',1,'allocator.h']]], + ['alrealloc',['alrealloc',['../allocator_8h.html#a029ee5c9bcbb3f873571553f788c5820',1,'allocator.h']]], + ['array_2eh',['array.h',['../array_8h.html',1,'']]], + ['avl_2eh',['avl.h',['../avl_8h.html',1,'']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_10.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_10.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_10.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_10.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,10 @@ +var searchData= +[ + ['test',['test',['../structUcxTestList.html#a6022faa52e772b073141ca0a2f5a56c9',1,'UcxTestList']]], + ['test_2eh',['test.h',['../test_8h.html',1,'']]], + ['tests',['tests',['../structUcxTestSuite.html#a630677a70ebc2c3296704cda3196492b',1,'UcxTestSuite']]], + ['tmp',['tmp',['../structUcxProperties.html#a68556d4260153f58dde44e4c365edce6',1,'UcxProperties']]], + ['tmpcap',['tmpcap',['../structUcxProperties.html#a5af10131ea9f679b4ee174499f92e210',1,'UcxProperties']]], + ['tmplen',['tmplen',['../structUcxProperties.html#a8a81853d5903bee2f4e1fa53fdffae6e',1,'UcxProperties']]], + ['top',['top',['../structUcxStack.html#af0ff6f58edce469f17683013b86ade27',1,'UcxStack']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_11.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_11.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_11.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_11.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,271 @@ +var searchData= +[ + ['uap_20common_20extensions',['UAP Common Extensions',['../index.html',1,'']]], + ['ucx_2eh',['ucx.h',['../ucx_8h.html',1,'']]], + ['ucx_5fallocator_5fcalloc',['ucx_allocator_calloc',['../allocator_8h.html#a2c0aba4221c1ac6801f03ed799f15b12',1,'allocator.h']]], + ['ucx_5fallocator_5fdefault',['UCX_ALLOCATOR_DEFAULT',['../allocator_8h.html#a1283a8f875f90a7af3aba5e031fc2e3f',1,'allocator.h']]], + ['ucx_5fallocator_5ffree',['ucx_allocator_free',['../allocator_8h.html#aaf2387ddaddd8ab4b267e6b00e5d6f7e',1,'allocator.h']]], + ['ucx_5fallocator_5fmalloc',['ucx_allocator_malloc',['../allocator_8h.html#a29f0f6a23a70db3b60635cd6dc384473',1,'allocator.h']]], + ['ucx_5fallocator_5frealloc',['ucx_allocator_realloc',['../allocator_8h.html#a6d7cf038a806e327c5da37321d04e426',1,'allocator.h']]], + ['ucx_5farray_5fappend_5ffrom',['ucx_array_append_from',['../array_8h.html#aea01731ad94ea73c0c8fb1d1b7a35fcf',1,'array.c']]], + ['ucx_5farray_5fat',['ucx_array_at',['../array_8h.html#aa698085fd1a8b70d6b709999c51b49e8',1,'array.c']]], + ['ucx_5farray_5fclone',['ucx_array_clone',['../array_8h.html#a4a8c273370e4a3a3e2624e364f5ab410',1,'array.c']]], + ['ucx_5farray_5fconcat',['ucx_array_concat',['../array_8h.html#aa5a0bf3d3f0df6406beb0e569021cc28',1,'array.c']]], + ['ucx_5farray_5fcontains',['ucx_array_contains',['../array_8h.html#a5241058cd2329147bc5b1593ae7e51dc',1,'array.c']]], + ['ucx_5farray_5fdestroy',['ucx_array_destroy',['../array_8h.html#a8e83681d8d5d8cddbf10f63ce5be4c10',1,'array.c']]], + ['ucx_5farray_5fequals',['ucx_array_equals',['../array_8h.html#a43292b448adb1741677aa8c578bcc201',1,'array.c']]], + ['ucx_5farray_5ffind',['ucx_array_find',['../array_8h.html#ae7bdbed94afee9b20b38b95e3ab470f0',1,'array.c']]], + ['ucx_5farray_5ffree',['ucx_array_free',['../array_8h.html#ac01ee914468a16f470bf3071fffbe438',1,'array.c']]], + ['ucx_5farray_5fgrow',['ucx_array_grow',['../array_8h.html#ab0cbf243824aaebee48277315e03afce',1,'array.c']]], + ['ucx_5farray_5finit',['ucx_array_init',['../array_8h.html#ad921e85c28ffae32230777a53c5037e5',1,'array.c']]], + ['ucx_5farray_5finit_5fa',['ucx_array_init_a',['../array_8h.html#a2451e61ebb15a7ba1c1319267ba75b8c',1,'array.c']]], + ['ucx_5farray_5fnew',['ucx_array_new',['../array_8h.html#a994a2fbf1c33a3833e2a70cd9a4352b7',1,'array.c']]], + ['ucx_5farray_5fnew_5fa',['ucx_array_new_a',['../array_8h.html#a177170258c215eb2e4f5a32e59f0cb1b',1,'array.c']]], + ['ucx_5farray_5fprepend_5ffrom',['ucx_array_prepend_from',['../array_8h.html#a95b52acc2193b5c33cf0eaa4f2082477',1,'array.c']]], + ['ucx_5farray_5fremove',['ucx_array_remove',['../array_8h.html#aa45eac6b697f83adac81c0860cf306b8',1,'array.c']]], + ['ucx_5farray_5fremove_5ffast',['ucx_array_remove_fast',['../array_8h.html#a548d81b07612bae3ba8c4c4b49104b8e',1,'array.c']]], + ['ucx_5farray_5freserve',['ucx_array_reserve',['../array_8h.html#a1c3bf8433c1de3c933f3854ab297fe1d',1,'array.c']]], + ['ucx_5farray_5fresize',['ucx_array_resize',['../array_8h.html#a27762e7c06a6c781015e3c8ceeee0ce3',1,'array.c']]], + ['ucx_5farray_5fset_5ffrom',['ucx_array_set_from',['../array_8h.html#a1bb545d065358d265d80d815ba382a28',1,'array.c']]], + ['ucx_5farray_5fshrink',['ucx_array_shrink',['../array_8h.html#a2daf50e80aee9bccebee876a7efd2dfc',1,'array.c']]], + ['ucx_5farray_5fsort',['ucx_array_sort',['../array_8h.html#add773514569b872a6624381b4b6af52c',1,'array.c']]], + ['ucx_5farray_5futil_5fset',['ucx_array_util_set',['../array_8h.html#a1d959c29af3125bdd37cde3a554e729c',1,'array.h']]], + ['ucx_5farray_5futil_5fset_5fa',['ucx_array_util_set_a',['../array_8h.html#ad0a8d76980cf1c1910e64a245803fb9a',1,'array.c']]], + ['ucx_5farray_5futil_5fsetptr',['ucx_array_util_setptr',['../array_8h.html#a59a5b342965e790945f9c7a3f86b99f9',1,'array.h']]], + ['ucx_5farray_5futil_5fsetptr_5fa',['ucx_array_util_setptr_a',['../array_8h.html#ad708b333c0c1b02c998309a58ea65e31',1,'array.c']]], + ['ucx_5fasprintf',['ucx_asprintf',['../utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5',1,'utils.c']]], + ['ucx_5favl_5fcount',['ucx_avl_count',['../avl_8h.html#a92c1d41c2b22fe4a029a486ab2153e35',1,'avl.c']]], + ['ucx_5favl_5fdefault_5fnew',['ucx_avl_default_new',['../avl_8h.html#ac2886d4b79b48c9fabf6408873f84cd2',1,'avl.h']]], + ['ucx_5favl_5ffind',['ucx_avl_find',['../avl_8h.html#a51770e1614b28d7d22dea096c3704f83',1,'avl.c']]], + ['ucx_5favl_5ffind_5fclosest',['UCX_AVL_FIND_CLOSEST',['../avl_8h.html#af16f24d74fd6af0154de041566c6603b',1,'avl.h']]], + ['ucx_5favl_5ffind_5fexact',['UCX_AVL_FIND_EXACT',['../avl_8h.html#aaaf4a6f6f661cda7791db239212285d9',1,'avl.h']]], + ['ucx_5favl_5ffind_5flower_5fbounded',['UCX_AVL_FIND_LOWER_BOUNDED',['../avl_8h.html#abd2446d544d5412b6997ee8a17bd368c',1,'avl.h']]], + ['ucx_5favl_5ffind_5fnode',['ucx_avl_find_node',['../avl_8h.html#a664986f64d6865605199fbff06e19cd5',1,'avl.c']]], + ['ucx_5favl_5ffind_5fupper_5fbounded',['UCX_AVL_FIND_UPPER_BOUNDED',['../avl_8h.html#ac74ee7649c1e206b08b31f37dd68ca5e',1,'avl.h']]], + ['ucx_5favl_5ffree',['ucx_avl_free',['../avl_8h.html#a2f92db538f25fce908d2cb3e5590944c',1,'avl.c']]], + ['ucx_5favl_5ffree_5fcontent',['ucx_avl_free_content',['../avl_8h.html#a31ad7fb196ca211f1fc39f4e15f72279',1,'avl.c']]], + ['ucx_5favl_5fget',['ucx_avl_get',['../avl_8h.html#adbcf7ceb3f014a30c7214f7304519efe',1,'avl.c']]], + ['ucx_5favl_5fget_5fnode',['ucx_avl_get_node',['../avl_8h.html#acf42da9a4168e47dc10b4ba0d27ceb4e',1,'avl.c']]], + ['ucx_5favl_5fnew',['ucx_avl_new',['../avl_8h.html#a11b043d65a11b7092d5d98b298e5ede3',1,'avl.c']]], + ['ucx_5favl_5fnew_5fa',['ucx_avl_new_a',['../avl_8h.html#af0f868d67e9dc08b4867c02a06c23ee2',1,'avl.c']]], + ['ucx_5favl_5fpred',['ucx_avl_pred',['../avl_8h.html#a0e739aeb66dda6a6a3f6eb51b50cf346',1,'avl.c']]], + ['ucx_5favl_5fput',['ucx_avl_put',['../avl_8h.html#aec401fab4a24a7edffa734f9baf88577',1,'avl.c']]], + ['ucx_5favl_5fput_5fs',['ucx_avl_put_s',['../avl_8h.html#a32cf8955cc0226a82bacfc7b76d6474c',1,'avl.c']]], + ['ucx_5favl_5fremove',['ucx_avl_remove',['../avl_8h.html#a1d821119c805d7fbb7e424bc3effeba9',1,'avl.c']]], + ['ucx_5favl_5fremove_5fnode',['ucx_avl_remove_node',['../avl_8h.html#a9a792b7d9e58073deef74a341f8bc720',1,'avl.c']]], + ['ucx_5favl_5fremove_5fs',['ucx_avl_remove_s',['../avl_8h.html#a01aeeecd6415f0cc2b623486eb28f254',1,'avl.c']]], + ['ucx_5favl_5fsucc',['ucx_avl_succ',['../avl_8h.html#aab1ad9b027ff5e50671aa0ee84e2d541',1,'avl.c']]], + ['ucx_5fbprintf',['ucx_bprintf',['../utils_8h.html#a9d7d65a420f026fcb6982803d5120519',1,'utils.h']]], + ['ucx_5fbuffer_5fautoextend',['UCX_BUFFER_AUTOEXTEND',['../buffer_8h.html#a05f9565f2d04399168c3b1c152a632be',1,'buffer.h']]], + ['ucx_5fbuffer_5fautofree',['UCX_BUFFER_AUTOFREE',['../buffer_8h.html#a8bab11ad8a76719228b9ee91e2e45535',1,'buffer.h']]], + ['ucx_5fbuffer_5fclear',['ucx_buffer_clear',['../buffer_8h.html#a374abd5aabfcc3ee0777a79d5fe651ab',1,'buffer.h']]], + ['ucx_5fbuffer_5fclone',['ucx_buffer_clone',['../buffer_8h.html#a828353846428c2c2f695f9938f059e52',1,'buffer.h']]], + ['ucx_5fbuffer_5fdefault',['UCX_BUFFER_DEFAULT',['../buffer_8h.html#acc77c8ed7b26854f555d4a5d11e49ea2',1,'buffer.h']]], + ['ucx_5fbuffer_5feof',['ucx_buffer_eof',['../buffer_8h.html#abad7fd9ad5061224c780b8d1d4c55f09',1,'buffer.c']]], + ['ucx_5fbuffer_5fextend',['ucx_buffer_extend',['../buffer_8h.html#afaf97d2cd7e9faad79a9d35fe33e30c6',1,'buffer.c']]], + ['ucx_5fbuffer_5fextract',['ucx_buffer_extract',['../buffer_8h.html#a33fa7bb35fe08bbb3542f227514332ef',1,'buffer.c']]], + ['ucx_5fbuffer_5ffree',['ucx_buffer_free',['../buffer_8h.html#a2af8646d8905c22c7322e7540b0440af',1,'buffer.c']]], + ['ucx_5fbuffer_5fgetc',['ucx_buffer_getc',['../buffer_8h.html#a396339022159ce4ca6d069de9f9209b0',1,'buffer.c']]], + ['ucx_5fbuffer_5fnew',['ucx_buffer_new',['../buffer_8h.html#aacea876d692193ec6f859ce98da7351c',1,'buffer.c']]], + ['ucx_5fbuffer_5fputc',['ucx_buffer_putc',['../buffer_8h.html#a7d6f01b9d631b0123475dfb98fb849ac',1,'buffer.c']]], + ['ucx_5fbuffer_5fputs',['ucx_buffer_puts',['../buffer_8h.html#af1d4b478e04b3ae0bf30e7c2ea964ea2',1,'buffer.c']]], + ['ucx_5fbuffer_5fread',['ucx_buffer_read',['../buffer_8h.html#ae5c3430759f0059547b35d5a254d4da5',1,'buffer.c']]], + ['ucx_5fbuffer_5fseek',['ucx_buffer_seek',['../buffer_8h.html#a47d98482662073c74f35deb0957d15d1',1,'buffer.c']]], + ['ucx_5fbuffer_5fshift',['ucx_buffer_shift',['../buffer_8h.html#a12a0c6a2379ef080043e6286bb8bad69',1,'buffer.c']]], + ['ucx_5fbuffer_5fshift_5fleft',['ucx_buffer_shift_left',['../buffer_8h.html#a20431dd0ed6a6fe9f15333bd72afe4db',1,'buffer.c']]], + ['ucx_5fbuffer_5fshift_5fright',['ucx_buffer_shift_right',['../buffer_8h.html#a4fa10b6471495547eb981248fd4f1bc2',1,'buffer.c']]], + ['ucx_5fbuffer_5fto_5fsstr',['ucx_buffer_to_sstr',['../buffer_8h.html#a0f4b64f1b3a74c4f6c5d9409d6b6086a',1,'buffer.h']]], + ['ucx_5fbuffer_5fwrite',['ucx_buffer_write',['../buffer_8h.html#af8aacc7401814392b58c1b7b81bffc05',1,'buffer.c']]], + ['ucx_5fcmp_5fdouble',['ucx_cmp_double',['../utils_8h.html#ab804b7c27d0bfcd7bf3a3583140825b6',1,'utils.c']]], + ['ucx_5fcmp_5ffloat',['ucx_cmp_float',['../utils_8h.html#ad1196b561bcdad76c393885819769a97',1,'utils.c']]], + ['ucx_5fcmp_5fint',['ucx_cmp_int',['../utils_8h.html#a8ce7e11e6b3deafe89a32a091fde7f16',1,'utils.c']]], + ['ucx_5fcmp_5fint16',['ucx_cmp_int16',['../utils_8h.html#aa29e6e559946375e34113e34e0b0bd0d',1,'utils.c']]], + ['ucx_5fcmp_5fint32',['ucx_cmp_int32',['../utils_8h.html#a858b2ac443fb202643b71f6a7e9218dd',1,'utils.c']]], + ['ucx_5fcmp_5fint64',['ucx_cmp_int64',['../utils_8h.html#a54701aea6a89fed1402dfb0bf56bc7f6',1,'utils.c']]], + ['ucx_5fcmp_5flongint',['ucx_cmp_longint',['../utils_8h.html#aeb57a2b9a6aaa0460c7a6bec29accf2c',1,'utils.c']]], + ['ucx_5fcmp_5flonglong',['ucx_cmp_longlong',['../utils_8h.html#a366b57def20f86a41eaedf575eea5375',1,'utils.c']]], + ['ucx_5fcmp_5fmem',['ucx_cmp_mem',['../utils_8h.html#aff7d2bcded71196831a8c0664333f8e7',1,'utils.c']]], + ['ucx_5fcmp_5fptr',['ucx_cmp_ptr',['../utils_8h.html#aa174d539de3ea59be4f9640f17ce53d8',1,'utils.c']]], + ['ucx_5fcmp_5fsstr',['ucx_cmp_sstr',['../utils_8h.html#adee0739589166d272f8cb7c23aabf8ba',1,'utils.c']]], + ['ucx_5fcmp_5fstr',['ucx_cmp_str',['../utils_8h.html#aa6a37b9d172b6a5b2803d152f9e1b258',1,'utils.c']]], + ['ucx_5fcmp_5fstrn',['ucx_cmp_strn',['../utils_8h.html#ac6b354a878f551a3a5b20a167db3f308',1,'utils.c']]], + ['ucx_5fcmp_5fuint',['ucx_cmp_uint',['../utils_8h.html#abd83a5da91c3dd026a6931bd80c12f1e',1,'utils.c']]], + ['ucx_5fcmp_5fuint16',['ucx_cmp_uint16',['../utils_8h.html#acde5366437e886a459b7468f7a9e11f0',1,'utils.c']]], + ['ucx_5fcmp_5fuint32',['ucx_cmp_uint32',['../utils_8h.html#a5879d1722330355914d8c9146fa549d3',1,'utils.c']]], + ['ucx_5fcmp_5fuint64',['ucx_cmp_uint64',['../utils_8h.html#a1572a78b5b42f7151a5b2a5a7283d62d',1,'utils.c']]], + ['ucx_5fcmp_5fulongint',['ucx_cmp_ulongint',['../utils_8h.html#a3f3cbae2594d6f722bae29acb0408a24',1,'utils.c']]], + ['ucx_5fcmp_5fulonglong',['ucx_cmp_ulonglong',['../utils_8h.html#a6acfc359421f21f9a042a654ff7faac5',1,'utils.c']]], + ['ucx_5fdefault_5fallocator',['ucx_default_allocator',['../allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf',1,'allocator.c']]], + ['ucx_5fdefault_5fcalloc',['ucx_default_calloc',['../allocator_8h.html#a3a0bfdd13d887012309c459b339f338f',1,'allocator.c']]], + ['ucx_5fdefault_5ffree',['ucx_default_free',['../allocator_8h.html#a646d83aaaadfe33ae414c0fad8bfc52a',1,'allocator.c']]], + ['ucx_5fdefault_5fmalloc',['ucx_default_malloc',['../allocator_8h.html#a96403ebf3d2312d95f2fe7627a1cdbc0',1,'allocator.c']]], + ['ucx_5fdefault_5frealloc',['ucx_default_realloc',['../allocator_8h.html#a47cfc8af626a86fcb93a2b14b90498ed',1,'allocator.c']]], + ['ucx_5fdestructor',['ucx_destructor',['../ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3',1,'ucx.h']]], + ['ucx_5fdist_5fint',['ucx_dist_int',['../utils_8h.html#a4ab6753739d56c09cdf6079fdcabf7c6',1,'utils.c']]], + ['ucx_5fdist_5fint16',['ucx_dist_int16',['../utils_8h.html#a81fb8434b70ca11bf2c14abfa21d16a9',1,'utils.c']]], + ['ucx_5fdist_5fint32',['ucx_dist_int32',['../utils_8h.html#ab4a659cc46096f0490c1dafa57726476',1,'utils.c']]], + ['ucx_5fdist_5fint64',['ucx_dist_int64',['../utils_8h.html#a54e7d06585bad3a899befc4e9c13853f',1,'utils.c']]], + ['ucx_5fdist_5flongint',['ucx_dist_longint',['../utils_8h.html#a43e73d288b1553a0078bf4c98dd341f5',1,'utils.c']]], + ['ucx_5fdist_5flonglong',['ucx_dist_longlong',['../utils_8h.html#a306778414a2427951ea263be92368627',1,'utils.c']]], + ['ucx_5fdist_5fuint',['ucx_dist_uint',['../utils_8h.html#a37b7d471ca1679992afc11a0deda45f4',1,'utils.c']]], + ['ucx_5fdist_5fuint16',['ucx_dist_uint16',['../utils_8h.html#a66e00a0703cbcde050ec922578e2f080',1,'utils.c']]], + ['ucx_5fdist_5fuint32',['ucx_dist_uint32',['../utils_8h.html#add2b5c5507caba59d894b84e056b079b',1,'utils.c']]], + ['ucx_5fdist_5fuint64',['ucx_dist_uint64',['../utils_8h.html#a3ba75e2e0b2479eef2b22fb219b42da7',1,'utils.c']]], + ['ucx_5fdist_5fulongint',['ucx_dist_ulongint',['../utils_8h.html#abb13476228d0c16bfaba08469adbae2d',1,'utils.c']]], + ['ucx_5fdist_5fulonglong',['ucx_dist_ulonglong',['../utils_8h.html#a59a5859272cb4b43cbdd58208c41e32b',1,'utils.c']]], + ['ucx_5fforeach',['UCX_FOREACH',['../list_8h.html#a4b143b6526a410aa4d22cb3bb9365d70',1,'list.h']]], + ['ucx_5ffprintf',['ucx_fprintf',['../utils_8h.html#aa0bec80e1c67f769ff5e112a7d4ce72a',1,'utils.c']]], + ['ucx_5fhash',['ucx_hash',['../map_8h.html#aea3be97254c05595d986ef6a9faae87b',1,'map.c']]], + ['ucx_5fkey',['ucx_key',['../map_8h.html#a3e540bb46b8ee19789aed63fd8919200',1,'map.c']]], + ['ucx_5flist_5fappend',['ucx_list_append',['../list_8h.html#a00c122c8a26d35b60676939df4161621',1,'list.c']]], + ['ucx_5flist_5fappend_5fa',['ucx_list_append_a',['../list_8h.html#adf3b3e2e0ff977d8928671d6bd82fc60',1,'list.c']]], + ['ucx_5flist_5fclone',['ucx_list_clone',['../list_8h.html#ae7054a41c289b24e6caf5cb07ac850ed',1,'list.c']]], + ['ucx_5flist_5fclone_5fa',['ucx_list_clone_a',['../list_8h.html#a08ca1ba0d2e82258b0408714c1f4c425',1,'list.c']]], + ['ucx_5flist_5fconcat',['ucx_list_concat',['../list_8h.html#a77163a0cc82fae52bec26c8c0c3674d9',1,'list.c']]], + ['ucx_5flist_5fcontains',['ucx_list_contains',['../list_8h.html#a8b0fa051fcfe12e1a82cca1087973852',1,'list.c']]], + ['ucx_5flist_5fdifference',['ucx_list_difference',['../list_8h.html#a6c5db5d1d11ad28b6fe1a80ee1c1e449',1,'list.c']]], + ['ucx_5flist_5fdifference_5fa',['ucx_list_difference_a',['../list_8h.html#a4a2a2fc5cc41073c516db6235bbc51d5',1,'list.c']]], + ['ucx_5flist_5fequals',['ucx_list_equals',['../list_8h.html#adc435447cecf885bc63d232191085bbe',1,'list.c']]], + ['ucx_5flist_5ffind',['ucx_list_find',['../list_8h.html#a9b3b6842d3be572e06a7f519e198cb83',1,'list.c']]], + ['ucx_5flist_5ffirst',['ucx_list_first',['../list_8h.html#a6aa0e34ebc5f0dca6f52d0f7626b4bd5',1,'list.c']]], + ['ucx_5flist_5ffree',['ucx_list_free',['../list_8h.html#a1a0fa2c5b1e478a96da19b0c3f013668',1,'list.c']]], + ['ucx_5flist_5ffree_5fa',['ucx_list_free_a',['../list_8h.html#a944e11f76c38767cd1100d72a4e3b25b',1,'list.c']]], + ['ucx_5flist_5ffree_5fcontent',['ucx_list_free_content',['../list_8h.html#a4ba6c96642f72ea046cc22627c72979c',1,'list.c']]], + ['ucx_5flist_5fget',['ucx_list_get',['../list_8h.html#a2509ffe19bce6a8708c77f89480c75fb',1,'list.c']]], + ['ucx_5flist_5findexof',['ucx_list_indexof',['../list_8h.html#ae2ff2974812ca185870f80bc4ed9337e',1,'list.c']]], + ['ucx_5flist_5fintersection',['ucx_list_intersection',['../list_8h.html#a259f9b754978aeca23dfabba16e20f39',1,'list.c']]], + ['ucx_5flist_5fintersection_5fa',['ucx_list_intersection_a',['../list_8h.html#a1d0b00514dbb81ba6270b58da0c5b9a8',1,'list.c']]], + ['ucx_5flist_5flast',['ucx_list_last',['../list_8h.html#add5ec40c5006e29c629d23c2eb5a6553',1,'list.c']]], + ['ucx_5flist_5fprepend',['ucx_list_prepend',['../list_8h.html#a8fcb68e4556395b15180eec2d0b77aa4',1,'list.c']]], + ['ucx_5flist_5fprepend_5fa',['ucx_list_prepend_a',['../list_8h.html#a54654e6dc60e1c3de9e886c150e404ec',1,'list.c']]], + ['ucx_5flist_5fremove',['ucx_list_remove',['../list_8h.html#a410cb3e8260037ba56c72d14b899b468',1,'list.c']]], + ['ucx_5flist_5fremove_5fa',['ucx_list_remove_a',['../list_8h.html#aca687b7c4e7170175f447e549125aa52',1,'list.c']]], + ['ucx_5flist_5fsize',['ucx_list_size',['../list_8h.html#ae88001cc8ae40b946560f31434abed8f',1,'list.c']]], + ['ucx_5flist_5fsort',['ucx_list_sort',['../list_8h.html#ac74962d9bd7cfc9d3e2e09651469377b',1,'list.c']]], + ['ucx_5flist_5funion',['ucx_list_union',['../list_8h.html#a94ecdb0cea1633ad7074f027fa8485fa',1,'list.c']]], + ['ucx_5flist_5funion_5fa',['ucx_list_union_a',['../list_8h.html#a65b4355536f4ebc4130211b46469f4c1',1,'list.c']]], + ['ucx_5flogger_5fdebug',['ucx_logger_debug',['../logging_8h.html#a2936402799892db5138e5f1f8c25db0c',1,'ucx_logger_debug(): logging.h'],['../logging_8h.html#acff01d1ef919ea997cfce755fc1b83d8',1,'UCX_LOGGER_DEBUG(): logging.h']]], + ['ucx_5flogger_5ferror',['ucx_logger_error',['../logging_8h.html#a6a9e472e14d6768e59d96d245e065397',1,'ucx_logger_error(): logging.h'],['../logging_8h.html#aa254c07fe3a907613e2256a318d5c9a8',1,'UCX_LOGGER_ERROR(): logging.h']]], + ['ucx_5flogger_5ffree',['ucx_logger_free',['../logging_8h.html#ac4697b784e01ec990d2acea192e21658',1,'logging.c']]], + ['ucx_5flogger_5finfo',['UCX_LOGGER_INFO',['../logging_8h.html#a4b0178bf60a6129373ffc59114ca4c9b',1,'UCX_LOGGER_INFO(): logging.h'],['../logging_8h.html#a98464d8d51376ce2716dcc4eca00d5da',1,'ucx_logger_info(): logging.h']]], + ['ucx_5flogger_5flevel',['UCX_LOGGER_LEVEL',['../logging_8h.html#aee18bc20e58ffb69910121512c350839',1,'logging.h']]], + ['ucx_5flogger_5flog',['ucx_logger_log',['../logging_8h.html#aa0245325031d95799b28def177fd14ec',1,'logging.h']]], + ['ucx_5flogger_5flogf',['ucx_logger_logf',['../logging_8h.html#ac337e5d02ebea565012d4c11bd643801',1,'logging.c']]], + ['ucx_5flogger_5fnew',['ucx_logger_new',['../logging_8h.html#ac560f8517d2172794c9d2691735ec48c',1,'logging.c']]], + ['ucx_5flogger_5fregister_5flevel',['ucx_logger_register_level',['../logging_8h.html#a5cffc19502c4c90bfb3bd3bbcd18170a',1,'logging.h']]], + ['ucx_5flogger_5fsource',['UCX_LOGGER_SOURCE',['../logging_8h.html#a0e0d72b12616c1e49ff8834eaf4cb8a2',1,'logging.h']]], + ['ucx_5flogger_5ftimestamp',['UCX_LOGGER_TIMESTAMP',['../logging_8h.html#a38607008268b4f776ee500fb95d2e823',1,'logging.h']]], + ['ucx_5flogger_5ftrace',['UCX_LOGGER_TRACE',['../logging_8h.html#a55b88d1fec7036d841b3ddd6195c5586',1,'UCX_LOGGER_TRACE(): logging.h'],['../logging_8h.html#a3031b7ff13f4cfae9c2916543be2877c',1,'ucx_logger_trace(): logging.h']]], + ['ucx_5flogger_5fwarn',['UCX_LOGGER_WARN',['../logging_8h.html#abd01ca11486226ba34e8f7028d9fffba',1,'UCX_LOGGER_WARN(): logging.h'],['../logging_8h.html#aca7bd861b646892813fd7310c0aa69af',1,'ucx_logger_warn(): logging.h']]], + ['ucx_5fmap_5fclear',['ucx_map_clear',['../map_8h.html#a285e90e40681c6d9631c935dda0967f2',1,'map.c']]], + ['ucx_5fmap_5fclone',['ucx_map_clone',['../map_8h.html#a62c6c30cbb0d824ba710f5030ff9a4e4',1,'map.c']]], + ['ucx_5fmap_5fclone_5fa',['ucx_map_clone_a',['../map_8h.html#a9aea9103703d5c168420bb6bf85549ea',1,'map.c']]], + ['ucx_5fmap_5fcopy',['ucx_map_copy',['../map_8h.html#adfeb2d61003fd2896bcfdc9a57f36425',1,'map.c']]], + ['ucx_5fmap_5fcstr_5fget',['ucx_map_cstr_get',['../map_8h.html#a64e1fb55498fa502dd2ed8ed69062cdd',1,'map.h']]], + ['ucx_5fmap_5fcstr_5fput',['ucx_map_cstr_put',['../map_8h.html#ad9356b01425b934ab237b52339ac0cc3',1,'map.h']]], + ['ucx_5fmap_5fcstr_5fremove',['ucx_map_cstr_remove',['../map_8h.html#a9c4405a5a75ecf64e2ef3d0c6501a9fe',1,'map.h']]], + ['ucx_5fmap_5fdifference',['ucx_map_difference',['../map_8h.html#a774fcff87d1e58b6c5af77dd19a8c3dc',1,'map.c']]], + ['ucx_5fmap_5fdifference_5fa',['ucx_map_difference_a',['../map_8h.html#ad0ba103494247d798ac3037c50fc8831',1,'map.c']]], + ['ucx_5fmap_5fforeach',['UCX_MAP_FOREACH',['../map_8h.html#a940896c4aa1b13e54c55c04c3efc186b',1,'map.h']]], + ['ucx_5fmap_5ffree',['ucx_map_free',['../map_8h.html#abe3d9688e4224bf7bb962abf25ff8c2e',1,'map.c']]], + ['ucx_5fmap_5ffree_5fcontent',['ucx_map_free_content',['../map_8h.html#a750f3d9d83e2f3788a14c17a9d160618',1,'map.c']]], + ['ucx_5fmap_5fget',['ucx_map_get',['../map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6',1,'map.c']]], + ['ucx_5fmap_5fint_5fget',['ucx_map_int_get',['../map_8h.html#aa1681bd2178553cd092fd24c4d681d3c',1,'map.h']]], + ['ucx_5fmap_5fint_5fput',['ucx_map_int_put',['../map_8h.html#aaa30af79b4068c923895619e83f44367',1,'map.h']]], + ['ucx_5fmap_5fint_5fremove',['ucx_map_int_remove',['../map_8h.html#aa767958b5468737755c09f7185b1770c',1,'map.h']]], + ['ucx_5fmap_5fintersection',['ucx_map_intersection',['../map_8h.html#aa594d7a5afebc3bed6bb265348cf6b0d',1,'map.c']]], + ['ucx_5fmap_5fintersection_5fa',['ucx_map_intersection_a',['../map_8h.html#a169e0470a20484dd76425fdf77e3651e',1,'map.c']]], + ['ucx_5fmap_5fiter_5fnext',['ucx_map_iter_next',['../map_8h.html#aceb8675abf44860b4bbc301bbada5b91',1,'map.c']]], + ['ucx_5fmap_5fiterator',['ucx_map_iterator',['../map_8h.html#a9150e9c64fdf4dfcc2cad106b91aa110',1,'map.c']]], + ['ucx_5fmap_5fnew',['ucx_map_new',['../map_8h.html#a79f31de8b93814493759dbc8b940cf0c',1,'map.c']]], + ['ucx_5fmap_5fnew_5fa',['ucx_map_new_a',['../map_8h.html#aed508a94c66cc15372503c64b70eb03e',1,'map.c']]], + ['ucx_5fmap_5fput',['ucx_map_put',['../map_8h.html#ac04a08b604217070254d4c58f0e82498',1,'map.c']]], + ['ucx_5fmap_5frehash',['ucx_map_rehash',['../map_8h.html#a174bce9fad554dd92b8da354e0d32512',1,'map.c']]], + ['ucx_5fmap_5fremove',['ucx_map_remove',['../map_8h.html#a17248a4888eb8f9ae18be522d64632aa',1,'map.c']]], + ['ucx_5fmap_5fsstr_5fget',['ucx_map_sstr_get',['../map_8h.html#a14d385f6b7f371f0507861cabd2eab4e',1,'map.h']]], + ['ucx_5fmap_5fsstr_5fput',['ucx_map_sstr_put',['../map_8h.html#ac26a8615bfc8f47ee9eaceb47645f98e',1,'map.h']]], + ['ucx_5fmap_5fsstr_5fremove',['ucx_map_sstr_remove',['../map_8h.html#a48700ea86fadb9ea54d13010f9124df2',1,'map.h']]], + ['ucx_5fmap_5funion',['ucx_map_union',['../map_8h.html#a3f65978c481af7f637cad021d93522d5',1,'map.c']]], + ['ucx_5fmap_5funion_5fa',['ucx_map_union_a',['../map_8h.html#ab6370c3fa8113fdad593ce4b0460c9c6',1,'map.c']]], + ['ucx_5fmemchunk',['ucx_memchunk',['../structucx__memchunk.html',1,'']]], + ['ucx_5fmemcpy',['ucx_memcpy',['../utils_8h.html#ab2e184e6a744941aab6b8058116baf30',1,'utils.c']]], + ['ucx_5fmempool_5fcalloc',['ucx_mempool_calloc',['../mempool_8h.html#a4b9142011824ae24f00fabe128417d69',1,'mempool.c']]], + ['ucx_5fmempool_5fchcap',['ucx_mempool_chcap',['../mempool_8h.html#aaf75b5016098723a9280531ccc3a6d77',1,'mempool.c']]], + ['ucx_5fmempool_5fdestroy',['ucx_mempool_destroy',['../mempool_8h.html#af096378da7e9bfbed3088497cf4c15bf',1,'mempool.c']]], + ['ucx_5fmempool_5ffree',['ucx_mempool_free',['../mempool_8h.html#aefa26e3015f5aefadbfc74221bd246ac',1,'mempool.c']]], + ['ucx_5fmempool_5fmalloc',['ucx_mempool_malloc',['../mempool_8h.html#a2ae492b8f2878ccc9837ac213dced11e',1,'mempool.c']]], + ['ucx_5fmempool_5fnew',['ucx_mempool_new',['../mempool_8h.html#ad71cb8c3b6fdb30360376a8b372ef22a',1,'mempool.c']]], + ['ucx_5fmempool_5fnew_5fdefault',['ucx_mempool_new_default',['../mempool_8h.html#a49f7bd1da5ac201d0cf54dc0f0d82dd2',1,'mempool.h']]], + ['ucx_5fmempool_5frealloc',['ucx_mempool_realloc',['../mempool_8h.html#a660ef42520ed6737c2e77aae18e3a7a4',1,'mempool.c']]], + ['ucx_5fmempool_5freg_5fdestr',['ucx_mempool_reg_destr',['../mempool_8h.html#af47b6b7c40f8f263dc28cc9a4e77b27c',1,'mempool.c']]], + ['ucx_5fmempool_5fset_5fdestr',['ucx_mempool_set_destr',['../mempool_8h.html#adb788e7ec24cd7dbdea6381539c549f2',1,'mempool.c']]], + ['ucx_5fproperties2map',['ucx_properties2map',['../properties_8h.html#a5c7ff8bc3139960a3f3dc92072b742f3',1,'properties.c']]], + ['ucx_5fproperties_5ffill',['ucx_properties_fill',['../properties_8h.html#aaf8de121764a4d22c763ff2ab41f3a4d',1,'properties.c']]], + ['ucx_5fproperties_5ffree',['ucx_properties_free',['../properties_8h.html#a38a2fe7bb2986bd87c7e69356ab05c05',1,'properties.c']]], + ['ucx_5fproperties_5fload',['ucx_properties_load',['../properties_8h.html#ae1b600f839a6b2278b68fc314981a8a3',1,'properties.c']]], + ['ucx_5fproperties_5fnew',['ucx_properties_new',['../properties_8h.html#a44d9dd12cab3aaa0084f1c8b89405796',1,'properties.c']]], + ['ucx_5fproperties_5fnext',['ucx_properties_next',['../properties_8h.html#a7e03bc573d45d48c538cd721e810d33c',1,'properties.c']]], + ['ucx_5fproperties_5fstore',['ucx_properties_store',['../properties_8h.html#a63c0c1b7648e675b21a1788917ff36fb',1,'properties.c']]], + ['ucx_5fregdestr',['ucx_regdestr',['../structucx__regdestr.html',1,'']]], + ['ucx_5fsc2sc',['ucx_sc2sc',['../string_8h.html#a69d5e3eeec783cc43314df71248768f5',1,'string.c']]], + ['ucx_5fsprintf',['ucx_sprintf',['../utils_8h.html#af9f333b66ecd639c347c7235f4992e2e',1,'utils.h']]], + ['ucx_5fss2c_5fs',['ucx_ss2c_s',['../string_8h.html#aedeb5d7bddda54116101a8d68af8c56d',1,'string.h']]], + ['ucx_5fss2sc',['ucx_ss2sc',['../string_8h.html#a9ce5ad1b2aa2dbeba204d452c2e64359',1,'string.c']]], + ['ucx_5fstack_5favail',['ucx_stack_avail',['../stack_8h.html#a53cd2c7743dc8ad9cbd35ade0b4873e7',1,'stack.c']]], + ['ucx_5fstack_5fcalloc',['ucx_stack_calloc',['../stack_8h.html#afdc467524b5e19a9a777c6bc03e17174',1,'stack.c']]], + ['ucx_5fstack_5fdim',['ucx_stack_dim',['../stack_8h.html#a3b761343c6491222604341ebfa443226',1,'stack.h']]], + ['ucx_5fstack_5fempty',['ucx_stack_empty',['../stack_8h.html#a4f7239dbd6c032c56812e370b71c1985',1,'stack.h']]], + ['ucx_5fstack_5ffree',['ucx_stack_free',['../stack_8h.html#aabd55c14a3866b3782ba324f4d8b4c41',1,'stack.c']]], + ['ucx_5fstack_5finit',['ucx_stack_init',['../stack_8h.html#abaef685df4e7ef95cd7218984a0618fe',1,'stack.c']]], + ['ucx_5fstack_5fmalloc',['ucx_stack_malloc',['../stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac',1,'stack.c']]], + ['ucx_5fstack_5fmetadata',['ucx_stack_metadata',['../structucx__stack__metadata.html',1,'']]], + ['ucx_5fstack_5fpop',['ucx_stack_pop',['../stack_8h.html#a506b82374734ec476d086ddfb561174d',1,'stack.h']]], + ['ucx_5fstack_5fpopn',['ucx_stack_popn',['../stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81',1,'stack.c']]], + ['ucx_5fstack_5fpush',['ucx_stack_push',['../stack_8h.html#af85e6f77a8341beb6188f9ae1a8e9f92',1,'stack.c']]], + ['ucx_5fstack_5fpusharr',['ucx_stack_pusharr',['../stack_8h.html#a7bb138979191bba138e76ea37488fae2',1,'stack.c']]], + ['ucx_5fstack_5frealloc',['ucx_stack_realloc',['../stack_8h.html#a0c678f96f6fabab49b2b034a1fe91c3a',1,'stack.c']]], + ['ucx_5fstack_5ftopsize',['ucx_stack_topsize',['../stack_8h.html#a030197051a803e87d5eeac5adb80b15a',1,'stack.h']]], + ['ucx_5fstrcpy',['ucx_strcpy',['../utils_8h.html#adeb6e8d0a53a829207cfa0a979d01fff',1,'utils.c']]], + ['ucx_5fstream_5fbcopy',['ucx_stream_bcopy',['../utils_8h.html#a6003a1750a66234169bd1f8cc84b297b',1,'utils.h']]], + ['ucx_5fstream_5fbncopy',['ucx_stream_bncopy',['../utils_8h.html#a114ee7f7da62656ffd35e2dc23394201',1,'utils.c']]], + ['ucx_5fstream_5fcopy',['ucx_stream_copy',['../utils_8h.html#a41ca1344f781c0d3bf7a414a6e811392',1,'utils.h']]], + ['ucx_5fstream_5fcopy_5fbufsize',['UCX_STREAM_COPY_BUFSIZE',['../utils_8h.html#a23efd74fa5f701d4cf26ccbfd138a439',1,'utils.h']]], + ['ucx_5fstream_5fncopy',['ucx_stream_ncopy',['../utils_8h.html#add13f39a8af440b4f7e6f74339eaada2',1,'utils.h']]], + ['ucx_5fszmul',['ucx_szmul',['../ucx_8h.html#a0b5ed6c1a0b15356f4f948acfd32a4cc',1,'ucx.h']]], + ['ucx_5fszmul_5fimpl',['ucx_szmul_impl',['../ucx_8h.html#a6637171cc0ec097b297f731a3036dd3b',1,'ucx.c']]], + ['ucx_5ftest',['UCX_TEST',['../test_8h.html#a66cfb29c329fc9eaef071f2449836659',1,'test.h']]], + ['ucx_5ftest_5fassert',['UCX_TEST_ASSERT',['../test_8h.html#a08f477cd12fc3fe741a92493e5df58a9',1,'test.h']]], + ['ucx_5ftest_5fbegin',['UCX_TEST_BEGIN',['../test_8h.html#a0547b8d4f3bcdb0633fdd8925e8aa5d4',1,'test.h']]], + ['ucx_5ftest_5fcall_5fsubroutine',['UCX_TEST_CALL_SUBROUTINE',['../test_8h.html#a0efbab91c54f5237a2ab207f48cf0e51',1,'test.h']]], + ['ucx_5ftest_5fend',['UCX_TEST_END',['../test_8h.html#a86e64857c04f0447f8b16fb9c2b3b639',1,'test.h']]], + ['ucx_5ftest_5fregister',['ucx_test_register',['../test_8h.html#a8dfabc42f183d3a4d79379a5d17bf67d',1,'test.c']]], + ['ucx_5ftest_5frun',['ucx_test_run',['../test_8h.html#a3721458deeecb43aa322428f007714c3',1,'test.c']]], + ['ucx_5ftest_5fsubroutine',['UCX_TEST_SUBROUTINE',['../test_8h.html#ae073cf5ead22cb27d662da048e16f44a',1,'test.h']]], + ['ucx_5ftest_5fsuite_5ffree',['ucx_test_suite_free',['../test_8h.html#a4a6ac61a6f72722273f8eaa7a343edde',1,'test.c']]], + ['ucx_5ftest_5fsuite_5fnew',['ucx_test_suite_new',['../test_8h.html#a531f0df90363e0befbe900878f65f09e',1,'test.c']]], + ['ucx_5fvasprintf',['ucx_vasprintf',['../utils_8h.html#a3ea1dfb856c741f3e8ec6bfdc9ad427e',1,'utils.c']]], + ['ucx_5fversion',['UCX_VERSION',['../ucx_8h.html#af12001920ca2fc1405615684e4dea284',1,'ucx.h']]], + ['ucx_5fversion_5fmajor',['UCX_VERSION_MAJOR',['../ucx_8h.html#aa57e5dd22d42387d748cc16777df1383',1,'ucx.h']]], + ['ucx_5fversion_5fminor',['UCX_VERSION_MINOR',['../ucx_8h.html#a9ac10d6353e23d4615a87fc737c65eb0',1,'ucx.h']]], + ['ucx_5fvfprintf',['ucx_vfprintf',['../utils_8h.html#a4907967beb92c3ae351dd239abbb6927',1,'utils.c']]], + ['ucxallocator',['UcxAllocator',['../structUcxAllocator.html',1,'']]], + ['ucxarray',['UcxArray',['../structUcxArray.html',1,'']]], + ['ucxavlnode',['UcxAVLNode',['../structUcxAVLNode.html',1,'UcxAVLNode'],['../avl_8h.html#a08ba2496c2316df58548c3cc29712add',1,'UcxAVLNode(): avl.h']]], + ['ucxavltree',['UcxAVLTree',['../structUcxAVLTree.html',1,'']]], + ['ucxbuffer',['UcxBuffer',['../structUcxBuffer.html',1,'']]], + ['ucxkey',['UcxKey',['../structUcxKey.html',1,'UcxKey'],['../map_8h.html#ad63828bb23123fc01a5315a2bac3b142',1,'UcxKey(): map.h']]], + ['ucxlist',['UcxList',['../structUcxList.html',1,'UcxList'],['../list_8h.html#aa6f89f91c1081c9a7c6866c298f497a2',1,'UcxList(): list.h']]], + ['ucxlogger',['UcxLogger',['../structUcxLogger.html',1,'']]], + ['ucxmap',['UcxMap',['../structUcxMap.html',1,'UcxMap'],['../map_8h.html#a18e21948725b2da68c35da587a722033',1,'UcxMap(): map.h']]], + ['ucxmapelement',['UcxMapElement',['../structUcxMapElement.html',1,'UcxMapElement'],['../map_8h.html#ad7d7a910a32113eb93eae11c3dc97b4b',1,'UcxMapElement(): map.h']]], + ['ucxmapiterator',['UcxMapIterator',['../structUcxMapIterator.html',1,'UcxMapIterator'],['../map_8h.html#ae36aff5f645948c54f51578b11fd87fb',1,'UcxMapIterator(): map.h']]], + ['ucxmapkey',['UcxMapKey',['../structUcxMapKey.html',1,'']]], + ['ucxmempool',['UcxMempool',['../structUcxMempool.html',1,'']]], + ['ucxproperties',['UcxProperties',['../structUcxProperties.html',1,'']]], + ['ucxstack',['UcxStack',['../structUcxStack.html',1,'']]], + ['ucxtest',['UcxTest',['../test_8h.html#ae906817354c010b83c2784260cce7a1c',1,'test.h']]], + ['ucxtestlist',['UcxTestList',['../structUcxTestList.html',1,'UcxTestList'],['../test_8h.html#a8048c50ae73ea690b776edfd63bd6a5d',1,'UcxTestList(): test.h']]], + ['ucxtestsuite',['UcxTestSuite',['../structUcxTestSuite.html',1,'UcxTestSuite'],['../test_8h.html#a52115d1d0f1c4a565ed6ef7c1bfd0363',1,'UcxTestSuite(): test.h']]], + ['userdata',['userdata',['../structUcxAVLTree.html#ae92a3bfad3fe33c8dcbdad85112f83fd',1,'UcxAVLTree']]], + ['utils_2eh',['utils.h',['../utils_8h.html',1,'']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_12.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_12.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_12.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_12.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['value',['value',['../structUcxAVLNode.html#a302501b8c04c3fde668fe72249871258',1,'UcxAVLNode']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_13.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_13.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_13.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_13.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,5 @@ +var searchData= +[ + ['write_5ffunc',['write_func',['../ucx_8h.html#a989b3f0fa4d307d278378fde435641ed',1,'ucx.h']]], + ['writer',['writer',['../structUcxLogger.html#ada13bba090a9dc4f8d6cd9be73c60930',1,'UcxLogger']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_2.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_2.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_2.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_2.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,6 @@ +var searchData= +[ + ['buffer',['buffer',['../structUcxProperties.html#a6bb4d29686df41a0f42641ee15232bfd',1,'UcxProperties']]], + ['buffer_2eh',['buffer.h',['../buffer_8h.html',1,'']]], + ['buflen',['buflen',['../structUcxProperties.html#a4e7524434525267e29f493a25dcca6b5',1,'UcxProperties']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_3.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_3.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_3.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_3.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,14 @@ +var searchData= +[ + ['c',['c',['../structucx__memchunk.html#ab86550503e5f019bfa61a1e91f1c40da',1,'ucx_memchunk']]], + ['calloc',['calloc',['../structUcxAllocator.html#ab94ec1cba45cc4e7d81e1588a11cbb62',1,'UcxAllocator']]], + ['capacity',['capacity',['../structUcxArray.html#a7ed074887908e45bde7e1fbc67b31c18',1,'UcxArray::capacity()'],['../structUcxBuffer.html#a385661894f3cee9c549bfe07a8b316bf',1,'UcxBuffer::capacity()']]], + ['cmp_5ffunc',['cmp_func',['../ucx_8h.html#afe5e2d5dbf34778e0e97852051570791',1,'ucx.h']]], + ['cmpfunc',['cmpfunc',['../structUcxAVLTree.html#a87aff25cb726cb9eb88eb815a10d1004',1,'UcxAVLTree']]], + ['comment1',['comment1',['../structUcxProperties.html#afaa2e6a289fa6949b7b01df35fa5def8',1,'UcxProperties']]], + ['comment2',['comment2',['../structUcxProperties.html#a9ea7ecb414ca8bc7bef62cdd19cc6363',1,'UcxProperties']]], + ['comment3',['comment3',['../structUcxProperties.html#a5f3e561e32bac03e36a191a6940cca92',1,'UcxProperties']]], + ['copy_5ffunc',['copy_func',['../ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967',1,'ucx.h']]], + ['count',['count',['../structUcxMap.html#a14e9163f71f6c014dfa2103de70ae9cd',1,'UcxMap']]], + ['cur',['cur',['../structUcxMapIterator.html#af1fc40f899f37280adb5b85acf6e742f',1,'UcxMapIterator']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_4.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_4.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_4.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_4.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,8 @@ +var searchData= +[ + ['data',['data',['../structUcxArray.html#a04d2b03d0a45af1fab19b4216602075a',1,'UcxArray::data()'],['../structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2',1,'UcxList::data()'],['../structUcxKey.html#a6176109f25b34f3fa92bcfbc8ae7a88c',1,'UcxKey::data()'],['../structUcxMapKey.html#ab71d1841e4f538628c00f782267fb6d5',1,'UcxMapKey::data()'],['../structUcxMapElement.html#abbd7f3bf5beef370f702d2d5bb07733c',1,'UcxMapElement::data()'],['../structUcxMempool.html#ae98c1b0150bb119ee0a8506a6f310d6e',1,'UcxMempool::data()']]], + ['dateformat',['dateformat',['../structUcxLogger.html#a086f75df0f6c81ec491f25c0a4d9262b',1,'UcxLogger']]], + ['delimiter',['delimiter',['../structUcxProperties.html#af6adb3f69616cf9d2bb5ea7b4d837ca5',1,'UcxProperties']]], + ['destructor',['destructor',['../structucx__memchunk.html#ac7b5e3fda47b917d6fb2a1d7ea28447b',1,'ucx_memchunk::destructor()'],['../structucx__regdestr.html#acea2a3bb66909aa800a931ac8b0cce56',1,'ucx_regdestr::destructor()']]], + ['distance_5ffunc',['distance_func',['../ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9',1,'ucx.h']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_5.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_5.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_5.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_5.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,5 @@ +var searchData= +[ + ['elemsize',['elemsize',['../structUcxArray.html#ac4e9ecdf8a8d010644f6e44dfef8190f',1,'UcxArray']]], + ['error',['error',['../structUcxProperties.html#a34f71a6ab6dcb6892e3b4eb802e75bff',1,'UcxProperties']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_6.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_6.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_6.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_6.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,6 @@ +var searchData= +[ + ['failure',['failure',['../structUcxTestSuite.html#abfd240541d1e956e49cde0ac36286951',1,'UcxTestSuite']]], + ['flags',['flags',['../structUcxBuffer.html#ac642e07b0a03be5aac48eb4aa5bec2f7',1,'UcxBuffer']]], + ['free',['free',['../structUcxAllocator.html#aecce1840378ed53f1002190f4f87026f',1,'UcxAllocator']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_7.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_7.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_7.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_7.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,5 @@ +var searchData= +[ + ['hash',['hash',['../structUcxKey.html#aac9d372ac34a4cbd8459e2b04e505752',1,'UcxKey::hash()'],['../structUcxMapKey.html#a34c1f8fec98174583944fffd30e7c913',1,'UcxMapKey::hash()']]], + ['height',['height',['../structUcxAVLNode.html#af129fd32863a7c35e82c5cd9d11dc95a',1,'UcxAVLNode']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_8.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_8.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_8.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_8.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['index',['index',['../structUcxMapIterator.html#ac2376545c8816dd6895de4995e558c65',1,'UcxMapIterator']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_9.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_9.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_9.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_9.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['key',['key',['../structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6',1,'UcxAVLNode::key()'],['../structUcxMapElement.html#aa446141b708e106e2c8de1303318187c',1,'UcxMapElement::key()']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_a.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_a.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_a.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_a.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,10 @@ +var searchData= +[ + ['left',['left',['../structUcxAVLNode.html#ad3a1c733f2c1cc81ac527f846fc24b9c',1,'UcxAVLNode']]], + ['len',['len',['../structUcxKey.html#abef01de37f355688f2ac797d2c280683',1,'UcxKey::len()'],['../structUcxMapKey.html#a504d46caa45c79cd87ff8cd835654270',1,'UcxMapKey::len()']]], + ['length',['length',['../structsstr__t.html#a5cf571708cdff92e45f08458f2b98229',1,'sstr_t::length()'],['../structscstr__t.html#aaa0229f64f1057b6f65adededaa5a172',1,'scstr_t::length()']]], + ['level',['level',['../structUcxLogger.html#a2e0ee94c25b2307096c7970280d189cd',1,'UcxLogger']]], + ['levels',['levels',['../structUcxLogger.html#a187129f7bc6e5064b3d92a5f1217f396',1,'UcxLogger']]], + ['list_2eh',['list.h',['../list_8h.html',1,'']]], + ['logging_2eh',['logging.h',['../logging_8h.html',1,'']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_b.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_b.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_b.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_b.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,8 @@ +var searchData= +[ + ['malloc',['malloc',['../structUcxAllocator.html#a013376172be39ed54f77c4be6898845a',1,'UcxAllocator']]], + ['map',['map',['../structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790',1,'UcxMap::map()'],['../structUcxMapIterator.html#af88d6e22547d09fe1d665dd650dcdb95',1,'UcxMapIterator::map()']]], + ['map_2eh',['map.h',['../map_8h.html',1,'']]], + ['mask',['mask',['../structUcxLogger.html#a1de0db2e02dcf03366268f6943f8b97c',1,'UcxLogger']]], + ['mempool_2eh',['mempool.h',['../mempool_8h.html',1,'']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_c.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_c.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_c.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_c.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,5 @@ +var searchData= +[ + ['ndata',['ndata',['../structUcxMempool.html#aa3a73ab231e1bc207d526f46f1c1e23a',1,'UcxMempool']]], + ['next',['next',['../structUcxList.html#a82a1818f1abf765b026fa91478569a8f',1,'UcxList::next()'],['../structUcxMapElement.html#a99fe8188b0889201d70ff5f922deef51',1,'UcxMapElement::next()'],['../structUcxTestList.html#aeebb80ff75d9f6f82ab6dc2641a3c74e',1,'UcxTestList::next()']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_d.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_d.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_d.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_d.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,10 @@ +var searchData= +[ + ['parent',['parent',['../structUcxAVLNode.html#afc4e3b4f452aa2d91cabb2135b9d42f7',1,'UcxAVLNode']]], + ['pool',['pool',['../structUcxAllocator.html#a1b78012998d1c28be86dc595f8f0aac9',1,'UcxAllocator']]], + ['pos',['pos',['../structUcxBuffer.html#a7a64288f002cf62b492e2ea49c79615c',1,'UcxBuffer::pos()'],['../structUcxProperties.html#addd36ac8e5e42241c0a57453633970db',1,'UcxProperties::pos()']]], + ['prev',['prev',['../structUcxList.html#a0f1fddce9088b9c1414745d0b1b5c08b',1,'UcxList::prev()'],['../structucx__stack__metadata.html#ad46d2e8e5b0acf05f2def41d451c5579',1,'ucx_stack_metadata::prev()']]], + ['prisstr',['PRIsstr',['../string_8h.html#a7d5bc48708405a28b23667e32dfcecae',1,'string.h']]], + ['properties_2eh',['properties.h',['../properties_8h.html',1,'']]], + ['ptr',['ptr',['../structucx__regdestr.html#aac0e9ec8df4aab08728b4f8292b5f5e7',1,'ucx_regdestr::ptr()'],['../structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0',1,'sstr_t::ptr()'],['../structscstr__t.html#a305fd48934b474a9bf4a40869030e391',1,'scstr_t::ptr()']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_e.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_e.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_e.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_e.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,7 @@ +var searchData= +[ + ['read_5ffunc',['read_func',['../ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5',1,'ucx.h']]], + ['realloc',['realloc',['../structUcxAllocator.html#a3550e3847f31d9e9ce3ffcb0d3440c15',1,'UcxAllocator']]], + ['right',['right',['../structUcxAVLNode.html#a7cbaa31dba8c7a89f4f8f7905f6fd238',1,'UcxAVLNode']]], + ['root',['root',['../structUcxAVLTree.html#a393a8fc99eb2c290d3cb67170081d742',1,'UcxAVLTree']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_f.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_f.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/all_f.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/all_f.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,67 @@ +var searchData= +[ + ['s',['S',['../string_8h.html#a8fa17c8cf4c36df48f4108c36da8573e',1,'string.h']]], + ['sc',['SC',['../string_8h.html#a7d261dd0bc358c957a368bc058c1ce53',1,'string.h']]], + ['scstr',['SCSTR',['../string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed',1,'SCSTR(): string.h'],['../string_8h.html#a2b1d6f1eca1c1549f37107b9c026c5a6',1,'scstr(const char *cstring): string.c']]], + ['scstr_5ft',['scstr_t',['../structscstr__t.html',1,'']]], + ['scstrcasecmp',['scstrcasecmp',['../string_8h.html#aca8142fb823d253054e17c17cfca05e0',1,'string.c']]], + ['scstrcaseprefix',['scstrcaseprefix',['../string_8h.html#a3718ef4aa1e86cdb26bda2f07fb585df',1,'string.c']]], + ['scstrcasesuffix',['scstrcasesuffix',['../string_8h.html#a6edb4b85f2b9efe79db7ffe6eccd7bc3',1,'string.c']]], + ['scstrcat',['scstrcat',['../string_8h.html#a7376842c19e954b49215da81ef76ac0c',1,'string.c']]], + ['scstrcat_5fa',['scstrcat_a',['../string_8h.html#abacce4cbd6f70fcb6453904ef08b02e9',1,'string.c']]], + ['scstrchr',['scstrchr',['../string_8h.html#a5836d6a7a744791c35e5c17bdc394a87',1,'string.c']]], + ['scstrcmp',['scstrcmp',['../string_8h.html#af35272a8e5408c88ed3e25a3a98f0a82',1,'string.c']]], + ['scstrdup',['scstrdup',['../string_8h.html#a97dccce03af419596dbdd592ca46a164',1,'string.c']]], + ['scstrdup_5fa',['scstrdup_a',['../string_8h.html#a8fe58921f51eb1fde038472377e63014',1,'string.c']]], + ['scstrlower',['scstrlower',['../string_8h.html#abccf198bea3186ff2abb080cc88dcae6',1,'string.c']]], + ['scstrlower_5fa',['scstrlower_a',['../string_8h.html#a3cf1e557df7ab58d03c78832c4060276',1,'string.c']]], + ['scstrn',['scstrn',['../string_8h.html#ae594f6e222ea394cef6a26c0dfad000d',1,'string.c']]], + ['scstrnlen',['scstrnlen',['../string_8h.html#ac1b000030d6d197eec48c15a182055d5',1,'string.c']]], + ['scstrprefix',['scstrprefix',['../string_8h.html#a599ddc2f88dd1df68b72eefd91347393',1,'string.c']]], + ['scstrrchr',['scstrrchr',['../string_8h.html#ae389835b97cd9382e7d6a6a075323376',1,'string.c']]], + ['scstrscstr',['scstrscstr',['../string_8h.html#a54f256c3abe811c52d58b4ff1b23f051',1,'string.c']]], + ['scstrsplit',['scstrsplit',['../string_8h.html#ae71cac352b00230848bde358f0fb05ea',1,'string.c']]], + ['scstrsplit_5fa',['scstrsplit_a',['../string_8h.html#a52906455ae530c9cdc6812c8e6d9bdef',1,'string.c']]], + ['scstrsstr',['scstrsstr',['../string_8h.html#aa4362cb36c6629f9d8484739fd827748',1,'string.c']]], + ['scstrsubs',['scstrsubs',['../string_8h.html#a9a6c8d8db0dda0037c3c852cce1a5060',1,'string.c']]], + ['scstrsubsl',['scstrsubsl',['../string_8h.html#ad50f0f67b906fad0744f46bcb51e144b',1,'string.c']]], + ['scstrsuffix',['scstrsuffix',['../string_8h.html#a1f0ae316a2afe85d5b4655e6ece6721a',1,'string.c']]], + ['scstrtrim',['scstrtrim',['../string_8h.html#ad374b16eb1be8b48019debad9b9f268c',1,'string.c']]], + ['scstrupper',['scstrupper',['../string_8h.html#af3dd09ec9d11162fe0075f4e60f41240',1,'string.c']]], + ['scstrupper_5fa',['scstrupper_a',['../string_8h.html#aea94613eb74668cc05d365803d32bfad',1,'string.c']]], + ['sfmt',['SFMT',['../string_8h.html#a23ed51e87385886bb65e8cd19c839362',1,'string.h']]], + ['size',['size',['../structUcxArray.html#a20c11f2c9048cda80062842b7c094e20',1,'UcxArray::size()'],['../structUcxBuffer.html#aec0aea8325394951d5ad4a9fbb8e1ac7',1,'UcxBuffer::size()'],['../structUcxMap.html#afe120846b26d99580a7ff1276464e838',1,'UcxMap::size()'],['../structUcxMempool.html#a304729986f2894971d0469e71e196bf0',1,'UcxMempool::size()'],['../structUcxStack.html#a4df86b1917bfc3bbf760220870638143',1,'UcxStack::size()'],['../structucx__stack__metadata.html#ae2a2848b721cfa44a7e963484c5e4b28',1,'ucx_stack_metadata::size()']]], + ['space',['space',['../structUcxBuffer.html#a1a5076e85acb84b715a53bc0f37fb721',1,'UcxBuffer::space()'],['../structUcxStack.html#af64d528744bf3a47fec87d2e45d2992f',1,'UcxStack::space()']]], + ['sstr',['sstr',['../string_8h.html#a539eb7059251a051ee5d179526a23e9a',1,'string.c']]], + ['sstr_5ft',['sstr_t',['../structsstr__t.html',1,'']]], + ['sstrcasecmp',['sstrcasecmp',['../string_8h.html#a81b0f6df794152c2038703d4e9d0ad59',1,'string.h']]], + ['sstrcaseprefix',['sstrcaseprefix',['../string_8h.html#acd3dc64e90db9b4046e14f115a815ff4',1,'string.h']]], + ['sstrcasesuffix',['sstrcasesuffix',['../string_8h.html#a57eabd4862d531dd685bbf2feb8468bf',1,'string.h']]], + ['sstrcat',['sstrcat',['../string_8h.html#a6af8a4c347c7fdb5980d4c4803be2759',1,'string.h']]], + ['sstrcat_5fa',['sstrcat_a',['../string_8h.html#a6068d460f9bc05962666a917d26568b3',1,'string.h']]], + ['sstrchr',['sstrchr',['../string_8h.html#af80898a0b75955eb2579298c3ae2c481',1,'string.c']]], + ['sstrcmp',['sstrcmp',['../string_8h.html#a7ae7156c8de57454ca38d306100b8160',1,'string.h']]], + ['sstrdup',['sstrdup',['../string_8h.html#accbfd2b459a028d7af9fb7df6f977d80',1,'string.h']]], + ['sstrdup_5fa',['sstrdup_a',['../string_8h.html#a8d098baada4ea9ad5d8b6343b5aec007',1,'string.h']]], + ['sstrlower',['sstrlower',['../string_8h.html#a89343ea3e719f00ee802b557db57b769',1,'string.h']]], + ['sstrlower_5fa',['sstrlower_a',['../string_8h.html#a4bb4742fe71115f493991d307cb22b23',1,'string.h']]], + ['sstrn',['sstrn',['../string_8h.html#a2744c38ac44abf3e01fa059056dcf36c',1,'string.c']]], + ['sstrnlen',['sstrnlen',['../string_8h.html#a33fa945acc5ac2ce962e5ef13cf1638c',1,'string.h']]], + ['sstrprefix',['sstrprefix',['../string_8h.html#a7d73b66256384b26927e787318fdefa2',1,'string.h']]], + ['sstrrchr',['sstrrchr',['../string_8h.html#adae3f59957ca328e1da5285cb8b02a72',1,'string.c']]], + ['sstrscstr',['sstrscstr',['../string_8h.html#aa696932213265e10f864678686f4ccde',1,'string.h']]], + ['sstrsplit',['sstrsplit',['../string_8h.html#aa929984004c3576bfafb95031aca8eb7',1,'string.h']]], + ['sstrsplit_5fa',['sstrsplit_a',['../string_8h.html#ac9f69fa3a17e26a3a5f9d985b5844601',1,'string.h']]], + ['sstrstr',['sstrstr',['../string_8h.html#a9d03be026afa9447c52bb34b9e3b895a',1,'string.h']]], + ['sstrsubs',['sstrsubs',['../string_8h.html#a5eb9e0e1f26cf7fbecc038cd90e8b258',1,'string.c']]], + ['sstrsubsl',['sstrsubsl',['../string_8h.html#a78925c91af54f23cebd20ff99ef4331a',1,'string.c']]], + ['sstrsuffix',['sstrsuffix',['../string_8h.html#ac6a5246f26be2e8a5f34d8995b7ec14e',1,'string.h']]], + ['sstrtrim',['sstrtrim',['../string_8h.html#ae2d6da564d3fce51f2e0cac580fdbc56',1,'string.c']]], + ['sstrupper',['sstrupper',['../string_8h.html#a084fe5a3a90d6fb6b15ecda03bb30824',1,'string.h']]], + ['sstrupper_5fa',['sstrupper_a',['../string_8h.html#a5f0dd83c0176b812fb428004b2877a34',1,'string.h']]], + ['st',['ST',['../string_8h.html#a9037956cca97a4e84b642f17f3d10378',1,'string.h']]], + ['stack_2eh',['stack.h',['../stack_8h.html',1,'']]], + ['stream',['stream',['../structUcxLogger.html#a33fddf4791e8d49e479ecc78bf5d1b9e',1,'UcxLogger']]], + ['string_2eh',['string.h',['../string_8h.html',1,'']]], + ['success',['success',['../structUcxTestSuite.html#a6cefa870a3c2e38d6ee682e38643dbbb',1,'UcxTestSuite']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/classes_0.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/classes_0.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/classes_0.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/classes_0.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,5 @@ +var searchData= +[ + ['scstr_5ft',['scstr_t',['../structscstr__t.html',1,'']]], + ['sstr_5ft',['sstr_t',['../structsstr__t.html',1,'']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/classes_1.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/classes_1.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/classes_1.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/classes_1.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,23 @@ +var searchData= +[ + ['ucx_5fmemchunk',['ucx_memchunk',['../structucx__memchunk.html',1,'']]], + ['ucx_5fregdestr',['ucx_regdestr',['../structucx__regdestr.html',1,'']]], + ['ucx_5fstack_5fmetadata',['ucx_stack_metadata',['../structucx__stack__metadata.html',1,'']]], + ['ucxallocator',['UcxAllocator',['../structUcxAllocator.html',1,'']]], + ['ucxarray',['UcxArray',['../structUcxArray.html',1,'']]], + ['ucxavlnode',['UcxAVLNode',['../structUcxAVLNode.html',1,'']]], + ['ucxavltree',['UcxAVLTree',['../structUcxAVLTree.html',1,'']]], + ['ucxbuffer',['UcxBuffer',['../structUcxBuffer.html',1,'']]], + ['ucxkey',['UcxKey',['../structUcxKey.html',1,'']]], + ['ucxlist',['UcxList',['../structUcxList.html',1,'']]], + ['ucxlogger',['UcxLogger',['../structUcxLogger.html',1,'']]], + ['ucxmap',['UcxMap',['../structUcxMap.html',1,'']]], + ['ucxmapelement',['UcxMapElement',['../structUcxMapElement.html',1,'']]], + ['ucxmapiterator',['UcxMapIterator',['../structUcxMapIterator.html',1,'']]], + ['ucxmapkey',['UcxMapKey',['../structUcxMapKey.html',1,'']]], + ['ucxmempool',['UcxMempool',['../structUcxMempool.html',1,'']]], + ['ucxproperties',['UcxProperties',['../structUcxProperties.html',1,'']]], + ['ucxstack',['UcxStack',['../structUcxStack.html',1,'']]], + ['ucxtestlist',['UcxTestList',['../structUcxTestList.html',1,'']]], + ['ucxtestsuite',['UcxTestSuite',['../structUcxTestSuite.html',1,'']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/close.png Binary file docs/api-2.1/search/close.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/defines_0.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/defines_0.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/defines_0.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/defines_0.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5f_5ffunction_5f_5f',['__FUNCTION__',['../test_8h.html#a828bb1dfda1afd67ca795075903d227d',1,'test.h']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/defines_1.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/defines_1.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/defines_1.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/defines_1.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,7 @@ +var searchData= +[ + ['alcalloc',['alcalloc',['../allocator_8h.html#a8d71470816f88f78cb9a9686c57e1b10',1,'allocator.h']]], + ['alfree',['alfree',['../allocator_8h.html#acd775785b54e97dc2b33a432c12c8fb2',1,'allocator.h']]], + ['almalloc',['almalloc',['../allocator_8h.html#ae1bc218fea8a35f4a3706f0beefcfb19',1,'allocator.h']]], + ['alrealloc',['alrealloc',['../allocator_8h.html#a029ee5c9bcbb3f873571553f788c5820',1,'allocator.h']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/defines_2.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/defines_2.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/defines_2.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/defines_2.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['prisstr',['PRIsstr',['../string_8h.html#a7d5bc48708405a28b23667e32dfcecae',1,'string.h']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/defines_3.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/defines_3.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/defines_3.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/defines_3.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,27 @@ +var searchData= +[ + ['s',['S',['../string_8h.html#a8fa17c8cf4c36df48f4108c36da8573e',1,'string.h']]], + ['sc',['SC',['../string_8h.html#a7d261dd0bc358c957a368bc058c1ce53',1,'string.h']]], + ['scstr',['SCSTR',['../string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed',1,'string.h']]], + ['sfmt',['SFMT',['../string_8h.html#a23ed51e87385886bb65e8cd19c839362',1,'string.h']]], + ['sstrcasecmp',['sstrcasecmp',['../string_8h.html#a81b0f6df794152c2038703d4e9d0ad59',1,'string.h']]], + ['sstrcaseprefix',['sstrcaseprefix',['../string_8h.html#acd3dc64e90db9b4046e14f115a815ff4',1,'string.h']]], + ['sstrcasesuffix',['sstrcasesuffix',['../string_8h.html#a57eabd4862d531dd685bbf2feb8468bf',1,'string.h']]], + ['sstrcat',['sstrcat',['../string_8h.html#a6af8a4c347c7fdb5980d4c4803be2759',1,'string.h']]], + ['sstrcat_5fa',['sstrcat_a',['../string_8h.html#a6068d460f9bc05962666a917d26568b3',1,'string.h']]], + ['sstrcmp',['sstrcmp',['../string_8h.html#a7ae7156c8de57454ca38d306100b8160',1,'string.h']]], + ['sstrdup',['sstrdup',['../string_8h.html#accbfd2b459a028d7af9fb7df6f977d80',1,'string.h']]], + ['sstrdup_5fa',['sstrdup_a',['../string_8h.html#a8d098baada4ea9ad5d8b6343b5aec007',1,'string.h']]], + ['sstrlower',['sstrlower',['../string_8h.html#a89343ea3e719f00ee802b557db57b769',1,'string.h']]], + ['sstrlower_5fa',['sstrlower_a',['../string_8h.html#a4bb4742fe71115f493991d307cb22b23',1,'string.h']]], + ['sstrnlen',['sstrnlen',['../string_8h.html#a33fa945acc5ac2ce962e5ef13cf1638c',1,'string.h']]], + ['sstrprefix',['sstrprefix',['../string_8h.html#a7d73b66256384b26927e787318fdefa2',1,'string.h']]], + ['sstrscstr',['sstrscstr',['../string_8h.html#aa696932213265e10f864678686f4ccde',1,'string.h']]], + ['sstrsplit',['sstrsplit',['../string_8h.html#aa929984004c3576bfafb95031aca8eb7',1,'string.h']]], + ['sstrsplit_5fa',['sstrsplit_a',['../string_8h.html#ac9f69fa3a17e26a3a5f9d985b5844601',1,'string.h']]], + ['sstrstr',['sstrstr',['../string_8h.html#a9d03be026afa9447c52bb34b9e3b895a',1,'string.h']]], + ['sstrsuffix',['sstrsuffix',['../string_8h.html#ac6a5246f26be2e8a5f34d8995b7ec14e',1,'string.h']]], + ['sstrupper',['sstrupper',['../string_8h.html#a084fe5a3a90d6fb6b15ecda03bb30824',1,'string.h']]], + ['sstrupper_5fa',['sstrupper_a',['../string_8h.html#a5f0dd83c0176b812fb428004b2877a34',1,'string.h']]], + ['st',['ST',['../string_8h.html#a9037956cca97a4e84b642f17f3d10378',1,'string.h']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/defines_4.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/defines_4.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/defines_4.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/defines_4.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,59 @@ +var searchData= +[ + ['ucx_5fallocator_5fdefault',['UCX_ALLOCATOR_DEFAULT',['../allocator_8h.html#a1283a8f875f90a7af3aba5e031fc2e3f',1,'allocator.h']]], + ['ucx_5farray_5futil_5fset',['ucx_array_util_set',['../array_8h.html#a1d959c29af3125bdd37cde3a554e729c',1,'array.h']]], + ['ucx_5farray_5futil_5fsetptr',['ucx_array_util_setptr',['../array_8h.html#a59a5b342965e790945f9c7a3f86b99f9',1,'array.h']]], + ['ucx_5favl_5fdefault_5fnew',['ucx_avl_default_new',['../avl_8h.html#ac2886d4b79b48c9fabf6408873f84cd2',1,'avl.h']]], + ['ucx_5favl_5ffind_5fclosest',['UCX_AVL_FIND_CLOSEST',['../avl_8h.html#af16f24d74fd6af0154de041566c6603b',1,'avl.h']]], + ['ucx_5favl_5ffind_5fexact',['UCX_AVL_FIND_EXACT',['../avl_8h.html#aaaf4a6f6f661cda7791db239212285d9',1,'avl.h']]], + ['ucx_5favl_5ffind_5flower_5fbounded',['UCX_AVL_FIND_LOWER_BOUNDED',['../avl_8h.html#abd2446d544d5412b6997ee8a17bd368c',1,'avl.h']]], + ['ucx_5favl_5ffind_5fupper_5fbounded',['UCX_AVL_FIND_UPPER_BOUNDED',['../avl_8h.html#ac74ee7649c1e206b08b31f37dd68ca5e',1,'avl.h']]], + ['ucx_5fbprintf',['ucx_bprintf',['../utils_8h.html#a9d7d65a420f026fcb6982803d5120519',1,'utils.h']]], + ['ucx_5fbuffer_5fautoextend',['UCX_BUFFER_AUTOEXTEND',['../buffer_8h.html#a05f9565f2d04399168c3b1c152a632be',1,'buffer.h']]], + ['ucx_5fbuffer_5fautofree',['UCX_BUFFER_AUTOFREE',['../buffer_8h.html#a8bab11ad8a76719228b9ee91e2e45535',1,'buffer.h']]], + ['ucx_5fbuffer_5fclear',['ucx_buffer_clear',['../buffer_8h.html#a374abd5aabfcc3ee0777a79d5fe651ab',1,'buffer.h']]], + ['ucx_5fbuffer_5fclone',['ucx_buffer_clone',['../buffer_8h.html#a828353846428c2c2f695f9938f059e52',1,'buffer.h']]], + ['ucx_5fbuffer_5fdefault',['UCX_BUFFER_DEFAULT',['../buffer_8h.html#acc77c8ed7b26854f555d4a5d11e49ea2',1,'buffer.h']]], + ['ucx_5fbuffer_5fto_5fsstr',['ucx_buffer_to_sstr',['../buffer_8h.html#a0f4b64f1b3a74c4f6c5d9409d6b6086a',1,'buffer.h']]], + ['ucx_5fforeach',['UCX_FOREACH',['../list_8h.html#a4b143b6526a410aa4d22cb3bb9365d70',1,'list.h']]], + ['ucx_5flogger_5fdebug',['ucx_logger_debug',['../logging_8h.html#a2936402799892db5138e5f1f8c25db0c',1,'ucx_logger_debug(): logging.h'],['../logging_8h.html#acff01d1ef919ea997cfce755fc1b83d8',1,'UCX_LOGGER_DEBUG(): logging.h']]], + ['ucx_5flogger_5ferror',['ucx_logger_error',['../logging_8h.html#a6a9e472e14d6768e59d96d245e065397',1,'ucx_logger_error(): logging.h'],['../logging_8h.html#aa254c07fe3a907613e2256a318d5c9a8',1,'UCX_LOGGER_ERROR(): logging.h']]], + ['ucx_5flogger_5finfo',['UCX_LOGGER_INFO',['../logging_8h.html#a4b0178bf60a6129373ffc59114ca4c9b',1,'UCX_LOGGER_INFO(): logging.h'],['../logging_8h.html#a98464d8d51376ce2716dcc4eca00d5da',1,'ucx_logger_info(): logging.h']]], + ['ucx_5flogger_5flevel',['UCX_LOGGER_LEVEL',['../logging_8h.html#aee18bc20e58ffb69910121512c350839',1,'logging.h']]], + ['ucx_5flogger_5flog',['ucx_logger_log',['../logging_8h.html#aa0245325031d95799b28def177fd14ec',1,'logging.h']]], + ['ucx_5flogger_5fregister_5flevel',['ucx_logger_register_level',['../logging_8h.html#a5cffc19502c4c90bfb3bd3bbcd18170a',1,'logging.h']]], + ['ucx_5flogger_5fsource',['UCX_LOGGER_SOURCE',['../logging_8h.html#a0e0d72b12616c1e49ff8834eaf4cb8a2',1,'logging.h']]], + ['ucx_5flogger_5ftimestamp',['UCX_LOGGER_TIMESTAMP',['../logging_8h.html#a38607008268b4f776ee500fb95d2e823',1,'logging.h']]], + ['ucx_5flogger_5ftrace',['UCX_LOGGER_TRACE',['../logging_8h.html#a55b88d1fec7036d841b3ddd6195c5586',1,'UCX_LOGGER_TRACE(): logging.h'],['../logging_8h.html#a3031b7ff13f4cfae9c2916543be2877c',1,'ucx_logger_trace(): logging.h']]], + ['ucx_5flogger_5fwarn',['UCX_LOGGER_WARN',['../logging_8h.html#abd01ca11486226ba34e8f7028d9fffba',1,'UCX_LOGGER_WARN(): logging.h'],['../logging_8h.html#aca7bd861b646892813fd7310c0aa69af',1,'ucx_logger_warn(): logging.h']]], + ['ucx_5fmap_5fcstr_5fget',['ucx_map_cstr_get',['../map_8h.html#a64e1fb55498fa502dd2ed8ed69062cdd',1,'map.h']]], + ['ucx_5fmap_5fcstr_5fput',['ucx_map_cstr_put',['../map_8h.html#ad9356b01425b934ab237b52339ac0cc3',1,'map.h']]], + ['ucx_5fmap_5fcstr_5fremove',['ucx_map_cstr_remove',['../map_8h.html#a9c4405a5a75ecf64e2ef3d0c6501a9fe',1,'map.h']]], + ['ucx_5fmap_5fforeach',['UCX_MAP_FOREACH',['../map_8h.html#a940896c4aa1b13e54c55c04c3efc186b',1,'map.h']]], + ['ucx_5fmap_5fint_5fget',['ucx_map_int_get',['../map_8h.html#aa1681bd2178553cd092fd24c4d681d3c',1,'map.h']]], + ['ucx_5fmap_5fint_5fput',['ucx_map_int_put',['../map_8h.html#aaa30af79b4068c923895619e83f44367',1,'map.h']]], + ['ucx_5fmap_5fint_5fremove',['ucx_map_int_remove',['../map_8h.html#aa767958b5468737755c09f7185b1770c',1,'map.h']]], + ['ucx_5fmap_5fsstr_5fget',['ucx_map_sstr_get',['../map_8h.html#a14d385f6b7f371f0507861cabd2eab4e',1,'map.h']]], + ['ucx_5fmap_5fsstr_5fput',['ucx_map_sstr_put',['../map_8h.html#ac26a8615bfc8f47ee9eaceb47645f98e',1,'map.h']]], + ['ucx_5fmap_5fsstr_5fremove',['ucx_map_sstr_remove',['../map_8h.html#a48700ea86fadb9ea54d13010f9124df2',1,'map.h']]], + ['ucx_5fmempool_5fnew_5fdefault',['ucx_mempool_new_default',['../mempool_8h.html#a49f7bd1da5ac201d0cf54dc0f0d82dd2',1,'mempool.h']]], + ['ucx_5fsprintf',['ucx_sprintf',['../utils_8h.html#af9f333b66ecd639c347c7235f4992e2e',1,'utils.h']]], + ['ucx_5fstack_5fdim',['ucx_stack_dim',['../stack_8h.html#a3b761343c6491222604341ebfa443226',1,'stack.h']]], + ['ucx_5fstack_5fempty',['ucx_stack_empty',['../stack_8h.html#a4f7239dbd6c032c56812e370b71c1985',1,'stack.h']]], + ['ucx_5fstack_5fpop',['ucx_stack_pop',['../stack_8h.html#a506b82374734ec476d086ddfb561174d',1,'stack.h']]], + ['ucx_5fstack_5ftopsize',['ucx_stack_topsize',['../stack_8h.html#a030197051a803e87d5eeac5adb80b15a',1,'stack.h']]], + ['ucx_5fstream_5fbcopy',['ucx_stream_bcopy',['../utils_8h.html#a6003a1750a66234169bd1f8cc84b297b',1,'utils.h']]], + ['ucx_5fstream_5fcopy',['ucx_stream_copy',['../utils_8h.html#a41ca1344f781c0d3bf7a414a6e811392',1,'utils.h']]], + ['ucx_5fstream_5fcopy_5fbufsize',['UCX_STREAM_COPY_BUFSIZE',['../utils_8h.html#a23efd74fa5f701d4cf26ccbfd138a439',1,'utils.h']]], + ['ucx_5fstream_5fncopy',['ucx_stream_ncopy',['../utils_8h.html#add13f39a8af440b4f7e6f74339eaada2',1,'utils.h']]], + ['ucx_5fszmul',['ucx_szmul',['../ucx_8h.html#a0b5ed6c1a0b15356f4f948acfd32a4cc',1,'ucx.h']]], + ['ucx_5ftest',['UCX_TEST',['../test_8h.html#a66cfb29c329fc9eaef071f2449836659',1,'test.h']]], + ['ucx_5ftest_5fassert',['UCX_TEST_ASSERT',['../test_8h.html#a08f477cd12fc3fe741a92493e5df58a9',1,'test.h']]], + ['ucx_5ftest_5fbegin',['UCX_TEST_BEGIN',['../test_8h.html#a0547b8d4f3bcdb0633fdd8925e8aa5d4',1,'test.h']]], + ['ucx_5ftest_5fcall_5fsubroutine',['UCX_TEST_CALL_SUBROUTINE',['../test_8h.html#a0efbab91c54f5237a2ab207f48cf0e51',1,'test.h']]], + ['ucx_5ftest_5fend',['UCX_TEST_END',['../test_8h.html#a86e64857c04f0447f8b16fb9c2b3b639',1,'test.h']]], + ['ucx_5ftest_5fsubroutine',['UCX_TEST_SUBROUTINE',['../test_8h.html#ae073cf5ead22cb27d662da048e16f44a',1,'test.h']]], + ['ucx_5fversion',['UCX_VERSION',['../ucx_8h.html#af12001920ca2fc1405615684e4dea284',1,'ucx.h']]], + ['ucx_5fversion_5fmajor',['UCX_VERSION_MAJOR',['../ucx_8h.html#aa57e5dd22d42387d748cc16777df1383',1,'ucx.h']]], + ['ucx_5fversion_5fminor',['UCX_VERSION_MINOR',['../ucx_8h.html#a9ac10d6353e23d4615a87fc737c65eb0',1,'ucx.h']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_0.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_0.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_0.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_0.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,6 @@ +var searchData= +[ + ['allocator_2eh',['allocator.h',['../allocator_8h.html',1,'']]], + ['array_2eh',['array.h',['../array_8h.html',1,'']]], + ['avl_2eh',['avl.h',['../avl_8h.html',1,'']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_1.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_1.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_1.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_1.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['buffer_2eh',['buffer.h',['../buffer_8h.html',1,'']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_2.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_2.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_2.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_2.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,5 @@ +var searchData= +[ + ['list_2eh',['list.h',['../list_8h.html',1,'']]], + ['logging_2eh',['logging.h',['../logging_8h.html',1,'']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_3.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_3.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_3.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_3.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,5 @@ +var searchData= +[ + ['map_2eh',['map.h',['../map_8h.html',1,'']]], + ['mempool_2eh',['mempool.h',['../mempool_8h.html',1,'']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_4.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_4.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_4.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_4.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['properties_2eh',['properties.h',['../properties_8h.html',1,'']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_5.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_5.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_5.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_5.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,5 @@ +var searchData= +[ + ['stack_2eh',['stack.h',['../stack_8h.html',1,'']]], + ['string_2eh',['string.h',['../string_8h.html',1,'']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_6.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_6.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_6.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_6.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['test_2eh',['test.h',['../test_8h.html',1,'']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_7.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_7.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/files_7.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/files_7.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,5 @@ +var searchData= +[ + ['ucx_2eh',['ucx.h',['../ucx_8h.html',1,'']]], + ['utils_2eh',['utils.h',['../utils_8h.html',1,'']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/functions_0.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/functions_0.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/functions_0.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/functions_0.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,36 @@ +var searchData= +[ + ['scstr',['scstr',['../string_8h.html#a2b1d6f1eca1c1549f37107b9c026c5a6',1,'string.c']]], + ['scstrcasecmp',['scstrcasecmp',['../string_8h.html#aca8142fb823d253054e17c17cfca05e0',1,'string.c']]], + ['scstrcaseprefix',['scstrcaseprefix',['../string_8h.html#a3718ef4aa1e86cdb26bda2f07fb585df',1,'string.c']]], + ['scstrcasesuffix',['scstrcasesuffix',['../string_8h.html#a6edb4b85f2b9efe79db7ffe6eccd7bc3',1,'string.c']]], + ['scstrcat',['scstrcat',['../string_8h.html#a7376842c19e954b49215da81ef76ac0c',1,'string.c']]], + ['scstrcat_5fa',['scstrcat_a',['../string_8h.html#abacce4cbd6f70fcb6453904ef08b02e9',1,'string.c']]], + ['scstrchr',['scstrchr',['../string_8h.html#a5836d6a7a744791c35e5c17bdc394a87',1,'string.c']]], + ['scstrcmp',['scstrcmp',['../string_8h.html#af35272a8e5408c88ed3e25a3a98f0a82',1,'string.c']]], + ['scstrdup',['scstrdup',['../string_8h.html#a97dccce03af419596dbdd592ca46a164',1,'string.c']]], + ['scstrdup_5fa',['scstrdup_a',['../string_8h.html#a8fe58921f51eb1fde038472377e63014',1,'string.c']]], + ['scstrlower',['scstrlower',['../string_8h.html#abccf198bea3186ff2abb080cc88dcae6',1,'string.c']]], + ['scstrlower_5fa',['scstrlower_a',['../string_8h.html#a3cf1e557df7ab58d03c78832c4060276',1,'string.c']]], + ['scstrn',['scstrn',['../string_8h.html#ae594f6e222ea394cef6a26c0dfad000d',1,'string.c']]], + ['scstrnlen',['scstrnlen',['../string_8h.html#ac1b000030d6d197eec48c15a182055d5',1,'string.c']]], + ['scstrprefix',['scstrprefix',['../string_8h.html#a599ddc2f88dd1df68b72eefd91347393',1,'string.c']]], + ['scstrrchr',['scstrrchr',['../string_8h.html#ae389835b97cd9382e7d6a6a075323376',1,'string.c']]], + ['scstrscstr',['scstrscstr',['../string_8h.html#a54f256c3abe811c52d58b4ff1b23f051',1,'string.c']]], + ['scstrsplit',['scstrsplit',['../string_8h.html#ae71cac352b00230848bde358f0fb05ea',1,'string.c']]], + ['scstrsplit_5fa',['scstrsplit_a',['../string_8h.html#a52906455ae530c9cdc6812c8e6d9bdef',1,'string.c']]], + ['scstrsstr',['scstrsstr',['../string_8h.html#aa4362cb36c6629f9d8484739fd827748',1,'string.c']]], + ['scstrsubs',['scstrsubs',['../string_8h.html#a9a6c8d8db0dda0037c3c852cce1a5060',1,'string.c']]], + ['scstrsubsl',['scstrsubsl',['../string_8h.html#ad50f0f67b906fad0744f46bcb51e144b',1,'string.c']]], + ['scstrsuffix',['scstrsuffix',['../string_8h.html#a1f0ae316a2afe85d5b4655e6ece6721a',1,'string.c']]], + ['scstrtrim',['scstrtrim',['../string_8h.html#ad374b16eb1be8b48019debad9b9f268c',1,'string.c']]], + ['scstrupper',['scstrupper',['../string_8h.html#af3dd09ec9d11162fe0075f4e60f41240',1,'string.c']]], + ['scstrupper_5fa',['scstrupper_a',['../string_8h.html#aea94613eb74668cc05d365803d32bfad',1,'string.c']]], + ['sstr',['sstr',['../string_8h.html#a539eb7059251a051ee5d179526a23e9a',1,'string.c']]], + ['sstrchr',['sstrchr',['../string_8h.html#af80898a0b75955eb2579298c3ae2c481',1,'string.c']]], + ['sstrn',['sstrn',['../string_8h.html#a2744c38ac44abf3e01fa059056dcf36c',1,'string.c']]], + ['sstrrchr',['sstrrchr',['../string_8h.html#adae3f59957ca328e1da5285cb8b02a72',1,'string.c']]], + ['sstrsubs',['sstrsubs',['../string_8h.html#a5eb9e0e1f26cf7fbecc038cd90e8b258',1,'string.c']]], + ['sstrsubsl',['sstrsubsl',['../string_8h.html#a78925c91af54f23cebd20ff99ef4331a',1,'string.c']]], + ['sstrtrim',['sstrtrim',['../string_8h.html#ae2d6da564d3fce51f2e0cac580fdbc56',1,'string.c']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/functions_1.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/functions_1.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/functions_1.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/functions_1.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,185 @@ +var searchData= +[ + ['ucx_5farray_5fappend_5ffrom',['ucx_array_append_from',['../array_8h.html#aea01731ad94ea73c0c8fb1d1b7a35fcf',1,'array.c']]], + ['ucx_5farray_5fat',['ucx_array_at',['../array_8h.html#aa698085fd1a8b70d6b709999c51b49e8',1,'array.c']]], + ['ucx_5farray_5fclone',['ucx_array_clone',['../array_8h.html#a4a8c273370e4a3a3e2624e364f5ab410',1,'array.c']]], + ['ucx_5farray_5fconcat',['ucx_array_concat',['../array_8h.html#aa5a0bf3d3f0df6406beb0e569021cc28',1,'array.c']]], + ['ucx_5farray_5fcontains',['ucx_array_contains',['../array_8h.html#a5241058cd2329147bc5b1593ae7e51dc',1,'array.c']]], + ['ucx_5farray_5fdestroy',['ucx_array_destroy',['../array_8h.html#a8e83681d8d5d8cddbf10f63ce5be4c10',1,'array.c']]], + ['ucx_5farray_5fequals',['ucx_array_equals',['../array_8h.html#a43292b448adb1741677aa8c578bcc201',1,'array.c']]], + ['ucx_5farray_5ffind',['ucx_array_find',['../array_8h.html#ae7bdbed94afee9b20b38b95e3ab470f0',1,'array.c']]], + ['ucx_5farray_5ffree',['ucx_array_free',['../array_8h.html#ac01ee914468a16f470bf3071fffbe438',1,'array.c']]], + ['ucx_5farray_5fgrow',['ucx_array_grow',['../array_8h.html#ab0cbf243824aaebee48277315e03afce',1,'array.c']]], + ['ucx_5farray_5finit',['ucx_array_init',['../array_8h.html#ad921e85c28ffae32230777a53c5037e5',1,'array.c']]], + ['ucx_5farray_5finit_5fa',['ucx_array_init_a',['../array_8h.html#a2451e61ebb15a7ba1c1319267ba75b8c',1,'array.c']]], + ['ucx_5farray_5fnew',['ucx_array_new',['../array_8h.html#a994a2fbf1c33a3833e2a70cd9a4352b7',1,'array.c']]], + ['ucx_5farray_5fnew_5fa',['ucx_array_new_a',['../array_8h.html#a177170258c215eb2e4f5a32e59f0cb1b',1,'array.c']]], + ['ucx_5farray_5fprepend_5ffrom',['ucx_array_prepend_from',['../array_8h.html#a95b52acc2193b5c33cf0eaa4f2082477',1,'array.c']]], + ['ucx_5farray_5fremove',['ucx_array_remove',['../array_8h.html#aa45eac6b697f83adac81c0860cf306b8',1,'array.c']]], + ['ucx_5farray_5fremove_5ffast',['ucx_array_remove_fast',['../array_8h.html#a548d81b07612bae3ba8c4c4b49104b8e',1,'array.c']]], + ['ucx_5farray_5freserve',['ucx_array_reserve',['../array_8h.html#a1c3bf8433c1de3c933f3854ab297fe1d',1,'array.c']]], + ['ucx_5farray_5fresize',['ucx_array_resize',['../array_8h.html#a27762e7c06a6c781015e3c8ceeee0ce3',1,'array.c']]], + ['ucx_5farray_5fset_5ffrom',['ucx_array_set_from',['../array_8h.html#a1bb545d065358d265d80d815ba382a28',1,'array.c']]], + ['ucx_5farray_5fshrink',['ucx_array_shrink',['../array_8h.html#a2daf50e80aee9bccebee876a7efd2dfc',1,'array.c']]], + ['ucx_5farray_5fsort',['ucx_array_sort',['../array_8h.html#add773514569b872a6624381b4b6af52c',1,'array.c']]], + ['ucx_5farray_5futil_5fset_5fa',['ucx_array_util_set_a',['../array_8h.html#ad0a8d76980cf1c1910e64a245803fb9a',1,'array.c']]], + ['ucx_5farray_5futil_5fsetptr_5fa',['ucx_array_util_setptr_a',['../array_8h.html#ad708b333c0c1b02c998309a58ea65e31',1,'array.c']]], + ['ucx_5fasprintf',['ucx_asprintf',['../utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5',1,'utils.c']]], + ['ucx_5favl_5fcount',['ucx_avl_count',['../avl_8h.html#a92c1d41c2b22fe4a029a486ab2153e35',1,'avl.c']]], + ['ucx_5favl_5ffind',['ucx_avl_find',['../avl_8h.html#a51770e1614b28d7d22dea096c3704f83',1,'avl.c']]], + ['ucx_5favl_5ffind_5fnode',['ucx_avl_find_node',['../avl_8h.html#a664986f64d6865605199fbff06e19cd5',1,'avl.c']]], + ['ucx_5favl_5ffree',['ucx_avl_free',['../avl_8h.html#a2f92db538f25fce908d2cb3e5590944c',1,'avl.c']]], + ['ucx_5favl_5ffree_5fcontent',['ucx_avl_free_content',['../avl_8h.html#a31ad7fb196ca211f1fc39f4e15f72279',1,'avl.c']]], + ['ucx_5favl_5fget',['ucx_avl_get',['../avl_8h.html#adbcf7ceb3f014a30c7214f7304519efe',1,'avl.c']]], + ['ucx_5favl_5fget_5fnode',['ucx_avl_get_node',['../avl_8h.html#acf42da9a4168e47dc10b4ba0d27ceb4e',1,'avl.c']]], + ['ucx_5favl_5fnew',['ucx_avl_new',['../avl_8h.html#a11b043d65a11b7092d5d98b298e5ede3',1,'avl.c']]], + ['ucx_5favl_5fnew_5fa',['ucx_avl_new_a',['../avl_8h.html#af0f868d67e9dc08b4867c02a06c23ee2',1,'avl.c']]], + ['ucx_5favl_5fpred',['ucx_avl_pred',['../avl_8h.html#a0e739aeb66dda6a6a3f6eb51b50cf346',1,'avl.c']]], + ['ucx_5favl_5fput',['ucx_avl_put',['../avl_8h.html#aec401fab4a24a7edffa734f9baf88577',1,'avl.c']]], + ['ucx_5favl_5fput_5fs',['ucx_avl_put_s',['../avl_8h.html#a32cf8955cc0226a82bacfc7b76d6474c',1,'avl.c']]], + ['ucx_5favl_5fremove',['ucx_avl_remove',['../avl_8h.html#a1d821119c805d7fbb7e424bc3effeba9',1,'avl.c']]], + ['ucx_5favl_5fremove_5fnode',['ucx_avl_remove_node',['../avl_8h.html#a9a792b7d9e58073deef74a341f8bc720',1,'avl.c']]], + ['ucx_5favl_5fremove_5fs',['ucx_avl_remove_s',['../avl_8h.html#a01aeeecd6415f0cc2b623486eb28f254',1,'avl.c']]], + ['ucx_5favl_5fsucc',['ucx_avl_succ',['../avl_8h.html#aab1ad9b027ff5e50671aa0ee84e2d541',1,'avl.c']]], + ['ucx_5fbuffer_5feof',['ucx_buffer_eof',['../buffer_8h.html#abad7fd9ad5061224c780b8d1d4c55f09',1,'buffer.c']]], + ['ucx_5fbuffer_5fextend',['ucx_buffer_extend',['../buffer_8h.html#afaf97d2cd7e9faad79a9d35fe33e30c6',1,'buffer.c']]], + ['ucx_5fbuffer_5fextract',['ucx_buffer_extract',['../buffer_8h.html#a33fa7bb35fe08bbb3542f227514332ef',1,'buffer.c']]], + ['ucx_5fbuffer_5ffree',['ucx_buffer_free',['../buffer_8h.html#a2af8646d8905c22c7322e7540b0440af',1,'buffer.c']]], + ['ucx_5fbuffer_5fgetc',['ucx_buffer_getc',['../buffer_8h.html#a396339022159ce4ca6d069de9f9209b0',1,'buffer.c']]], + ['ucx_5fbuffer_5fnew',['ucx_buffer_new',['../buffer_8h.html#aacea876d692193ec6f859ce98da7351c',1,'buffer.c']]], + ['ucx_5fbuffer_5fputc',['ucx_buffer_putc',['../buffer_8h.html#a7d6f01b9d631b0123475dfb98fb849ac',1,'buffer.c']]], + ['ucx_5fbuffer_5fputs',['ucx_buffer_puts',['../buffer_8h.html#af1d4b478e04b3ae0bf30e7c2ea964ea2',1,'buffer.c']]], + ['ucx_5fbuffer_5fread',['ucx_buffer_read',['../buffer_8h.html#ae5c3430759f0059547b35d5a254d4da5',1,'buffer.c']]], + ['ucx_5fbuffer_5fseek',['ucx_buffer_seek',['../buffer_8h.html#a47d98482662073c74f35deb0957d15d1',1,'buffer.c']]], + ['ucx_5fbuffer_5fshift',['ucx_buffer_shift',['../buffer_8h.html#a12a0c6a2379ef080043e6286bb8bad69',1,'buffer.c']]], + ['ucx_5fbuffer_5fshift_5fleft',['ucx_buffer_shift_left',['../buffer_8h.html#a20431dd0ed6a6fe9f15333bd72afe4db',1,'buffer.c']]], + ['ucx_5fbuffer_5fshift_5fright',['ucx_buffer_shift_right',['../buffer_8h.html#a4fa10b6471495547eb981248fd4f1bc2',1,'buffer.c']]], + ['ucx_5fbuffer_5fwrite',['ucx_buffer_write',['../buffer_8h.html#af8aacc7401814392b58c1b7b81bffc05',1,'buffer.c']]], + ['ucx_5fcmp_5fdouble',['ucx_cmp_double',['../utils_8h.html#ab804b7c27d0bfcd7bf3a3583140825b6',1,'utils.c']]], + ['ucx_5fcmp_5ffloat',['ucx_cmp_float',['../utils_8h.html#ad1196b561bcdad76c393885819769a97',1,'utils.c']]], + ['ucx_5fcmp_5fint',['ucx_cmp_int',['../utils_8h.html#a8ce7e11e6b3deafe89a32a091fde7f16',1,'utils.c']]], + ['ucx_5fcmp_5fint16',['ucx_cmp_int16',['../utils_8h.html#aa29e6e559946375e34113e34e0b0bd0d',1,'utils.c']]], + ['ucx_5fcmp_5fint32',['ucx_cmp_int32',['../utils_8h.html#a858b2ac443fb202643b71f6a7e9218dd',1,'utils.c']]], + ['ucx_5fcmp_5fint64',['ucx_cmp_int64',['../utils_8h.html#a54701aea6a89fed1402dfb0bf56bc7f6',1,'utils.c']]], + ['ucx_5fcmp_5flongint',['ucx_cmp_longint',['../utils_8h.html#aeb57a2b9a6aaa0460c7a6bec29accf2c',1,'utils.c']]], + ['ucx_5fcmp_5flonglong',['ucx_cmp_longlong',['../utils_8h.html#a366b57def20f86a41eaedf575eea5375',1,'utils.c']]], + ['ucx_5fcmp_5fmem',['ucx_cmp_mem',['../utils_8h.html#aff7d2bcded71196831a8c0664333f8e7',1,'utils.c']]], + ['ucx_5fcmp_5fptr',['ucx_cmp_ptr',['../utils_8h.html#aa174d539de3ea59be4f9640f17ce53d8',1,'utils.c']]], + ['ucx_5fcmp_5fsstr',['ucx_cmp_sstr',['../utils_8h.html#adee0739589166d272f8cb7c23aabf8ba',1,'utils.c']]], + ['ucx_5fcmp_5fstr',['ucx_cmp_str',['../utils_8h.html#aa6a37b9d172b6a5b2803d152f9e1b258',1,'utils.c']]], + ['ucx_5fcmp_5fstrn',['ucx_cmp_strn',['../utils_8h.html#ac6b354a878f551a3a5b20a167db3f308',1,'utils.c']]], + ['ucx_5fcmp_5fuint',['ucx_cmp_uint',['../utils_8h.html#abd83a5da91c3dd026a6931bd80c12f1e',1,'utils.c']]], + ['ucx_5fcmp_5fuint16',['ucx_cmp_uint16',['../utils_8h.html#acde5366437e886a459b7468f7a9e11f0',1,'utils.c']]], + ['ucx_5fcmp_5fuint32',['ucx_cmp_uint32',['../utils_8h.html#a5879d1722330355914d8c9146fa549d3',1,'utils.c']]], + ['ucx_5fcmp_5fuint64',['ucx_cmp_uint64',['../utils_8h.html#a1572a78b5b42f7151a5b2a5a7283d62d',1,'utils.c']]], + ['ucx_5fcmp_5fulongint',['ucx_cmp_ulongint',['../utils_8h.html#a3f3cbae2594d6f722bae29acb0408a24',1,'utils.c']]], + ['ucx_5fcmp_5fulonglong',['ucx_cmp_ulonglong',['../utils_8h.html#a6acfc359421f21f9a042a654ff7faac5',1,'utils.c']]], + ['ucx_5fdefault_5fallocator',['ucx_default_allocator',['../allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf',1,'allocator.c']]], + ['ucx_5fdefault_5fcalloc',['ucx_default_calloc',['../allocator_8h.html#a3a0bfdd13d887012309c459b339f338f',1,'allocator.c']]], + ['ucx_5fdefault_5ffree',['ucx_default_free',['../allocator_8h.html#a646d83aaaadfe33ae414c0fad8bfc52a',1,'allocator.c']]], + ['ucx_5fdefault_5fmalloc',['ucx_default_malloc',['../allocator_8h.html#a96403ebf3d2312d95f2fe7627a1cdbc0',1,'allocator.c']]], + ['ucx_5fdefault_5frealloc',['ucx_default_realloc',['../allocator_8h.html#a47cfc8af626a86fcb93a2b14b90498ed',1,'allocator.c']]], + ['ucx_5fdist_5fint',['ucx_dist_int',['../utils_8h.html#a4ab6753739d56c09cdf6079fdcabf7c6',1,'utils.c']]], + ['ucx_5fdist_5fint16',['ucx_dist_int16',['../utils_8h.html#a81fb8434b70ca11bf2c14abfa21d16a9',1,'utils.c']]], + ['ucx_5fdist_5fint32',['ucx_dist_int32',['../utils_8h.html#ab4a659cc46096f0490c1dafa57726476',1,'utils.c']]], + ['ucx_5fdist_5fint64',['ucx_dist_int64',['../utils_8h.html#a54e7d06585bad3a899befc4e9c13853f',1,'utils.c']]], + ['ucx_5fdist_5flongint',['ucx_dist_longint',['../utils_8h.html#a43e73d288b1553a0078bf4c98dd341f5',1,'utils.c']]], + ['ucx_5fdist_5flonglong',['ucx_dist_longlong',['../utils_8h.html#a306778414a2427951ea263be92368627',1,'utils.c']]], + ['ucx_5fdist_5fuint',['ucx_dist_uint',['../utils_8h.html#a37b7d471ca1679992afc11a0deda45f4',1,'utils.c']]], + ['ucx_5fdist_5fuint16',['ucx_dist_uint16',['../utils_8h.html#a66e00a0703cbcde050ec922578e2f080',1,'utils.c']]], + ['ucx_5fdist_5fuint32',['ucx_dist_uint32',['../utils_8h.html#add2b5c5507caba59d894b84e056b079b',1,'utils.c']]], + ['ucx_5fdist_5fuint64',['ucx_dist_uint64',['../utils_8h.html#a3ba75e2e0b2479eef2b22fb219b42da7',1,'utils.c']]], + ['ucx_5fdist_5fulongint',['ucx_dist_ulongint',['../utils_8h.html#abb13476228d0c16bfaba08469adbae2d',1,'utils.c']]], + ['ucx_5fdist_5fulonglong',['ucx_dist_ulonglong',['../utils_8h.html#a59a5859272cb4b43cbdd58208c41e32b',1,'utils.c']]], + ['ucx_5ffprintf',['ucx_fprintf',['../utils_8h.html#aa0bec80e1c67f769ff5e112a7d4ce72a',1,'utils.c']]], + ['ucx_5fhash',['ucx_hash',['../map_8h.html#aea3be97254c05595d986ef6a9faae87b',1,'map.c']]], + ['ucx_5fkey',['ucx_key',['../map_8h.html#a3e540bb46b8ee19789aed63fd8919200',1,'map.c']]], + ['ucx_5flist_5fappend',['ucx_list_append',['../list_8h.html#a00c122c8a26d35b60676939df4161621',1,'list.c']]], + ['ucx_5flist_5fappend_5fa',['ucx_list_append_a',['../list_8h.html#adf3b3e2e0ff977d8928671d6bd82fc60',1,'list.c']]], + ['ucx_5flist_5fclone',['ucx_list_clone',['../list_8h.html#ae7054a41c289b24e6caf5cb07ac850ed',1,'list.c']]], + ['ucx_5flist_5fclone_5fa',['ucx_list_clone_a',['../list_8h.html#a08ca1ba0d2e82258b0408714c1f4c425',1,'list.c']]], + ['ucx_5flist_5fconcat',['ucx_list_concat',['../list_8h.html#a77163a0cc82fae52bec26c8c0c3674d9',1,'list.c']]], + ['ucx_5flist_5fcontains',['ucx_list_contains',['../list_8h.html#a8b0fa051fcfe12e1a82cca1087973852',1,'list.c']]], + ['ucx_5flist_5fdifference',['ucx_list_difference',['../list_8h.html#a6c5db5d1d11ad28b6fe1a80ee1c1e449',1,'list.c']]], + ['ucx_5flist_5fdifference_5fa',['ucx_list_difference_a',['../list_8h.html#a4a2a2fc5cc41073c516db6235bbc51d5',1,'list.c']]], + ['ucx_5flist_5fequals',['ucx_list_equals',['../list_8h.html#adc435447cecf885bc63d232191085bbe',1,'list.c']]], + ['ucx_5flist_5ffind',['ucx_list_find',['../list_8h.html#a9b3b6842d3be572e06a7f519e198cb83',1,'list.c']]], + ['ucx_5flist_5ffirst',['ucx_list_first',['../list_8h.html#a6aa0e34ebc5f0dca6f52d0f7626b4bd5',1,'list.c']]], + ['ucx_5flist_5ffree',['ucx_list_free',['../list_8h.html#a1a0fa2c5b1e478a96da19b0c3f013668',1,'list.c']]], + ['ucx_5flist_5ffree_5fa',['ucx_list_free_a',['../list_8h.html#a944e11f76c38767cd1100d72a4e3b25b',1,'list.c']]], + ['ucx_5flist_5ffree_5fcontent',['ucx_list_free_content',['../list_8h.html#a4ba6c96642f72ea046cc22627c72979c',1,'list.c']]], + ['ucx_5flist_5fget',['ucx_list_get',['../list_8h.html#a2509ffe19bce6a8708c77f89480c75fb',1,'list.c']]], + ['ucx_5flist_5findexof',['ucx_list_indexof',['../list_8h.html#ae2ff2974812ca185870f80bc4ed9337e',1,'list.c']]], + ['ucx_5flist_5fintersection',['ucx_list_intersection',['../list_8h.html#a259f9b754978aeca23dfabba16e20f39',1,'list.c']]], + ['ucx_5flist_5fintersection_5fa',['ucx_list_intersection_a',['../list_8h.html#a1d0b00514dbb81ba6270b58da0c5b9a8',1,'list.c']]], + ['ucx_5flist_5flast',['ucx_list_last',['../list_8h.html#add5ec40c5006e29c629d23c2eb5a6553',1,'list.c']]], + ['ucx_5flist_5fprepend',['ucx_list_prepend',['../list_8h.html#a8fcb68e4556395b15180eec2d0b77aa4',1,'list.c']]], + ['ucx_5flist_5fprepend_5fa',['ucx_list_prepend_a',['../list_8h.html#a54654e6dc60e1c3de9e886c150e404ec',1,'list.c']]], + ['ucx_5flist_5fremove',['ucx_list_remove',['../list_8h.html#a410cb3e8260037ba56c72d14b899b468',1,'list.c']]], + ['ucx_5flist_5fremove_5fa',['ucx_list_remove_a',['../list_8h.html#aca687b7c4e7170175f447e549125aa52',1,'list.c']]], + ['ucx_5flist_5fsize',['ucx_list_size',['../list_8h.html#ae88001cc8ae40b946560f31434abed8f',1,'list.c']]], + ['ucx_5flist_5fsort',['ucx_list_sort',['../list_8h.html#ac74962d9bd7cfc9d3e2e09651469377b',1,'list.c']]], + ['ucx_5flist_5funion',['ucx_list_union',['../list_8h.html#a94ecdb0cea1633ad7074f027fa8485fa',1,'list.c']]], + ['ucx_5flist_5funion_5fa',['ucx_list_union_a',['../list_8h.html#a65b4355536f4ebc4130211b46469f4c1',1,'list.c']]], + ['ucx_5flogger_5ffree',['ucx_logger_free',['../logging_8h.html#ac4697b784e01ec990d2acea192e21658',1,'logging.c']]], + ['ucx_5flogger_5flogf',['ucx_logger_logf',['../logging_8h.html#ac337e5d02ebea565012d4c11bd643801',1,'logging.c']]], + ['ucx_5flogger_5fnew',['ucx_logger_new',['../logging_8h.html#ac560f8517d2172794c9d2691735ec48c',1,'logging.c']]], + ['ucx_5fmap_5fclear',['ucx_map_clear',['../map_8h.html#a285e90e40681c6d9631c935dda0967f2',1,'map.c']]], + ['ucx_5fmap_5fclone',['ucx_map_clone',['../map_8h.html#a62c6c30cbb0d824ba710f5030ff9a4e4',1,'map.c']]], + ['ucx_5fmap_5fclone_5fa',['ucx_map_clone_a',['../map_8h.html#a9aea9103703d5c168420bb6bf85549ea',1,'map.c']]], + ['ucx_5fmap_5fcopy',['ucx_map_copy',['../map_8h.html#adfeb2d61003fd2896bcfdc9a57f36425',1,'map.c']]], + ['ucx_5fmap_5fdifference',['ucx_map_difference',['../map_8h.html#a774fcff87d1e58b6c5af77dd19a8c3dc',1,'map.c']]], + ['ucx_5fmap_5fdifference_5fa',['ucx_map_difference_a',['../map_8h.html#ad0ba103494247d798ac3037c50fc8831',1,'map.c']]], + ['ucx_5fmap_5ffree',['ucx_map_free',['../map_8h.html#abe3d9688e4224bf7bb962abf25ff8c2e',1,'map.c']]], + ['ucx_5fmap_5ffree_5fcontent',['ucx_map_free_content',['../map_8h.html#a750f3d9d83e2f3788a14c17a9d160618',1,'map.c']]], + ['ucx_5fmap_5fget',['ucx_map_get',['../map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6',1,'map.c']]], + ['ucx_5fmap_5fintersection',['ucx_map_intersection',['../map_8h.html#aa594d7a5afebc3bed6bb265348cf6b0d',1,'map.c']]], + ['ucx_5fmap_5fintersection_5fa',['ucx_map_intersection_a',['../map_8h.html#a169e0470a20484dd76425fdf77e3651e',1,'map.c']]], + ['ucx_5fmap_5fiter_5fnext',['ucx_map_iter_next',['../map_8h.html#aceb8675abf44860b4bbc301bbada5b91',1,'map.c']]], + ['ucx_5fmap_5fiterator',['ucx_map_iterator',['../map_8h.html#a9150e9c64fdf4dfcc2cad106b91aa110',1,'map.c']]], + ['ucx_5fmap_5fnew',['ucx_map_new',['../map_8h.html#a79f31de8b93814493759dbc8b940cf0c',1,'map.c']]], + ['ucx_5fmap_5fnew_5fa',['ucx_map_new_a',['../map_8h.html#aed508a94c66cc15372503c64b70eb03e',1,'map.c']]], + ['ucx_5fmap_5fput',['ucx_map_put',['../map_8h.html#ac04a08b604217070254d4c58f0e82498',1,'map.c']]], + ['ucx_5fmap_5frehash',['ucx_map_rehash',['../map_8h.html#a174bce9fad554dd92b8da354e0d32512',1,'map.c']]], + ['ucx_5fmap_5fremove',['ucx_map_remove',['../map_8h.html#a17248a4888eb8f9ae18be522d64632aa',1,'map.c']]], + ['ucx_5fmap_5funion',['ucx_map_union',['../map_8h.html#a3f65978c481af7f637cad021d93522d5',1,'map.c']]], + ['ucx_5fmap_5funion_5fa',['ucx_map_union_a',['../map_8h.html#ab6370c3fa8113fdad593ce4b0460c9c6',1,'map.c']]], + ['ucx_5fmemcpy',['ucx_memcpy',['../utils_8h.html#ab2e184e6a744941aab6b8058116baf30',1,'utils.c']]], + ['ucx_5fmempool_5fcalloc',['ucx_mempool_calloc',['../mempool_8h.html#a4b9142011824ae24f00fabe128417d69',1,'mempool.c']]], + ['ucx_5fmempool_5fchcap',['ucx_mempool_chcap',['../mempool_8h.html#aaf75b5016098723a9280531ccc3a6d77',1,'mempool.c']]], + ['ucx_5fmempool_5fdestroy',['ucx_mempool_destroy',['../mempool_8h.html#af096378da7e9bfbed3088497cf4c15bf',1,'mempool.c']]], + ['ucx_5fmempool_5ffree',['ucx_mempool_free',['../mempool_8h.html#aefa26e3015f5aefadbfc74221bd246ac',1,'mempool.c']]], + ['ucx_5fmempool_5fmalloc',['ucx_mempool_malloc',['../mempool_8h.html#a2ae492b8f2878ccc9837ac213dced11e',1,'mempool.c']]], + ['ucx_5fmempool_5fnew',['ucx_mempool_new',['../mempool_8h.html#ad71cb8c3b6fdb30360376a8b372ef22a',1,'mempool.c']]], + ['ucx_5fmempool_5frealloc',['ucx_mempool_realloc',['../mempool_8h.html#a660ef42520ed6737c2e77aae18e3a7a4',1,'mempool.c']]], + ['ucx_5fmempool_5freg_5fdestr',['ucx_mempool_reg_destr',['../mempool_8h.html#af47b6b7c40f8f263dc28cc9a4e77b27c',1,'mempool.c']]], + ['ucx_5fmempool_5fset_5fdestr',['ucx_mempool_set_destr',['../mempool_8h.html#adb788e7ec24cd7dbdea6381539c549f2',1,'mempool.c']]], + ['ucx_5fproperties2map',['ucx_properties2map',['../properties_8h.html#a5c7ff8bc3139960a3f3dc92072b742f3',1,'properties.c']]], + ['ucx_5fproperties_5ffill',['ucx_properties_fill',['../properties_8h.html#aaf8de121764a4d22c763ff2ab41f3a4d',1,'properties.c']]], + ['ucx_5fproperties_5ffree',['ucx_properties_free',['../properties_8h.html#a38a2fe7bb2986bd87c7e69356ab05c05',1,'properties.c']]], + ['ucx_5fproperties_5fload',['ucx_properties_load',['../properties_8h.html#ae1b600f839a6b2278b68fc314981a8a3',1,'properties.c']]], + ['ucx_5fproperties_5fnew',['ucx_properties_new',['../properties_8h.html#a44d9dd12cab3aaa0084f1c8b89405796',1,'properties.c']]], + ['ucx_5fproperties_5fnext',['ucx_properties_next',['../properties_8h.html#a7e03bc573d45d48c538cd721e810d33c',1,'properties.c']]], + ['ucx_5fproperties_5fstore',['ucx_properties_store',['../properties_8h.html#a63c0c1b7648e675b21a1788917ff36fb',1,'properties.c']]], + ['ucx_5fsc2sc',['ucx_sc2sc',['../string_8h.html#a69d5e3eeec783cc43314df71248768f5',1,'string.c']]], + ['ucx_5fss2c_5fs',['ucx_ss2c_s',['../string_8h.html#aedeb5d7bddda54116101a8d68af8c56d',1,'string.h']]], + ['ucx_5fss2sc',['ucx_ss2sc',['../string_8h.html#a9ce5ad1b2aa2dbeba204d452c2e64359',1,'string.c']]], + ['ucx_5fstack_5favail',['ucx_stack_avail',['../stack_8h.html#a53cd2c7743dc8ad9cbd35ade0b4873e7',1,'stack.c']]], + ['ucx_5fstack_5fcalloc',['ucx_stack_calloc',['../stack_8h.html#afdc467524b5e19a9a777c6bc03e17174',1,'stack.c']]], + ['ucx_5fstack_5ffree',['ucx_stack_free',['../stack_8h.html#aabd55c14a3866b3782ba324f4d8b4c41',1,'stack.c']]], + ['ucx_5fstack_5finit',['ucx_stack_init',['../stack_8h.html#abaef685df4e7ef95cd7218984a0618fe',1,'stack.c']]], + ['ucx_5fstack_5fmalloc',['ucx_stack_malloc',['../stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac',1,'stack.c']]], + ['ucx_5fstack_5fpopn',['ucx_stack_popn',['../stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81',1,'stack.c']]], + ['ucx_5fstack_5fpush',['ucx_stack_push',['../stack_8h.html#af85e6f77a8341beb6188f9ae1a8e9f92',1,'stack.c']]], + ['ucx_5fstack_5fpusharr',['ucx_stack_pusharr',['../stack_8h.html#a7bb138979191bba138e76ea37488fae2',1,'stack.c']]], + ['ucx_5fstack_5frealloc',['ucx_stack_realloc',['../stack_8h.html#a0c678f96f6fabab49b2b034a1fe91c3a',1,'stack.c']]], + ['ucx_5fstrcpy',['ucx_strcpy',['../utils_8h.html#adeb6e8d0a53a829207cfa0a979d01fff',1,'utils.c']]], + ['ucx_5fstream_5fbncopy',['ucx_stream_bncopy',['../utils_8h.html#a114ee7f7da62656ffd35e2dc23394201',1,'utils.c']]], + ['ucx_5fszmul_5fimpl',['ucx_szmul_impl',['../ucx_8h.html#a6637171cc0ec097b297f731a3036dd3b',1,'ucx.c']]], + ['ucx_5ftest_5fregister',['ucx_test_register',['../test_8h.html#a8dfabc42f183d3a4d79379a5d17bf67d',1,'test.c']]], + ['ucx_5ftest_5frun',['ucx_test_run',['../test_8h.html#a3721458deeecb43aa322428f007714c3',1,'test.c']]], + ['ucx_5ftest_5fsuite_5ffree',['ucx_test_suite_free',['../test_8h.html#a4a6ac61a6f72722273f8eaa7a343edde',1,'test.c']]], + ['ucx_5ftest_5fsuite_5fnew',['ucx_test_suite_new',['../test_8h.html#a531f0df90363e0befbe900878f65f09e',1,'test.c']]], + ['ucx_5fvasprintf',['ucx_vasprintf',['../utils_8h.html#a3ea1dfb856c741f3e8ec6bfdc9ad427e',1,'utils.c']]], + ['ucx_5fvfprintf',['ucx_vfprintf',['../utils_8h.html#a4907967beb92c3ae351dd239abbb6927',1,'utils.c']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/mag_sel.png Binary file docs/api-2.1/search/mag_sel.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/nomatches.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/nomatches.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,12 @@ + + + + + + + +
    +
    No Matches
    +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/pages_0.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/pages_0.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/pages_0.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/pages_0.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['uap_20common_20extensions',['UAP Common Extensions',['../index.html',1,'']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/search.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/search.css Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + float: none; + margin-top: 8px; + right: 0px; + width: 170px; + height: 24px; + z-index: 102; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:115px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:8px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/search.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/search.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,791 @@ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/typedefs_0.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/typedefs_0.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,5 @@ +var searchData= +[ + ['cmp_5ffunc',['cmp_func',['../ucx_8h.html#afe5e2d5dbf34778e0e97852051570791',1,'ucx.h']]], + ['copy_5ffunc',['copy_func',['../ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967',1,'ucx.h']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/typedefs_1.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/typedefs_1.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/typedefs_1.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/typedefs_1.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['distance_5ffunc',['distance_func',['../ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9',1,'ucx.h']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/typedefs_2.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/typedefs_2.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/typedefs_2.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/typedefs_2.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['read_5ffunc',['read_func',['../ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5',1,'ucx.h']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/typedefs_3.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/typedefs_3.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/typedefs_3.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/typedefs_3.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,17 @@ +var searchData= +[ + ['ucx_5fallocator_5fcalloc',['ucx_allocator_calloc',['../allocator_8h.html#a2c0aba4221c1ac6801f03ed799f15b12',1,'allocator.h']]], + ['ucx_5fallocator_5ffree',['ucx_allocator_free',['../allocator_8h.html#aaf2387ddaddd8ab4b267e6b00e5d6f7e',1,'allocator.h']]], + ['ucx_5fallocator_5fmalloc',['ucx_allocator_malloc',['../allocator_8h.html#a29f0f6a23a70db3b60635cd6dc384473',1,'allocator.h']]], + ['ucx_5fallocator_5frealloc',['ucx_allocator_realloc',['../allocator_8h.html#a6d7cf038a806e327c5da37321d04e426',1,'allocator.h']]], + ['ucx_5fdestructor',['ucx_destructor',['../ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3',1,'ucx.h']]], + ['ucxavlnode',['UcxAVLNode',['../avl_8h.html#a08ba2496c2316df58548c3cc29712add',1,'avl.h']]], + ['ucxkey',['UcxKey',['../map_8h.html#ad63828bb23123fc01a5315a2bac3b142',1,'map.h']]], + ['ucxlist',['UcxList',['../list_8h.html#aa6f89f91c1081c9a7c6866c298f497a2',1,'list.h']]], + ['ucxmap',['UcxMap',['../map_8h.html#a18e21948725b2da68c35da587a722033',1,'map.h']]], + ['ucxmapelement',['UcxMapElement',['../map_8h.html#ad7d7a910a32113eb93eae11c3dc97b4b',1,'map.h']]], + ['ucxmapiterator',['UcxMapIterator',['../map_8h.html#ae36aff5f645948c54f51578b11fd87fb',1,'map.h']]], + ['ucxtest',['UcxTest',['../test_8h.html#ae906817354c010b83c2784260cce7a1c',1,'test.h']]], + ['ucxtestlist',['UcxTestList',['../test_8h.html#a8048c50ae73ea690b776edfd63bd6a5d',1,'test.h']]], + ['ucxtestsuite',['UcxTestSuite',['../test_8h.html#a52115d1d0f1c4a565ed6ef7c1bfd0363',1,'test.h']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/typedefs_4.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/typedefs_4.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/typedefs_4.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/typedefs_4.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['write_5ffunc',['write_func',['../ucx_8h.html#a989b3f0fa4d307d278378fde435641ed',1,'ucx.h']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_0.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_0.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_0.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_0.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['allocator',['allocator',['../structUcxArray.html#a2ef31303b7548b9aa8e2b9187e295212',1,'UcxArray::allocator()'],['../structUcxAVLTree.html#a30652776b540156ad54c7d52833e4e28',1,'UcxAVLTree::allocator()'],['../structUcxMap.html#a531f3e481c1c331cf037b916192e974d',1,'UcxMap::allocator()'],['../structUcxMempool.html#ac45fd1e9269399e4c434d6bdaa770d92',1,'UcxMempool::allocator()'],['../structUcxStack.html#a33cda4f6890ac56ab31701598bc1ae10',1,'UcxStack::allocator()']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_1.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_1.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_1.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_1.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,5 @@ +var searchData= +[ + ['buffer',['buffer',['../structUcxProperties.html#a6bb4d29686df41a0f42641ee15232bfd',1,'UcxProperties']]], + ['buflen',['buflen',['../structUcxProperties.html#a4e7524434525267e29f493a25dcca6b5',1,'UcxProperties']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_10.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_10.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_10.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_10.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['userdata',['userdata',['../structUcxAVLTree.html#ae92a3bfad3fe33c8dcbdad85112f83fd',1,'UcxAVLTree']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_11.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_11.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_11.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_11.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['value',['value',['../structUcxAVLNode.html#a302501b8c04c3fde668fe72249871258',1,'UcxAVLNode']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_12.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_12.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_12.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_12.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['writer',['writer',['../structUcxLogger.html#ada13bba090a9dc4f8d6cd9be73c60930',1,'UcxLogger']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_2.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_2.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_2.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_2.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,12 @@ +var searchData= +[ + ['c',['c',['../structucx__memchunk.html#ab86550503e5f019bfa61a1e91f1c40da',1,'ucx_memchunk']]], + ['calloc',['calloc',['../structUcxAllocator.html#ab94ec1cba45cc4e7d81e1588a11cbb62',1,'UcxAllocator']]], + ['capacity',['capacity',['../structUcxArray.html#a7ed074887908e45bde7e1fbc67b31c18',1,'UcxArray::capacity()'],['../structUcxBuffer.html#a385661894f3cee9c549bfe07a8b316bf',1,'UcxBuffer::capacity()']]], + ['cmpfunc',['cmpfunc',['../structUcxAVLTree.html#a87aff25cb726cb9eb88eb815a10d1004',1,'UcxAVLTree']]], + ['comment1',['comment1',['../structUcxProperties.html#afaa2e6a289fa6949b7b01df35fa5def8',1,'UcxProperties']]], + ['comment2',['comment2',['../structUcxProperties.html#a9ea7ecb414ca8bc7bef62cdd19cc6363',1,'UcxProperties']]], + ['comment3',['comment3',['../structUcxProperties.html#a5f3e561e32bac03e36a191a6940cca92',1,'UcxProperties']]], + ['count',['count',['../structUcxMap.html#a14e9163f71f6c014dfa2103de70ae9cd',1,'UcxMap']]], + ['cur',['cur',['../structUcxMapIterator.html#af1fc40f899f37280adb5b85acf6e742f',1,'UcxMapIterator']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_3.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_3.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_3.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_3.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,7 @@ +var searchData= +[ + ['data',['data',['../structUcxArray.html#a04d2b03d0a45af1fab19b4216602075a',1,'UcxArray::data()'],['../structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2',1,'UcxList::data()'],['../structUcxKey.html#a6176109f25b34f3fa92bcfbc8ae7a88c',1,'UcxKey::data()'],['../structUcxMapKey.html#ab71d1841e4f538628c00f782267fb6d5',1,'UcxMapKey::data()'],['../structUcxMapElement.html#abbd7f3bf5beef370f702d2d5bb07733c',1,'UcxMapElement::data()'],['../structUcxMempool.html#ae98c1b0150bb119ee0a8506a6f310d6e',1,'UcxMempool::data()']]], + ['dateformat',['dateformat',['../structUcxLogger.html#a086f75df0f6c81ec491f25c0a4d9262b',1,'UcxLogger']]], + ['delimiter',['delimiter',['../structUcxProperties.html#af6adb3f69616cf9d2bb5ea7b4d837ca5',1,'UcxProperties']]], + ['destructor',['destructor',['../structucx__memchunk.html#ac7b5e3fda47b917d6fb2a1d7ea28447b',1,'ucx_memchunk::destructor()'],['../structucx__regdestr.html#acea2a3bb66909aa800a931ac8b0cce56',1,'ucx_regdestr::destructor()']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_4.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_4.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_4.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_4.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,5 @@ +var searchData= +[ + ['elemsize',['elemsize',['../structUcxArray.html#ac4e9ecdf8a8d010644f6e44dfef8190f',1,'UcxArray']]], + ['error',['error',['../structUcxProperties.html#a34f71a6ab6dcb6892e3b4eb802e75bff',1,'UcxProperties']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_5.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_5.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_5.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_5.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,6 @@ +var searchData= +[ + ['failure',['failure',['../structUcxTestSuite.html#abfd240541d1e956e49cde0ac36286951',1,'UcxTestSuite']]], + ['flags',['flags',['../structUcxBuffer.html#ac642e07b0a03be5aac48eb4aa5bec2f7',1,'UcxBuffer']]], + ['free',['free',['../structUcxAllocator.html#aecce1840378ed53f1002190f4f87026f',1,'UcxAllocator']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_6.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_6.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_6.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_6.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,5 @@ +var searchData= +[ + ['hash',['hash',['../structUcxKey.html#aac9d372ac34a4cbd8459e2b04e505752',1,'UcxKey::hash()'],['../structUcxMapKey.html#a34c1f8fec98174583944fffd30e7c913',1,'UcxMapKey::hash()']]], + ['height',['height',['../structUcxAVLNode.html#af129fd32863a7c35e82c5cd9d11dc95a',1,'UcxAVLNode']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_7.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_7.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_7.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_7.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['index',['index',['../structUcxMapIterator.html#ac2376545c8816dd6895de4995e558c65',1,'UcxMapIterator']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_8.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_8.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_8.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_8.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,4 @@ +var searchData= +[ + ['key',['key',['../structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6',1,'UcxAVLNode::key()'],['../structUcxMapElement.html#aa446141b708e106e2c8de1303318187c',1,'UcxMapElement::key()']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_9.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_9.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_9.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_9.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,8 @@ +var searchData= +[ + ['left',['left',['../structUcxAVLNode.html#ad3a1c733f2c1cc81ac527f846fc24b9c',1,'UcxAVLNode']]], + ['len',['len',['../structUcxKey.html#abef01de37f355688f2ac797d2c280683',1,'UcxKey::len()'],['../structUcxMapKey.html#a504d46caa45c79cd87ff8cd835654270',1,'UcxMapKey::len()']]], + ['length',['length',['../structsstr__t.html#a5cf571708cdff92e45f08458f2b98229',1,'sstr_t::length()'],['../structscstr__t.html#aaa0229f64f1057b6f65adededaa5a172',1,'scstr_t::length()']]], + ['level',['level',['../structUcxLogger.html#a2e0ee94c25b2307096c7970280d189cd',1,'UcxLogger']]], + ['levels',['levels',['../structUcxLogger.html#a187129f7bc6e5064b3d92a5f1217f396',1,'UcxLogger']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_a.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_a.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_a.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_a.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,6 @@ +var searchData= +[ + ['malloc',['malloc',['../structUcxAllocator.html#a013376172be39ed54f77c4be6898845a',1,'UcxAllocator']]], + ['map',['map',['../structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790',1,'UcxMap::map()'],['../structUcxMapIterator.html#af88d6e22547d09fe1d665dd650dcdb95',1,'UcxMapIterator::map()']]], + ['mask',['mask',['../structUcxLogger.html#a1de0db2e02dcf03366268f6943f8b97c',1,'UcxLogger']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_b.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_b.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_b.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_b.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,5 @@ +var searchData= +[ + ['ndata',['ndata',['../structUcxMempool.html#aa3a73ab231e1bc207d526f46f1c1e23a',1,'UcxMempool']]], + ['next',['next',['../structUcxList.html#a82a1818f1abf765b026fa91478569a8f',1,'UcxList::next()'],['../structUcxMapElement.html#a99fe8188b0889201d70ff5f922deef51',1,'UcxMapElement::next()'],['../structUcxTestList.html#aeebb80ff75d9f6f82ab6dc2641a3c74e',1,'UcxTestList::next()']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_c.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_c.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_c.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_c.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,8 @@ +var searchData= +[ + ['parent',['parent',['../structUcxAVLNode.html#afc4e3b4f452aa2d91cabb2135b9d42f7',1,'UcxAVLNode']]], + ['pool',['pool',['../structUcxAllocator.html#a1b78012998d1c28be86dc595f8f0aac9',1,'UcxAllocator']]], + ['pos',['pos',['../structUcxBuffer.html#a7a64288f002cf62b492e2ea49c79615c',1,'UcxBuffer::pos()'],['../structUcxProperties.html#addd36ac8e5e42241c0a57453633970db',1,'UcxProperties::pos()']]], + ['prev',['prev',['../structUcxList.html#a0f1fddce9088b9c1414745d0b1b5c08b',1,'UcxList::prev()'],['../structucx__stack__metadata.html#ad46d2e8e5b0acf05f2def41d451c5579',1,'ucx_stack_metadata::prev()']]], + ['ptr',['ptr',['../structucx__regdestr.html#aac0e9ec8df4aab08728b4f8292b5f5e7',1,'ucx_regdestr::ptr()'],['../structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0',1,'sstr_t::ptr()'],['../structscstr__t.html#a305fd48934b474a9bf4a40869030e391',1,'scstr_t::ptr()']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_d.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_d.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_d.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_d.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,6 @@ +var searchData= +[ + ['realloc',['realloc',['../structUcxAllocator.html#a3550e3847f31d9e9ce3ffcb0d3440c15',1,'UcxAllocator']]], + ['right',['right',['../structUcxAVLNode.html#a7cbaa31dba8c7a89f4f8f7905f6fd238',1,'UcxAVLNode']]], + ['root',['root',['../structUcxAVLTree.html#a393a8fc99eb2c290d3cb67170081d742',1,'UcxAVLTree']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_e.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_e.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_e.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_e.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,7 @@ +var searchData= +[ + ['size',['size',['../structUcxArray.html#a20c11f2c9048cda80062842b7c094e20',1,'UcxArray::size()'],['../structUcxBuffer.html#aec0aea8325394951d5ad4a9fbb8e1ac7',1,'UcxBuffer::size()'],['../structUcxMap.html#afe120846b26d99580a7ff1276464e838',1,'UcxMap::size()'],['../structUcxMempool.html#a304729986f2894971d0469e71e196bf0',1,'UcxMempool::size()'],['../structUcxStack.html#a4df86b1917bfc3bbf760220870638143',1,'UcxStack::size()'],['../structucx__stack__metadata.html#ae2a2848b721cfa44a7e963484c5e4b28',1,'ucx_stack_metadata::size()']]], + ['space',['space',['../structUcxBuffer.html#a1a5076e85acb84b715a53bc0f37fb721',1,'UcxBuffer::space()'],['../structUcxStack.html#af64d528744bf3a47fec87d2e45d2992f',1,'UcxStack::space()']]], + ['stream',['stream',['../structUcxLogger.html#a33fddf4791e8d49e479ecc78bf5d1b9e',1,'UcxLogger']]], + ['success',['success',['../structUcxTestSuite.html#a6cefa870a3c2e38d6ee682e38643dbbb',1,'UcxTestSuite']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_f.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_f.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,26 @@ + + + + + + + + + +
    +
    Loading...
    +
    + +
    Searching...
    +
    No Matches
    + +
    + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/search/variables_f.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/search/variables_f.js Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,9 @@ +var searchData= +[ + ['test',['test',['../structUcxTestList.html#a6022faa52e772b073141ca0a2f5a56c9',1,'UcxTestList']]], + ['tests',['tests',['../structUcxTestSuite.html#a630677a70ebc2c3296704cda3196492b',1,'UcxTestSuite']]], + ['tmp',['tmp',['../structUcxProperties.html#a68556d4260153f58dde44e4c365edce6',1,'UcxProperties']]], + ['tmpcap',['tmpcap',['../structUcxProperties.html#a5af10131ea9f679b4ee174499f92e210',1,'UcxProperties']]], + ['tmplen',['tmplen',['../structUcxProperties.html#a8a81853d5903bee2f4e1fa53fdffae6e',1,'UcxProperties']]], + ['top',['top',['../structUcxStack.html#af0ff6f58edce469f17683013b86ade27',1,'UcxStack']]] +]; diff -r 92e482410453 -r d345541018fa docs/api-2.1/splitbar.png Binary file docs/api-2.1/splitbar.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/stack_8h.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/stack_8h.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,677 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/stack.h File Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    stack.h File Reference
    +
    +
    + +

    Default stack memory allocation implementation. +More...

    +
    #include "ucx.h"
    +#include "allocator.h"
    +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Data Structures

    struct  UcxStack
     UCX stack structure. More...
     
    struct  ucx_stack_metadata
     Metadata for each UCX stack element. More...
     
    + + + + + + + + + + + + + +

    +Macros

    #define ucx_stack_topsize(stack)
     Returns the size of the top most element. More...
     
    #define ucx_stack_pop(stack, dest)   ucx_stack_popn(stack, dest, (size_t)-1)
     Removes the top most element from the stack and copies the content to dest, if specified. More...
     
    #define ucx_stack_empty(stack)   (!(stack)->top)
     Checks, if the stack is empty. More...
     
    #define ucx_stack_dim(size, elems)
     Computes a recommended size for the stack memory area. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    void ucx_stack_init (UcxStack *stack, char *space, size_t size)
     Initializes UcxStack structure with memory. More...
     
    void * ucx_stack_malloc (UcxStack *stack, size_t n)
     Allocates stack memory. More...
     
    void * ucx_stack_push (UcxStack *stack, size_t n, const void *data)
     Allocates memory with ucx_stack_malloc() and copies the specified data if the allocation was successful. More...
     
    void * ucx_stack_calloc (UcxStack *stack, size_t nelem, size_t elsize)
     Allocates an array of stack memory. More...
     
    void * ucx_stack_pusharr (UcxStack *stack, size_t nelem, size_t elsize, const void *data)
     Allocates memory with ucx_stack_calloc() and copies the specified data if the allocation was successful. More...
     
    void * ucx_stack_realloc (UcxStack *stack, void *ptr, size_t n)
     Reallocates memory on the stack. More...
     
    void ucx_stack_free (UcxStack *stack, void *ptr)
     Frees memory on the stack. More...
     
    void ucx_stack_popn (UcxStack *stack, void *dest, size_t n)
     Removes the top most element from the stack and copies the content to dest. More...
     
    size_t ucx_stack_avail (UcxStack *stack)
     Returns the remaining available memory on the specified stack. More...
     
    +

    Detailed Description

    +

    Default stack memory allocation implementation.

    +
    Author
    Mike Becker
    +
    +Olaf Wintermann
    +

    Macro Definition Documentation

    + +

    ◆ ucx_stack_dim

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define ucx_stack_dim( size,
     elems 
    )
    +
    +Value:
    (size+sizeof(struct ucx_stack_metadata) * \
    (elems + 1))
    Metadata for each UCX stack element.
    Definition: stack.h:69
    +
    +

    Computes a recommended size for the stack memory area.

    +

    Note, that reallocations have not been taken into account, so you might need to reserve twice as much memory to allow many reallocations.

    +
    Parameters
    + + + +
    sizethe approximate payload
    elemsthe approximate count of element allocations
    +
    +
    +
    Returns
    a recommended size for the stack space based on the information provided
    + +
    +
    + +

    ◆ ucx_stack_empty

    + +
    +
    + + + + + + + + +
    #define ucx_stack_empty( stack)   (!(stack)->top)
    +
    + +

    Checks, if the stack is empty.

    +
    Parameters
    + + +
    stacka pointer to the stack
    +
    +
    +
    Returns
    nonzero, if the stack is empty, zero otherwise
    + +
    +
    + +

    ◆ ucx_stack_pop

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define ucx_stack_pop( stack,
     dest 
    )   ucx_stack_popn(stack, dest, (size_t)-1)
    +
    + +

    Removes the top most element from the stack and copies the content to dest, if specified.

    +

    Use ucx_stack_topsize()# to get the amount of memory that must be available at the location of dest.

    +
    Parameters
    + + + +
    stacka pointer to the stack
    destthe location where the contents shall be written to, or NULL, if the element shall only be removed.
    +
    +
    +
    See also
    ucx_stack_free
    +
    +ucx_stack_popn
    + +
    +
    + +

    ◆ ucx_stack_topsize

    + +
    +
    + + + + + + + + +
    #define ucx_stack_topsize( stack)
    +
    +Value:
    ((stack)->top ? ((struct ucx_stack_metadata*)\
    (stack)->top - 1)->size : 0)
    Metadata for each UCX stack element.
    Definition: stack.h:69
    +
    +

    Returns the size of the top most element.

    +
    Parameters
    + + +
    stacka pointer to the stack
    +
    +
    +
    Returns
    the size of the top most element
    + +
    +
    +

    Function Documentation

    + +

    ◆ ucx_stack_avail()

    + +
    +
    + + + + + + + + +
    size_t ucx_stack_avail (UcxStackstack)
    +
    + +

    Returns the remaining available memory on the specified stack.

    +
    Parameters
    + + +
    stacka pointer to the stack
    +
    +
    +
    Returns
    the remaining available memory
    + +
    +
    + +

    ◆ ucx_stack_calloc()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void* ucx_stack_calloc (UcxStackstack,
    size_t nelem,
    size_t elsize 
    )
    +
    + +

    Allocates an array of stack memory.

    +

    The content of the allocated memory is set to zero.

    +
    Parameters
    + + + + +
    stacka pointer to the stack
    nelemamount of elements to allocate
    elsizeamount of memory per element
    +
    +
    +
    Returns
    a pointer to the allocated memory
    +
    See also
    ucx_allocator_calloc()
    + +
    +
    + +

    ◆ ucx_stack_free()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void ucx_stack_free (UcxStackstack,
    void * ptr 
    )
    +
    + +

    Frees memory on the stack.

    +

    Freeing stack memory behaves in a special way.

    +

    If the element, that should be freed, is the top most element of the stack, it is removed from the stack. Otherwise it is marked as freed. Marked elements are removed, when they become the top most elements of the stack.

    +
    Parameters
    + + + +
    stacka pointer to the stack
    ptra pointer to the memory that shall be freed
    +
    +
    + +
    +
    + +

    ◆ ucx_stack_init()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void ucx_stack_init (UcxStackstack,
    char * space,
    size_t size 
    )
    +
    + +

    Initializes UcxStack structure with memory.

    +
    Parameters
    + + + + +
    stacka pointer to an uninitialized stack structure
    spacethe memory area that shall be managed
    sizesize of the memory area
    +
    +
    +
    Returns
    a new UcxStack structure
    + +
    +
    + +

    ◆ ucx_stack_malloc()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void* ucx_stack_malloc (UcxStackstack,
    size_t n 
    )
    +
    + +

    Allocates stack memory.

    +
    Parameters
    + + + +
    stacka pointer to the stack
    namount of memory to allocate
    +
    +
    +
    Returns
    a pointer to the allocated memory or NULL on stack overflow
    +
    See also
    ucx_allocator_malloc()
    + +
    +
    + +

    ◆ ucx_stack_popn()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void ucx_stack_popn (UcxStackstack,
    void * dest,
    size_t n 
    )
    +
    + +

    Removes the top most element from the stack and copies the content to dest.

    +

    This function copies at most n bytes to the destination, but the element is always freed as a whole. If the element was larger than n, the remaining data is lost.

    +
    Parameters
    + + + + +
    stacka pointer to the stack
    destthe location where the contents shall be written to
    ncopies at most n bytes to dest
    +
    +
    +
    See also
    ucx_stack_pop
    + +
    +
    + +

    ◆ ucx_stack_push()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void* ucx_stack_push (UcxStackstack,
    size_t n,
    const void * data 
    )
    +
    + +

    Allocates memory with ucx_stack_malloc() and copies the specified data if the allocation was successful.

    +
    Parameters
    + + + + +
    stacka pointer to the stack
    namount of memory to allocate
    dataa pointer to the data to copy
    +
    +
    +
    Returns
    a pointer to the allocated memory
    +
    See also
    ucx_stack_malloc
    + +
    +
    + +

    ◆ ucx_stack_pusharr()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void* ucx_stack_pusharr (UcxStackstack,
    size_t nelem,
    size_t elsize,
    const void * data 
    )
    +
    + +

    Allocates memory with ucx_stack_calloc() and copies the specified data if the allocation was successful.

    +
    Parameters
    + + + + + +
    stacka pointer to the stack
    nelemamount of elements to allocate
    elsizeamount of memory per element
    dataa pointer to the data
    +
    +
    +
    Returns
    a pointer to the allocated memory
    +
    See also
    ucx_stack_calloc
    + +
    +
    + +

    ◆ ucx_stack_realloc()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    void* ucx_stack_realloc (UcxStackstack,
    void * ptr,
    size_t n 
    )
    +
    + +

    Reallocates memory on the stack.

    +

    Shrinking memory is always safe. Extending memory can be very expensive.

    +
    Parameters
    + + + + +
    stackthe stack
    ptra pointer to the memory that shall be reallocated
    nthe new size of the memory
    +
    +
    +
    Returns
    a pointer to the new location of the memory
    +
    See also
    ucx_allocator_realloc()
    + +
    +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/stack_8h_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/stack_8h_source.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,99 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/stack.h Source File + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    stack.h
    +
    +
    +Go to the documentation of this file.
    1 /*
    2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    3  *
    4  * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions are met:
    8  *
    9  * 1. Redistributions of source code must retain the above copyright
    10  * notice, this list of conditions and the following disclaimer.
    11  *
    12  * 2. Redistributions in binary form must reproduce the above copyright
    13  * notice, this list of conditions and the following disclaimer in the
    14  * documentation and/or other materials provided with the distribution.
    15  *
    16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
    20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    26  * POSSIBILITY OF SUCH DAMAGE.
    27  */
    28 
    38 #ifndef UCX_STACK_H
    39 #define UCX_STACK_H
    40 
    41 #include "ucx.h"
    42 #include "allocator.h"
    43 
    44 #ifdef __cplusplus
    45 extern "C" {
    46 #endif
    47 
    48 
    52 typedef struct {
    55 
    57  size_t size;
    58 
    60  char *space;
    61 
    63  char *top;
    64 } UcxStack;
    65 
    73  char *prev;
    74 
    76  size_t size;
    77 };
    78 
    87 void ucx_stack_init(UcxStack *stack, char* space, size_t size);
    88 
    98 void *ucx_stack_malloc(UcxStack *stack, size_t n);
    99 
    110 void *ucx_stack_push(UcxStack *stack, size_t n, const void *data);
    111 
    123 void *ucx_stack_calloc(UcxStack *stack, size_t nelem, size_t elsize);
    124 
    136 void *ucx_stack_pusharr(UcxStack *stack,
    137  size_t nelem, size_t elsize, const void *data);
    138 
    150 void *ucx_stack_realloc(UcxStack *stack, void *ptr, size_t n);
    151 
    164 void ucx_stack_free(UcxStack *stack, void *ptr);
    165 
    166 
    172 #define ucx_stack_topsize(stack) ((stack)->top ? ((struct ucx_stack_metadata*)\
    173  (stack)->top - 1)->size : 0)
    174 
    188 #define ucx_stack_pop(stack, dest) ucx_stack_popn(stack, dest, (size_t)-1)
    189 
    203 void ucx_stack_popn(UcxStack *stack, void *dest, size_t n);
    204 
    211 size_t ucx_stack_avail(UcxStack *stack);
    212 
    219 #define ucx_stack_empty(stack) (!(stack)->top)
    220 
    231 #define ucx_stack_dim(size, elems) (size+sizeof(struct ucx_stack_metadata) * \
    232  (elems + 1))
    233 
    234 
    235 #ifdef __cplusplus
    236 }
    237 #endif
    238 
    239 #endif /* UCX_STACK_H */
    240 
    size_t size
    Stack size.
    Definition: stack.h:57
    +
    UCX stack structure.
    Definition: stack.h:52
    +
    void ucx_stack_free(UcxStack *stack, void *ptr)
    Frees memory on the stack.
    Definition: stack.c:106
    +
    Main UCX Header providing most common definitions.
    +
    void * ucx_stack_malloc(UcxStack *stack, size_t n)
    Allocates stack memory.
    Definition: stack.c:53
    +
    void * ucx_stack_push(UcxStack *stack, size_t n, const void *data)
    Allocates memory with ucx_stack_malloc() and copies the specified data if the allocation was successf...
    Definition: stack.c:148
    +
    Metadata for each UCX stack element.
    Definition: stack.h:69
    +
    void * ucx_stack_realloc(UcxStack *stack, void *ptr, size_t n)
    Reallocates memory on the stack.
    Definition: stack.c:79
    +
    char * prev
    Location of the previous element (NULL if this is the first)
    Definition: stack.h:73
    +
    size_t ucx_stack_avail(UcxStack *stack)
    Returns the remaining available memory on the specified stack.
    Definition: stack.c:135
    +
    UCX allocator data structure containing memory management functions.
    Definition: allocator.h:88
    +
    char * space
    Pointer to the bottom of the stack.
    Definition: stack.h:60
    +
    void ucx_stack_popn(UcxStack *stack, void *dest, size_t n)
    Removes the top most element from the stack and copies the content to dest.
    Definition: stack.c:118
    +
    Allocator for custom memory management.
    +
    void ucx_stack_init(UcxStack *stack, char *space, size_t size)
    Initializes UcxStack structure with memory.
    Definition: stack.c:41
    +
    size_t size
    Size of this element.
    Definition: stack.h:76
    +
    void * ucx_stack_pusharr(UcxStack *stack, size_t nelem, size_t elsize, const void *data)
    Allocates memory with ucx_stack_calloc() and copies the specified data if the allocation was successf...
    Definition: stack.c:156
    +
    void * ucx_stack_calloc(UcxStack *stack, size_t nelem, size_t elsize)
    Allocates an array of stack memory.
    Definition: stack.c:73
    +
    char * top
    Pointer to the top of the stack.
    Definition: stack.h:63
    +
    UcxAllocator allocator
    UcxAllocator based on this stack.
    Definition: stack.h:54
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/string_8h.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/string_8h.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,2598 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/string.h File Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    string.h File Reference
    +
    +
    + +

    Bounded string implementation. +More...

    +
    #include "ucx.h"
    +#include "allocator.h"
    +#include <stddef.h>
    +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Data Structures

    struct  sstr_t
     The UCX string structure. More...
     
    struct  scstr_t
     The UCX string structure for immutable (constant) strings. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Macros

    +#define ST(s)   { s, sizeof(s)-1 }
     Shortcut for a sstr_t struct or scstr_t struct literal.
     
    #define S(s)   sstrn(s, sizeof(s)-1)
     Shortcut for the conversion of a C string to a sstr_t. More...
     
    #define SC(s)   scstrn(s, sizeof(s)-1)
     Shortcut for the conversion of a C string to a scstr_t. More...
     
    #define SFMT(s)   (int) (s).length, (s).ptr
     Expands a sstr_t or scstr_t to printf arguments. More...
     
    #define PRIsstr   ".*s"
     Format specifier for a sstr_t or scstr_t. More...
     
    #define SCSTR(str)   ucx_ss2c_s(str)
     Converts a UCX string to an immutable UCX string (scstr_t). More...
     
    #define sstrnlen(count, ...)   scstrnlen(count, __VA_ARGS__)
     Returns the accumulated length of all specified strings. More...
     
    #define sstrcat(count, s1, ...)   scstrcat(count, SCSTR(s1), __VA_ARGS__)
     Concatenates two or more strings. More...
     
    #define sstrcat_a(alloc, count, s1, ...)   scstrcat_a(alloc, count, SCSTR(s1), __VA_ARGS__)
     Concatenates two or more strings using a UcxAllocator. More...
     
    #define sstrstr(string, match)   scstrsstr(string, SCSTR(match))
     Returns a substring starting at the location of the first occurrence of the specified string. More...
     
    #define sstrscstr(string, match)   scstrscstr(string, SCSTR(match))
     Returns an immutable substring starting at the location of the first occurrence of the specified immutable string. More...
     
    #define sstrsplit(string, delim, count)   scstrsplit(SCSTR(string), SCSTR(delim), count)
     Splits a string into parts by using a delimiter string. More...
     
    #define sstrsplit_a(allocator, string, delim, count)   scstrsplit_a(allocator, SCSTR(string), SCSTR(delim), count)
     Performing sstrsplit() using a UcxAllocator. More...
     
    #define sstrcmp(s1, s2)   scstrcmp(SCSTR(s1), SCSTR(s2))
     Compares two UCX strings with standard memcmp(). More...
     
    #define sstrcasecmp(s1, s2)   scstrcasecmp(SCSTR(s1), SCSTR(s2))
     Compares two UCX strings ignoring the case. More...
     
    #define sstrdup(string)   scstrdup(SCSTR(string))
     Creates a duplicate of the specified string. More...
     
    #define sstrdup_a(allocator, string)   scstrdup_a(allocator, SCSTR(string))
     Creates a duplicate of the specified string using a UcxAllocator. More...
     
    #define sstrprefix(string, prefix)   scstrprefix(SCSTR(string), SCSTR(prefix))
     Checks, if a string has a specific prefix. More...
     
    #define sstrsuffix(string, suffix)   scstrsuffix(SCSTR(string), SCSTR(suffix))
     Checks, if a string has a specific suffix. More...
     
    #define sstrcaseprefix(string, prefix)   scstrcaseprefix(SCSTR(string), SCSTR(prefix))
     Checks, if a string has a specific prefix, ignoring the case. More...
     
    #define sstrcasesuffix(string, suffix)   scstrcasesuffix(SCSTR(string), SCSTR(suffix))
     Checks, if a string has a specific suffix, ignoring the case. More...
     
    #define sstrlower(string)   scstrlower(SCSTR(string))
     Returns a lower case version of a string. More...
     
    #define sstrlower_a(allocator, string)   scstrlower_a(allocator, SCSTR(string))
     Returns a lower case version of a string. More...
     
    #define sstrupper(string)   scstrupper(SCSTR(string))
     Returns a upper case version of a string. More...
     
    #define sstrupper_a(allocator, string)   scstrupper_a(allocator, string)
     Returns a upper case version of a string. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    scstr_t ucx_sc2sc (scstr_t str)
     One of two type adjustment functions that return an scstr_t. More...
     
    scstr_t ucx_ss2sc (sstr_t str)
     One of two type adjustment functions that return an scstr_t. More...
     
    scstr_t ucx_ss2c_s ()
     Converts a UCX string to an immutable UCX string (scstr_t). More...
     
    sstr_t sstr (char *cstring)
     Creates a new sstr_t based on a C string. More...
     
    sstr_t sstrn (char *cstring, size_t length)
     Creates a new sstr_t of the specified length based on a C string. More...
     
    scstr_t scstr (const char *cstring)
     Creates a new scstr_t based on a constant C string. More...
     
    scstr_t scstrn (const char *cstring, size_t length)
     Creates a new scstr_t of the specified length based on a constant C string. More...
     
    size_t scstrnlen (size_t count,...)
     Returns the accumulated length of all specified strings. More...
     
    sstr_t scstrcat (size_t count, scstr_t s1,...)
     Concatenates two or more strings. More...
     
    sstr_t scstrcat_a (UcxAllocator *alloc, size_t count, scstr_t s1,...)
     Concatenates two or more strings using a UcxAllocator. More...
     
    sstr_t sstrsubs (sstr_t string, size_t start)
     Returns a substring starting at the specified location. More...
     
    sstr_t sstrsubsl (sstr_t string, size_t start, size_t length)
     Returns a substring with the given length starting at the specified location. More...
     
    scstr_t scstrsubs (scstr_t string, size_t start)
     Returns a substring of an immutable string starting at the specified location. More...
     
    scstr_t scstrsubsl (scstr_t string, size_t start, size_t length)
     Returns a substring of an immutable string with a maximum length starting at the specified location. More...
     
    sstr_t sstrchr (sstr_t string, int chr)
     Returns a substring starting at the location of the first occurrence of the specified character. More...
     
    sstr_t sstrrchr (sstr_t string, int chr)
     Returns a substring starting at the location of the last occurrence of the specified character. More...
     
    scstr_t scstrchr (scstr_t string, int chr)
     Returns an immutable substring starting at the location of the first occurrence of the specified character. More...
     
    scstr_t scstrrchr (scstr_t string, int chr)
     Returns an immutable substring starting at the location of the last occurrence of the specified character. More...
     
    sstr_t scstrsstr (sstr_t string, scstr_t match)
     Returns a substring starting at the location of the first occurrence of the specified string. More...
     
    scstr_t scstrscstr (scstr_t string, scstr_t match)
     Returns an immutable substring starting at the location of the first occurrence of the specified immutable string. More...
     
    sstr_tscstrsplit (scstr_t string, scstr_t delim, ssize_t *count)
     Splits a string into parts by using a delimiter string. More...
     
    sstr_tscstrsplit_a (UcxAllocator *allocator, scstr_t string, scstr_t delim, ssize_t *count)
     Performing scstrsplit() using a UcxAllocator. More...
     
    int scstrcmp (scstr_t s1, scstr_t s2)
     Compares two UCX strings with standard memcmp(). More...
     
    int scstrcasecmp (scstr_t s1, scstr_t s2)
     Compares two UCX strings ignoring the case. More...
     
    sstr_t scstrdup (scstr_t string)
     Creates a duplicate of the specified string. More...
     
    sstr_t scstrdup_a (UcxAllocator *allocator, scstr_t string)
     Creates a duplicate of the specified string using a UcxAllocator. More...
     
    sstr_t sstrtrim (sstr_t string)
     Omits leading and trailing spaces. More...
     
    scstr_t scstrtrim (scstr_t string)
     Omits leading and trailing spaces. More...
     
    int scstrprefix (scstr_t string, scstr_t prefix)
     Checks, if a string has a specific prefix. More...
     
    int scstrsuffix (scstr_t string, scstr_t suffix)
     Checks, if a string has a specific suffix. More...
     
    int scstrcaseprefix (scstr_t string, scstr_t prefix)
     Checks, if a string has a specific prefix, ignoring the case. More...
     
    int scstrcasesuffix (scstr_t string, scstr_t suffix)
     Checks, if a string has a specific suffix, ignoring the case. More...
     
    sstr_t scstrlower (scstr_t string)
     Returns a lower case version of a string. More...
     
    sstr_t scstrlower_a (UcxAllocator *allocator, scstr_t string)
     Returns a lower case version of a string. More...
     
    sstr_t scstrupper (scstr_t string)
     Returns a upper case version of a string. More...
     
    sstr_t scstrupper_a (UcxAllocator *allocator, scstr_t string)
     Returns a upper case version of a string. More...
     
    +

    Detailed Description

    +

    Bounded string implementation.

    +

    The UCX strings (sstr_t) provide an alternative to C strings. The main difference to C strings is, that sstr_t does not need to be NULL-terminated. Instead the length is stored within the structure.

    +

    When using sstr_t, developers must be full aware of what type of string (NULL-terminated) or not) they are using, when accessing the char* ptr directly.

    +

    The UCX string module provides some common string functions, known from standard libc, working with sstr_t.

    +
    Author
    Mike Becker
    +
    +Olaf Wintermann
    +

    Macro Definition Documentation

    + +

    ◆ PRIsstr

    + +
    +
    + + + + +
    #define PRIsstr   ".*s"
    +
    + +

    Format specifier for a sstr_t or scstr_t.

    + +
    +
    + +

    ◆ S

    + +
    +
    + + + + + + + + +
    #define S( s)   sstrn(s, sizeof(s)-1)
    +
    + +

    Shortcut for the conversion of a C string to a sstr_t.

    + +
    +
    + +

    ◆ SC

    + +
    +
    + + + + + + + + +
    #define SC( s)   scstrn(s, sizeof(s)-1)
    +
    + +

    Shortcut for the conversion of a C string to a scstr_t.

    + +
    +
    + +

    ◆ SCSTR

    + +
    +
    + + + + + + + + +
    #define SCSTR( str)   ucx_ss2c_s(str)
    +
    + +

    Converts a UCX string to an immutable UCX string (scstr_t).

    +
    Parameters
    + + +
    strsome UCX string
    +
    +
    +
    Returns
    the an immutable version of the provided string
    + +
    +
    + +

    ◆ SFMT

    + +
    +
    + + + + + + + + +
    #define SFMT( s)   (int) (s).length, (s).ptr
    +
    + +

    Expands a sstr_t or scstr_t to printf arguments.

    + +
    +
    + +

    ◆ sstrcasecmp

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define sstrcasecmp( s1,
     s2 
    )   scstrcasecmp(SCSTR(s1), SCSTR(s2))
    +
    + +

    Compares two UCX strings ignoring the case.

    +

    At first it compares the sstr_t.length attribute of the two strings. If and only if the lengths match, both strings are compared char by char ignoring the case.

    +
    Parameters
    + + + +
    s1the first string
    s2the second string
    +
    +
    +
    Returns
    -1, if the length of s1 is less than the length of s2 or 1, if the length of s1 is greater than the length of s2 or the result of the platform specific string comparison function ignoring the case.
    + +
    +
    + +

    ◆ sstrcaseprefix

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define sstrcaseprefix( string,
     prefix 
    )   scstrcaseprefix(SCSTR(string), SCSTR(prefix))
    +
    + +

    Checks, if a string has a specific prefix, ignoring the case.

    +
    Parameters
    + + + +
    stringthe string to check
    prefixthe prefix the string should have
    +
    +
    +
    Returns
    1, if and only if the string has the specified prefix, 0 otherwise
    + +
    +
    + +

    ◆ sstrcasesuffix

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define sstrcasesuffix( string,
     suffix 
    )   scstrcasesuffix(SCSTR(string), SCSTR(suffix))
    +
    + +

    Checks, if a string has a specific suffix, ignoring the case.

    +
    Parameters
    + + + +
    stringthe string to check
    suffixthe suffix the string should have
    +
    +
    +
    Returns
    1, if and only if the string has the specified suffix, 0 otherwise
    + +
    +
    + +

    ◆ sstrcat

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    #define sstrcat( count,
     s1,
     ... 
    )   scstrcat(count, SCSTR(s1), __VA_ARGS__)
    +
    + +

    Concatenates two or more strings.

    +

    The resulting string will be allocated by standard malloc(). So developers MUST pass the sstr_t.ptr to free().

    +

    The sstr_t.ptr of the return value will always be NULL- terminated.

    +
    Parameters
    + + + + +
    countthe total number of strings to concatenate
    s1first string
    ...all remaining strings
    +
    +
    +
    Returns
    the concatenated string
    + +
    +
    + +

    ◆ sstrcat_a

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #define sstrcat_a( alloc,
     count,
     s1,
     ... 
    )   scstrcat_a(alloc, count, SCSTR(s1), __VA_ARGS__)
    +
    + +

    Concatenates two or more strings using a UcxAllocator.

    +

    The resulting string must be freed by the allocators free() implementation.

    +

    The sstr_t.ptr of the return value will always be NULL- terminated.

    +
    Parameters
    + + + + + +
    allocthe allocator to use
    countthe total number of strings to concatenate
    s1first string
    ...all remaining strings
    +
    +
    +
    Returns
    the concatenated string
    +
    See also
    sstrcat()
    + +
    +
    + +

    ◆ sstrcmp

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define sstrcmp( s1,
     s2 
    )   scstrcmp(SCSTR(s1), SCSTR(s2))
    +
    + +

    Compares two UCX strings with standard memcmp().

    +

    At first it compares the sstr_t.length attribute of the two strings. The memcmp() function is called, if and only if the lengths match.

    +
    Parameters
    + + + +
    s1the first string
    s2the second string
    +
    +
    +
    Returns
    -1, if the length of s1 is less than the length of s2 or 1, if the length of s1 is greater than the length of s2 or the result of memcmp() otherwise (i.e. 0 if the strings match)
    + +
    +
    + +

    ◆ sstrdup

    + +
    +
    + + + + + + + + +
    #define sstrdup( string)   scstrdup(SCSTR(string))
    +
    + +

    Creates a duplicate of the specified string.

    +

    The new sstr_t will contain a copy allocated by standard malloc(). So developers MUST pass the sstr_t.ptr to free().

    +

    The sstr_t.ptr of the return value will always be NULL- terminated, regardless of the argument.

    +
    Parameters
    + + +
    stringthe string to duplicate
    +
    +
    +
    Returns
    a duplicate of the string
    +
    See also
    sstrdup_a()
    + +
    +
    + +

    ◆ sstrdup_a

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define sstrdup_a( allocator,
     string 
    )   scstrdup_a(allocator, SCSTR(string))
    +
    + +

    Creates a duplicate of the specified string using a UcxAllocator.

    +

    The new sstr_t will contain a copy allocated by the allocators UcxAllocator.malloc() function. So it is implementation depended, whether the returned sstr_t.ptr pointer must be passed to the allocators UcxAllocator.free() function manually.

    +

    The sstr_t.ptr of the return value will always be NULL- terminated, regardless of the argument.

    +
    Parameters
    + + + +
    allocatora valid instance of a UcxAllocator
    stringthe string to duplicate
    +
    +
    +
    Returns
    a duplicate of the string
    +
    See also
    scstrdup()
    + +
    +
    + +

    ◆ sstrlower

    + +
    +
    + + + + + + + + +
    #define sstrlower( string)   scstrlower(SCSTR(string))
    +
    + +

    Returns a lower case version of a string.

    +

    This function creates a duplicate of the input string, first (see sstrdup()).

    +
    Parameters
    + + +
    stringthe input string
    +
    +
    +
    Returns
    the resulting lower case string
    + +
    +
    + +

    ◆ sstrlower_a

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define sstrlower_a( allocator,
     string 
    )   scstrlower_a(allocator, SCSTR(string))
    +
    + +

    Returns a lower case version of a string.

    +

    This function creates a duplicate of the input string, first (see sstrdup_a()).

    +
    Parameters
    + + + +
    allocatorthe allocator used for duplicating the string
    stringthe input string
    +
    +
    +
    Returns
    the resulting lower case string
    + +
    +
    + +

    ◆ sstrnlen

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define sstrnlen( count,
     ... 
    )   scstrnlen(count, __VA_ARGS__)
    +
    + +

    Returns the accumulated length of all specified strings.

    +

    Attention: if the count argument is larger than the count of the specified strings, the behavior is undefined.

    +
    Parameters
    + + + +
    countthe total number of specified strings
    ...all strings
    +
    +
    +
    Returns
    the cumulated length of all strings
    + +
    +
    + +

    ◆ sstrprefix

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define sstrprefix( string,
     prefix 
    )   scstrprefix(SCSTR(string), SCSTR(prefix))
    +
    + +

    Checks, if a string has a specific prefix.

    +
    Parameters
    + + + +
    stringthe string to check
    prefixthe prefix the string should have
    +
    +
    +
    Returns
    1, if and only if the string has the specified prefix, 0 otherwise
    + +
    +
    + +

    ◆ sstrscstr

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define sstrscstr( string,
     match 
    )   scstrscstr(string, SCSTR(match))
    +
    + +

    Returns an immutable substring starting at the location of the first occurrence of the specified immutable string.

    +

    If the string does not contain the other string, an empty string is returned.

    +

    If match is an empty string, the complete string is returned.

    +
    Parameters
    + + + +
    stringthe string to be scanned
    matchstring containing the sequence of characters to match
    +
    +
    +
    Returns
    a substring starting at the first occurrence of match, or an empty string, if the sequence is not present in string
    + +
    +
    + +

    ◆ sstrsplit

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    #define sstrsplit( string,
     delim,
     count 
    )   scstrsplit(SCSTR(string), SCSTR(delim), count)
    +
    + +

    Splits a string into parts by using a delimiter string.

    +

    This function will return NULL, if one of the following happens:

      +
    • +the string length is zero
    • +
    • +the delimeter length is zero
    • +
    • +the string equals the delimeter
    • +
    • +memory allocation fails
    • +
    +

    The integer referenced by count is used as input and determines the maximum size of the resulting array, i.e. the maximum count of splits to perform + 1.

    +

    The integer referenced by count is also used as output and is set to

      +
    • +-2, on memory allocation errors
    • +
    • +-1, if either the string or the delimiter is an empty string
    • +
    • +0, if the string equals the delimiter
    • +
    • +1, if the string does not contain the delimiter
    • +
    • +the count of array items, otherwise
    • +
    +

    If the string starts with the delimiter, the first item of the resulting array will be an empty string.

    +

    If the string ends with the delimiter and the maximum list size is not exceeded, the last array item will be an empty string. In case the list size would be exceeded, the last array item will be the remaining string after the last split, including the terminating delimiter.

    +

    Attention: The array pointer AND all sstr_t.ptr of the array items must be manually passed to free(). Use sstrsplit_a() with an allocator to managed memory, to avoid this.

    +
    Parameters
    + + + + +
    stringthe string to split
    delimthe delimiter string
    countIN: the maximum size of the resulting array (0 = no limit), OUT: the actual size of the array
    +
    +
    +
    Returns
    a sstr_t array containing the split strings or NULL on error
    +
    See also
    sstrsplit_a()
    + +
    +
    + +

    ◆ sstrsplit_a

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #define sstrsplit_a( allocator,
     string,
     delim,
     count 
    )   scstrsplit_a(allocator, SCSTR(string), SCSTR(delim), count)
    +
    + +

    Performing sstrsplit() using a UcxAllocator.

    +

    Read the description of sstrsplit() for details.

    +

    The memory for the sstr_t.ptr pointers of the array items and the memory for the sstr_t array itself are allocated by using the UcxAllocator.malloc() function.

    +
    Parameters
    + + + + + +
    allocatorthe UcxAllocator used for allocating memory
    stringthe string to split
    delimthe delimiter string
    countIN: the maximum size of the resulting array (0 = no limit), OUT: the actual size of the array
    +
    +
    +
    Returns
    a sstr_t array containing the split strings or NULL on error
    +
    See also
    sstrsplit()
    + +
    +
    + +

    ◆ sstrstr

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define sstrstr( string,
     match 
    )   scstrsstr(string, SCSTR(match))
    +
    + +

    Returns a substring starting at the location of the first occurrence of the specified string.

    +

    If the string does not contain the other string, an empty string is returned.

    +

    If match is an empty string, the complete string is returned.

    +
    Parameters
    + + + +
    stringthe string to be scanned
    matchstring containing the sequence of characters to match
    +
    +
    +
    Returns
    a substring starting at the first occurrence of match, or an empty string, if the sequence is not present in string
    + +
    +
    + +

    ◆ sstrsuffix

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define sstrsuffix( string,
     suffix 
    )   scstrsuffix(SCSTR(string), SCSTR(suffix))
    +
    + +

    Checks, if a string has a specific suffix.

    +
    Parameters
    + + + +
    stringthe string to check
    suffixthe suffix the string should have
    +
    +
    +
    Returns
    1, if and only if the string has the specified suffix, 0 otherwise
    + +
    +
    + +

    ◆ sstrupper

    + +
    +
    + + + + + + + + +
    #define sstrupper( string)   scstrupper(SCSTR(string))
    +
    + +

    Returns a upper case version of a string.

    +

    This function creates a duplicate of the input string, first (see sstrdup()).

    +
    Parameters
    + + +
    stringthe input string
    +
    +
    +
    Returns
    the resulting upper case string
    + +
    +
    + +

    ◆ sstrupper_a

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define sstrupper_a( allocator,
     string 
    )   scstrupper_a(allocator, string)
    +
    + +

    Returns a upper case version of a string.

    +

    This function creates a duplicate of the input string, first (see sstrdup_a()).

    +
    Parameters
    + + + +
    allocatorthe allocator used for duplicating the string
    stringthe input string
    +
    +
    +
    Returns
    the resulting upper case string
    + +
    +
    +

    Function Documentation

    + +

    ◆ scstr()

    + +
    +
    + + + + + + + + +
    scstr_t scstr (const char * cstring)
    +
    + +

    Creates a new scstr_t based on a constant C string.

    +

    The length is implicitly inferred by using a call to strlen().

    +

    Note: the scstr_t will share the specified pointer to the C string. If you do want a copy, use scstrdup() on the return value of this function.

    +
    Parameters
    + + +
    cstringthe C string to wrap
    +
    +
    +
    Returns
    a new scstr_t containing the C string
    +
    See also
    scstrn()
    + +
    +
    + +

    ◆ scstrcasecmp()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int scstrcasecmp (scstr_t s1,
    scstr_t s2 
    )
    +
    + +

    Compares two UCX strings ignoring the case.

    +

    At first it compares the scstr_t.length attribute of the two strings. If and only if the lengths match, both strings are compared char by char ignoring the case.

    +
    Parameters
    + + + +
    s1the first string
    s2the second string
    +
    +
    +
    Returns
    -1, if the length of s1 is less than the length of s2 or 1, if the length of s1 is greater than the length of s2 or the result of the platform specific string comparison function ignoring the case.
    + +
    +
    + +

    ◆ scstrcaseprefix()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int scstrcaseprefix (scstr_t string,
    scstr_t prefix 
    )
    +
    + +

    Checks, if a string has a specific prefix, ignoring the case.

    +
    Parameters
    + + + +
    stringthe string to check
    prefixthe prefix the string should have
    +
    +
    +
    Returns
    1, if and only if the string has the specified prefix, 0 otherwise
    + +
    +
    + +

    ◆ scstrcasesuffix()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int scstrcasesuffix (scstr_t string,
    scstr_t suffix 
    )
    +
    + +

    Checks, if a string has a specific suffix, ignoring the case.

    +
    Parameters
    + + + +
    stringthe string to check
    suffixthe suffix the string should have
    +
    +
    +
    Returns
    1, if and only if the string has the specified suffix, 0 otherwise
    + +
    +
    + +

    ◆ scstrcat()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    sstr_t scstrcat (size_t count,
    scstr_t s1,
     ... 
    )
    +
    + +

    Concatenates two or more strings.

    +

    The resulting string will be allocated by standard malloc(). So developers MUST pass the sstr_t.ptr to free().

    +

    The sstr_t.ptr of the return value will always be NULL- terminated.

    +
    Parameters
    + + + + +
    countthe total number of strings to concatenate
    s1first string
    ...all remaining strings
    +
    +
    +
    Returns
    the concatenated string
    + +
    +
    + +

    ◆ scstrcat_a()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    sstr_t scstrcat_a (UcxAllocatoralloc,
    size_t count,
    scstr_t s1,
     ... 
    )
    +
    + +

    Concatenates two or more strings using a UcxAllocator.

    +

    The resulting string must be freed by the allocators free() implementation.

    +

    The sstr_t.ptr of the return value will always be NULL- terminated.

    +
    Parameters
    + + + + + +
    allocthe allocator to use
    countthe total number of strings to concatenate
    s1first string
    ...all remaining strings
    +
    +
    +
    Returns
    the concatenated string
    +
    See also
    scstrcat()
    + +
    +
    + +

    ◆ scstrchr()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    scstr_t scstrchr (scstr_t string,
    int chr 
    )
    +
    + +

    Returns an immutable substring starting at the location of the first occurrence of the specified character.

    +

    If the string does not contain the character, an empty string is returned.

    +
    Parameters
    + + + +
    stringthe string where to locate the character
    chrthe character to locate
    +
    +
    +
    Returns
    a substring starting at the first location of chr
    +
    See also
    scstrsubs()
    + +
    +
    + +

    ◆ scstrcmp()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int scstrcmp (scstr_t s1,
    scstr_t s2 
    )
    +
    + +

    Compares two UCX strings with standard memcmp().

    +

    At first it compares the scstr_t.length attribute of the two strings. The memcmp() function is called, if and only if the lengths match.

    +
    Parameters
    + + + +
    s1the first string
    s2the second string
    +
    +
    +
    Returns
    -1, if the length of s1 is less than the length of s2 or 1, if the length of s1 is greater than the length of s2 or the result of memcmp() otherwise (i.e. 0 if the strings match)
    + +
    +
    + +

    ◆ scstrdup()

    + +
    +
    + + + + + + + + +
    sstr_t scstrdup (scstr_t string)
    +
    + +

    Creates a duplicate of the specified string.

    +

    The new sstr_t will contain a copy allocated by standard malloc(). So developers MUST pass the sstr_t.ptr to free().

    +

    The sstr_t.ptr of the return value will always be NULL- terminated and mutable, regardless of the argument.

    +
    Parameters
    + + +
    stringthe string to duplicate
    +
    +
    +
    Returns
    a duplicate of the string
    +
    See also
    scstrdup_a()
    + +
    +
    + +

    ◆ scstrdup_a()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    sstr_t scstrdup_a (UcxAllocatorallocator,
    scstr_t string 
    )
    +
    + +

    Creates a duplicate of the specified string using a UcxAllocator.

    +

    The new sstr_t will contain a copy allocated by the allocators UcxAllocator.malloc() function. So it is implementation depended, whether the returned sstr_t.ptr pointer must be passed to the allocators UcxAllocator.free() function manually.

    +

    The sstr_t.ptr of the return value will always be NULL- terminated and mutable, regardless of the argument.

    +
    Parameters
    + + + +
    allocatora valid instance of a UcxAllocator
    stringthe string to duplicate
    +
    +
    +
    Returns
    a duplicate of the string
    +
    See also
    scstrdup()
    + +
    +
    + +

    ◆ scstrlower()

    + +
    +
    + + + + + + + + +
    sstr_t scstrlower (scstr_t string)
    +
    + +

    Returns a lower case version of a string.

    +

    This function creates a duplicate of the input string, first (see scstrdup()).

    +
    Parameters
    + + +
    stringthe input string
    +
    +
    +
    Returns
    the resulting lower case string
    +
    See also
    scstrdup()
    + +
    +
    + +

    ◆ scstrlower_a()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    sstr_t scstrlower_a (UcxAllocatorallocator,
    scstr_t string 
    )
    +
    + +

    Returns a lower case version of a string.

    +

    This function creates a duplicate of the input string, first (see scstrdup_a()).

    +
    Parameters
    + + + +
    allocatorthe allocator used for duplicating the string
    stringthe input string
    +
    +
    +
    Returns
    the resulting lower case string
    +
    See also
    scstrdup_a()
    + +
    +
    + +

    ◆ scstrn()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    scstr_t scstrn (const char * cstring,
    size_t length 
    )
    +
    + +

    Creates a new scstr_t of the specified length based on a constant C string.

    +

    Note: the scstr_t will share the specified pointer to the C string. If you do want a copy, use scstrdup() on the return value of this function. *

    +
    Parameters
    + + + +
    cstringthe C string to wrap
    lengththe length of the string
    +
    +
    +
    Returns
    a new scstr_t containing the C string
    +
    See also
    scstr()
    + +
    +
    + +

    ◆ scstrnlen()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    size_t scstrnlen (size_t count,
     ... 
    )
    +
    + +

    Returns the accumulated length of all specified strings.

    +

    Attention: if the count argument is larger than the count of the specified strings, the behavior is undefined.

    +
    Parameters
    + + + +
    countthe total number of specified strings
    ...all strings
    +
    +
    +
    Returns
    the accumulated length of all strings
    + +
    +
    + +

    ◆ scstrprefix()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int scstrprefix (scstr_t string,
    scstr_t prefix 
    )
    +
    + +

    Checks, if a string has a specific prefix.

    +
    Parameters
    + + + +
    stringthe string to check
    prefixthe prefix the string should have
    +
    +
    +
    Returns
    1, if and only if the string has the specified prefix, 0 otherwise
    + +
    +
    + +

    ◆ scstrrchr()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    scstr_t scstrrchr (scstr_t string,
    int chr 
    )
    +
    + +

    Returns an immutable substring starting at the location of the last occurrence of the specified character.

    +

    If the string does not contain the character, an empty string is returned.

    +
    Parameters
    + + + +
    stringthe string where to locate the character
    chrthe character to locate
    +
    +
    +
    Returns
    a substring starting at the last location of chr
    +
    See also
    scstrsubs()
    + +
    +
    + +

    ◆ scstrscstr()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    scstr_t scstrscstr (scstr_t string,
    scstr_t match 
    )
    +
    + +

    Returns an immutable substring starting at the location of the first occurrence of the specified immutable string.

    +

    If the string does not contain the other string, an empty string is returned.

    +

    If match is an empty string, the complete string is returned.

    +
    Parameters
    + + + +
    stringthe string to be scanned
    matchstring containing the sequence of characters to match
    +
    +
    +
    Returns
    a substring starting at the first occurrence of match, or an empty string, if the sequence is not present in string
    + +
    +
    + +

    ◆ scstrsplit()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    sstr_t* scstrsplit (scstr_t string,
    scstr_t delim,
    ssize_t * count 
    )
    +
    + +

    Splits a string into parts by using a delimiter string.

    +

    This function will return NULL, if one of the following happens:

      +
    • +the string length is zero
    • +
    • +the delimeter length is zero
    • +
    • +the string equals the delimeter
    • +
    • +memory allocation fails
    • +
    +

    The integer referenced by count is used as input and determines the maximum size of the resulting array, i.e. the maximum count of splits to perform + 1.

    +

    The integer referenced by count is also used as output and is set to

      +
    • +-2, on memory allocation errors
    • +
    • +-1, if either the string or the delimiter is an empty string
    • +
    • +0, if the string equals the delimiter
    • +
    • +1, if the string does not contain the delimiter
    • +
    • +the count of array items, otherwise
    • +
    +

    If the string starts with the delimiter, the first item of the resulting array will be an empty string.

    +

    If the string ends with the delimiter and the maximum list size is not exceeded, the last array item will be an empty string. In case the list size would be exceeded, the last array item will be the remaining string after the last split, including the terminating delimiter.

    +

    Attention: The array pointer AND all sstr_t.ptr of the array items must be manually passed to free(). Use scstrsplit_a() with an allocator to managed memory, to avoid this.

    +
    Parameters
    + + + + +
    stringthe string to split
    delimthe delimiter string
    countIN: the maximum size of the resulting array (0 = no limit), OUT: the actual size of the array
    +
    +
    +
    Returns
    a sstr_t array containing the split strings or NULL on error
    +
    See also
    scstrsplit_a()
    + +
    +
    + +

    ◆ scstrsplit_a()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    sstr_t* scstrsplit_a (UcxAllocatorallocator,
    scstr_t string,
    scstr_t delim,
    ssize_t * count 
    )
    +
    + +

    Performing scstrsplit() using a UcxAllocator.

    +

    Read the description of scstrsplit() for details.

    +

    The memory for the sstr_t.ptr pointers of the array items and the memory for the sstr_t array itself are allocated by using the UcxAllocator.malloc() function.

    +
    Parameters
    + + + + + +
    allocatorthe UcxAllocator used for allocating memory
    stringthe string to split
    delimthe delimiter string
    countIN: the maximum size of the resulting array (0 = no limit), OUT: the actual size of the array
    +
    +
    +
    Returns
    a sstr_t array containing the split strings or NULL on error
    +
    See also
    scstrsplit()
    + +
    +
    + +

    ◆ scstrsstr()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    sstr_t scstrsstr (sstr_t string,
    scstr_t match 
    )
    +
    + +

    Returns a substring starting at the location of the first occurrence of the specified string.

    +

    If the string does not contain the other string, an empty string is returned.

    +

    If match is an empty string, the complete string is returned.

    +
    Parameters
    + + + +
    stringthe string to be scanned
    matchstring containing the sequence of characters to match
    +
    +
    +
    Returns
    a substring starting at the first occurrence of match, or an empty string, if the sequence is not present in string
    + +
    +
    + +

    ◆ scstrsubs()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    scstr_t scstrsubs (scstr_t string,
    size_t start 
    )
    +
    + +

    Returns a substring of an immutable string starting at the specified location.

    +

    Attention: the new string references the same memory area as the input string and is NOT required to be NULL-terminated. Use scstrdup() to get a copy.

    +
    Parameters
    + + + +
    stringinput string
    startstart location of the substring
    +
    +
    +
    Returns
    a substring of string starting at start
    +
    See also
    scstrsubsl()
    +
    +scstrchr()
    + +
    +
    + +

    ◆ scstrsubsl()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    scstr_t scstrsubsl (scstr_t string,
    size_t start,
    size_t length 
    )
    +
    + +

    Returns a substring of an immutable string with a maximum length starting at the specified location.

    +

    Attention: the new string references the same memory area as the input string and is NOT required to be NULL-terminated. Use scstrdup() to get a copy.

    +
    Parameters
    + + + + +
    stringinput string
    startstart location of the substring
    lengththe maximum length of the substring
    +
    +
    +
    Returns
    a substring of string starting at start with a maximum length of length
    +
    See also
    scstrsubs()
    +
    +scstrchr()
    + +
    +
    + +

    ◆ scstrsuffix()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int scstrsuffix (scstr_t string,
    scstr_t suffix 
    )
    +
    + +

    Checks, if a string has a specific suffix.

    +
    Parameters
    + + + +
    stringthe string to check
    suffixthe suffix the string should have
    +
    +
    +
    Returns
    1, if and only if the string has the specified suffix, 0 otherwise
    + +
    +
    + +

    ◆ scstrtrim()

    + +
    +
    + + + + + + + + +
    scstr_t scstrtrim (scstr_t string)
    +
    + +

    Omits leading and trailing spaces.

    +

    This function returns a new scstr_t containing a trimmed version of the specified string.

    +

    Note: the new scstr_t references the same memory, thus you MUST NOT pass the scstr_t.ptr of the return value to free(). It is also highly recommended to avoid assignments like mystr = scstrtrim(mystr); as you lose the reference to the source string. Assignments of this type are only permitted, if the scstr_t.ptr of the source string does not need to be freed or if another reference to the source string exists.

    +
    Parameters
    + + +
    stringthe string that shall be trimmed
    +
    +
    +
    Returns
    a new scstr_t containing the trimmed string
    + +
    +
    + +

    ◆ scstrupper()

    + +
    +
    + + + + + + + + +
    sstr_t scstrupper (scstr_t string)
    +
    + +

    Returns a upper case version of a string.

    +

    This function creates a duplicate of the input string, first (see scstrdup()).

    +
    Parameters
    + + +
    stringthe input string
    +
    +
    +
    Returns
    the resulting upper case string
    +
    See also
    scstrdup()
    + +
    +
    + +

    ◆ scstrupper_a()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    sstr_t scstrupper_a (UcxAllocatorallocator,
    scstr_t string 
    )
    +
    + +

    Returns a upper case version of a string.

    +

    This function creates a duplicate of the input string, first (see scstrdup_a()).

    +
    Parameters
    + + + +
    allocatorthe allocator used for duplicating the string
    stringthe input string
    +
    +
    +
    Returns
    the resulting upper case string
    +
    See also
    scstrdup_a()
    + +
    +
    + +

    ◆ sstr()

    + +
    +
    + + + + + + + + +
    sstr_t sstr (char * cstring)
    +
    + +

    Creates a new sstr_t based on a C string.

    +

    The length is implicitly inferred by using a call to strlen().

    +

    Note: the sstr_t will share the specified pointer to the C string. If you do want a copy, use sstrdup() on the return value of this function.

    +

    If you need to wrap a constant string, use scstr().

    +
    Parameters
    + + +
    cstringthe C string to wrap
    +
    +
    +
    Returns
    a new sstr_t containing the C string
    +
    See also
    sstrn()
    + +
    +
    + +

    ◆ sstrchr()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    sstr_t sstrchr (sstr_t string,
    int chr 
    )
    +
    + +

    Returns a substring starting at the location of the first occurrence of the specified character.

    +

    If the string does not contain the character, an empty string is returned.

    +
    Parameters
    + + + +
    stringthe string where to locate the character
    chrthe character to locate
    +
    +
    +
    Returns
    a substring starting at the first location of chr
    +
    See also
    sstrsubs()
    + +
    +
    + +

    ◆ sstrn()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    sstr_t sstrn (char * cstring,
    size_t length 
    )
    +
    + +

    Creates a new sstr_t of the specified length based on a C string.

    +

    Note: the sstr_t will share the specified pointer to the C string. If you do want a copy, use sstrdup() on the return value of this function.

    +

    If you need to wrap a constant string, use scstrn().

    +
    Parameters
    + + + +
    cstringthe C string to wrap
    lengththe length of the string
    +
    +
    +
    Returns
    a new sstr_t containing the C string
    +
    See also
    sstr()
    +
    +S()
    + +
    +
    + +

    ◆ sstrrchr()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    sstr_t sstrrchr (sstr_t string,
    int chr 
    )
    +
    + +

    Returns a substring starting at the location of the last occurrence of the specified character.

    +

    If the string does not contain the character, an empty string is returned.

    +
    Parameters
    + + + +
    stringthe string where to locate the character
    chrthe character to locate
    +
    +
    +
    Returns
    a substring starting at the last location of chr
    +
    See also
    sstrsubs()
    + +
    +
    + +

    ◆ sstrsubs()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    sstr_t sstrsubs (sstr_t string,
    size_t start 
    )
    +
    + +

    Returns a substring starting at the specified location.

    +

    Attention: the new string references the same memory area as the input string and is NOT required to be NULL-terminated. Use sstrdup() to get a copy.

    +
    Parameters
    + + + +
    stringinput string
    startstart location of the substring
    +
    +
    +
    Returns
    a substring of string starting at start
    +
    See also
    sstrsubsl()
    +
    +sstrchr()
    + +
    +
    + +

    ◆ sstrsubsl()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    sstr_t sstrsubsl (sstr_t string,
    size_t start,
    size_t length 
    )
    +
    + +

    Returns a substring with the given length starting at the specified location.

    +

    Attention: the new string references the same memory area as the input string and is NOT required to be NULL-terminated. Use sstrdup() to get a copy.

    +
    Parameters
    + + + + +
    stringinput string
    startstart location of the substring
    lengththe maximum length of the substring
    +
    +
    +
    Returns
    a substring of string starting at start with a maximum length of length
    +
    See also
    sstrsubs()
    +
    +sstrchr()
    + +
    +
    + +

    ◆ sstrtrim()

    + +
    +
    + + + + + + + + +
    sstr_t sstrtrim (sstr_t string)
    +
    + +

    Omits leading and trailing spaces.

    +

    This function returns a new sstr_t containing a trimmed version of the specified string.

    +

    Note: the new sstr_t references the same memory, thus you MUST NOT pass the sstr_t.ptr of the return value to free(). It is also highly recommended to avoid assignments like mystr = sstrtrim(mystr); as you lose the reference to the source string. Assignments of this type are only permitted, if the sstr_t.ptr of the source string does not need to be freed or if another reference to the source string exists.

    +
    Parameters
    + + +
    stringthe string that shall be trimmed
    +
    +
    +
    Returns
    a new sstr_t containing the trimmed string
    + +
    +
    + +

    ◆ ucx_sc2sc()

    + +
    +
    + + + + + + + + +
    scstr_t ucx_sc2sc (scstr_t str)
    +
    + +

    One of two type adjustment functions that return an scstr_t.

    +

    Used internally to convert a UCX string to an immutable UCX string. This variant is used, when the string is already immutable and no operation needs to be performed.

    +

    Do not use this function manually.

    +
    Parameters
    + + +
    strsome scstr_t
    +
    +
    +
    Returns
    the argument itself
    + +
    +
    + +

    ◆ ucx_ss2c_s()

    + +
    +
    + + + + + + + +
    scstr_t ucx_ss2c_s ()
    +
    + +

    Converts a UCX string to an immutable UCX string (scstr_t).

    +

    This internal function (ab)uses the C standard an expects one single argument which is then implicitly converted to scstr_t without a warning.

    +

    Do not use this function manually.

    +
    Returns
    the an immutable version of the provided string
    + +
    +
    + +

    ◆ ucx_ss2sc()

    + +
    +
    + + + + + + + + +
    scstr_t ucx_ss2sc (sstr_t str)
    +
    + +

    One of two type adjustment functions that return an scstr_t.

    +

    Used internally to convert a UCX string to an immutable UCX string.

    +

    Do not use this function manually.

    +
    Parameters
    + + +
    strsome sstr_t
    +
    +
    +
    Returns
    an immutable (scstr_t) version of the provided string.
    + +
    +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/string_8h_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/string_8h_source.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,124 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/string.h Source File + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    string.h
    +
    +
    +Go to the documentation of this file.
    1 /*
    2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    3  *
    4  * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions are met:
    8  *
    9  * 1. Redistributions of source code must retain the above copyright
    10  * notice, this list of conditions and the following disclaimer.
    11  *
    12  * 2. Redistributions in binary form must reproduce the above copyright
    13  * notice, this list of conditions and the following disclaimer in the
    14  * documentation and/or other materials provided with the distribution.
    15  *
    16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
    20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    26  * POSSIBILITY OF SUCH DAMAGE.
    27  */
    48 #ifndef UCX_STRING_H
    49 #define UCX_STRING_H
    50 
    51 #include "ucx.h"
    52 #include "allocator.h"
    53 #include <stddef.h>
    54 
    55 /*
    56  * Use this macro to disable the shortcuts if you experience macro collision.
    57  */
    58 #ifndef UCX_NO_SSTR_SHORTCUTS
    59 
    63 #define ST(s) { s, sizeof(s)-1 }
    64 
    66 #define S(s) sstrn(s, sizeof(s)-1)
    67 
    69 #define SC(s) scstrn(s, sizeof(s)-1)
    70 #endif /* UCX_NO_SSTR_SHORTCUTS */
    71 
    72 /*
    73  * Use this macro to disable the format macros.
    74  */
    75 #ifndef UCX_NO_SSTR_FORMAT_MACROS
    76 
    77 #define SFMT(s) (int) (s).length, (s).ptr
    78 
    80 #define PRIsstr ".*s"
    81 #endif /* UCX_NO_SSTR_FORMAT_MACROS */
    82 
    83 #ifdef __cplusplus
    84 extern "C" {
    85 #endif
    86 
    90 typedef struct {
    93  char *ptr;
    95  size_t length;
    96 } sstr_t;
    97 
    101 typedef struct {
    104  const char *ptr;
    106  size_t length;
    107 } scstr_t;
    108 
    109 #ifdef __cplusplus
    110 }
    111 #endif
    112 
    113 
    114 #ifdef __cplusplus
    115 
    125 inline scstr_t s2scstr(sstr_t s) {
    126  scstr_t c;
    127  c.ptr = s.ptr;
    128  c.length = s.length;
    129  return c;
    130 }
    131 
    144 inline scstr_t s2scstr(scstr_t str) {
    145  return str;
    146 }
    147 
    153 #define SCSTR(s) s2scstr(s)
    154 #else
    155 
    169 
    181 
    182 #if __STDC_VERSION__ >= 201112L
    183 
    188 #define SCSTR(str) _Generic(str, sstr_t: ucx_ss2sc, scstr_t: ucx_sc2sc)(str)
    189 
    190 #elif defined(__GNUC__) || defined(__clang__)
    191 
    197 #define SCSTR(str) __builtin_choose_expr( \
    198  __builtin_types_compatible_p(typeof(str), sstr_t), \
    199  ucx_ss2sc, \
    200  ucx_sc2sc)(str)
    201 
    202 #elif defined(__sun)
    203 
    209 #define SCSTR(str) ({typeof(str) ucx_tmp_var_str = str; \
    210  scstr_t ucx_tmp_var_c; \
    211  ucx_tmp_var_c.ptr = ucx_tmp_var_str.ptr;\
    212  ucx_tmp_var_c.length = ucx_tmp_var_str.length;\
    213  ucx_tmp_var_c; })
    214 #else /* no generics and no builtins */
    215 
    227 
    233 #define SCSTR(str) ucx_ss2c_s(str)
    234 #endif /* C11 feature test */
    235 
    236 #endif /* C++ */
    237 
    238 #ifdef __cplusplus
    239 extern "C" {
    240 #endif
    241 
    242 
    258 sstr_t sstr(char *cstring);
    259 
    275 sstr_t sstrn(char *cstring, size_t length);
    276 
    290 scstr_t scstr(const char *cstring);
    291 
    292 
    305 scstr_t scstrn(const char *cstring, size_t length);
    306 
    317 size_t scstrnlen(size_t count, ...);
    318 
    329 #define sstrnlen(count, ...) scstrnlen(count, __VA_ARGS__)
    330 
    345 sstr_t scstrcat(size_t count, scstr_t s1, ...);
    346 
    361 #define sstrcat(count, s1, ...) scstrcat(count, SCSTR(s1), __VA_ARGS__)
    362 
    380 sstr_t scstrcat_a(UcxAllocator *alloc, size_t count, scstr_t s1, ...);
    381 
    399 #define sstrcat_a(alloc, count, s1, ...) \
    400  scstrcat_a(alloc, count, SCSTR(s1), __VA_ARGS__)
    401 
    416 sstr_t sstrsubs(sstr_t string, size_t start);
    417 
    434 sstr_t sstrsubsl(sstr_t string, size_t start, size_t length);
    435 
    451 scstr_t scstrsubs(scstr_t string, size_t start);
    452 
    470 scstr_t scstrsubsl(scstr_t string, size_t start, size_t length);
    471 
    484 sstr_t sstrchr(sstr_t string, int chr);
    485 
    498 sstr_t sstrrchr(sstr_t string, int chr);
    499 
    512 scstr_t scstrchr(scstr_t string, int chr);
    513 
    526 scstr_t scstrrchr(scstr_t string, int chr);
    527 
    543 sstr_t scstrsstr(sstr_t string, scstr_t match);
    544 
    560 #define sstrstr(string, match) scstrsstr(string, SCSTR(match))
    561 
    577 scstr_t scstrscstr(scstr_t string, scstr_t match);
    578 
    594 #define sstrscstr(string, match) scstrscstr(string, SCSTR(match))
    595 
    643 sstr_t* scstrsplit(scstr_t string, scstr_t delim, ssize_t *count);
    644 
    692 #define sstrsplit(string, delim, count) \
    693  scstrsplit(SCSTR(string), SCSTR(delim), count)
    694 
    714 sstr_t* scstrsplit_a(UcxAllocator *allocator, scstr_t string, scstr_t delim,
    715  ssize_t *count);
    716 
    736 #define sstrsplit_a(allocator, string, delim, count) \
    737  scstrsplit_a(allocator, SCSTR(string), SCSTR(delim), count)
    738 
    751 int scstrcmp(scstr_t s1, scstr_t s2);
    752 
    765 #define sstrcmp(s1, s2) scstrcmp(SCSTR(s1), SCSTR(s2))
    766 
    780 int scstrcasecmp(scstr_t s1, scstr_t s2);
    781 
    795 #define sstrcasecmp(s1, s2) scstrcasecmp(SCSTR(s1), SCSTR(s2))
    796 
    811 sstr_t scstrdup(scstr_t string);
    812 
    827 #define sstrdup(string) scstrdup(SCSTR(string))
    828 
    845 sstr_t scstrdup_a(UcxAllocator *allocator, scstr_t string);
    846 
    863 #define sstrdup_a(allocator, string) scstrdup_a(allocator, SCSTR(string))
    864 
    865 
    883 sstr_t sstrtrim(sstr_t string);
    884 
    902 scstr_t scstrtrim(scstr_t string);
    903 
    911 int scstrprefix(scstr_t string, scstr_t prefix);
    912 
    920 #define sstrprefix(string, prefix) scstrprefix(SCSTR(string), SCSTR(prefix))
    921 
    929 int scstrsuffix(scstr_t string, scstr_t suffix);
    930 
    938 #define sstrsuffix(string, suffix) scstrsuffix(SCSTR(string), SCSTR(suffix))
    939 
    947 int scstrcaseprefix(scstr_t string, scstr_t prefix);
    948 
    956 #define sstrcaseprefix(string, prefix) \
    957  scstrcaseprefix(SCSTR(string), SCSTR(prefix))
    958 
    966 int scstrcasesuffix(scstr_t string, scstr_t suffix);
    967 
    975 #define sstrcasesuffix(string, suffix) \
    976  scstrcasesuffix(SCSTR(string), SCSTR(suffix))
    977 
    988 sstr_t scstrlower(scstr_t string);
    989 
    999 #define sstrlower(string) scstrlower(SCSTR(string))
    1000 
    1012 sstr_t scstrlower_a(UcxAllocator *allocator, scstr_t string);
    1013 
    1014 
    1025 #define sstrlower_a(allocator, string) scstrlower_a(allocator, SCSTR(string))
    1026 
    1037 sstr_t scstrupper(scstr_t string);
    1038 
    1048 #define sstrupper(string) scstrupper(SCSTR(string))
    1049 
    1061 sstr_t scstrupper_a(UcxAllocator *allocator, scstr_t string);
    1062 
    1073 #define sstrupper_a(allocator, string) scstrupper_a(allocator, string)
    1074 
    1075 #ifdef __cplusplus
    1076 }
    1077 #endif
    1078 
    1079 #endif /* UCX_STRING_H */
    sstr_t sstr(char *cstring)
    Creates a new sstr_t based on a C string.
    Definition: string.c:43
    +
    sstr_t scstrdup(scstr_t string)
    Creates a duplicate of the specified string.
    Definition: string.c:520
    +
    The UCX string structure.
    Definition: string.h:90
    +
    sstr_t scstrlower(scstr_t string)
    Returns a lower case version of a string.
    Definition: string.c:633
    +
    sstr_t sstrsubsl(sstr_t string, size_t start, size_t length)
    Returns a substring with the given length starting at the specified location.
    Definition: string.c:201
    +
    scstr_t scstrtrim(scstr_t string)
    Omits leading and trailing spaces.
    Definition: string.c:563
    +
    sstr_t * scstrsplit_a(UcxAllocator *allocator, scstr_t string, scstr_t delim, ssize_t *count)
    Performing scstrsplit() using a UcxAllocator.
    Definition: string.c:400
    +
    Main UCX Header providing most common definitions.
    +
    scstr_t scstrrchr(scstr_t string, int chr)
    Returns an immutable substring starting at the location of the last occurrence of the specified chara...
    Definition: string.c:270
    +
    scstr_t ucx_sc2sc(scstr_t str)
    One of two type adjustment functions that return an scstr_t.
    Definition: string.c:666
    +
    int scstrprefix(scstr_t string, scstr_t prefix)
    Checks, if a string has a specific prefix.
    Definition: string.c:570
    +
    sstr_t sstrrchr(sstr_t string, int chr)
    Returns a substring starting at the location of the last occurrence of the specified character...
    Definition: string.c:254
    +
    sstr_t sstrtrim(sstr_t string)
    Omits leading and trailing spaces.
    Definition: string.c:556
    +
    const char * ptr
    A constant pointer to the immutable string (not necessarily NULL-terminated)
    Definition: string.h:104
    +
    The UCX string structure for immutable (constant) strings.
    Definition: string.h:101
    +
    size_t scstrnlen(size_t count,...)
    Returns the accumulated length of all specified strings.
    Definition: string.c:72
    +
    sstr_t sstrsubs(sstr_t string, size_t start)
    Returns a substring starting at the specified location.
    Definition: string.c:197
    +
    int scstrcasecmp(scstr_t s1, scstr_t s2)
    Compares two UCX strings ignoring the case.
    Definition: string.c:506
    +
    scstr_t ucx_ss2sc(sstr_t str)
    One of two type adjustment functions that return an scstr_t.
    Definition: string.c:669
    +
    int scstrcmp(scstr_t s1, scstr_t s2)
    Compares two UCX strings with standard memcmp().
    Definition: string.c:496
    +
    char * ptr
    A pointer to the string (not necessarily NULL-terminated)
    Definition: string.h:93
    +
    UCX allocator data structure containing memory management functions.
    Definition: allocator.h:88
    +
    sstr_t * scstrsplit(scstr_t string, scstr_t delim, ssize_t *count)
    Splits a string into parts by using a delimiter string.
    Definition: string.c:396
    +
    sstr_t scstrlower_a(UcxAllocator *allocator, scstr_t string)
    Returns a lower case version of a string.
    Definition: string.c:641
    +
    size_t length
    The length of the string.
    Definition: string.h:95
    +
    sstr_t sstrchr(sstr_t string, int chr)
    Returns a substring starting at the location of the first occurrence of the specified character...
    Definition: string.c:246
    +
    sstr_t scstrdup_a(UcxAllocator *allocator, scstr_t string)
    Creates a duplicate of the specified string using a UcxAllocator.
    Definition: string.c:524
    +
    scstr_t scstrn(const char *cstring, size_t length)
    Creates a new scstr_t of the specified length based on a constant C string.
    Definition: string.c:64
    +
    scstr_t ucx_ss2c_s()
    Converts a UCX string to an immutable UCX string (scstr_t).
    +
    int scstrsuffix(scstr_t string, scstr_t suffix)
    Checks, if a string has a specific suffix.
    Definition: string.c:585
    +
    scstr_t scstr(const char *cstring)
    Creates a new scstr_t based on a constant C string.
    Definition: string.c:57
    +
    Allocator for custom memory management.
    +
    scstr_t scstrscstr(scstr_t string, scstr_t match)
    Returns an immutable substring starting at the location of the first occurrence of the specified immu...
    Definition: string.c:375
    +
    sstr_t scstrcat_a(UcxAllocator *alloc, size_t count, scstr_t s1,...)
    Concatenates two or more strings using a UcxAllocator.
    Definition: string.c:167
    +
    sstr_t scstrcat(size_t count, scstr_t s1,...)
    Concatenates two or more strings.
    Definition: string.c:159
    +
    sstr_t scstrupper_a(UcxAllocator *allocator, scstr_t string)
    Returns a upper case version of a string.
    Definition: string.c:657
    +
    sstr_t scstrupper(scstr_t string)
    Returns a upper case version of a string.
    Definition: string.c:649
    +
    scstr_t scstrsubsl(scstr_t string, size_t start, size_t length)
    Returns a substring of an immutable string with a maximum length starting at the specified location...
    Definition: string.c:214
    +
    sstr_t sstrn(char *cstring, size_t length)
    Creates a new sstr_t of the specified length based on a C string.
    Definition: string.c:50
    +
    size_t length
    The length of the string.
    Definition: string.h:106
    +
    int scstrcasesuffix(scstr_t string, scstr_t suffix)
    Checks, if a string has a specific suffix, ignoring the case.
    Definition: string.c:617
    +
    scstr_t scstrchr(scstr_t string, int chr)
    Returns an immutable substring starting at the location of the first occurrence of the specified char...
    Definition: string.c:262
    +
    scstr_t scstrsubs(scstr_t string, size_t start)
    Returns a substring of an immutable string starting at the specified location.
    Definition: string.c:210
    +
    sstr_t scstrsstr(sstr_t string, scstr_t match)
    Returns a substring starting at the location of the first occurrence of the specified string...
    Definition: string.c:357
    +
    int scstrcaseprefix(scstr_t string, scstr_t prefix)
    Checks, if a string has a specific prefix, ignoring the case.
    Definition: string.c:601
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxAVLNode.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxAVLNode.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,115 @@ + + + + + + + +ucx: UcxAVLNode Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxAVLNode Struct Reference
    +
    +
    + +

    UCX AVL Node. + More...

    + +

    #include <avl.h>

    + + + + + + + + + + + + + + + + + + + + +

    +Data Fields

    +intptr_t key
     The key for this node.
     
    +void * value
     Data contained by this node.
     
    +size_t height
     The height of this (sub)-tree.
     
    +UcxAVLNodeparent
     Parent node.
     
    +UcxAVLNodeleft
     Root node of left subtree.
     
    +UcxAVLNoderight
     Root node of right subtree.
     
    +

    Detailed Description

    +

    UCX AVL Node.

    +

    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/avl.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxAVLTree.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxAVLTree.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,140 @@ + + + + + + + +ucx: UcxAVLTree Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxAVLTree Struct Reference
    +
    +
    + +

    UCX AVL Tree. + More...

    + +

    #include <avl.h>

    + + + + + + + + + + + + + + +

    +Data Fields

    +UcxAllocatorallocator
     The UcxAllocator that shall be used to manage the memory for node data.
     
    +UcxAVLNoderoot
     Root node of the tree.
     
    cmp_func cmpfunc
     Compare function that shall be used to compare the UcxAVLNode keys. More...
     
    void * userdata
     Custom user data. More...
     
    +

    Detailed Description

    +

    UCX AVL Tree.

    +

    Field Documentation

    + +

    ◆ cmpfunc

    + +
    +
    + + + + +
    cmp_func UcxAVLTree::cmpfunc
    +
    + +

    Compare function that shall be used to compare the UcxAVLNode keys.

    +
    See also
    UcxAVLNode.key
    + +
    +
    + +

    ◆ userdata

    + +
    +
    + + + + +
    void* UcxAVLTree::userdata
    +
    + +

    Custom user data.

    +

    This data will also be provided to the cmpfunc.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/avl.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxAllocator.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxAllocator.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,128 @@ + + + + + + + +ucx: UcxAllocator Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxAllocator Struct Reference
    +
    +
    + +

    UCX allocator data structure containing memory management functions. + More...

    + +

    #include <allocator.h>

    + + + + + + + + + + + + + + + + + +

    +Data Fields

    void * pool
     Pointer to an area of memory or a complex memory pool. More...
     
    +ucx_allocator_malloc malloc
     The malloc() function for this allocator.
     
    +ucx_allocator_calloc calloc
     The calloc() function for this allocator.
     
    +ucx_allocator_realloc realloc
     The realloc() function for this allocator.
     
    +ucx_allocator_free free
     The free() function for this allocator.
     
    +

    Detailed Description

    +

    UCX allocator data structure containing memory management functions.

    +

    Field Documentation

    + +

    ◆ pool

    + +
    +
    + + + + +
    void* UcxAllocator::pool
    +
    + +

    Pointer to an area of memory or a complex memory pool.

    +

    This pointer will be passed to any memory management function as first argument.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxArray.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxArray.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,111 @@ + + + + + + + +ucx: UcxArray Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxArray Struct Reference
    +
    +
    + +

    UCX array type. + More...

    + +

    #include <array.h>

    + + + + + + + + + + + + + + + + + +

    +Data Fields

    +size_t capacity
     The current capacity of the array.
     
    +size_t size
     The actual number of elements in the array.
     
    +size_t elemsize
     The size of an individual element in bytes.
     
    +void * data
     A pointer to the data.
     
    +UcxAllocatorallocator
     The allocator used for the data.
     
    +

    Detailed Description

    +

    UCX array type.

    +

    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/array.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxBuffer.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxBuffer.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,193 @@ + + + + + + + +ucx: UcxBuffer Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxBuffer Struct Reference
    +
    +
    + +

    UCX Buffer. + More...

    + +

    #include <buffer.h>

    + + + + + + + + + + + + + + + + + +

    +Data Fields

    char * space
     A pointer to the buffer contents. More...
     
    size_t pos
     Current position of the buffer. More...
     
    size_t capacity
     Current capacity (i.e. More...
     
    size_t size
     Current size of the buffer content. More...
     
    int flags
     Flag register for buffer features. More...
     
    +

    Detailed Description

    +

    UCX Buffer.

    +

    Field Documentation

    + +

    ◆ capacity

    + +
    +
    + + + + +
    size_t UcxBuffer::capacity
    +
    + +

    Current capacity (i.e.

    +

    maximum size) of the buffer.

    + +
    +
    + +

    ◆ flags

    + +
    +
    + + + + +
    int UcxBuffer::flags
    +
    + +

    Flag register for buffer features.

    +
    See also
    UCX_BUFFER_DEFAULT
    +
    +UCX_BUFFER_AUTOFREE
    +
    +UCX_BUFFER_AUTOEXTEND
    + +
    +
    + +

    ◆ pos

    + +
    +
    + + + + +
    size_t UcxBuffer::pos
    +
    + +

    Current position of the buffer.

    + +
    +
    + +

    ◆ size

    + +
    +
    + + + + +
    size_t UcxBuffer::size
    +
    + +

    Current size of the buffer content.

    + +
    +
    + +

    ◆ space

    + +
    +
    + + + + +
    char* UcxBuffer::space
    +
    + +

    A pointer to the buffer contents.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/buffer.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxKey.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxKey.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,149 @@ + + + + + + + +ucx: UcxKey Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxKey Struct Reference
    +
    +
    + +

    Structure to publicly denote a key of a UcxMap. + More...

    + +

    #include <map.h>

    + + + + + + + + + + + +

    +Data Fields

    const void * data
     The key data. More...
     
    size_t len
     The length of the key data. More...
     
    int hash
     A cache for the hash value of the key data. More...
     
    +

    Detailed Description

    +

    Structure to publicly denote a key of a UcxMap.

    +

    Field Documentation

    + +

    ◆ data

    + +
    +
    + + + + +
    const void* UcxKey::data
    +
    + +

    The key data.

    + +
    +
    + +

    ◆ hash

    + +
    +
    + + + + +
    int UcxKey::hash
    +
    + +

    A cache for the hash value of the key data.

    + +
    +
    + +

    ◆ len

    + +
    +
    + + + + +
    size_t UcxKey::len
    +
    + +

    The length of the key data.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/map.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxList.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxList.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,103 @@ + + + + + + + +ucx: UcxList Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxList Struct Reference
    +
    +
    + +

    UCX list structure. + More...

    + +

    #include <list.h>

    + + + + + + + + + + + +

    +Data Fields

    +void * data
     List element payload.
     
    +UcxListnext
     Pointer to the next list element or NULL, if this is the last element.
     
    +UcxListprev
     Pointer to the previous list element or NULL, if this is the first element.
     
    +

    Detailed Description

    +

    UCX list structure.

    +

    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/list.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxLogger.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxLogger.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,213 @@ + + + + + + + +ucx: UcxLogger Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxLogger Struct Reference
    +
    +
    + +

    The UCX Logger object. + More...

    + +

    #include <logging.h>

    + + + + + + + + + + + + + + + + + + + + +

    +Data Fields

    void * stream
     The stream this logger writes its messages to. More...
     
    write_func writer
     The write function that shall be used. More...
     
    char * dateformat
     The date format for timestamp outputs including the delimiter (default: "%F %T %z "). More...
     
    unsigned int level
     The level, this logger operates on. More...
     
    unsigned int mask
     A configuration mask for automatic output. More...
     
    UcxMaplevels
     A map of valid log levels for this logger. More...
     
    +

    Detailed Description

    +

    The UCX Logger object.

    +

    Field Documentation

    + +

    ◆ dateformat

    + +
    +
    + + + + +
    char* UcxLogger::dateformat
    +
    + +

    The date format for timestamp outputs including the delimiter (default: "%F %T %z ").

    +
    See also
    UCX_LOGGER_TIMESTAMP
    + +
    +
    + +

    ◆ level

    + +
    +
    + + + + +
    unsigned int UcxLogger::level
    +
    + +

    The level, this logger operates on.

    +

    If a log command is issued, the message will only be logged, if the log level of the message is less or equal than the log level of the logger.

    + +
    +
    + +

    ◆ levels

    + +
    +
    + + + + +
    UcxMap* UcxLogger::levels
    +
    + +

    A map of valid log levels for this logger.

    +

    The keys represent all valid log levels and the values provide string representations, that are used, if the UCX_LOGGER_LEVEL flag is set.

    +

    The exact data types are unsigned int for the key and const char* for the value.

    +
    See also
    UCX_LOGGER_LEVEL
    + +
    +
    + +

    ◆ mask

    + +
    +
    + + + + +
    unsigned int UcxLogger::mask
    +
    + +

    A configuration mask for automatic output.

    +

    For each flag that is set, the logger automatically outputs some extra information like the timestamp or the source file and line number. See the documentation for the flags for details.

    + +
    +
    + +

    ◆ stream

    + +
    +
    + + + + +
    void* UcxLogger::stream
    +
    + +

    The stream this logger writes its messages to.

    + +
    +
    + +

    ◆ writer

    + +
    +
    + + + + +
    write_func UcxLogger::writer
    +
    + +

    The write function that shall be used.

    +

    For standard file or stdout loggers this might be standard fwrite (default).

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/logging.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxMap.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxMap.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,168 @@ + + + + + + + +ucx: UcxMap Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxMap Struct Reference
    +
    +
    + +

    Structure for the UCX map. + More...

    + +

    #include <map.h>

    + + + + + + + + + + + + + + +

    +Data Fields

    UcxAllocatorallocator
     An allocator that is used for the map elements. More...
     
    UcxMapElement ** map
     The array of map element lists. More...
     
    size_t size
     The size of the map is the length of the element list array. More...
     
    size_t count
     The count of elements currently stored in this map. More...
     
    +

    Detailed Description

    +

    Structure for the UCX map.

    +

    Field Documentation

    + +

    ◆ allocator

    + +
    +
    + + + + +
    UcxAllocator* UcxMap::allocator
    +
    + +

    An allocator that is used for the map elements.

    + +
    +
    + +

    ◆ count

    + +
    +
    + + + + +
    size_t UcxMap::count
    +
    + +

    The count of elements currently stored in this map.

    + +
    +
    + +

    ◆ map

    + +
    +
    + + + + +
    UcxMapElement** UcxMap::map
    +
    + +

    The array of map element lists.

    + +
    +
    + +

    ◆ size

    + +
    +
    + + + + +
    size_t UcxMap::size
    +
    + +

    The size of the map is the length of the element list array.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/map.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxMapElement.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxMapElement.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,149 @@ + + + + + + + +ucx: UcxMapElement Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxMapElement Struct Reference
    +
    +
    + +

    Structure for an element of a UcxMap. + More...

    + +

    #include <map.h>

    + + + + + + + + + + + +

    +Data Fields

    void * data
     The value data. More...
     
    UcxMapElementnext
     A pointer to the next element in the current list. More...
     
    struct UcxMapKey key
     The corresponding key. More...
     
    +

    Detailed Description

    +

    Structure for an element of a UcxMap.

    +

    Field Documentation

    + +

    ◆ data

    + +
    +
    + + + + +
    void* UcxMapElement::data
    +
    + +

    The value data.

    + +
    +
    + +

    ◆ key

    + +
    +
    + + + + +
    struct UcxMapKey UcxMapElement::key
    +
    + +

    The corresponding key.

    + +
    +
    + +

    ◆ next

    + +
    +
    + + + + +
    UcxMapElement* UcxMapElement::next
    +
    + +

    A pointer to the next element in the current list.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/map.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxMapIterator.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxMapIterator.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,150 @@ + + + + + + + +ucx: UcxMapIterator Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxMapIterator Struct Reference
    +
    +
    + +

    Structure for an iterator over a UcxMap. + More...

    + +

    #include <map.h>

    + + + + + + + + + + + +

    +Data Fields

    UcxMap const * map
     The map to iterate over. More...
     
    UcxMapElementcur
     The current map element. More...
     
    size_t index
     The current index of the element list array. More...
     
    +

    Detailed Description

    +

    Structure for an iterator over a UcxMap.

    +

    Field Documentation

    + +

    ◆ cur

    + +
    +
    + + + + +
    UcxMapElement* UcxMapIterator::cur
    +
    + +

    The current map element.

    + +
    +
    + +

    ◆ index

    + +
    +
    + + + + +
    size_t UcxMapIterator::index
    +
    + +

    The current index of the element list array.

    +

    Attention: this is NOT the element index! Do NOT manually iterate over the map by increasing this index. Use ucx_map_iter_next().

    See also
    UcxMap.map
    + +
    +
    + +

    ◆ map

    + +
    +
    + + + + +
    UcxMap const* UcxMapIterator::map
    +
    + +

    The map to iterate over.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/map.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxMapKey.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxMapKey.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,149 @@ + + + + + + + +ucx: UcxMapKey Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxMapKey Struct Reference
    +
    +
    + +

    Internal structure for a key of a UcxMap. + More...

    + +

    #include <map.h>

    + + + + + + + + + + + +

    +Data Fields

    void * data
     The key data. More...
     
    size_t len
     The length of the key data. More...
     
    int hash
     The hash value of the key data. More...
     
    +

    Detailed Description

    +

    Internal structure for a key of a UcxMap.

    +

    Field Documentation

    + +

    ◆ data

    + +
    +
    + + + + +
    void* UcxMapKey::data
    +
    + +

    The key data.

    + +
    +
    + +

    ◆ hash

    + +
    +
    + + + + +
    int UcxMapKey::hash
    +
    + +

    The hash value of the key data.

    + +
    +
    + +

    ◆ len

    + +
    +
    + + + + +
    size_t UcxMapKey::len
    +
    + +

    The length of the key data.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/map.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxMempool.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxMempool.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,153 @@ + + + + + + + +ucx: UcxMempool Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxMempool Struct Reference
    +
    +
    + +

    UCX mempool structure. + More...

    + +

    #include <mempool.h>

    + + + + + + + + + + + + + + +

    +Data Fields

    +UcxAllocatorallocator
     UcxAllocator based on this pool.
     
    void ** data
     List of pointers to pooled memory. More...
     
    size_t ndata
     Count of pooled memory items. More...
     
    size_t size
     Memory pool size. More...
     
    +

    Detailed Description

    +

    UCX mempool structure.

    +

    Field Documentation

    + +

    ◆ data

    + +
    +
    + + + + +
    void** UcxMempool::data
    +
    + +

    List of pointers to pooled memory.

    + +
    +
    + +

    ◆ ndata

    + +
    +
    + + + + +
    size_t UcxMempool::ndata
    +
    + +

    Count of pooled memory items.

    + +
    +
    + +

    ◆ size

    + +
    +
    + + + + +
    size_t UcxMempool::size
    +
    + +

    Memory pool size.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/mempool.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxProperties.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxProperties.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,313 @@ + + + + + + + +ucx: UcxProperties Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxProperties Struct Reference
    +
    +
    + +

    UcxProperties object for parsing properties data. + More...

    + +

    #include <properties.h>

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Data Fields

    char * buffer
     Input buffer (don't set manually). More...
     
    size_t buflen
     Length of the input buffer (don't set manually). More...
     
    size_t pos
     Current buffer position (don't set manually). More...
     
    char * tmp
     Internal temporary buffer (don't set manually). More...
     
    size_t tmplen
     Internal temporary buffer length (don't set manually). More...
     
    size_t tmpcap
     Internal temporary buffer capacity (don't set manually). More...
     
    int error
     Parser error code. More...
     
    char delimiter
     The delimiter that shall be used. More...
     
    char comment1
     The first comment character. More...
     
    char comment2
     The second comment character. More...
     
    char comment3
     The third comment character. More...
     
    +

    Detailed Description

    +

    UcxProperties object for parsing properties data.

    +

    Most of the fields are for internal use only. You may configure the properties parser, e.g. by changing the used delimiter or specifying up to three different characters that shall introduce comments.

    +

    Field Documentation

    + +

    ◆ buffer

    + +
    +
    + + + + +
    char* UcxProperties::buffer
    +
    + +

    Input buffer (don't set manually).

    +

    Automatically set by calls to ucx_properties_fill().

    + +
    +
    + +

    ◆ buflen

    + +
    +
    + + + + +
    size_t UcxProperties::buflen
    +
    + +

    Length of the input buffer (don't set manually).

    +

    Automatically set by calls to ucx_properties_fill().

    + +
    +
    + +

    ◆ comment1

    + +
    +
    + + + + +
    char UcxProperties::comment1
    +
    + +

    The first comment character.

    +

    This is '#' by default.

    + +
    +
    + +

    ◆ comment2

    + +
    +
    + + + + +
    char UcxProperties::comment2
    +
    + +

    The second comment character.

    +

    This is not set by default.

    + +
    +
    + +

    ◆ comment3

    + +
    +
    + + + + +
    char UcxProperties::comment3
    +
    + +

    The third comment character.

    +

    This is not set by default.

    + +
    +
    + +

    ◆ delimiter

    + +
    +
    + + + + +
    char UcxProperties::delimiter
    +
    + +

    The delimiter that shall be used.

    +

    This is '=' by default.

    + +
    +
    + +

    ◆ error

    + +
    +
    + + + + +
    int UcxProperties::error
    +
    + +

    Parser error code.

    +

    This is always 0 on success and a nonzero value on syntax errors. The value is set by ucx_properties_next().

    + +
    +
    + +

    ◆ pos

    + +
    +
    + + + + +
    size_t UcxProperties::pos
    +
    + +

    Current buffer position (don't set manually).

    +

    Used by ucx_properties_next().

    + +
    +
    + +

    ◆ tmp

    + +
    +
    + + + + +
    char* UcxProperties::tmp
    +
    + +

    Internal temporary buffer (don't set manually).

    +

    Used by ucx_properties_next().

    + +
    +
    + +

    ◆ tmpcap

    + +
    +
    + + + + +
    size_t UcxProperties::tmpcap
    +
    + +

    Internal temporary buffer capacity (don't set manually).

    +

    Used by ucx_properties_next().

    + +
    +
    + +

    ◆ tmplen

    + +
    +
    + + + + +
    size_t UcxProperties::tmplen
    +
    + +

    Internal temporary buffer length (don't set manually).

    +

    Used by ucx_properties_next().

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxStack.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxStack.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,123 @@ + + + + + + + +ucx: UcxStack Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxStack Struct Reference
    +
    +
    + +

    UCX stack structure. + More...

    + +

    #include <stack.h>

    + + + + + + + + + + + + + + +

    +Data Fields

    +UcxAllocator allocator
     UcxAllocator based on this stack.
     
    size_t size
     Stack size. More...
     
    +char * space
     Pointer to the bottom of the stack.
     
    +char * top
     Pointer to the top of the stack.
     
    +

    Detailed Description

    +

    UCX stack structure.

    +

    Field Documentation

    + +

    ◆ size

    + +
    +
    + + + + +
    size_t UcxStack::size
    +
    + +

    Stack size.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/stack.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxTestList.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxTestList.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,130 @@ + + + + + + + +ucx: UcxTestList Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxTestList Struct Reference
    +
    +
    + +

    Structure for the internal list of test cases. + More...

    + +

    #include <test.h>

    + + + + + + + + +

    +Data Fields

    UcxTest test
     Test case. More...
     
    UcxTestListnext
     Pointer to the next list element. More...
     
    +

    Detailed Description

    +

    Structure for the internal list of test cases.

    +

    Field Documentation

    + +

    ◆ next

    + +
    +
    + + + + +
    UcxTestList* UcxTestList::next
    +
    + +

    Pointer to the next list element.

    + +
    +
    + +

    ◆ test

    + +
    +
    + + + + +
    UcxTest UcxTestList::test
    +
    + +

    Test case.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/test.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structUcxTestSuite.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structUcxTestSuite.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,150 @@ + + + + + + + +ucx: UcxTestSuite Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    UcxTestSuite Struct Reference
    +
    +
    + +

    A test suite containing multiple test cases. + More...

    + +

    #include <test.h>

    + + + + + + + + + + + +

    +Data Fields

    unsigned int success
     The number of successful tests after the suite has been run. More...
     
    unsigned int failure
     The number of failed tests after the suite has been run. More...
     
    UcxTestListtests
     Internal list of test cases. More...
     
    +

    Detailed Description

    +

    A test suite containing multiple test cases.

    +

    Field Documentation

    + +

    ◆ failure

    + +
    +
    + + + + +
    unsigned int UcxTestSuite::failure
    +
    + +

    The number of failed tests after the suite has been run.

    + +
    +
    + +

    ◆ success

    + +
    +
    + + + + +
    unsigned int UcxTestSuite::success
    +
    + +

    The number of successful tests after the suite has been run.

    + +
    +
    + +

    ◆ tests

    + +
    +
    + + + + +
    UcxTestList* UcxTestSuite::tests
    +
    + +

    Internal list of test cases.

    +

    Use ucx_test_register() to add tests to this list.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/test.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structscstr__t.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structscstr__t.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,99 @@ + + + + + + + +ucx: scstr_t Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    scstr_t Struct Reference
    +
    +
    + +

    The UCX string structure for immutable (constant) strings. + More...

    + +

    #include <string.h>

    + + + + + + + + +

    +Data Fields

    +const char * ptr
     A constant pointer to the immutable string (not necessarily NULL-terminated)
     
    +size_t length
     The length of the string.
     
    +

    Detailed Description

    +

    The UCX string structure for immutable (constant) strings.

    +

    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/string.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structsstr__t.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structsstr__t.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,99 @@ + + + + + + + +ucx: sstr_t Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    sstr_t Struct Reference
    +
    +
    + +

    The UCX string structure. + More...

    + +

    #include <string.h>

    + + + + + + + + +

    +Data Fields

    +char * ptr
     A pointer to the string (not necessarily NULL-terminated)
     
    +size_t length
     The length of the string.
     
    +

    Detailed Description

    +

    The UCX string structure.

    +

    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/string.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structucx__memchunk.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structucx__memchunk.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,129 @@ + + + + + + + +ucx: ucx_memchunk Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    ucx_memchunk Struct Reference
    +
    +
    + +

    Capsule for destructible memory chunks. + More...

    + + + + + + + + +

    +Data Fields

    ucx_destructor destructor
     The destructor for the memory chunk. More...
     
    char c
     First byte of the memory chunk. More...
     
    +

    Detailed Description

    +

    Capsule for destructible memory chunks.

    +

    Field Documentation

    + +

    ◆ c

    + +
    +
    + + + + +
    char ucx_memchunk::c
    +
    + +

    First byte of the memory chunk.

    +

    Note, that the address &c is also the address of the whole memory chunk.

    + +
    +
    + +

    ◆ destructor

    + +
    +
    + + + + +
    ucx_destructor ucx_memchunk::destructor
    +
    + +

    The destructor for the memory chunk.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/mempool.c
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structucx__regdestr.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structucx__regdestr.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,128 @@ + + + + + + + +ucx: ucx_regdestr Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    ucx_regdestr Struct Reference
    +
    +
    + +

    Capsule for data and its destructor. + More...

    + + + + + + + + +

    +Data Fields

    ucx_destructor destructor
     The destructor for the data. More...
     
    void * ptr
     A pointer to the data. More...
     
    +

    Detailed Description

    +

    Capsule for data and its destructor.

    +

    Field Documentation

    + +

    ◆ destructor

    + +
    +
    + + + + +
    ucx_destructor ucx_regdestr::destructor
    +
    + +

    The destructor for the data.

    + +
    +
    + +

    ◆ ptr

    + +
    +
    + + + + +
    void* ucx_regdestr::ptr
    +
    + +

    A pointer to the data.

    + +
    +
    +
    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/mempool.c
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/structucx__stack__metadata.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/structucx__stack__metadata.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,99 @@ + + + + + + + +ucx: ucx_stack_metadata Struct Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + +
    +
    + +
    +
    ucx_stack_metadata Struct Reference
    +
    +
    + +

    Metadata for each UCX stack element. + More...

    + +

    #include <stack.h>

    + + + + + + + + +

    +Data Fields

    +char * prev
     Location of the previous element (NULL if this is the first)
     
    +size_t size
     Size of this element.
     
    +

    Detailed Description

    +

    Metadata for each UCX stack element.

    +

    The documentation for this struct was generated from the following file:
      +
    • /home/mike/workspace/c/ucx/src/ucx/stack.h
    • +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/sync_off.png Binary file docs/api-2.1/sync_off.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/sync_on.png Binary file docs/api-2.1/sync_on.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/tab_a.png Binary file docs/api-2.1/tab_a.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/tab_b.png Binary file docs/api-2.1/tab_b.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/tab_h.png Binary file docs/api-2.1/tab_h.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/tab_s.png Binary file docs/api-2.1/tab_s.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/tabs.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/tabs.css Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:transparent}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff -r 92e482410453 -r d345541018fa docs/api-2.1/test_8h.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/test_8h.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,547 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/test.h File Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    test.h File Reference
    +
    +
    + +

    UCX Test Framework. +More...

    +
    #include "ucx.h"
    +#include <stdio.h>
    +#include <string.h>
    +#include <setjmp.h>
    +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Data Structures

    struct  UcxTestList
     Structure for the internal list of test cases. More...
     
    struct  UcxTestSuite
     A test suite containing multiple test cases. More...
     
    + + + + + + + + + + + + + + + + + + + + + + +

    +Macros

    #define __FUNCTION__   __func__
     Alias for the __func__ preprocessor macro. More...
     
    #define UCX_TEST(name)   void name(UcxTestSuite* _suite_,FILE *_output_)
     Macro for a UcxTest function header. More...
     
    #define UCX_TEST_BEGIN
     Marks the begin of a test. More...
     
    #define UCX_TEST_ASSERT(condition, message)
     Checks a test assertion. More...
     
    #define UCX_TEST_SUBROUTINE(name, ...)
     Macro for a test subroutine function header. More...
     
    #define UCX_TEST_CALL_SUBROUTINE(name, ...)   name(_suite_,_output_,_env_,__VA_ARGS__);
     Macro for calling a test subroutine. More...
     
    #define UCX_TEST_END   fwrite("success.\n", 1, 9, _output_); _suite_->success++;}
     Marks the end of a test. More...
     
    + + + + + + + + + + +

    +Typedefs

    typedef struct UcxTestSuite UcxTestSuite
     Type for the UcxTestSuite. More...
     
    typedef void(* UcxTest) (UcxTestSuite *, FILE *)
     Pointer to a test function. More...
     
    typedef struct UcxTestList UcxTestList
     Type for the internal list of test cases. More...
     
    + + + + + + + + + + + + + +

    +Functions

    UcxTestSuiteucx_test_suite_new ()
     Creates a new test suite. More...
     
    void ucx_test_suite_free (UcxTestSuite *suite)
     Destroys a test suite. More...
     
    int ucx_test_register (UcxTestSuite *suite, UcxTest test)
     Registers a test function with the specified test suite. More...
     
    void ucx_test_run (UcxTestSuite *suite, FILE *outstream)
     Runs a test suite and writes the test log to the specified stream. More...
     
    +

    Detailed Description

    +

    UCX Test Framework.

    +

    Usage of this test framework:

    +

    **** IN HEADER FILE: ****

    +
    +UCX_TEST(function_name);
    +UCX_TEST_SUBROUTINE(subroutine_name, paramlist); // optional
    +

    **** IN SOURCE FILE: ****

    +UCX_TEST_SUBROUTINE(subroutine_name, paramlist) {
    +  // tests with UCX_TEST_ASSERT()
    +}
    UCX_TEST(function_name) {
    +  // memory allocation and other stuff here
    +  UCX_TEST_BEGIN
    +  // tests with UCX_TEST_ASSERT() and/or
    +  // calls with UCX_TEST_CALL_SUBROUTINE() here
    +  UCX_TEST_END
    +  // cleanup of memory here
    +}
    +

    Note: if a test fails, a longjump is performed back to the UCX_TEST_BEGIN macro!

    +

    Attention: Do not call own functions within a test, that use UCX_TEST_ASSERT() macros and are not defined by using UCX_TEST_SUBROUTINE().

    +
    Author
    Mike Becker
    +
    +Olaf Wintermann
    +

    Macro Definition Documentation

    + +

    ◆ __FUNCTION__

    + +
    +
    + + + + +
    #define __FUNCTION__   __func__
    +
    + +

    Alias for the __func__ preprocessor macro.

    +

    Some compilers use __func__ and others use FUNCTION. We use FUNCTION so we define it for those compilers which use __func__.

    + +
    +
    + +

    ◆ UCX_TEST

    + +
    +
    + + + + + + + + +
    #define UCX_TEST( name)   void name(UcxTestSuite* _suite_,FILE *_output_)
    +
    + +

    Macro for a UcxTest function header.

    +

    Use this macro to declare and/or define a UcxTest function.

    +
    Parameters
    + + +
    namethe name of the test function
    +
    +
    + +
    +
    + +

    ◆ UCX_TEST_ASSERT

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define UCX_TEST_ASSERT( condition,
     message 
    )
    +
    +Value:
    if (!(condition)) { \
    fwrite(message".\n", 1, 2+strlen(message), _output_); \
    _suite_->failure++; \
    longjmp(_env_, 1);\
    }
    +

    Checks a test assertion.

    +

    If the assertion is correct, the test carries on. If the assertion is not correct, the specified message (terminated by a dot and a line break) is written to the test suites output stream.

    Parameters
    + + + +
    conditionthe condition to check
    messagethe message that shall be printed out on failure
    +
    +
    + +
    +
    + +

    ◆ UCX_TEST_BEGIN

    + +
    +
    + + + + +
    #define UCX_TEST_BEGIN
    +
    +Value:
    fwrite("Running ", 1, 8, _output_);\
    fwrite(__FUNCTION__, 1, strlen(__FUNCTION__), _output_);\
    fwrite("... ", 1, 4, _output_);\
    jmp_buf _env_; \
    if (!setjmp(_env_)) {
    #define __FUNCTION__
    Alias for the __func__ preprocessor macro.
    Definition: test.h:91
    +
    +

    Marks the begin of a test.

    +

    Note: Any UCX_TEST_ASSERT() calls must be performed after UCX_TEST_BEGIN.

    +
    See also
    UCX_TEST_END
    + +
    +
    + +

    ◆ UCX_TEST_CALL_SUBROUTINE

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define UCX_TEST_CALL_SUBROUTINE( name,
     ... 
    )   name(_suite_,_output_,_env_,__VA_ARGS__);
    +
    + +

    Macro for calling a test subroutine.

    +

    Subroutines declared with UCX_TEST_SUBROUTINE() can be called by using this macro.

    +

    Note: You may only call subroutines within a UCX_TEST_BEGIN- UCX_TEST_END-block.

    +
    Parameters
    + + + +
    namethe name of the subroutine
    ...the argument list
    +
    +
    +
    See also
    UCX_TEST_SUBROUTINE()
    + +
    +
    + +

    ◆ UCX_TEST_END

    + +
    +
    + + + + +
    #define UCX_TEST_END   fwrite("success.\n", 1, 9, _output_); _suite_->success++;}
    +
    + +

    Marks the end of a test.

    +

    Note: Any UCX_TEST_ASSERT() calls must be performed before UCX_TEST_END.

    +
    See also
    UCX_TEST_BEGIN
    + +
    +
    + +

    ◆ UCX_TEST_SUBROUTINE

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define UCX_TEST_SUBROUTINE( name,
     ... 
    )
    +
    +Value:
    void name(UcxTestSuite* _suite_,\
    FILE *_output_, jmp_buf _env_, __VA_ARGS__)
    A test suite containing multiple test cases.
    Definition: test.h:116
    +
    +

    Macro for a test subroutine function header.

    +

    Use this to declare and/or define a subroutine that can be called by using UCX_TEST_CALL_SUBROUTINE().

    +
    Parameters
    + + + +
    namethe name of the subroutine
    ...the parameter list
    +
    +
    +
    See also
    UCX_TEST_CALL_SUBROUTINE()
    + +
    +
    +

    Typedef Documentation

    + +

    ◆ UcxTest

    + +
    +
    + + + + +
    typedef void(* UcxTest) (UcxTestSuite *, FILE *)
    +
    + +

    Pointer to a test function.

    + +
    +
    + +

    ◆ UcxTestList

    + +
    +
    + + + + +
    typedef struct UcxTestList UcxTestList
    +
    + +

    Type for the internal list of test cases.

    + +
    +
    + +

    ◆ UcxTestSuite

    + +
    +
    + + + + +
    typedef struct UcxTestSuite UcxTestSuite
    +
    + +

    Type for the UcxTestSuite.

    + +
    +
    +

    Function Documentation

    + +

    ◆ ucx_test_register()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    int ucx_test_register (UcxTestSuitesuite,
    UcxTest test 
    )
    +
    + +

    Registers a test function with the specified test suite.

    +
    Parameters
    + + + +
    suitethe suite, the test function shall be added to
    testthe test function to register
    +
    +
    +
    Returns
    EXIT_SUCCESS on success or EXIT_FAILURE on failure
    + +
    +
    + +

    ◆ ucx_test_run()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void ucx_test_run (UcxTestSuitesuite,
    FILE * outstream 
    )
    +
    + +

    Runs a test suite and writes the test log to the specified stream.

    +
    Parameters
    + + + +
    suitethe test suite to run
    outstreamthe stream the log shall be written to
    +
    +
    + +
    +
    + +

    ◆ ucx_test_suite_free()

    + +
    +
    + + + + + + + + +
    void ucx_test_suite_free (UcxTestSuitesuite)
    +
    + +

    Destroys a test suite.

    +
    Parameters
    + + +
    suitethe test suite to destroy
    +
    +
    + +
    +
    + +

    ◆ ucx_test_suite_new()

    + +
    +
    + + + + + + + +
    UcxTestSuite* ucx_test_suite_new ()
    +
    + +

    Creates a new test suite.

    +
    Returns
    a new test suite
    + +
    +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/test_8h_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/test_8h_source.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,93 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/test.h Source File + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    test.h
    +
    +
    +Go to the documentation of this file.
    1 /*
    2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    3  *
    4  * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions are met:
    8  *
    9  * 1. Redistributions of source code must retain the above copyright
    10  * notice, this list of conditions and the following disclaimer.
    11  *
    12  * 2. Redistributions in binary form must reproduce the above copyright
    13  * notice, this list of conditions and the following disclaimer in the
    14  * documentation and/or other materials provided with the distribution.
    15  *
    16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
    20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    26  * POSSIBILITY OF SUCH DAMAGE.
    27  */
    28 
    71 #ifndef UCX_TEST_H
    72 #define UCX_TEST_H
    73 
    74 #include "ucx.h"
    75 #include <stdio.h>
    76 #include <string.h>
    77 #include <setjmp.h>
    78 
    79 #ifdef __cplusplus
    80 extern "C" {
    81 #endif
    82 
    83 #ifndef __FUNCTION__
    84 
    91 #define __FUNCTION__ __func__
    92 #endif
    93 
    95 typedef struct UcxTestSuite UcxTestSuite;
    96 
    98 typedef void(*UcxTest)(UcxTestSuite*,FILE*);
    99 
    101 typedef struct UcxTestList UcxTestList;
    102 
    104 struct UcxTestList {
    105 
    108 
    111 };
    112 
    116 struct UcxTestSuite {
    117 
    119  unsigned int success;
    120 
    122  unsigned int failure;
    123 
    129 };
    130 
    135 UcxTestSuite* ucx_test_suite_new();
    136 
    141 void ucx_test_suite_free(UcxTestSuite* suite);
    142 
    151 int ucx_test_register(UcxTestSuite* suite, UcxTest test);
    152 
    158 void ucx_test_run(UcxTestSuite* suite, FILE* outstream);
    159 
    167 #define UCX_TEST(name) void name(UcxTestSuite* _suite_,FILE *_output_)
    168 
    176 #define UCX_TEST_BEGIN fwrite("Running ", 1, 8, _output_);\
    177  fwrite(__FUNCTION__, 1, strlen(__FUNCTION__), _output_);\
    178  fwrite("... ", 1, 4, _output_);\
    179  jmp_buf _env_; \
    180  if (!setjmp(_env_)) {
    181 
    190 #define UCX_TEST_ASSERT(condition,message) if (!(condition)) { \
    191  fwrite(message".\n", 1, 2+strlen(message), _output_); \
    192  _suite_->failure++; \
    193  longjmp(_env_, 1);\
    194  }
    195 
    207 #define UCX_TEST_SUBROUTINE(name,...) void name(UcxTestSuite* _suite_,\
    208  FILE *_output_, jmp_buf _env_, __VA_ARGS__)
    209 
    224 #define UCX_TEST_CALL_SUBROUTINE(name,...) \
    225  name(_suite_,_output_,_env_,__VA_ARGS__);
    226 
    234 #define UCX_TEST_END fwrite("success.\n", 1, 9, _output_); _suite_->success++;}
    235 
    236 #ifdef __cplusplus
    237 }
    238 #endif
    239 
    240 #endif /* UCX_TEST_H */
    241 
    unsigned int success
    The number of successful tests after the suite has been run.
    Definition: test.h:119
    +
    Bounded string implementation.
    +
    Main UCX Header providing most common definitions.
    +
    UcxTest test
    Test case.
    Definition: test.h:107
    +
    int ucx_test_register(UcxTestSuite *suite, UcxTest test)
    Registers a test function with the specified test suite.
    Definition: test.c:52
    +
    void ucx_test_run(UcxTestSuite *suite, FILE *outstream)
    Runs a test suite and writes the test log to the specified stream.
    Definition: test.c:82
    +
    Structure for the internal list of test cases.
    Definition: test.h:104
    +
    UcxTestSuite * ucx_test_suite_new()
    Creates a new test suite.
    Definition: test.c:31
    +
    UcxTestList * tests
    Internal list of test cases.
    Definition: test.h:128
    +
    void(* UcxTest)(UcxTestSuite *, FILE *)
    Pointer to a test function.
    Definition: test.h:98
    +
    void ucx_test_suite_free(UcxTestSuite *suite)
    Destroys a test suite.
    Definition: test.c:42
    +
    unsigned int failure
    The number of failed tests after the suite has been run.
    Definition: test.h:122
    +
    UcxTestList * next
    Pointer to the next list element.
    Definition: test.h:110
    +
    A test suite containing multiple test cases.
    Definition: test.h:116
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/uaplogo.png Binary file docs/api-2.1/uaplogo.png has changed diff -r 92e482410453 -r d345541018fa docs/api-2.1/ucx_8h.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/ucx_8h.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,388 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/ucx.h File Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    ucx.h File Reference
    +
    +
    + +

    Main UCX Header providing most common definitions. +More...

    +
    #include <stdlib.h>
    +#include <stdint.h>
    +#include <sys/types.h>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + +

    +Macros

    #define UCX_VERSION_MAJOR   2
     Major UCX version as integer constant. More...
     
    #define UCX_VERSION_MINOR   1
     Minor UCX version as integer constant. More...
     
    #define UCX_VERSION   (((UCX_VERSION_MAJOR)<<16)|UCX_VERSION_MINOR)
     Version constant which ensures to increase monotonically. More...
     
    #define ucx_szmul(a, b, result)   ucx_szmul_impl(a, b, result)
     Performs a multiplication of size_t values and checks for overflow. More...
     
    + + + + + + + + + + + + + + + + + + + +

    +Typedefs

    typedef void(* ucx_destructor) (void *)
     A function pointer to a destructor function. More...
     
    typedef int(* cmp_func) (const void *, const void *, void *)
     Function pointer to a compare function. More...
     
    typedef intmax_t(* distance_func) (const void *, const void *, void *)
     Function pointer to a distance function. More...
     
    typedef void *(* copy_func) (const void *, void *)
     Function pointer to a copy function. More...
     
    typedef size_t(* write_func) (const void *, size_t, size_t, void *)
     Function pointer to a write function. More...
     
    typedef size_t(* read_func) (void *, size_t, size_t, void *)
     Function pointer to a read function. More...
     
    + + + + +

    +Functions

    int ucx_szmul_impl (size_t a, size_t b, size_t *result)
     Performs a multiplication of size_t values and checks for overflow. More...
     
    +

    Detailed Description

    +

    Main UCX Header providing most common definitions.

    +
    Author
    Mike Becker
    +
    +Olaf Wintermann
    +

    Macro Definition Documentation

    + +

    ◆ ucx_szmul

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    #define ucx_szmul( a,
     b,
     result 
    )   ucx_szmul_impl(a, b, result)
    +
    + +

    Performs a multiplication of size_t values and checks for overflow.

    +
    Parameters
    + + + + +
    afirst operand
    bsecond operand
    resulta pointer to a size_t, where the result should be stored
    +
    +
    +
    Returns
    zero, if no overflow occurred and the result is correct, non-zero otherwise
    + +
    +
    + +

    ◆ UCX_VERSION

    + +
    +
    + + + + +
    #define UCX_VERSION   (((UCX_VERSION_MAJOR)<<16)|UCX_VERSION_MINOR)
    +
    + +

    Version constant which ensures to increase monotonically.

    + +
    +
    + +

    ◆ UCX_VERSION_MAJOR

    + +
    +
    + + + + +
    #define UCX_VERSION_MAJOR   2
    +
    + +

    Major UCX version as integer constant.

    + +
    +
    + +

    ◆ UCX_VERSION_MINOR

    + +
    +
    + + + + +
    #define UCX_VERSION_MINOR   1
    +
    + +

    Minor UCX version as integer constant.

    + +
    +
    +

    Typedef Documentation

    + +

    ◆ cmp_func

    + +
    +
    + + + + +
    typedef int(* cmp_func) (const void *, const void *, void *)
    +
    + +

    Function pointer to a compare function.

    +

    The compare function shall take three arguments: the two values that shall be compared and optional additional data. The function shall then return -1 if the first argument is less than the second argument, 1 if the first argument is greater than the second argument and 0 if both arguments are equal. If the third argument is NULL, it shall be ignored.

    + +
    +
    + +

    ◆ copy_func

    + +
    +
    + + + + +
    typedef void*(* copy_func) (const void *, void *)
    +
    + +

    Function pointer to a copy function.

    +

    The copy function shall create a copy of the first argument and may use additional data provided by the second argument. If the second argument is NULL, it shall be ignored.

    +

    Attention: if pointers returned by functions of this type may be passed to free() depends on the implementation of the respective copy_func.

    + +
    +
    + +

    ◆ distance_func

    + +
    +
    + + + + +
    typedef intmax_t(* distance_func) (const void *, const void *, void *)
    +
    + +

    Function pointer to a distance function.

    +

    The distance function shall take three arguments: the two values for which the distance shall be computed and optional additional data. The function shall then return the signed distance as integer value.

    + +
    +
    + +

    ◆ read_func

    + +
    +
    + + + + +
    typedef size_t(* read_func) (void *, size_t, size_t, void *)
    +
    + +

    Function pointer to a read function.

    +

    The signature of the read function shall be compatible to the signature of standard fread, though it may use arbitrary data types for source and destination.

    +

    The arguments shall contain (in ascending order): a pointer to the destination, the length of one element, the element count and a pointer to the source.

    + +
    +
    + +

    ◆ ucx_destructor

    + +
    +
    + + + + +
    typedef void(* ucx_destructor) (void *)
    +
    + +

    A function pointer to a destructor function.

    +
    See also
    ucx_mempool_setdestr()
    +
    +ucx_mempool_regdestr()
    + +
    +
    + +

    ◆ write_func

    + +
    +
    + + + + +
    typedef size_t(* write_func) (const void *, size_t, size_t, void *)
    +
    + +

    Function pointer to a write function.

    +

    The signature of the write function shall be compatible to the signature of standard fwrite, though it may use arbitrary data types for source and destination.

    +

    The arguments shall contain (in ascending order): a pointer to the source, the length of one element, the element count and a pointer to the destination.

    + +
    +
    +

    Function Documentation

    + +

    ◆ ucx_szmul_impl()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_szmul_impl (size_t a,
    size_t b,
    size_t * result 
    )
    +
    + +

    Performs a multiplication of size_t values and checks for overflow.

    +

    This is a custom implementation in case there is no compiler builtin available.

    +
    Parameters
    + + + + +
    afirst operand
    bsecond operand
    resulta pointer to a size_t where the result should be stored
    +
    +
    +
    Returns
    zero, if no overflow occurred and the result is correct, non-zero otherwise
    + +
    +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/ucx_8h_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/ucx_8h_source.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,85 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/ucx.h Source File + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    ucx.h
    +
    +
    +Go to the documentation of this file.
    1 /*
    2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    3  *
    4  * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions are met:
    8  *
    9  * 1. Redistributions of source code must retain the above copyright
    10  * notice, this list of conditions and the following disclaimer.
    11  *
    12  * 2. Redistributions in binary form must reproduce the above copyright
    13  * notice, this list of conditions and the following disclaimer in the
    14  * documentation and/or other materials provided with the distribution.
    15  *
    16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
    20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    26  * POSSIBILITY OF SUCH DAMAGE.
    27  */
    36 #ifndef UCX_H
    37 #define UCX_H
    38 
    40 #define UCX_VERSION_MAJOR 2
    41 
    43 #define UCX_VERSION_MINOR 1
    44 
    46 #define UCX_VERSION (((UCX_VERSION_MAJOR)<<16)|UCX_VERSION_MINOR)
    47 
    48 #include <stdlib.h>
    49 #include <stdint.h>
    50 
    51 #ifdef _WIN32
    52 #if !(defined __ssize_t_defined || defined _SSIZE_T_)
    53 #include <BaseTsd.h>
    54 typedef SSIZE_T ssize_t;
    55 #define __ssize_t_defined
    56 #define _SSIZE_T_
    57 #endif /* __ssize_t_defined and _SSIZE_T */
    58 #else /* !_WIN32 */
    59 #include <sys/types.h>
    60 #endif /* _WIN32 */
    61 
    62 #ifdef __cplusplus
    63 extern "C" {
    64 #endif
    65 
    66 
    72 typedef void(*ucx_destructor)(void*);
    73 
    84 typedef int(*cmp_func)(const void*,const void*,void*);
    85 
    93 typedef intmax_t(*distance_func)(const void*,const void*,void*);
    94 
    106 typedef void*(*copy_func)(const void*,void*);
    107 
    119 typedef size_t(*write_func)(const void*, size_t, size_t, void*);
    120 
    132 typedef size_t(*read_func)(void*, size_t, size_t, void*);
    133 
    134 
    135 
    136 #if __GNUC__ >= 5 || defined(__clang__)
    137 #define UCX_MUL_BUILTIN
    138 
    139 #if __WORDSIZE == 32
    140 
    152 #define ucx_szmul(a, b, result) __builtin_umul_overflow(a, b, result)
    153 #else /* __WORDSIZE != 32 */
    154 
    166 #define ucx_szmul(a, b, result) __builtin_umull_overflow(a, b, result)
    167 #endif /* __WORDSIZE */
    168 
    169 #else /* no GNUC or clang bultin */
    170 
    181 #define ucx_szmul(a, b, result) ucx_szmul_impl(a, b, result)
    182 
    195 int ucx_szmul_impl(size_t a, size_t b, size_t *result);
    196 
    197 #endif
    198 
    199 #ifdef __cplusplus
    200 }
    201 #endif
    202 
    203 #endif /* UCX_H */
    204 
    int(* cmp_func)(const void *, const void *, void *)
    Function pointer to a compare function.
    Definition: ucx.h:84
    +
    size_t(* read_func)(void *, size_t, size_t, void *)
    Function pointer to a read function.
    Definition: ucx.h:132
    +
    intmax_t(* distance_func)(const void *, const void *, void *)
    Function pointer to a distance function.
    Definition: ucx.h:93
    +
    int ucx_szmul_impl(size_t a, size_t b, size_t *result)
    Performs a multiplication of size_t values and checks for overflow.
    Definition: ucx.c:48
    +
    size_t(* write_func)(const void *, size_t, size_t, void *)
    Function pointer to a write function.
    Definition: ucx.h:119
    +
    void(* ucx_destructor)(void *)
    A function pointer to a destructor function.
    Definition: ucx.h:72
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/utils_8h.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/utils_8h.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,2233 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/utils.h File Reference + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    utils.h File Reference
    +
    +
    + +

    Compare, copy and printf functions. +More...

    +
    #include "ucx.h"
    +#include "string.h"
    +#include "allocator.h"
    +#include <inttypes.h>
    +#include <stdarg.h>
    +
    +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + +

    +Macros

    +#define UCX_STREAM_COPY_BUFSIZE   4096
     Default buffer size for ucx_stream_copy() and ucx_stream_ncopy().
     
    #define ucx_stream_copy(src, dest, rfnc, wfnc)
     Shorthand for an unbounded ucx_stream_bncopy call using a default buffer. More...
     
    #define ucx_stream_ncopy(src, dest, rfnc, wfnc, n)
     Shorthand for ucx_stream_bncopy using a default copy buffer. More...
     
    #define ucx_stream_bcopy(src, dest, rfnc, wfnc, buf, bufsize)
     Shorthand for an unbounded ucx_stream_bncopy call using the specified buffer. More...
     
    #define ucx_sprintf(...)   ucx_asprintf(ucx_default_allocator(), __VA_ARGS__)
     Shortcut for ucx_asprintf() with default allocator. More...
     
    #define ucx_bprintf(buffer, ...)
     A printf() like function which writes the output to a UcxBuffer. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    void * ucx_strcpy (const void *s, void *data)
     Copies a string. More...
     
    void * ucx_memcpy (const void *m, void *n)
     Copies a memory area. More...
     
    size_t ucx_stream_bncopy (void *src, void *dest, read_func rfnc, write_func wfnc, char *buf, size_t bufsize, size_t n)
     Reads data from a stream and writes it to another stream. More...
     
    int ucx_cmp_str (const void *s1, const void *s2, void *data)
     Wraps the strcmp function. More...
     
    int ucx_cmp_strn (const void *s1, const void *s2, void *n)
     Wraps the strncmp function. More...
     
    int ucx_cmp_sstr (const void *s1, const void *s2, void *data)
     Wraps the sstrcmp function. More...
     
    int ucx_cmp_int (const void *i1, const void *i2, void *data)
     Compares two integers of type int. More...
     
    int ucx_cmp_longint (const void *i1, const void *i2, void *data)
     Compares two integers of type long int. More...
     
    int ucx_cmp_longlong (const void *i1, const void *i2, void *data)
     Compares two integers of type long long. More...
     
    int ucx_cmp_int16 (const void *i1, const void *i2, void *data)
     Compares two integers of type int16_t. More...
     
    int ucx_cmp_int32 (const void *i1, const void *i2, void *data)
     Compares two integers of type int32_t. More...
     
    int ucx_cmp_int64 (const void *i1, const void *i2, void *data)
     Compares two integers of type int64_t. More...
     
    int ucx_cmp_uint (const void *i1, const void *i2, void *data)
     Compares two integers of type unsigned int. More...
     
    int ucx_cmp_ulongint (const void *i1, const void *i2, void *data)
     Compares two integers of type unsigned long int. More...
     
    int ucx_cmp_ulonglong (const void *i1, const void *i2, void *data)
     Compares two integers of type unsigned long long. More...
     
    int ucx_cmp_uint16 (const void *i1, const void *i2, void *data)
     Compares two integers of type uint16_t. More...
     
    int ucx_cmp_uint32 (const void *i1, const void *i2, void *data)
     Compares two integers of type uint32_t. More...
     
    int ucx_cmp_uint64 (const void *i1, const void *i2, void *data)
     Compares two integers of type uint64_t. More...
     
    intmax_t ucx_dist_int (const void *i1, const void *i2, void *data)
     Distance function for integers of type int. More...
     
    intmax_t ucx_dist_longint (const void *i1, const void *i2, void *data)
     Distance function for integers of type long int. More...
     
    intmax_t ucx_dist_longlong (const void *i1, const void *i2, void *data)
     Distance function for integers of type long long. More...
     
    intmax_t ucx_dist_int16 (const void *i1, const void *i2, void *data)
     Distance function for integers of type int16_t. More...
     
    intmax_t ucx_dist_int32 (const void *i1, const void *i2, void *data)
     Distance function for integers of type int32_t. More...
     
    intmax_t ucx_dist_int64 (const void *i1, const void *i2, void *data)
     Distance function for integers of type int64_t. More...
     
    intmax_t ucx_dist_uint (const void *i1, const void *i2, void *data)
     Distance function for integers of type unsigned int. More...
     
    intmax_t ucx_dist_ulongint (const void *i1, const void *i2, void *data)
     Distance function for integers of type unsigned long int. More...
     
    intmax_t ucx_dist_ulonglong (const void *i1, const void *i2, void *data)
     Distance function for integers of type unsigned long long. More...
     
    intmax_t ucx_dist_uint16 (const void *i1, const void *i2, void *data)
     Distance function for integers of type uint16_t. More...
     
    intmax_t ucx_dist_uint32 (const void *i1, const void *i2, void *data)
     Distance function for integers of type uint32_t. More...
     
    intmax_t ucx_dist_uint64 (const void *i1, const void *i2, void *data)
     Distance function for integers of type uint64_t. More...
     
    int ucx_cmp_float (const void *f1, const void *f2, void *data)
     Compares two real numbers of type float. More...
     
    int ucx_cmp_double (const void *d1, const void *d2, void *data)
     Compares two real numbers of type double. More...
     
    int ucx_cmp_ptr (const void *ptr1, const void *ptr2, void *data)
     Compares two pointers. More...
     
    int ucx_cmp_mem (const void *ptr1, const void *ptr2, void *n)
     Compares two memory areas. More...
     
    int ucx_fprintf (void *stream, write_func wfc, const char *fmt,...)
     A printf() like function which writes the output to a stream by using a write_func(). More...
     
    int ucx_vfprintf (void *stream, write_func wfc, const char *fmt, va_list ap)
     va_list version of ucx_fprintf(). More...
     
    sstr_t ucx_asprintf (UcxAllocator *allocator, const char *fmt,...)
     A printf() like function which allocates space for a sstr_t the result is written to. More...
     
    sstr_t ucx_vasprintf (UcxAllocator *allocator, const char *fmt, va_list ap)
     va_list version of ucx_asprintf(). More...
     
    +

    Detailed Description

    +

    Compare, copy and printf functions.

    +
    Author
    Mike Becker
    +
    +Olaf Wintermann
    +

    Macro Definition Documentation

    + +

    ◆ ucx_bprintf

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    #define ucx_bprintf( buffer,
     ... 
    )
    +
    +Value:
    size_t ucx_buffer_write(const void *ptr, size_t size, size_t nitems, UcxBuffer *buffer)
    Writes data to a UcxBuffer.
    Definition: buffer.c:152
    +
    UCX Buffer.
    Definition: buffer.h:73
    +
    int ucx_fprintf(void *stream, write_func wfc, const char *fmt,...)
    A printf() like function which writes the output to a stream by using a write_func().
    Definition: utils.c:343
    +
    size_t(* write_func)(const void *, size_t, size_t, void *)
    Function pointer to a write function.
    Definition: ucx.h:119
    +
    +

    A printf() like function which writes the output to a UcxBuffer.

    +
    Parameters
    + + + +
    bufferthe buffer the data is written to
    ...format string and additional arguments
    +
    +
    +
    Returns
    the total number of bytes written
    +
    See also
    ucx_fprintf()
    + +
    +
    + +

    ◆ ucx_sprintf

    + +
    +
    + + + + + + + + +
    #define ucx_sprintf( ...)   ucx_asprintf(ucx_default_allocator(), __VA_ARGS__)
    +
    + +

    Shortcut for ucx_asprintf() with default allocator.

    + +
    +
    + +

    ◆ ucx_stream_bcopy

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #define ucx_stream_bcopy( src,
     dest,
     rfnc,
     wfnc,
     buf,
     bufsize 
    )
    +
    +Value:
    src, dest, (read_func)rfnc, (write_func)wfnc, \
    buf, bufsize, (size_t)-1)
    size_t ucx_stream_bncopy(void *src, void *dest, read_func rfnc, write_func wfnc, char *buf, size_t bufsize, size_t n)
    Reads data from a stream and writes it to another stream.
    Definition: utils.c:52
    +
    size_t(* read_func)(void *, size_t, size_t, void *)
    Function pointer to a read function.
    Definition: ucx.h:132
    +
    size_t(* write_func)(const void *, size_t, size_t, void *)
    Function pointer to a write function.
    Definition: ucx.h:119
    +
    +

    Shorthand for an unbounded ucx_stream_bncopy call using the specified buffer.

    +
    Parameters
    + + + + + + + +
    srcthe source stream
    destthe destination stream
    rfncthe read function
    wfncthe write function
    bufa pointer to the copy buffer or NULL if a buffer shall be implicitly created on the heap
    bufsizethe size of the copy buffer - if NULL was provided for buf, this is the size of the buffer that shall be implicitly created
    +
    +
    +
    Returns
    total number of bytes copied
    + +
    +
    + +

    ◆ ucx_stream_copy

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #define ucx_stream_copy( src,
     dest,
     rfnc,
     wfnc 
    )
    +
    +Value:
    src, dest, (read_func)rfnc, (write_func)wfnc, \
    NULL, UCX_STREAM_COPY_BUFSIZE, (size_t)-1)
    size_t ucx_stream_bncopy(void *src, void *dest, read_func rfnc, write_func wfnc, char *buf, size_t bufsize, size_t n)
    Reads data from a stream and writes it to another stream.
    Definition: utils.c:52
    +
    #define UCX_STREAM_COPY_BUFSIZE
    Default buffer size for ucx_stream_copy() and ucx_stream_ncopy().
    Definition: utils.h:55
    +
    size_t(* read_func)(void *, size_t, size_t, void *)
    Function pointer to a read function.
    Definition: ucx.h:132
    +
    size_t(* write_func)(const void *, size_t, size_t, void *)
    Function pointer to a write function.
    Definition: ucx.h:119
    +
    +

    Shorthand for an unbounded ucx_stream_bncopy call using a default buffer.

    +
    Parameters
    + + + + + +
    srcthe source stream
    destthe destination stream
    rfncthe read function
    wfncthe write function
    +
    +
    +
    Returns
    total number of bytes copied
    +
    See also
    UCX_STREAM_COPY_BUFSIZE
    + +
    +
    + +

    ◆ ucx_stream_ncopy

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #define ucx_stream_ncopy( src,
     dest,
     rfnc,
     wfnc,
     
    )
    +
    +Value:
    src, dest, (read_func)rfnc, (write_func)wfnc, \
    size_t ucx_stream_bncopy(void *src, void *dest, read_func rfnc, write_func wfnc, char *buf, size_t bufsize, size_t n)
    Reads data from a stream and writes it to another stream.
    Definition: utils.c:52
    +
    #define UCX_STREAM_COPY_BUFSIZE
    Default buffer size for ucx_stream_copy() and ucx_stream_ncopy().
    Definition: utils.h:55
    +
    size_t(* read_func)(void *, size_t, size_t, void *)
    Function pointer to a read function.
    Definition: ucx.h:132
    +
    size_t(* write_func)(const void *, size_t, size_t, void *)
    Function pointer to a write function.
    Definition: ucx.h:119
    +
    +

    Shorthand for ucx_stream_bncopy using a default copy buffer.

    +
    Parameters
    + + + + + + +
    srcthe source stream
    destthe destination stream
    rfncthe read function
    wfncthe write function
    nmaximum number of bytes that shall be copied
    +
    +
    +
    Returns
    total number of bytes copied
    + +
    +
    +

    Function Documentation

    + +

    ◆ ucx_asprintf()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    sstr_t ucx_asprintf (UcxAllocatorallocator,
    const char * fmt,
     ... 
    )
    +
    + +

    A printf() like function which allocates space for a sstr_t the result is written to.

    +

    Attention: The sstr_t data is allocated with the allocators ucx_allocator_malloc() function. So it is implementation dependent, if the returned sstr_t.ptr pointer must be passed to the allocators ucx_allocator_free() function manually.

    +

    Note: The sstr_t.ptr of the return value will always be NULL-terminated.

    +
    Parameters
    + + + + +
    allocatorthe UcxAllocator used for allocating the result sstr_t
    fmtformat string
    ...additional arguments
    +
    +
    +
    Returns
    a sstr_t containing the formatted string
    + +
    +
    + +

    ◆ ucx_cmp_double()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_double (const void * d1,
    const void * d2,
    void * data 
    )
    +
    + +

    Compares two real numbers of type double.

    +
    Parameters
    + + + + +
    d1pointer to double one
    d2pointer to double two
    dataif provided: a pointer to precision (default: 1e-14)
    +
    +
    +
    Returns
    -1, if *d1 is less than *d2, 0 if both are equal, 1 if *d1 is greater than *d2
    + +
    +
    + +

    ◆ ucx_cmp_float()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_float (const void * f1,
    const void * f2,
    void * data 
    )
    +
    + +

    Compares two real numbers of type float.

    +
    Parameters
    + + + + +
    f1pointer to float one
    f2pointer to float two
    dataif provided: a pointer to precision (default: 1e-6f)
    +
    +
    +
    Returns
    -1, if *f1 is less than *f2, 0 if both are equal, 1 if *f1 is greater than *f2
    + +
    +
    + +

    ◆ ucx_cmp_int()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_int (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Compares two integers of type int.

    +
    Parameters
    + + + + +
    i1pointer to integer one
    i2pointer to integer two
    dataomitted
    +
    +
    +
    Returns
    -1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2
    + +
    +
    + +

    ◆ ucx_cmp_int16()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_int16 (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Compares two integers of type int16_t.

    +
    Parameters
    + + + + +
    i1pointer to int16_t one
    i2pointer to int16_t two
    dataomitted
    +
    +
    +
    Returns
    -1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2
    + +
    +
    + +

    ◆ ucx_cmp_int32()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_int32 (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Compares two integers of type int32_t.

    +
    Parameters
    + + + + +
    i1pointer to int32_t one
    i2pointer to int32_t two
    dataomitted
    +
    +
    +
    Returns
    -1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2
    + +
    +
    + +

    ◆ ucx_cmp_int64()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_int64 (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Compares two integers of type int64_t.

    +
    Parameters
    + + + + +
    i1pointer to int64_t one
    i2pointer to int64_t two
    dataomitted
    +
    +
    +
    Returns
    -1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2
    + +
    +
    + +

    ◆ ucx_cmp_longint()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_longint (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Compares two integers of type long int.

    +
    Parameters
    + + + + +
    i1pointer to long integer one
    i2pointer to long integer two
    dataomitted
    +
    +
    +
    Returns
    -1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2
    + +
    +
    + +

    ◆ ucx_cmp_longlong()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_longlong (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Compares two integers of type long long.

    +
    Parameters
    + + + + +
    i1pointer to long long one
    i2pointer to long long two
    dataomitted
    +
    +
    +
    Returns
    -1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2
    + +
    +
    + +

    ◆ ucx_cmp_mem()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_mem (const void * ptr1,
    const void * ptr2,
    void * n 
    )
    +
    + +

    Compares two memory areas.

    +
    Parameters
    + + + + +
    ptr1pointer one
    ptr2pointer two
    na pointer to the size_t containing the third parameter for memcmp
    +
    +
    +
    Returns
    the result of memcmp(ptr1, ptr2, *n)
    + +
    +
    + +

    ◆ ucx_cmp_ptr()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_ptr (const void * ptr1,
    const void * ptr2,
    void * data 
    )
    +
    + +

    Compares two pointers.

    +
    Parameters
    + + + + +
    ptr1pointer one
    ptr2pointer two
    dataomitted
    +
    +
    +
    Returns
    -1 if ptr1 is less than ptr2, 0 if both are equal, 1 if ptr1 is greater than ptr2
    + +
    +
    + +

    ◆ ucx_cmp_sstr()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_sstr (const void * s1,
    const void * s2,
    void * data 
    )
    +
    + +

    Wraps the sstrcmp function.

    +
    Parameters
    + + + + +
    s1sstr one
    s2sstr two
    dataignored
    +
    +
    +
    Returns
    the result of sstrcmp(s1, s2)
    + +
    +
    + +

    ◆ ucx_cmp_str()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_str (const void * s1,
    const void * s2,
    void * data 
    )
    +
    + +

    Wraps the strcmp function.

    +
    Parameters
    + + + + +
    s1string one
    s2string two
    dataomitted
    +
    +
    +
    Returns
    the result of strcmp(s1, s2)
    + +
    +
    + +

    ◆ ucx_cmp_strn()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_strn (const void * s1,
    const void * s2,
    void * n 
    )
    +
    + +

    Wraps the strncmp function.

    +
    Parameters
    + + + + +
    s1string one
    s2string two
    na pointer to the size_t containing the third strncmp parameter
    +
    +
    +
    Returns
    the result of strncmp(s1, s2, *n)
    + +
    +
    + +

    ◆ ucx_cmp_uint()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_uint (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Compares two integers of type unsigned int.

    +
    Parameters
    + + + + +
    i1pointer to unsigned integer one
    i2pointer to unsigned integer two
    dataomitted
    +
    +
    +
    Returns
    -1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2
    + +
    +
    + +

    ◆ ucx_cmp_uint16()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_uint16 (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Compares two integers of type uint16_t.

    +
    Parameters
    + + + + +
    i1pointer to uint16_t one
    i2pointer to uint16_t two
    dataomitted
    +
    +
    +
    Returns
    -1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2
    + +
    +
    + +

    ◆ ucx_cmp_uint32()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_uint32 (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Compares two integers of type uint32_t.

    +
    Parameters
    + + + + +
    i1pointer to uint32_t one
    i2pointer to uint32_t two
    dataomitted
    +
    +
    +
    Returns
    -1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2
    + +
    +
    + +

    ◆ ucx_cmp_uint64()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_uint64 (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Compares two integers of type uint64_t.

    +
    Parameters
    + + + + +
    i1pointer to uint64_t one
    i2pointer to uint64_t two
    dataomitted
    +
    +
    +
    Returns
    -1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2
    + +
    +
    + +

    ◆ ucx_cmp_ulongint()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_ulongint (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Compares two integers of type unsigned long int.

    +
    Parameters
    + + + + +
    i1pointer to unsigned long integer one
    i2pointer to unsigned long integer two
    dataomitted
    +
    +
    +
    Returns
    -1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2
    + +
    +
    + +

    ◆ ucx_cmp_ulonglong()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_cmp_ulonglong (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Compares two integers of type unsigned long long.

    +
    Parameters
    + + + + +
    i1pointer to unsigned long long one
    i2pointer to unsigned long long two
    dataomitted
    +
    +
    +
    Returns
    -1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2
    + +
    +
    + +

    ◆ ucx_dist_int()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    intmax_t ucx_dist_int (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Distance function for integers of type int.

    +
    Parameters
    + + + + +
    i1pointer to integer one
    i2pointer to integer two
    dataomitted
    +
    +
    +
    Returns
    i1 minus i2
    + +
    +
    + +

    ◆ ucx_dist_int16()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    intmax_t ucx_dist_int16 (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Distance function for integers of type int16_t.

    +
    Parameters
    + + + + +
    i1pointer to int16_t one
    i2pointer to int16_t two
    dataomitted
    +
    +
    +
    Returns
    i1 minus i2
    + +
    +
    + +

    ◆ ucx_dist_int32()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    intmax_t ucx_dist_int32 (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Distance function for integers of type int32_t.

    +
    Parameters
    + + + + +
    i1pointer to int32_t one
    i2pointer to int32_t two
    dataomitted
    +
    +
    +
    Returns
    i1 minus i2
    + +
    +
    + +

    ◆ ucx_dist_int64()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    intmax_t ucx_dist_int64 (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Distance function for integers of type int64_t.

    +
    Parameters
    + + + + +
    i1pointer to int64_t one
    i2pointer to int64_t two
    dataomitted
    +
    +
    +
    Returns
    i1 minus i2
    + +
    +
    + +

    ◆ ucx_dist_longint()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    intmax_t ucx_dist_longint (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Distance function for integers of type long int.

    +
    Parameters
    + + + + +
    i1pointer to long integer one
    i2pointer to long integer two
    dataomitted
    +
    +
    +
    Returns
    i1 minus i2
    + +
    +
    + +

    ◆ ucx_dist_longlong()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    intmax_t ucx_dist_longlong (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Distance function for integers of type long long.

    +
    Parameters
    + + + + +
    i1pointer to long long one
    i2pointer to long long two
    dataomitted
    +
    +
    +
    Returns
    i1 minus i2
    + +
    +
    + +

    ◆ ucx_dist_uint()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    intmax_t ucx_dist_uint (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Distance function for integers of type unsigned int.

    +
    Parameters
    + + + + +
    i1pointer to unsigned integer one
    i2pointer to unsigned integer two
    dataomitted
    +
    +
    +
    Returns
    i1 minus i2
    + +
    +
    + +

    ◆ ucx_dist_uint16()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    intmax_t ucx_dist_uint16 (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Distance function for integers of type uint16_t.

    +
    Parameters
    + + + + +
    i1pointer to uint16_t one
    i2pointer to uint16_t two
    dataomitted
    +
    +
    +
    Returns
    i1 minus i2
    + +
    +
    + +

    ◆ ucx_dist_uint32()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    intmax_t ucx_dist_uint32 (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Distance function for integers of type uint32_t.

    +
    Parameters
    + + + + +
    i1pointer to uint32_t one
    i2pointer to uint32_t two
    dataomitted
    +
    +
    +
    Returns
    i1 minus i2
    + +
    +
    + +

    ◆ ucx_dist_uint64()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    intmax_t ucx_dist_uint64 (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Distance function for integers of type uint64_t.

    +
    Parameters
    + + + + +
    i1pointer to uint64_t one
    i2pointer to uint64_t two
    dataomitted
    +
    +
    +
    Returns
    i1 minus i2
    + +
    +
    + +

    ◆ ucx_dist_ulongint()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    intmax_t ucx_dist_ulongint (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Distance function for integers of type unsigned long int.

    +
    Parameters
    + + + + +
    i1pointer to unsigned long integer one
    i2pointer to unsigned long integer two
    dataomitted
    +
    +
    +
    Returns
    i1 minus i2
    + +
    +
    + +

    ◆ ucx_dist_ulonglong()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    intmax_t ucx_dist_ulonglong (const void * i1,
    const void * i2,
    void * data 
    )
    +
    + +

    Distance function for integers of type unsigned long long.

    +
    Parameters
    + + + + +
    i1pointer to unsigned long long one
    i2pointer to unsigned long long two
    dataomitted
    +
    +
    +
    Returns
    i1 minus i2
    + +
    +
    + +

    ◆ ucx_fprintf()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_fprintf (void * stream,
    write_func wfc,
    const char * fmt,
     ... 
    )
    +
    + +

    A printf() like function which writes the output to a stream by using a write_func().

    +
    Parameters
    + + + + + +
    streamthe stream the data is written to
    wfcthe write function
    fmtformat string
    ...additional arguments
    +
    +
    +
    Returns
    the total number of bytes written
    + +
    +
    + +

    ◆ ucx_memcpy()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void* ucx_memcpy (const void * m,
    void * n 
    )
    +
    + +

    Copies a memory area.

    +
    Parameters
    + + + +
    ma pointer to the memory area
    na pointer to the size_t containing the size of the memory area
    +
    +
    +
    Returns
    a pointer to a copy of the specified memory area that can be passed to free(void*)
    + +
    +
    + +

    ◆ ucx_strcpy()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    void* ucx_strcpy (const void * s,
    void * data 
    )
    +
    + +

    Copies a string.

    +
    Parameters
    + + + +
    sthe string to copy
    dataomitted
    +
    +
    +
    Returns
    a pointer to a copy of s1 that can be passed to free(void*)
    + +
    +
    + +

    ◆ ucx_stream_bncopy()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    size_t ucx_stream_bncopy (void * src,
    void * dest,
    read_func rfnc,
    write_func wfnc,
    char * buf,
    size_t bufsize,
    size_t n 
    )
    +
    + +

    Reads data from a stream and writes it to another stream.

    +
    Parameters
    + + + + + + + + +
    srcthe source stream
    destthe destination stream
    rfncthe read function
    wfncthe write function
    bufa pointer to the copy buffer or NULL if a buffer shall be implicitly created on the heap
    bufsizethe size of the copy buffer - if NULL was provided for buf, this is the size of the buffer that shall be implicitly created
    nthe maximum number of bytes that shall be copied
    +
    +
    +
    Returns
    the total number of bytes copied
    + +
    +
    + +

    ◆ ucx_vasprintf()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    sstr_t ucx_vasprintf (UcxAllocatorallocator,
    const char * fmt,
    va_list ap 
    )
    +
    + +

    va_list version of ucx_asprintf().

    +
    Parameters
    + + + + +
    allocatorthe UcxAllocator used for allocating the result sstr_t
    fmtformat string
    apargument list
    +
    +
    +
    Returns
    a sstr_t containing the formatted string
    +
    See also
    ucx_asprintf()
    + +
    +
    + +

    ◆ ucx_vfprintf()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    int ucx_vfprintf (void * stream,
    write_func wfc,
    const char * fmt,
    va_list ap 
    )
    +
    + +

    va_list version of ucx_fprintf().

    +
    Parameters
    + + + + + +
    streamthe stream the data is written to
    wfcthe write function
    fmtformat string
    apargument list
    +
    +
    +
    Returns
    the total number of bytes written
    +
    See also
    ucx_fprintf()
    + +
    +
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/api-2.1/utils_8h_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/api-2.1/utils_8h_source.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,124 @@ + + + + + + + +ucx: /home/mike/workspace/c/ucx/src/ucx/utils.h Source File + + + + + + + + + +
    +
    + + + + + + + +
    +
    ucx +
    +
    UAP Common Extensions
    +
    +
    + + + + + + + + +
    +
    + + +
    + +
    + + +
    +
    +
    +
    utils.h
    +
    +
    +Go to the documentation of this file.
    1 /*
    2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
    3  *
    4  * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions are met:
    8  *
    9  * 1. Redistributions of source code must retain the above copyright
    10  * notice, this list of conditions and the following disclaimer.
    11  *
    12  * 2. Redistributions in binary form must reproduce the above copyright
    13  * notice, this list of conditions and the following disclaimer in the
    14  * documentation and/or other materials provided with the distribution.
    15  *
    16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    19  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
    20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    26  * POSSIBILITY OF SUCH DAMAGE.
    27  */
    28 
    38 #ifndef UCX_UTILS_H
    39 #define UCX_UTILS_H
    40 
    41 #include "ucx.h"
    42 #include "string.h"
    43 #include "allocator.h"
    44 #include <inttypes.h>
    45 #include <string.h>
    46 #include <stdarg.h>
    47 
    48 #ifdef __cplusplus
    49 extern "C" {
    50 #endif
    51 
    55 #define UCX_STREAM_COPY_BUFSIZE 4096
    56 
    63 void *ucx_strcpy(const void *s, void *data);
    64 
    72 void *ucx_memcpy(const void *m, void *n);
    73 
    74 
    90 size_t ucx_stream_bncopy(void *src, void *dest, read_func rfnc, write_func wfnc,
    91  char* buf, size_t bufsize, size_t n);
    92 
    104 #define ucx_stream_copy(src,dest,rfnc,wfnc) ucx_stream_bncopy(\
    105  src, dest, (read_func)rfnc, (write_func)wfnc, \
    106  NULL, UCX_STREAM_COPY_BUFSIZE, (size_t)-1)
    107 
    118 #define ucx_stream_ncopy(src,dest,rfnc,wfnc, n) ucx_stream_bncopy(\
    119  src, dest, (read_func)rfnc, (write_func)wfnc, \
    120  NULL, UCX_STREAM_COPY_BUFSIZE, n)
    121 
    136 #define ucx_stream_bcopy(src,dest,rfnc,wfnc, buf, bufsize) ucx_stream_bncopy(\
    137  src, dest, (read_func)rfnc, (write_func)wfnc, \
    138  buf, bufsize, (size_t)-1)
    139 
    147 int ucx_cmp_str(const void *s1, const void *s2, void *data);
    148 
    156 int ucx_cmp_strn(const void *s1, const void *s2, void *n);
    157 
    165 int ucx_cmp_sstr(const void *s1, const void *s2, void *data);
    166 
    175 int ucx_cmp_int(const void *i1, const void *i2, void *data);
    176 
    185 int ucx_cmp_longint(const void *i1, const void *i2, void *data);
    186 
    195 int ucx_cmp_longlong(const void *i1, const void *i2, void *data);
    196 
    205 int ucx_cmp_int16(const void *i1, const void *i2, void *data);
    206 
    215 int ucx_cmp_int32(const void *i1, const void *i2, void *data);
    216 
    225 int ucx_cmp_int64(const void *i1, const void *i2, void *data);
    226 
    235 int ucx_cmp_uint(const void *i1, const void *i2, void *data);
    236 
    245 int ucx_cmp_ulongint(const void *i1, const void *i2, void *data);
    246 
    255 int ucx_cmp_ulonglong(const void *i1, const void *i2, void *data);
    256 
    265 int ucx_cmp_uint16(const void *i1, const void *i2, void *data);
    266 
    275 int ucx_cmp_uint32(const void *i1, const void *i2, void *data);
    276 
    285 int ucx_cmp_uint64(const void *i1, const void *i2, void *data);
    286 
    294 intmax_t ucx_dist_int(const void *i1, const void *i2, void *data);
    295 
    303 intmax_t ucx_dist_longint(const void *i1, const void *i2, void *data);
    304 
    312 intmax_t ucx_dist_longlong(const void *i1, const void *i2, void *data);
    313 
    321 intmax_t ucx_dist_int16(const void *i1, const void *i2, void *data);
    322 
    330 intmax_t ucx_dist_int32(const void *i1, const void *i2, void *data);
    331 
    339 intmax_t ucx_dist_int64(const void *i1, const void *i2, void *data);
    340 
    348 intmax_t ucx_dist_uint(const void *i1, const void *i2, void *data);
    349 
    357 intmax_t ucx_dist_ulongint(const void *i1, const void *i2, void *data);
    358 
    366 intmax_t ucx_dist_ulonglong(const void *i1, const void *i2, void *data);
    367 
    375 intmax_t ucx_dist_uint16(const void *i1, const void *i2, void *data);
    376 
    384 intmax_t ucx_dist_uint32(const void *i1, const void *i2, void *data);
    385 
    393 intmax_t ucx_dist_uint64(const void *i1, const void *i2, void *data);
    394 
    404 int ucx_cmp_float(const void *f1, const void *f2, void *data);
    405 
    414 int ucx_cmp_double(const void *d1, const void *d2, void *data);
    415 
    424 int ucx_cmp_ptr(const void *ptr1, const void *ptr2, void *data);
    425 
    433 int ucx_cmp_mem(const void *ptr1, const void *ptr2, void *n);
    434 
    444 int ucx_fprintf(void *stream, write_func wfc, const char *fmt, ...);
    445 
    455 int ucx_vfprintf(void *stream, write_func wfc, const char *fmt, va_list ap);
    456 
    474 sstr_t ucx_asprintf(UcxAllocator *allocator, const char *fmt, ...);
    475 
    485 sstr_t ucx_vasprintf(UcxAllocator *allocator, const char *fmt, va_list ap);
    486 
    488 #define ucx_sprintf(...) \
    489  ucx_asprintf(ucx_default_allocator(), __VA_ARGS__)
    490 
    500 #define ucx_bprintf(buffer, ...) ucx_fprintf((UcxBuffer*)buffer, \
    501  (write_func)ucx_buffer_write, __VA_ARGS__)
    502 
    503 #ifdef __cplusplus
    504 }
    505 #endif
    506 
    507 #endif /* UCX_UTILS_H */
    508 
    int ucx_cmp_uint32(const void *i1, const void *i2, void *data)
    Compares two integers of type uint32_t.
    Definition: utils.c:205
    +
    The UCX string structure.
    Definition: string.h:90
    +
    int ucx_cmp_longint(const void *i1, const void *i2, void *data)
    Compares two integers of type long int.
    Definition: utils.c:115
    +
    intmax_t ucx_dist_int(const void *i1, const void *i2, void *data)
    Distance function for integers of type int.
    Definition: utils.c:225
    +
    Bounded string implementation.
    +
    int ucx_cmp_ulonglong(const void *i1, const void *i2, void *data)
    Compares two integers of type unsigned long long.
    Definition: utils.c:185
    +
    size_t ucx_stream_bncopy(void *src, void *dest, read_func rfnc, write_func wfnc, char *buf, size_t bufsize, size_t n)
    Reads data from a stream and writes it to another stream.
    Definition: utils.c:52
    +
    int ucx_cmp_sstr(const void *s1, const void *s2, void *data)
    Wraps the sstrcmp function.
    Definition: utils.c:99
    +
    Main UCX Header providing most common definitions.
    +
    int ucx_cmp_float(const void *f1, const void *f2, void *data)
    Compares two real numbers of type float.
    Definition: utils.c:297
    +
    int ucx_cmp_longlong(const void *i1, const void *i2, void *data)
    Compares two integers of type long long.
    Definition: utils.c:125
    +
    int ucx_cmp_int32(const void *i1, const void *i2, void *data)
    Compares two integers of type int32_t.
    Definition: utils.c:145
    +
    int ucx_cmp_ulongint(const void *i1, const void *i2, void *data)
    Compares two integers of type unsigned long int.
    Definition: utils.c:175
    +
    int ucx_cmp_uint64(const void *i1, const void *i2, void *data)
    Compares two integers of type uint64_t.
    Definition: utils.c:215
    +
    intmax_t ucx_dist_longlong(const void *i1, const void *i2, void *data)
    Distance function for integers of type long long.
    Definition: utils.c:237
    +
    int ucx_cmp_strn(const void *s1, const void *s2, void *n)
    Wraps the strncmp function.
    Definition: utils.c:95
    +
    int ucx_cmp_str(const void *s1, const void *s2, void *data)
    Wraps the strcmp function.
    Definition: utils.c:91
    +
    int ucx_cmp_double(const void *d1, const void *d2, void *data)
    Compares two real numbers of type double.
    Definition: utils.c:308
    +
    intmax_t ucx_dist_uint64(const void *i1, const void *i2, void *data)
    Distance function for integers of type uint64_t.
    Definition: utils.c:291
    +
    intmax_t ucx_dist_uint32(const void *i1, const void *i2, void *data)
    Distance function for integers of type uint32_t.
    Definition: utils.c:285
    +
    UCX allocator data structure containing memory management functions.
    Definition: allocator.h:88
    +
    int ucx_cmp_ptr(const void *ptr1, const void *ptr2, void *data)
    Compares two pointers.
    Definition: utils.c:319
    +
    int ucx_cmp_mem(const void *ptr1, const void *ptr2, void *n)
    Compares two memory areas.
    Definition: utils.c:329
    +
    intmax_t ucx_dist_ulonglong(const void *i1, const void *i2, void *data)
    Distance function for integers of type unsigned long long.
    Definition: utils.c:273
    +
    int ucx_fprintf(void *stream, write_func wfc, const char *fmt,...)
    A printf() like function which writes the output to a stream by using a write_func().
    Definition: utils.c:343
    +
    int ucx_cmp_uint16(const void *i1, const void *i2, void *data)
    Compares two integers of type uint16_t.
    Definition: utils.c:195
    +
    int ucx_cmp_int(const void *i1, const void *i2, void *data)
    Compares two integers of type int.
    Definition: utils.c:105
    +
    intmax_t ucx_dist_int64(const void *i1, const void *i2, void *data)
    Distance function for integers of type int64_t.
    Definition: utils.c:255
    +
    size_t(* read_func)(void *, size_t, size_t, void *)
    Function pointer to a read function.
    Definition: ucx.h:132
    +
    int ucx_cmp_uint(const void *i1, const void *i2, void *data)
    Compares two integers of type unsigned int.
    Definition: utils.c:165
    +
    sstr_t ucx_asprintf(UcxAllocator *allocator, const char *fmt,...)
    A printf() like function which allocates space for a sstr_t the result is written to...
    Definition: utils.c:394
    +
    intmax_t ucx_dist_uint(const void *i1, const void *i2, void *data)
    Distance function for integers of type unsigned int.
    Definition: utils.c:261
    +
    intmax_t ucx_dist_int16(const void *i1, const void *i2, void *data)
    Distance function for integers of type int16_t.
    Definition: utils.c:243
    +
    void * ucx_strcpy(const void *s, void *data)
    Copies a string.
    Definition: utils.c:37
    +
    intmax_t ucx_dist_longint(const void *i1, const void *i2, void *data)
    Distance function for integers of type long int.
    Definition: utils.c:231
    +
    intmax_t ucx_dist_uint16(const void *i1, const void *i2, void *data)
    Distance function for integers of type uint16_t.
    Definition: utils.c:279
    +
    intmax_t ucx_dist_int32(const void *i1, const void *i2, void *data)
    Distance function for integers of type int32_t.
    Definition: utils.c:249
    +
    Allocator for custom memory management.
    +
    intmax_t ucx_dist_ulongint(const void *i1, const void *i2, void *data)
    Distance function for integers of type unsigned long int.
    Definition: utils.c:267
    +
    size_t(* write_func)(const void *, size_t, size_t, void *)
    Function pointer to a write function.
    Definition: ucx.h:119
    +
    int ucx_cmp_int16(const void *i1, const void *i2, void *data)
    Compares two integers of type int16_t.
    Definition: utils.c:135
    +
    void * ucx_memcpy(const void *m, void *n)
    Copies a memory area.
    Definition: utils.c:45
    +
    int ucx_cmp_int64(const void *i1, const void *i2, void *data)
    Compares two integers of type int64_t.
    Definition: utils.c:155
    +
    int ucx_vfprintf(void *stream, write_func wfc, const char *fmt, va_list ap)
    va_list version of ucx_fprintf().
    Definition: utils.c:352
    +
    sstr_t ucx_vasprintf(UcxAllocator *allocator, const char *fmt, va_list ap)
    va_list version of ucx_asprintf().
    Definition: utils.c:403
    +
    + + + + diff -r 92e482410453 -r d345541018fa docs/src/CMakeLists.txt --- a/docs/src/CMakeLists.txt Mon Dec 30 09:54:10 2019 +0100 +++ b/docs/src/CMakeLists.txt Sat Feb 06 19:11:44 2021 +0100 @@ -1,7 +1,7 @@ # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. # -# Copyright 2019 Mike Becker, Olaf Wintermann All rights reserved. +# Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -28,7 +28,7 @@ set(PANDOC_DESTDIR ${CMAKE_BINARY_DIR}/docs/web) set(PANDOC_ARGS -c ucx.css -B header.html -A footer.html -T 'UAP Common Extensions') -set(PANDOC_SRC index.md license.md modules.md install.md) +set(PANDOC_SRC index.md license.md install.md) set(LOGO_PATH ../../uaplogo.png) if (NOT EXISTS ${PANDOC_EXECUTABLE}) @@ -42,6 +42,7 @@ message(STATUS "HTML Documentation will be generated at: ${PANDOC_DESTDIR}.") file(MAKE_DIRECTORY ${PANDOC_DESTDIR}) +# UCX 3.0 documentation foreach(source_file ${PANDOC_SRC}) string(REPLACE .md .html dest_file ${source_file}) string(PREPEND dest_file "${PANDOC_DESTDIR}/") @@ -54,10 +55,20 @@ ) endforeach() +# UCX 2.1 documentation +add_custom_target(docs-html-21 + COMMAND ${PANDOC_EXECUTABLE} -c ucx.css -B header-ucx2.html -A footer.html + -T 'UAP Common Extensions' -o ${PANDOC_DESTDIR}/modules-ucx2.html modules-ucx2.md + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS modules-ucx2.md + COMMENT "Adding UCX 2.1 HTML documentation." +) + +# Collect all HTML documentation add_custom_target(docs-html COMMAND ${CMAKE_COMMAND} -E copy ucx.css ${PANDOC_DESTDIR}/ucx.css COMMAND ${CMAKE_COMMAND} -E copy ${LOGO_PATH} ${PANDOC_DESTDIR}/uaplogo.png - DEPENDS ${PANDOC_DEST} + DEPENDS ${PANDOC_DEST} docs-html-21 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Generating HTML documentation with pandoc." ) diff -r 92e482410453 -r d345541018fa docs/src/Makefile --- a/docs/src/Makefile Mon Dec 30 09:54:10 2019 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. -# -# Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# - -PD=pandoc -PFLAGS=-c ucx.css -B header.html -A footer.html -T 'UAP Common Extensions' - -SRC = index.md -SRC += install.md -SRC += license.md -SRC += modules.md - -DEST = ../web - -PROJROOT = ../.. -LOGO = uaplogo.png - -HTML = $(SRC:%.md=$(DEST)/%.html) - -all: html api - - -html: $(DEST) $(DEST)/ucx.css $(DEST)/$(LOGO) $(HTML) - - -api: $(DEST) - cd $(PROJROOT); doxygen - -$(DEST): - mkdir -p $@ - -$(DEST)/%.html: %.md - $(PD) $(PFLAGS) $< -o $@ - -$(DEST)/ucx.css: ucx.css - cp $< $@ - -$(DEST)/$(LOGO): $(PROJROOT)/$(LOGO) - cp $< $@ - -clean: - rm -Rf $(DEST) diff -r 92e482410453 -r d345541018fa docs/src/header-ucx2.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/src/header-ucx2.html Sat Feb 06 19:11:44 2021 +0100 @@ -0,0 +1,58 @@ + + + + + + + + + +
    \ No newline at end of file diff -r 92e482410453 -r d345541018fa docs/src/header.html --- a/docs/src/header.html Mon Dec 30 09:54:10 2019 +0100 +++ b/docs/src/header.html Sat Feb 06 19:11:44 2021 +0100 @@ -18,24 +18,9 @@