Sat, 06 Feb 2021 19:11:44 +0100
starts ucx 3.0 development
1.1 --- a/.hgignore Mon Dec 30 09:54:10 2019 +0100 1.2 +++ b/.hgignore Sat Feb 06 19:11:44 2021 +0100 1.3 @@ -26,7 +26,7 @@ 1.4 /\.deps/ 1.5 /\.libs/ 1.6 ^stamp-h 1.7 -^test/ucxtest 1.8 +test/test_list.c 1.9 /test-suite.log$ 1.10 ^ucx-.*\.tar.gz$ 1.11 ^.idea/
2.1 --- a/CHANGELOG Mon Dec 30 09:54:10 2019 +0100 2.2 +++ b/CHANGELOG Sat Feb 06 19:11:44 2021 +0100 2.3 @@ -1,3 +1,8 @@ 2.4 +Version 3.0 M1 2.5 +-------------- 2.6 +work in progress 2.7 + 2.8 + 2.9 Version 2.1 - 2019-12-30 2.10 ------------------------ 2.11
3.1 --- a/CMakeLists.txt Mon Dec 30 09:54:10 2019 +0100 3.2 +++ b/CMakeLists.txt Sat Feb 06 19:11:44 2021 +0100 3.3 @@ -1,5 +1,5 @@ 3.4 -cmake_minimum_required(VERSION 3.10) 3.5 -project(ucx VERSION 2.1 DESCRIPTION "UAP Common Extensions") 3.6 +cmake_minimum_required(VERSION 3.14) 3.7 +project(ucx VERSION 3.0 DESCRIPTION "UAP Common Extensions") 3.8 3.9 # Configuration 3.10 set(CMAKE_C_STANDARD 11) 3.11 @@ -11,7 +11,6 @@ 3.12 # Tests 3.13 enable_testing() 3.14 add_subdirectory(test) 3.15 -add_test(NAME test COMMAND ucxtest WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/test") 3.16 3.17 # Web Documentation 3.18 add_subdirectory(docs/src) 3.19 @@ -31,10 +30,18 @@ 3.20 3.21 configure_file(${CMAKE_SOURCE_DIR}/cmake_infile.doxygen ${CMAKE_BINARY_DIR}/Doxyfile) 3.22 3.23 + add_custom_target(docs-api-21 3.24 + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/docs/api-2.1 ${CMAKE_BINARY_DIR}/docs/web/api-2.1 3.25 + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} 3.26 + COMMENT "Copying UCX 2.1 API documentation.") 3.27 + 3.28 add_custom_target(docs-api 3.29 COMMAND ${DOXYGEN_EXECUTABLE} 3.30 WORKING_DIRECTORY ${CMAKE_BINARY_DIR} 3.31 - COMMENT "Generating API documentation with Doxygen") 3.32 + COMMENT "Generating API documentation with Doxygen.") 3.33 + 3.34 + add_custom_target(docs-all DEPENDS docs-html docs-api docs-api-21) 3.35 +else() 3.36 + add_custom_target(docs-all DEPENDS docs-html) 3.37 endif() 3.38 3.39 -add_custom_target(docs-all DEPENDS docs-html docs-api)
4.1 --- a/COPYING Mon Dec 30 09:54:10 2019 +0100 4.2 +++ b/COPYING Sat Feb 06 19:11:44 2021 +0100 4.3 @@ -1,4 +1,4 @@ 4.4 -Copyright 2017 Mike Becker, Olaf Wintermann. All rights reserved. 4.5 +Copyright 2021 Mike Becker, Olaf Wintermann. All rights reserved. 4.6 4.7 Redistribution and use in source and binary forms, with or without 4.8 modification, are permitted provided that the following conditions are met:
5.1 --- a/Makefile.am Mon Dec 30 09:54:10 2019 +0100 5.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 5.3 @@ -1,30 +0,0 @@ 5.4 -# 5.5 -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 5.6 -# 5.7 -# Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 5.8 -# 5.9 -# Redistribution and use in source and binary forms, with or without 5.10 -# modification, are permitted provided that the following conditions are met: 5.11 -# 5.12 -# 1. Redistributions of source code must retain the above copyright 5.13 -# notice, this list of conditions and the following disclaimer. 5.14 -# 5.15 -# 2. Redistributions in binary form must reproduce the above copyright 5.16 -# notice, this list of conditions and the following disclaimer in the 5.17 -# documentation and/or other materials provided with the distribution. 5.18 -# 5.19 -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 5.20 -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 5.21 -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 5.22 -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 5.23 -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 5.24 -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 5.25 -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 5.26 -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 5.27 -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 5.28 -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 5.29 -# POSSIBILITY OF SUCH DAMAGE. 5.30 -# 5.31 - 5.32 -SUBDIRS = src test 5.33 -ACLOCAL_AMFLAGS = -I m4
6.1 --- a/README Mon Dec 30 09:54:10 2019 +0100 6.2 +++ b/README Sat Feb 06 19:11:44 2021 +0100 6.3 @@ -5,11 +5,10 @@ 6.4 0. Table of Contents: 6.5 6.6 1. Introduction ........................................................ 15 6.7 - 2. Build ............................................................... 26 6.8 - 3. Install ............................................................. 37 6.9 - 4. Documentation ....................................................... 50 6.10 - 5. Contact ............................................................. 63 6.11 - 6. License ............................................................. 69 6.12 + 2. Build ............................................................... 25 6.13 + 3. Documentation ....................................................... 44 6.14 + 4. Contact ............................................................. 57 6.15 + 5. License ............................................................. 64 6.16 6.17 6.18 1. Introduction 6.19 @@ -26,28 +25,23 @@ 6.20 2. Build 6.21 -------- 6.22 6.23 -Untar the source archive and simply run 6.24 +Untar the source archive and run 6.25 6.26 - ./configure && make 6.27 + mkdir build 6.28 + cd build 6.29 + cmake .. 6.30 + make 6.31 6.32 -If you want to verify your build, you may then run 6.33 +Optionally install UCX by running the following command as privileged user 6.34 + 6.35 + make install 6.36 + 6.37 +If you want to verify your build, you can run 6.38 6.39 make check 6.40 6.41 -3. Install 6.42 ----------- 6.43 6.44 -Build the binaries as described above. Then install UCX, by running 6.45 - 6.46 - make install 6.47 - 6.48 -or 6.49 - 6.50 - make install PREFIX=<install_dir> 6.51 - 6.52 -The default prefix is /usr/local and will require privileged access. 6.53 - 6.54 -4. Documentation 6.55 +3. Documentation 6.56 ---------------- 6.57 6.58 Documentation is available at: 6.59 @@ -60,16 +54,17 @@ 6.60 https://develop.uap-core.de/ucx/api/index.html 6.61 6.62 6.63 -5. Contact 6.64 +4. Contact 6.65 ---------- 6.66 6.67 Olaf Wintermann (olaf.wintermann@gmail.com) 6.68 Mike Becker (universe@uap-core.de) 6.69 6.70 -6. License 6.71 + 6.72 +5. License 6.73 ---------- 6.74 6.75 -Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 6.76 +Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved. 6.77 6.78 Redistribution and use in source and binary forms, with or without 6.79 modification, are permitted provided that the following conditions are met:
7.1 --- a/autogen.sh Mon Dec 30 09:54:10 2019 +0100 7.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 7.3 @@ -1,3 +0,0 @@ 7.4 -#!/bin/sh 7.5 -autoreconf --install 7.6 -
8.1 --- a/cmake_infile.doxygen Mon Dec 30 09:54:10 2019 +0100 8.2 +++ b/cmake_infile.doxygen Sat Feb 06 19:11:44 2021 +0100 8.3 @@ -230,12 +230,6 @@ 8.4 8.5 ALIASES = 8.6 8.7 -# This tag can be used to specify a number of word-keyword mappings (TCL only). 8.8 -# A mapping has the form "name=value". For example adding "class=itcl::class" 8.9 -# will allow you to use the command class in the itcl::class meaning. 8.10 - 8.11 -TCL_SUBST = 8.12 - 8.13 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources 8.14 # only. Doxygen will then generate output that is more tailored for C. For 8.15 # instance, some of the names that are used will be different. The list of all 8.16 @@ -989,13 +983,6 @@ 8.17 8.18 ALPHABETICAL_INDEX = YES 8.19 8.20 -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in 8.21 -# which the alphabetical index list will be split. 8.22 -# Minimum value: 1, maximum value: 20, default value: 5. 8.23 -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. 8.24 - 8.25 -COLS_IN_ALPHA_INDEX = 5 8.26 - 8.27 # In case all classes in a project start with a common prefix, all classes will 8.28 # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag 8.29 # can be used to specify a prefix (or a list of prefixes) that should be ignored 8.30 @@ -2008,12 +1995,6 @@ 8.31 8.32 EXTERNAL_PAGES = YES 8.33 8.34 -# The PERL_PATH should be the absolute path and name of the perl script 8.35 -# interpreter (i.e. the result of 'which perl'). 8.36 -# The default file (with absolute path) is: /usr/bin/perl. 8.37 - 8.38 -PERL_PATH = /usr/bin/perl 8.39 - 8.40 #--------------------------------------------------------------------------- 8.41 # Configuration options related to the dot tool 8.42 #--------------------------------------------------------------------------- 8.43 @@ -2027,15 +2008,6 @@ 8.44 8.45 CLASS_DIAGRAMS = YES 8.46 8.47 -# You can define message sequence charts within doxygen comments using the \msc 8.48 -# command. Doxygen will then run the mscgen tool (see: 8.49 -# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the 8.50 -# documentation. The MSCGEN_PATH tag allows you to specify the directory where 8.51 -# the mscgen tool resides. If left empty the tool is assumed to be found in the 8.52 -# default search path. 8.53 - 8.54 -MSCGEN_PATH = 8.55 - 8.56 # You can include diagrams made with dia in doxygen documentation. Doxygen will 8.57 # then run dia to produce the diagram and insert it in the documentation. The 8.58 # DIA_PATH tag allows you to specify the directory where the dia binary resides.
9.1 --- a/configure.ac Mon Dec 30 09:54:10 2019 +0100 9.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 9.3 @@ -1,64 +0,0 @@ 9.4 -# 9.5 -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 9.6 -# 9.7 -# Copyright 2019 Mike Becker, Olaf Wintermann All rights reserved. 9.8 -# 9.9 -# Redistribution and use in source and binary forms, with or without 9.10 -# modification, are permitted provided that the following conditions are met: 9.11 -# 9.12 -# 1. Redistributions of source code must retain the above copyright 9.13 -# notice, this list of conditions and the following disclaimer. 9.14 -# 9.15 -# 2. Redistributions in binary form must reproduce the above copyright 9.16 -# notice, this list of conditions and the following disclaimer in the 9.17 -# documentation and/or other materials provided with the distribution. 9.18 -# 9.19 -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 9.20 -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 9.21 -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 9.22 -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 9.23 -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 9.24 -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 9.25 -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 9.26 -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 9.27 -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 9.28 -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 9.29 -# POSSIBILITY OF SUCH DAMAGE. 9.30 -# 9.31 - 9.32 -# the package version must match the macros in ucx.h 9.33 -# the lib version must follow the libtool versioning convention 9.34 -AC_PREREQ([2.60]) 9.35 -AC_INIT([ucx], [2.1.0], [olaf.wintermann@gmail.com]) 9.36 -AC_SUBST([UCX_LIB_VERSION], [4:0:1]) 9.37 - 9.38 -# don't place everything in the project root 9.39 -AC_CONFIG_AUX_DIR([build-aux]) 9.40 -AC_CONFIG_MACRO_DIR([m4]) 9.41 - 9.42 -# we use our own directory structure 9.43 -AM_INIT_AUTOMAKE([foreign -Wall -Werror]) 9.44 - 9.45 -# if there is an archiver, use it 9.46 -m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) 9.47 - 9.48 -# we are compiling a library 9.49 -LT_INIT 9.50 - 9.51 -# we want c11, and may fall back to c99 9.52 -AC_PROG_CC_C99 9.53 - 9.54 -# we want to support automake < 1.14, so we need this deprecated macro 9.55 -# it tests, whether the compiler allows -c and -o simultaneously 9.56 -# in modern versions of autoconf, this is done by AC_PROG_CC 9.57 -AM_PROG_CC_C_O 9.58 - 9.59 -# where to place config macros 9.60 -AC_CONFIG_HEADERS([config.h]) 9.61 - 9.62 -# our Makefiles 9.63 -AC_CONFIG_FILES([Makefile src/Makefile test/Makefile]) 9.64 - 9.65 -# GO 9.66 -AC_OUTPUT 9.67 -
10.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 10.2 +++ b/docs/api-2.1/allocator_8h.html Sat Feb 06 19:11:44 2021 +0100 10.3 @@ -0,0 +1,600 @@ 10.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 10.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 10.6 +<head> 10.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 10.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 10.9 +<meta name="generator" content="Doxygen 1.8.13"/> 10.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 10.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/allocator.h File Reference</title> 10.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 10.13 +<script type="text/javascript" src="jquery.js"></script> 10.14 +<script type="text/javascript" src="dynsections.js"></script> 10.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 10.16 +<script type="text/javascript" src="search/searchdata.js"></script> 10.17 +<script type="text/javascript" src="search/search.js"></script> 10.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 10.19 +</head> 10.20 +<body> 10.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 10.22 +<div id="titlearea"> 10.23 +<table cellspacing="0" cellpadding="0"> 10.24 + <tbody> 10.25 + <tr style="height: 56px;"> 10.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 10.27 + <td id="projectalign" style="padding-left: 0.5em;"> 10.28 + <div id="projectname">ucx 10.29 + </div> 10.30 + <div id="projectbrief">UAP Common Extensions</div> 10.31 + </td> 10.32 + </tr> 10.33 + </tbody> 10.34 +</table> 10.35 +</div> 10.36 +<!-- end header part --> 10.37 +<!-- Generated by Doxygen 1.8.13 --> 10.38 +<script type="text/javascript"> 10.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 10.40 +</script> 10.41 +<script type="text/javascript" src="menudata.js"></script> 10.42 +<script type="text/javascript" src="menu.js"></script> 10.43 +<script type="text/javascript"> 10.44 +$(function() { 10.45 + initMenu('',true,false,'search.php','Search'); 10.46 + $(document).ready(function() { init_search(); }); 10.47 +}); 10.48 +</script> 10.49 +<div id="main-nav"></div> 10.50 +<!-- window showing the filter options --> 10.51 +<div id="MSearchSelectWindow" 10.52 + onmouseover="return searchBox.OnSearchSelectShow()" 10.53 + onmouseout="return searchBox.OnSearchSelectHide()" 10.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 10.55 +</div> 10.56 + 10.57 +<!-- iframe showing the search results (closed by default) --> 10.58 +<div id="MSearchResultsWindow"> 10.59 +<iframe src="javascript:void(0)" frameborder="0" 10.60 + name="MSearchResults" id="MSearchResults"> 10.61 +</iframe> 10.62 +</div> 10.63 + 10.64 +<div id="nav-path" class="navpath"> 10.65 + <ul> 10.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 10.67 +</div> 10.68 +</div><!-- top --> 10.69 +<div class="header"> 10.70 + <div class="summary"> 10.71 +<a href="#nested-classes">Data Structures</a> | 10.72 +<a href="#define-members">Macros</a> | 10.73 +<a href="#typedef-members">Typedefs</a> | 10.74 +<a href="#func-members">Functions</a> </div> 10.75 + <div class="headertitle"> 10.76 +<div class="title">allocator.h File Reference</div> </div> 10.77 +</div><!--header--> 10.78 +<div class="contents"> 10.79 + 10.80 +<p>Allocator for custom memory management. 10.81 +<a href="#details">More...</a></p> 10.82 +<div class="textblock"><code>#include "<a class="el" href="ucx_8h_source.html">ucx.h</a>"</code><br /> 10.83 +</div> 10.84 +<p><a href="allocator_8h_source.html">Go to the source code of this file.</a></p> 10.85 +<table class="memberdecls"> 10.86 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> 10.87 +Data Structures</h2></td></tr> 10.88 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAllocator.html">UcxAllocator</a></td></tr> 10.89 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">UCX allocator data structure containing memory management functions. <a href="structUcxAllocator.html#details">More...</a><br /></td></tr> 10.90 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 10.91 +</table><table class="memberdecls"> 10.92 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> 10.93 +Macros</h2></td></tr> 10.94 +<tr class="memitem:ae1bc218fea8a35f4a3706f0beefcfb19"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="allocator_8h.html#ae1bc218fea8a35f4a3706f0beefcfb19">almalloc</a>(allocator, n)   ((allocator)->malloc((allocator)->pool, n))</td></tr> 10.95 +<tr class="memdesc:ae1bc218fea8a35f4a3706f0beefcfb19"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for calling an allocators malloc function. <a href="#ae1bc218fea8a35f4a3706f0beefcfb19">More...</a><br /></td></tr> 10.96 +<tr class="separator:ae1bc218fea8a35f4a3706f0beefcfb19"><td class="memSeparator" colspan="2"> </td></tr> 10.97 +<tr class="memitem:a8d71470816f88f78cb9a9686c57e1b10"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="allocator_8h.html#a8d71470816f88f78cb9a9686c57e1b10">alcalloc</a>(allocator, n, size)   ((allocator)->calloc((allocator)->pool, n, size))</td></tr> 10.98 +<tr class="memdesc:a8d71470816f88f78cb9a9686c57e1b10"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for calling an allocators calloc function. <a href="#a8d71470816f88f78cb9a9686c57e1b10">More...</a><br /></td></tr> 10.99 +<tr class="separator:a8d71470816f88f78cb9a9686c57e1b10"><td class="memSeparator" colspan="2"> </td></tr> 10.100 +<tr class="memitem:a029ee5c9bcbb3f873571553f788c5820"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="allocator_8h.html#a029ee5c9bcbb3f873571553f788c5820">alrealloc</a>(allocator, ptr, n)   ((allocator)->realloc((allocator)->pool, ptr, n))</td></tr> 10.101 +<tr class="memdesc:a029ee5c9bcbb3f873571553f788c5820"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for calling an allocators realloc function. <a href="#a029ee5c9bcbb3f873571553f788c5820">More...</a><br /></td></tr> 10.102 +<tr class="separator:a029ee5c9bcbb3f873571553f788c5820"><td class="memSeparator" colspan="2"> </td></tr> 10.103 +<tr class="memitem:acd775785b54e97dc2b33a432c12c8fb2"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="allocator_8h.html#acd775785b54e97dc2b33a432c12c8fb2">alfree</a>(allocator, ptr)   ((allocator)->free((allocator)->pool, ptr))</td></tr> 10.104 +<tr class="memdesc:acd775785b54e97dc2b33a432c12c8fb2"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for calling an allocators free function. <a href="#acd775785b54e97dc2b33a432c12c8fb2">More...</a><br /></td></tr> 10.105 +<tr class="separator:acd775785b54e97dc2b33a432c12c8fb2"><td class="memSeparator" colspan="2"> </td></tr> 10.106 +<tr class="memitem:a1283a8f875f90a7af3aba5e031fc2e3f"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="allocator_8h.html#a1283a8f875f90a7af3aba5e031fc2e3f">UCX_ALLOCATOR_DEFAULT</a></td></tr> 10.107 +<tr class="memdesc:a1283a8f875f90a7af3aba5e031fc2e3f"><td class="mdescLeft"> </td><td class="mdescRight">Convenient macro for a default allocator <code>struct</code> definition. <a href="#a1283a8f875f90a7af3aba5e031fc2e3f">More...</a><br /></td></tr> 10.108 +<tr class="separator:a1283a8f875f90a7af3aba5e031fc2e3f"><td class="memSeparator" colspan="2"> </td></tr> 10.109 +</table><table class="memberdecls"> 10.110 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> 10.111 +Typedefs</h2></td></tr> 10.112 +<tr class="memitem:a29f0f6a23a70db3b60635cd6dc384473"><td class="memItemLeft" align="right" valign="top">typedef void *(* </td><td class="memItemRight" valign="bottom"><a class="el" href="allocator_8h.html#a29f0f6a23a70db3b60635cd6dc384473">ucx_allocator_malloc</a>) (void *pool, size_t n)</td></tr> 10.113 +<tr class="memdesc:a29f0f6a23a70db3b60635cd6dc384473"><td class="mdescLeft"> </td><td class="mdescRight">A function pointer to the allocators <code>malloc()</code> function. <a href="#a29f0f6a23a70db3b60635cd6dc384473">More...</a><br /></td></tr> 10.114 +<tr class="separator:a29f0f6a23a70db3b60635cd6dc384473"><td class="memSeparator" colspan="2"> </td></tr> 10.115 +<tr class="memitem:a2c0aba4221c1ac6801f03ed799f15b12"><td class="memItemLeft" align="right" valign="top">typedef void *(* </td><td class="memItemRight" valign="bottom"><a class="el" href="allocator_8h.html#a2c0aba4221c1ac6801f03ed799f15b12">ucx_allocator_calloc</a>) (void *pool, size_t n, size_t size)</td></tr> 10.116 +<tr class="memdesc:a2c0aba4221c1ac6801f03ed799f15b12"><td class="mdescLeft"> </td><td class="mdescRight">A function pointer to the allocators <code>calloc()</code> function. <a href="#a2c0aba4221c1ac6801f03ed799f15b12">More...</a><br /></td></tr> 10.117 +<tr class="separator:a2c0aba4221c1ac6801f03ed799f15b12"><td class="memSeparator" colspan="2"> </td></tr> 10.118 +<tr class="memitem:a6d7cf038a806e327c5da37321d04e426"><td class="memItemLeft" align="right" valign="top">typedef void *(* </td><td class="memItemRight" valign="bottom"><a class="el" href="allocator_8h.html#a6d7cf038a806e327c5da37321d04e426">ucx_allocator_realloc</a>) (void *pool, void *data, size_t n)</td></tr> 10.119 +<tr class="memdesc:a6d7cf038a806e327c5da37321d04e426"><td class="mdescLeft"> </td><td class="mdescRight">A function pointer to the allocators <code>realloc()</code> function. <a href="#a6d7cf038a806e327c5da37321d04e426">More...</a><br /></td></tr> 10.120 +<tr class="separator:a6d7cf038a806e327c5da37321d04e426"><td class="memSeparator" colspan="2"> </td></tr> 10.121 +<tr class="memitem:aaf2387ddaddd8ab4b267e6b00e5d6f7e"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="allocator_8h.html#aaf2387ddaddd8ab4b267e6b00e5d6f7e">ucx_allocator_free</a>) (void *pool, void *data)</td></tr> 10.122 +<tr class="memdesc:aaf2387ddaddd8ab4b267e6b00e5d6f7e"><td class="mdescLeft"> </td><td class="mdescRight">A function pointer to the allocators <code>free()</code> function. <a href="#aaf2387ddaddd8ab4b267e6b00e5d6f7e">More...</a><br /></td></tr> 10.123 +<tr class="separator:aaf2387ddaddd8ab4b267e6b00e5d6f7e"><td class="memSeparator" colspan="2"> </td></tr> 10.124 +</table><table class="memberdecls"> 10.125 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 10.126 +Functions</h2></td></tr> 10.127 +<tr class="memitem:a98d2f1b341118b7a0e341fda5d8b2ebf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf">ucx_default_allocator</a> ()</td></tr> 10.128 +<tr class="memdesc:a98d2f1b341118b7a0e341fda5d8b2ebf"><td class="mdescLeft"> </td><td class="mdescRight">Returns a pointer to the default allocator. <a href="#a98d2f1b341118b7a0e341fda5d8b2ebf">More...</a><br /></td></tr> 10.129 +<tr class="separator:a98d2f1b341118b7a0e341fda5d8b2ebf"><td class="memSeparator" colspan="2"> </td></tr> 10.130 +<tr class="memitem:a96403ebf3d2312d95f2fe7627a1cdbc0"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="allocator_8h.html#a96403ebf3d2312d95f2fe7627a1cdbc0">ucx_default_malloc</a> (void *ignore, size_t n)</td></tr> 10.131 +<tr class="memdesc:a96403ebf3d2312d95f2fe7627a1cdbc0"><td class="mdescLeft"> </td><td class="mdescRight">A wrapper for the standard libc <code>malloc()</code> function. <a href="#a96403ebf3d2312d95f2fe7627a1cdbc0">More...</a><br /></td></tr> 10.132 +<tr class="separator:a96403ebf3d2312d95f2fe7627a1cdbc0"><td class="memSeparator" colspan="2"> </td></tr> 10.133 +<tr class="memitem:a3a0bfdd13d887012309c459b339f338f"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="allocator_8h.html#a3a0bfdd13d887012309c459b339f338f">ucx_default_calloc</a> (void *ignore, size_t n, size_t size)</td></tr> 10.134 +<tr class="memdesc:a3a0bfdd13d887012309c459b339f338f"><td class="mdescLeft"> </td><td class="mdescRight">A wrapper for the standard libc <code>calloc()</code> function. <a href="#a3a0bfdd13d887012309c459b339f338f">More...</a><br /></td></tr> 10.135 +<tr class="separator:a3a0bfdd13d887012309c459b339f338f"><td class="memSeparator" colspan="2"> </td></tr> 10.136 +<tr class="memitem:a47cfc8af626a86fcb93a2b14b90498ed"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="allocator_8h.html#a47cfc8af626a86fcb93a2b14b90498ed">ucx_default_realloc</a> (void *ignore, void *data, size_t n)</td></tr> 10.137 +<tr class="memdesc:a47cfc8af626a86fcb93a2b14b90498ed"><td class="mdescLeft"> </td><td class="mdescRight">A wrapper for the standard libc <code>realloc()</code> function. <a href="#a47cfc8af626a86fcb93a2b14b90498ed">More...</a><br /></td></tr> 10.138 +<tr class="separator:a47cfc8af626a86fcb93a2b14b90498ed"><td class="memSeparator" colspan="2"> </td></tr> 10.139 +<tr class="memitem:a646d83aaaadfe33ae414c0fad8bfc52a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="allocator_8h.html#a646d83aaaadfe33ae414c0fad8bfc52a">ucx_default_free</a> (void *ignore, void *data)</td></tr> 10.140 +<tr class="memdesc:a646d83aaaadfe33ae414c0fad8bfc52a"><td class="mdescLeft"> </td><td class="mdescRight">A wrapper for the standard libc <code>free()</code> function. <a href="#a646d83aaaadfe33ae414c0fad8bfc52a">More...</a><br /></td></tr> 10.141 +<tr class="separator:a646d83aaaadfe33ae414c0fad8bfc52a"><td class="memSeparator" colspan="2"> </td></tr> 10.142 +</table> 10.143 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 10.144 +<div class="textblock"><p>Allocator for custom memory management. </p> 10.145 +<p>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 <code>malloc(), calloc(), realloc()</code> and <code>free()</code>.</p> 10.146 +<p>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.</p> 10.147 +<p>As the pointer to the memory area / pool can be arbitrarily chosen, any data can be provided to the memory management functions. A <a class="el" href="structUcxMempool.html" title="UCX mempool structure. ">UcxMempool</a> is just one example.</p> 10.148 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="mempool_8h.html" title="Memory pool implementation. ">mempool.h</a> </dd> 10.149 +<dd> 10.150 +<a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a></dd></dl> 10.151 +<dl class="section author"><dt>Author</dt><dd>Mike Becker </dd> 10.152 +<dd> 10.153 +Olaf Wintermann </dd></dl> 10.154 +</div><h2 class="groupheader">Macro Definition Documentation</h2> 10.155 +<a id="a8d71470816f88f78cb9a9686c57e1b10"></a> 10.156 +<h2 class="memtitle"><span class="permalink"><a href="#a8d71470816f88f78cb9a9686c57e1b10">◆ </a></span>alcalloc</h2> 10.157 + 10.158 +<div class="memitem"> 10.159 +<div class="memproto"> 10.160 + <table class="memname"> 10.161 + <tr> 10.162 + <td class="memname">#define alcalloc</td> 10.163 + <td>(</td> 10.164 + <td class="paramtype"> </td> 10.165 + <td class="paramname">allocator, </td> 10.166 + </tr> 10.167 + <tr> 10.168 + <td class="paramkey"></td> 10.169 + <td></td> 10.170 + <td class="paramtype"> </td> 10.171 + <td class="paramname">n, </td> 10.172 + </tr> 10.173 + <tr> 10.174 + <td class="paramkey"></td> 10.175 + <td></td> 10.176 + <td class="paramtype"> </td> 10.177 + <td class="paramname">size </td> 10.178 + </tr> 10.179 + <tr> 10.180 + <td></td> 10.181 + <td>)</td> 10.182 + <td></td><td>   ((allocator)->calloc((allocator)->pool, n, size))</td> 10.183 + </tr> 10.184 + </table> 10.185 +</div><div class="memdoc"> 10.186 + 10.187 +<p>Shorthand for calling an allocators calloc function. </p> 10.188 +<dl class="params"><dt>Parameters</dt><dd> 10.189 + <table class="params"> 10.190 + <tr><td class="paramname">allocator</td><td>the allocator to use </td></tr> 10.191 + <tr><td class="paramname">n</td><td>the count of elements the space should be allocated for </td></tr> 10.192 + <tr><td class="paramname">size</td><td>the size of each element </td></tr> 10.193 + </table> 10.194 + </dd> 10.195 +</dl> 10.196 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the allocated memory area </dd></dl> 10.197 + 10.198 +</div> 10.199 +</div> 10.200 +<a id="acd775785b54e97dc2b33a432c12c8fb2"></a> 10.201 +<h2 class="memtitle"><span class="permalink"><a href="#acd775785b54e97dc2b33a432c12c8fb2">◆ </a></span>alfree</h2> 10.202 + 10.203 +<div class="memitem"> 10.204 +<div class="memproto"> 10.205 + <table class="memname"> 10.206 + <tr> 10.207 + <td class="memname">#define alfree</td> 10.208 + <td>(</td> 10.209 + <td class="paramtype"> </td> 10.210 + <td class="paramname">allocator, </td> 10.211 + </tr> 10.212 + <tr> 10.213 + <td class="paramkey"></td> 10.214 + <td></td> 10.215 + <td class="paramtype"> </td> 10.216 + <td class="paramname">ptr </td> 10.217 + </tr> 10.218 + <tr> 10.219 + <td></td> 10.220 + <td>)</td> 10.221 + <td></td><td>   ((allocator)->free((allocator)->pool, ptr))</td> 10.222 + </tr> 10.223 + </table> 10.224 +</div><div class="memdoc"> 10.225 + 10.226 +<p>Shorthand for calling an allocators free function. </p> 10.227 +<dl class="params"><dt>Parameters</dt><dd> 10.228 + <table class="params"> 10.229 + <tr><td class="paramname">allocator</td><td>the allocator to use </td></tr> 10.230 + <tr><td class="paramname">ptr</td><td>the pointer to the memory area that shall be freed </td></tr> 10.231 + </table> 10.232 + </dd> 10.233 +</dl> 10.234 + 10.235 +</div> 10.236 +</div> 10.237 +<a id="ae1bc218fea8a35f4a3706f0beefcfb19"></a> 10.238 +<h2 class="memtitle"><span class="permalink"><a href="#ae1bc218fea8a35f4a3706f0beefcfb19">◆ </a></span>almalloc</h2> 10.239 + 10.240 +<div class="memitem"> 10.241 +<div class="memproto"> 10.242 + <table class="memname"> 10.243 + <tr> 10.244 + <td class="memname">#define almalloc</td> 10.245 + <td>(</td> 10.246 + <td class="paramtype"> </td> 10.247 + <td class="paramname">allocator, </td> 10.248 + </tr> 10.249 + <tr> 10.250 + <td class="paramkey"></td> 10.251 + <td></td> 10.252 + <td class="paramtype"> </td> 10.253 + <td class="paramname">n </td> 10.254 + </tr> 10.255 + <tr> 10.256 + <td></td> 10.257 + <td>)</td> 10.258 + <td></td><td>   ((allocator)->malloc((allocator)->pool, n))</td> 10.259 + </tr> 10.260 + </table> 10.261 +</div><div class="memdoc"> 10.262 + 10.263 +<p>Shorthand for calling an allocators malloc function. </p> 10.264 +<dl class="params"><dt>Parameters</dt><dd> 10.265 + <table class="params"> 10.266 + <tr><td class="paramname">allocator</td><td>the allocator to use </td></tr> 10.267 + <tr><td class="paramname">n</td><td>size of space to allocate </td></tr> 10.268 + </table> 10.269 + </dd> 10.270 +</dl> 10.271 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the allocated memory area </dd></dl> 10.272 + 10.273 +</div> 10.274 +</div> 10.275 +<a id="a029ee5c9bcbb3f873571553f788c5820"></a> 10.276 +<h2 class="memtitle"><span class="permalink"><a href="#a029ee5c9bcbb3f873571553f788c5820">◆ </a></span>alrealloc</h2> 10.277 + 10.278 +<div class="memitem"> 10.279 +<div class="memproto"> 10.280 + <table class="memname"> 10.281 + <tr> 10.282 + <td class="memname">#define alrealloc</td> 10.283 + <td>(</td> 10.284 + <td class="paramtype"> </td> 10.285 + <td class="paramname">allocator, </td> 10.286 + </tr> 10.287 + <tr> 10.288 + <td class="paramkey"></td> 10.289 + <td></td> 10.290 + <td class="paramtype"> </td> 10.291 + <td class="paramname">ptr, </td> 10.292 + </tr> 10.293 + <tr> 10.294 + <td class="paramkey"></td> 10.295 + <td></td> 10.296 + <td class="paramtype"> </td> 10.297 + <td class="paramname">n </td> 10.298 + </tr> 10.299 + <tr> 10.300 + <td></td> 10.301 + <td>)</td> 10.302 + <td></td><td>   ((allocator)->realloc((allocator)->pool, ptr, n))</td> 10.303 + </tr> 10.304 + </table> 10.305 +</div><div class="memdoc"> 10.306 + 10.307 +<p>Shorthand for calling an allocators realloc function. </p> 10.308 +<dl class="params"><dt>Parameters</dt><dd> 10.309 + <table class="params"> 10.310 + <tr><td class="paramname">allocator</td><td>the allocator to use </td></tr> 10.311 + <tr><td class="paramname">ptr</td><td>the pointer to the memory area that shall be reallocated </td></tr> 10.312 + <tr><td class="paramname">n</td><td>the new size of the allocated memory area </td></tr> 10.313 + </table> 10.314 + </dd> 10.315 +</dl> 10.316 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the reallocated memory area </dd></dl> 10.317 + 10.318 +</div> 10.319 +</div> 10.320 +<a id="a1283a8f875f90a7af3aba5e031fc2e3f"></a> 10.321 +<h2 class="memtitle"><span class="permalink"><a href="#a1283a8f875f90a7af3aba5e031fc2e3f">◆ </a></span>UCX_ALLOCATOR_DEFAULT</h2> 10.322 + 10.323 +<div class="memitem"> 10.324 +<div class="memproto"> 10.325 + <table class="memname"> 10.326 + <tr> 10.327 + <td class="memname">#define UCX_ALLOCATOR_DEFAULT</td> 10.328 + </tr> 10.329 + </table> 10.330 +</div><div class="memdoc"> 10.331 +<b>Value:</b><div class="fragment"><div class="line">{NULL, \</div><div class="line"> ucx_default_malloc, <a class="code" href="allocator_8h.html#a3a0bfdd13d887012309c459b339f338f">ucx_default_calloc</a>, <a class="code" href="allocator_8h.html#a47cfc8af626a86fcb93a2b14b90498ed">ucx_default_realloc</a>, \</div><div class="line"> ucx_default_free }</div><div class="ttc" id="allocator_8h_html_a3a0bfdd13d887012309c459b339f338f"><div class="ttname"><a href="allocator_8h.html#a3a0bfdd13d887012309c459b339f338f">ucx_default_calloc</a></div><div class="ttdeci">void * ucx_default_calloc(void *ignore, size_t n, size_t size)</div><div class="ttdoc">A wrapper for the standard libc calloc() function. </div><div class="ttdef"><b>Definition:</b> allocator.c:50</div></div> 10.332 +<div class="ttc" id="allocator_8h_html_a47cfc8af626a86fcb93a2b14b90498ed"><div class="ttname"><a href="allocator_8h.html#a47cfc8af626a86fcb93a2b14b90498ed">ucx_default_realloc</a></div><div class="ttdeci">void * ucx_default_realloc(void *ignore, void *data, size_t n)</div><div class="ttdoc">A wrapper for the standard libc realloc() function. </div><div class="ttdef"><b>Definition:</b> allocator.c:54</div></div> 10.333 +</div><!-- fragment --> 10.334 +<p>Convenient macro for a default allocator <code>struct</code> definition. </p> 10.335 + 10.336 +</div> 10.337 +</div> 10.338 +<h2 class="groupheader">Typedef Documentation</h2> 10.339 +<a id="a2c0aba4221c1ac6801f03ed799f15b12"></a> 10.340 +<h2 class="memtitle"><span class="permalink"><a href="#a2c0aba4221c1ac6801f03ed799f15b12">◆ </a></span>ucx_allocator_calloc</h2> 10.341 + 10.342 +<div class="memitem"> 10.343 +<div class="memproto"> 10.344 + <table class="memname"> 10.345 + <tr> 10.346 + <td class="memname">typedef void*(* ucx_allocator_calloc) (void *pool, size_t n, size_t size)</td> 10.347 + </tr> 10.348 + </table> 10.349 +</div><div class="memdoc"> 10.350 + 10.351 +<p>A function pointer to the allocators <code>calloc()</code> function. </p> 10.352 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> </dd></dl> 10.353 + 10.354 +</div> 10.355 +</div> 10.356 +<a id="aaf2387ddaddd8ab4b267e6b00e5d6f7e"></a> 10.357 +<h2 class="memtitle"><span class="permalink"><a href="#aaf2387ddaddd8ab4b267e6b00e5d6f7e">◆ </a></span>ucx_allocator_free</h2> 10.358 + 10.359 +<div class="memitem"> 10.360 +<div class="memproto"> 10.361 + <table class="memname"> 10.362 + <tr> 10.363 + <td class="memname">typedef void(* ucx_allocator_free) (void *pool, void *data)</td> 10.364 + </tr> 10.365 + </table> 10.366 +</div><div class="memdoc"> 10.367 + 10.368 +<p>A function pointer to the allocators <code>free()</code> function. </p> 10.369 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> </dd></dl> 10.370 + 10.371 +</div> 10.372 +</div> 10.373 +<a id="a29f0f6a23a70db3b60635cd6dc384473"></a> 10.374 +<h2 class="memtitle"><span class="permalink"><a href="#a29f0f6a23a70db3b60635cd6dc384473">◆ </a></span>ucx_allocator_malloc</h2> 10.375 + 10.376 +<div class="memitem"> 10.377 +<div class="memproto"> 10.378 + <table class="memname"> 10.379 + <tr> 10.380 + <td class="memname">typedef void*(* ucx_allocator_malloc) (void *pool, size_t n)</td> 10.381 + </tr> 10.382 + </table> 10.383 +</div><div class="memdoc"> 10.384 + 10.385 +<p>A function pointer to the allocators <code>malloc()</code> function. </p> 10.386 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> </dd></dl> 10.387 + 10.388 +</div> 10.389 +</div> 10.390 +<a id="a6d7cf038a806e327c5da37321d04e426"></a> 10.391 +<h2 class="memtitle"><span class="permalink"><a href="#a6d7cf038a806e327c5da37321d04e426">◆ </a></span>ucx_allocator_realloc</h2> 10.392 + 10.393 +<div class="memitem"> 10.394 +<div class="memproto"> 10.395 + <table class="memname"> 10.396 + <tr> 10.397 + <td class="memname">typedef void*(* ucx_allocator_realloc) (void *pool, void *data, size_t n)</td> 10.398 + </tr> 10.399 + </table> 10.400 +</div><div class="memdoc"> 10.401 + 10.402 +<p>A function pointer to the allocators <code>realloc()</code> function. </p> 10.403 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> </dd></dl> 10.404 + 10.405 +</div> 10.406 +</div> 10.407 +<h2 class="groupheader">Function Documentation</h2> 10.408 +<a id="a98d2f1b341118b7a0e341fda5d8b2ebf"></a> 10.409 +<h2 class="memtitle"><span class="permalink"><a href="#a98d2f1b341118b7a0e341fda5d8b2ebf">◆ </a></span>ucx_default_allocator()</h2> 10.410 + 10.411 +<div class="memitem"> 10.412 +<div class="memproto"> 10.413 + <table class="memname"> 10.414 + <tr> 10.415 + <td class="memname"><a class="el" href="structUcxAllocator.html">UcxAllocator</a>* ucx_default_allocator </td> 10.416 + <td>(</td> 10.417 + <td class="paramname"></td><td>)</td> 10.418 + <td></td> 10.419 + </tr> 10.420 + </table> 10.421 +</div><div class="memdoc"> 10.422 + 10.423 +<p>Returns a pointer to the default allocator. </p> 10.424 +<p>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 <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> by assigning <a class="el" href="allocator_8h.html#a1283a8f875f90a7af3aba5e031fc2e3f" title="Convenient macro for a default allocator struct definition. ">UCX_ALLOCATOR_DEFAULT</a> to a variable and pass the address of this variable to any function that takes a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> as argument. Note that using this function is the recommended way of passing a default allocator, thus it never runs out of scope.</p> 10.425 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the default allocator</dd></dl> 10.426 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="allocator_8h.html#a1283a8f875f90a7af3aba5e031fc2e3f" title="Convenient macro for a default allocator struct definition. ">UCX_ALLOCATOR_DEFAULT</a> </dd></dl> 10.427 + 10.428 +</div> 10.429 +</div> 10.430 +<a id="a3a0bfdd13d887012309c459b339f338f"></a> 10.431 +<h2 class="memtitle"><span class="permalink"><a href="#a3a0bfdd13d887012309c459b339f338f">◆ </a></span>ucx_default_calloc()</h2> 10.432 + 10.433 +<div class="memitem"> 10.434 +<div class="memproto"> 10.435 + <table class="memname"> 10.436 + <tr> 10.437 + <td class="memname">void* ucx_default_calloc </td> 10.438 + <td>(</td> 10.439 + <td class="paramtype">void * </td> 10.440 + <td class="paramname"><em>ignore</em>, </td> 10.441 + </tr> 10.442 + <tr> 10.443 + <td class="paramkey"></td> 10.444 + <td></td> 10.445 + <td class="paramtype">size_t </td> 10.446 + <td class="paramname"><em>n</em>, </td> 10.447 + </tr> 10.448 + <tr> 10.449 + <td class="paramkey"></td> 10.450 + <td></td> 10.451 + <td class="paramtype">size_t </td> 10.452 + <td class="paramname"><em>size</em> </td> 10.453 + </tr> 10.454 + <tr> 10.455 + <td></td> 10.456 + <td>)</td> 10.457 + <td></td><td></td> 10.458 + </tr> 10.459 + </table> 10.460 +</div><div class="memdoc"> 10.461 + 10.462 +<p>A wrapper for the standard libc <code>calloc()</code> function. </p> 10.463 +<dl class="params"><dt>Parameters</dt><dd> 10.464 + <table class="params"> 10.465 + <tr><td class="paramname">ignore</td><td>ignored (may be used by allocators for pooled memory) </td></tr> 10.466 + <tr><td class="paramname">n</td><td>argument passed to <code>calloc()</code> </td></tr> 10.467 + <tr><td class="paramname">size</td><td>argument passed to <code>calloc()</code> </td></tr> 10.468 + </table> 10.469 + </dd> 10.470 +</dl> 10.471 +<dl class="section return"><dt>Returns</dt><dd>return value of <code>calloc()</code> </dd></dl> 10.472 + 10.473 +</div> 10.474 +</div> 10.475 +<a id="a646d83aaaadfe33ae414c0fad8bfc52a"></a> 10.476 +<h2 class="memtitle"><span class="permalink"><a href="#a646d83aaaadfe33ae414c0fad8bfc52a">◆ </a></span>ucx_default_free()</h2> 10.477 + 10.478 +<div class="memitem"> 10.479 +<div class="memproto"> 10.480 + <table class="memname"> 10.481 + <tr> 10.482 + <td class="memname">void ucx_default_free </td> 10.483 + <td>(</td> 10.484 + <td class="paramtype">void * </td> 10.485 + <td class="paramname"><em>ignore</em>, </td> 10.486 + </tr> 10.487 + <tr> 10.488 + <td class="paramkey"></td> 10.489 + <td></td> 10.490 + <td class="paramtype">void * </td> 10.491 + <td class="paramname"><em>data</em> </td> 10.492 + </tr> 10.493 + <tr> 10.494 + <td></td> 10.495 + <td>)</td> 10.496 + <td></td><td></td> 10.497 + </tr> 10.498 + </table> 10.499 +</div><div class="memdoc"> 10.500 + 10.501 +<p>A wrapper for the standard libc <code>free()</code> function. </p> 10.502 +<dl class="params"><dt>Parameters</dt><dd> 10.503 + <table class="params"> 10.504 + <tr><td class="paramname">ignore</td><td>ignored (may be used by allocators for pooled memory) </td></tr> 10.505 + <tr><td class="paramname">data</td><td>argument passed to <code>free()</code> </td></tr> 10.506 + </table> 10.507 + </dd> 10.508 +</dl> 10.509 + 10.510 +</div> 10.511 +</div> 10.512 +<a id="a96403ebf3d2312d95f2fe7627a1cdbc0"></a> 10.513 +<h2 class="memtitle"><span class="permalink"><a href="#a96403ebf3d2312d95f2fe7627a1cdbc0">◆ </a></span>ucx_default_malloc()</h2> 10.514 + 10.515 +<div class="memitem"> 10.516 +<div class="memproto"> 10.517 + <table class="memname"> 10.518 + <tr> 10.519 + <td class="memname">void* ucx_default_malloc </td> 10.520 + <td>(</td> 10.521 + <td class="paramtype">void * </td> 10.522 + <td class="paramname"><em>ignore</em>, </td> 10.523 + </tr> 10.524 + <tr> 10.525 + <td class="paramkey"></td> 10.526 + <td></td> 10.527 + <td class="paramtype">size_t </td> 10.528 + <td class="paramname"><em>n</em> </td> 10.529 + </tr> 10.530 + <tr> 10.531 + <td></td> 10.532 + <td>)</td> 10.533 + <td></td><td></td> 10.534 + </tr> 10.535 + </table> 10.536 +</div><div class="memdoc"> 10.537 + 10.538 +<p>A wrapper for the standard libc <code>malloc()</code> function. </p> 10.539 +<dl class="params"><dt>Parameters</dt><dd> 10.540 + <table class="params"> 10.541 + <tr><td class="paramname">ignore</td><td>ignored (may be used by allocators for pooled memory) </td></tr> 10.542 + <tr><td class="paramname">n</td><td>argument passed to <code>malloc()</code> </td></tr> 10.543 + </table> 10.544 + </dd> 10.545 +</dl> 10.546 +<dl class="section return"><dt>Returns</dt><dd>return value of <code>malloc()</code> </dd></dl> 10.547 + 10.548 +</div> 10.549 +</div> 10.550 +<a id="a47cfc8af626a86fcb93a2b14b90498ed"></a> 10.551 +<h2 class="memtitle"><span class="permalink"><a href="#a47cfc8af626a86fcb93a2b14b90498ed">◆ </a></span>ucx_default_realloc()</h2> 10.552 + 10.553 +<div class="memitem"> 10.554 +<div class="memproto"> 10.555 + <table class="memname"> 10.556 + <tr> 10.557 + <td class="memname">void* ucx_default_realloc </td> 10.558 + <td>(</td> 10.559 + <td class="paramtype">void * </td> 10.560 + <td class="paramname"><em>ignore</em>, </td> 10.561 + </tr> 10.562 + <tr> 10.563 + <td class="paramkey"></td> 10.564 + <td></td> 10.565 + <td class="paramtype">void * </td> 10.566 + <td class="paramname"><em>data</em>, </td> 10.567 + </tr> 10.568 + <tr> 10.569 + <td class="paramkey"></td> 10.570 + <td></td> 10.571 + <td class="paramtype">size_t </td> 10.572 + <td class="paramname"><em>n</em> </td> 10.573 + </tr> 10.574 + <tr> 10.575 + <td></td> 10.576 + <td>)</td> 10.577 + <td></td><td></td> 10.578 + </tr> 10.579 + </table> 10.580 +</div><div class="memdoc"> 10.581 + 10.582 +<p>A wrapper for the standard libc <code>realloc()</code> function. </p> 10.583 +<dl class="params"><dt>Parameters</dt><dd> 10.584 + <table class="params"> 10.585 + <tr><td class="paramname">ignore</td><td>ignored (may be used by allocators for pooled memory) </td></tr> 10.586 + <tr><td class="paramname">data</td><td>argumend passed to <code>realloc()</code> </td></tr> 10.587 + <tr><td class="paramname">n</td><td>argument passed to <code>realloc()</code> </td></tr> 10.588 + </table> 10.589 + </dd> 10.590 +</dl> 10.591 +<dl class="section return"><dt>Returns</dt><dd>return value of <code>realloc()</code> </dd></dl> 10.592 + 10.593 +</div> 10.594 +</div> 10.595 +</div><!-- contents --> 10.596 +<!-- start footer part --> 10.597 +<hr class="footer"/><address class="footer"><small> 10.598 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 10.599 +<img class="footer" src="doxygen.png" alt="doxygen"/> 10.600 +</a> 1.8.13 10.601 +</small></address> 10.602 +</body> 10.603 +</html>
11.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 11.2 +++ b/docs/api-2.1/allocator_8h_source.html Sat Feb 06 19:11:44 2021 +0100 11.3 @@ -0,0 +1,95 @@ 11.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 11.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 11.6 +<head> 11.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 11.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 11.9 +<meta name="generator" content="Doxygen 1.8.13"/> 11.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 11.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/allocator.h Source File</title> 11.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 11.13 +<script type="text/javascript" src="jquery.js"></script> 11.14 +<script type="text/javascript" src="dynsections.js"></script> 11.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 11.16 +<script type="text/javascript" src="search/searchdata.js"></script> 11.17 +<script type="text/javascript" src="search/search.js"></script> 11.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 11.19 +</head> 11.20 +<body> 11.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 11.22 +<div id="titlearea"> 11.23 +<table cellspacing="0" cellpadding="0"> 11.24 + <tbody> 11.25 + <tr style="height: 56px;"> 11.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 11.27 + <td id="projectalign" style="padding-left: 0.5em;"> 11.28 + <div id="projectname">ucx 11.29 + </div> 11.30 + <div id="projectbrief">UAP Common Extensions</div> 11.31 + </td> 11.32 + </tr> 11.33 + </tbody> 11.34 +</table> 11.35 +</div> 11.36 +<!-- end header part --> 11.37 +<!-- Generated by Doxygen 1.8.13 --> 11.38 +<script type="text/javascript"> 11.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 11.40 +</script> 11.41 +<script type="text/javascript" src="menudata.js"></script> 11.42 +<script type="text/javascript" src="menu.js"></script> 11.43 +<script type="text/javascript"> 11.44 +$(function() { 11.45 + initMenu('',true,false,'search.php','Search'); 11.46 + $(document).ready(function() { init_search(); }); 11.47 +}); 11.48 +</script> 11.49 +<div id="main-nav"></div> 11.50 +<!-- window showing the filter options --> 11.51 +<div id="MSearchSelectWindow" 11.52 + onmouseover="return searchBox.OnSearchSelectShow()" 11.53 + onmouseout="return searchBox.OnSearchSelectHide()" 11.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 11.55 +</div> 11.56 + 11.57 +<!-- iframe showing the search results (closed by default) --> 11.58 +<div id="MSearchResultsWindow"> 11.59 +<iframe src="javascript:void(0)" frameborder="0" 11.60 + name="MSearchResults" id="MSearchResults"> 11.61 +</iframe> 11.62 +</div> 11.63 + 11.64 +<div id="nav-path" class="navpath"> 11.65 + <ul> 11.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 11.67 +</div> 11.68 +</div><!-- top --> 11.69 +<div class="header"> 11.70 + <div class="headertitle"> 11.71 +<div class="title">allocator.h</div> </div> 11.72 +</div><!--header--> 11.73 +<div class="contents"> 11.74 +<a href="allocator_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are met:</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * documentation and/or other materials provided with the distribution.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#ifndef UCX_ALLOCATOR_H</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#define UCX_ALLOCATOR_H</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#include "<a class="code" href="ucx_8h.html">ucx.h</a>"</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="allocator_8h.html#a29f0f6a23a70db3b60635cd6dc384473"> 65</a></span> <span class="keyword">typedef</span> <span class="keywordtype">void</span>*(*ucx_allocator_malloc)(<span class="keywordtype">void</span> *pool, <span class="keywordtype">size_t</span> n);</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="allocator_8h.html#a2c0aba4221c1ac6801f03ed799f15b12"> 71</a></span> <span class="keyword">typedef</span> <span class="keywordtype">void</span>*(*ucx_allocator_calloc)(<span class="keywordtype">void</span> *pool, <span class="keywordtype">size_t</span> n, <span class="keywordtype">size_t</span> size);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="allocator_8h.html#a6d7cf038a806e327c5da37321d04e426"> 77</a></span> <span class="keyword">typedef</span> <span class="keywordtype">void</span>*(*ucx_allocator_realloc)(<span class="keywordtype">void</span> *pool, <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> n);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="allocator_8h.html#aaf2387ddaddd8ab4b267e6b00e5d6f7e"> 83</a></span> <span class="keyword">typedef</span> void(*<a class="code" href="allocator_8h.html#aaf2387ddaddd8ab4b267e6b00e5d6f7e">ucx_allocator_free</a>)(<span class="keywordtype">void</span> *pool, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="structUcxAllocator.html"> 88</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="structUcxAllocator.html#a1b78012998d1c28be86dc595f8f0aac9"> 93</a></span>  <span class="keywordtype">void</span> *<a class="code" href="structUcxAllocator.html#a1b78012998d1c28be86dc595f8f0aac9">pool</a>;</div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="structUcxAllocator.html#a013376172be39ed54f77c4be6898845a"> 97</a></span>  <a class="code" href="allocator_8h.html#a29f0f6a23a70db3b60635cd6dc384473">ucx_allocator_malloc</a> <a class="code" href="structUcxAllocator.html#a013376172be39ed54f77c4be6898845a">malloc</a>;</div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="structUcxAllocator.html#ab94ec1cba45cc4e7d81e1588a11cbb62"> 101</a></span>  <a class="code" href="allocator_8h.html#a2c0aba4221c1ac6801f03ed799f15b12">ucx_allocator_calloc</a> <a class="code" href="structUcxAllocator.html#ab94ec1cba45cc4e7d81e1588a11cbb62">calloc</a>;</div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="structUcxAllocator.html#a3550e3847f31d9e9ce3ffcb0d3440c15"> 105</a></span>  <a class="code" href="allocator_8h.html#a6d7cf038a806e327c5da37321d04e426">ucx_allocator_realloc</a> <a class="code" href="structUcxAllocator.html#a3550e3847f31d9e9ce3ffcb0d3440c15">realloc</a>;</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="structUcxAllocator.html#aecce1840378ed53f1002190f4f87026f"> 109</a></span>  <a class="code" href="allocator_8h.html#aaf2387ddaddd8ab4b267e6b00e5d6f7e">ucx_allocator_free</a> <a class="code" href="structUcxAllocator.html#aecce1840378ed53f1002190f4f87026f">free</a>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> } <a class="code" href="structUcxAllocator.html">UcxAllocator</a>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <a class="code" href="structUcxAllocator.html">UcxAllocator</a> *<a class="code" href="allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf">ucx_default_allocator</a>();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="keywordtype">void</span> *<a class="code" href="allocator_8h.html#a96403ebf3d2312d95f2fe7627a1cdbc0">ucx_default_malloc</a>(<span class="keywordtype">void</span> *ignore, <span class="keywordtype">size_t</span> n);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keywordtype">void</span> *<a class="code" href="allocator_8h.html#a3a0bfdd13d887012309c459b339f338f">ucx_default_calloc</a>(<span class="keywordtype">void</span> *ignore, <span class="keywordtype">size_t</span> n, <span class="keywordtype">size_t</span> size);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordtype">void</span> *<a class="code" href="allocator_8h.html#a47cfc8af626a86fcb93a2b14b90498ed">ucx_default_realloc</a>(<span class="keywordtype">void</span> *ignore, <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> n);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordtype">void</span> <a class="code" href="allocator_8h.html#a646d83aaaadfe33ae414c0fad8bfc52a">ucx_default_free</a>(<span class="keywordtype">void</span> *ignore, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div><div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="allocator_8h.html#ae1bc218fea8a35f4a3706f0beefcfb19"> 165</a></span> <span class="preprocessor">#define almalloc(allocator, n) ((allocator)->malloc((allocator)->pool, n))</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="allocator_8h.html#a8d71470816f88f78cb9a9686c57e1b10"> 174</a></span> <span class="preprocessor">#define alcalloc(allocator, n, size) \</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="preprocessor"> ((allocator)->calloc((allocator)->pool, n, size))</span></div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="allocator_8h.html#a029ee5c9bcbb3f873571553f788c5820"> 184</a></span> <span class="preprocessor">#define alrealloc(allocator, ptr, n) \</span></div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="preprocessor"> ((allocator)->realloc((allocator)->pool, ptr, n))</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="allocator_8h.html#acd775785b54e97dc2b33a432c12c8fb2"> 192</a></span> <span class="preprocessor">#define alfree(allocator, ptr) ((allocator)->free((allocator)->pool, ptr))</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="allocator_8h.html#a1283a8f875f90a7af3aba5e031fc2e3f"> 197</a></span> <span class="preprocessor">#define UCX_ALLOCATOR_DEFAULT {NULL, \</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="preprocessor"> ucx_default_malloc, ucx_default_calloc, ucx_default_realloc, \</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor"> ucx_default_free }</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_ALLOCATOR_H */</span><span class="preprocessor"></span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div><div class="ttc" id="ucx_8h_html"><div class="ttname"><a href="ucx_8h.html">ucx.h</a></div><div class="ttdoc">Main UCX Header providing most common definitions. </div></div> 11.75 +<div class="ttc" id="allocator_8h_html_a96403ebf3d2312d95f2fe7627a1cdbc0"><div class="ttname"><a href="allocator_8h.html#a96403ebf3d2312d95f2fe7627a1cdbc0">ucx_default_malloc</a></div><div class="ttdeci">void * ucx_default_malloc(void *ignore, size_t n)</div><div class="ttdoc">A wrapper for the standard libc malloc() function. </div><div class="ttdef"><b>Definition:</b> allocator.c:46</div></div> 11.76 +<div class="ttc" id="structUcxAllocator_html"><div class="ttname"><a href="structUcxAllocator.html">UcxAllocator</a></div><div class="ttdoc">UCX allocator data structure containing memory management functions. </div><div class="ttdef"><b>Definition:</b> allocator.h:88</div></div> 11.77 +<div class="ttc" id="structUcxAllocator_html_a013376172be39ed54f77c4be6898845a"><div class="ttname"><a href="structUcxAllocator.html#a013376172be39ed54f77c4be6898845a">UcxAllocator::malloc</a></div><div class="ttdeci">ucx_allocator_malloc malloc</div><div class="ttdoc">The malloc() function for this allocator. </div><div class="ttdef"><b>Definition:</b> allocator.h:97</div></div> 11.78 +<div class="ttc" id="allocator_8h_html_a2c0aba4221c1ac6801f03ed799f15b12"><div class="ttname"><a href="allocator_8h.html#a2c0aba4221c1ac6801f03ed799f15b12">ucx_allocator_calloc</a></div><div class="ttdeci">void *(* ucx_allocator_calloc)(void *pool, size_t n, size_t size)</div><div class="ttdoc">A function pointer to the allocators calloc() function. </div><div class="ttdef"><b>Definition:</b> allocator.h:71</div></div> 11.79 +<div class="ttc" id="structUcxAllocator_html_aecce1840378ed53f1002190f4f87026f"><div class="ttname"><a href="structUcxAllocator.html#aecce1840378ed53f1002190f4f87026f">UcxAllocator::free</a></div><div class="ttdeci">ucx_allocator_free free</div><div class="ttdoc">The free() function for this allocator. </div><div class="ttdef"><b>Definition:</b> allocator.h:109</div></div> 11.80 +<div class="ttc" id="allocator_8h_html_a29f0f6a23a70db3b60635cd6dc384473"><div class="ttname"><a href="allocator_8h.html#a29f0f6a23a70db3b60635cd6dc384473">ucx_allocator_malloc</a></div><div class="ttdeci">void *(* ucx_allocator_malloc)(void *pool, size_t n)</div><div class="ttdoc">A function pointer to the allocators malloc() function. </div><div class="ttdef"><b>Definition:</b> allocator.h:65</div></div> 11.81 +<div class="ttc" id="allocator_8h_html_a98d2f1b341118b7a0e341fda5d8b2ebf"><div class="ttname"><a href="allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf">ucx_default_allocator</a></div><div class="ttdeci">UcxAllocator * ucx_default_allocator()</div><div class="ttdoc">Returns a pointer to the default allocator. </div><div class="ttdef"><b>Definition:</b> allocator.c:41</div></div> 11.82 +<div class="ttc" id="allocator_8h_html_a3a0bfdd13d887012309c459b339f338f"><div class="ttname"><a href="allocator_8h.html#a3a0bfdd13d887012309c459b339f338f">ucx_default_calloc</a></div><div class="ttdeci">void * ucx_default_calloc(void *ignore, size_t n, size_t size)</div><div class="ttdoc">A wrapper for the standard libc calloc() function. </div><div class="ttdef"><b>Definition:</b> allocator.c:50</div></div> 11.83 +<div class="ttc" id="allocator_8h_html_a6d7cf038a806e327c5da37321d04e426"><div class="ttname"><a href="allocator_8h.html#a6d7cf038a806e327c5da37321d04e426">ucx_allocator_realloc</a></div><div class="ttdeci">void *(* ucx_allocator_realloc)(void *pool, void *data, size_t n)</div><div class="ttdoc">A function pointer to the allocators realloc() function. </div><div class="ttdef"><b>Definition:</b> allocator.h:77</div></div> 11.84 +<div class="ttc" id="allocator_8h_html_a47cfc8af626a86fcb93a2b14b90498ed"><div class="ttname"><a href="allocator_8h.html#a47cfc8af626a86fcb93a2b14b90498ed">ucx_default_realloc</a></div><div class="ttdeci">void * ucx_default_realloc(void *ignore, void *data, size_t n)</div><div class="ttdoc">A wrapper for the standard libc realloc() function. </div><div class="ttdef"><b>Definition:</b> allocator.c:54</div></div> 11.85 +<div class="ttc" id="allocator_8h_html_aaf2387ddaddd8ab4b267e6b00e5d6f7e"><div class="ttname"><a href="allocator_8h.html#aaf2387ddaddd8ab4b267e6b00e5d6f7e">ucx_allocator_free</a></div><div class="ttdeci">void(* ucx_allocator_free)(void *pool, void *data)</div><div class="ttdoc">A function pointer to the allocators free() function. </div><div class="ttdef"><b>Definition:</b> allocator.h:83</div></div> 11.86 +<div class="ttc" id="structUcxAllocator_html_ab94ec1cba45cc4e7d81e1588a11cbb62"><div class="ttname"><a href="structUcxAllocator.html#ab94ec1cba45cc4e7d81e1588a11cbb62">UcxAllocator::calloc</a></div><div class="ttdeci">ucx_allocator_calloc calloc</div><div class="ttdoc">The calloc() function for this allocator. </div><div class="ttdef"><b>Definition:</b> allocator.h:101</div></div> 11.87 +<div class="ttc" id="allocator_8h_html_a646d83aaaadfe33ae414c0fad8bfc52a"><div class="ttname"><a href="allocator_8h.html#a646d83aaaadfe33ae414c0fad8bfc52a">ucx_default_free</a></div><div class="ttdeci">void ucx_default_free(void *ignore, void *data)</div><div class="ttdoc">A wrapper for the standard libc free() function. </div><div class="ttdef"><b>Definition:</b> allocator.c:58</div></div> 11.88 +<div class="ttc" id="structUcxAllocator_html_a3550e3847f31d9e9ce3ffcb0d3440c15"><div class="ttname"><a href="structUcxAllocator.html#a3550e3847f31d9e9ce3ffcb0d3440c15">UcxAllocator::realloc</a></div><div class="ttdeci">ucx_allocator_realloc realloc</div><div class="ttdoc">The realloc() function for this allocator. </div><div class="ttdef"><b>Definition:</b> allocator.h:105</div></div> 11.89 +<div class="ttc" id="structUcxAllocator_html_a1b78012998d1c28be86dc595f8f0aac9"><div class="ttname"><a href="structUcxAllocator.html#a1b78012998d1c28be86dc595f8f0aac9">UcxAllocator::pool</a></div><div class="ttdeci">void * pool</div><div class="ttdoc">Pointer to an area of memory or a complex memory pool. </div><div class="ttdef"><b>Definition:</b> allocator.h:93</div></div> 11.90 +</div><!-- fragment --></div><!-- contents --> 11.91 +<!-- start footer part --> 11.92 +<hr class="footer"/><address class="footer"><small> 11.93 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 11.94 +<img class="footer" src="doxygen.png" alt="doxygen"/> 11.95 +</a> 1.8.13 11.96 +</small></address> 11.97 +</body> 11.98 +</html>
12.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 12.2 +++ b/docs/api-2.1/annotated.html Sat Feb 06 19:11:44 2021 +0100 12.3 @@ -0,0 +1,101 @@ 12.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 12.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 12.6 +<head> 12.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 12.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 12.9 +<meta name="generator" content="Doxygen 1.8.13"/> 12.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 12.11 +<title>ucx: Data Structures</title> 12.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 12.13 +<script type="text/javascript" src="jquery.js"></script> 12.14 +<script type="text/javascript" src="dynsections.js"></script> 12.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 12.16 +<script type="text/javascript" src="search/searchdata.js"></script> 12.17 +<script type="text/javascript" src="search/search.js"></script> 12.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 12.19 +</head> 12.20 +<body> 12.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 12.22 +<div id="titlearea"> 12.23 +<table cellspacing="0" cellpadding="0"> 12.24 + <tbody> 12.25 + <tr style="height: 56px;"> 12.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 12.27 + <td id="projectalign" style="padding-left: 0.5em;"> 12.28 + <div id="projectname">ucx 12.29 + </div> 12.30 + <div id="projectbrief">UAP Common Extensions</div> 12.31 + </td> 12.32 + </tr> 12.33 + </tbody> 12.34 +</table> 12.35 +</div> 12.36 +<!-- end header part --> 12.37 +<!-- Generated by Doxygen 1.8.13 --> 12.38 +<script type="text/javascript"> 12.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 12.40 +</script> 12.41 +<script type="text/javascript" src="menudata.js"></script> 12.42 +<script type="text/javascript" src="menu.js"></script> 12.43 +<script type="text/javascript"> 12.44 +$(function() { 12.45 + initMenu('',true,false,'search.php','Search'); 12.46 + $(document).ready(function() { init_search(); }); 12.47 +}); 12.48 +</script> 12.49 +<div id="main-nav"></div> 12.50 +</div><!-- top --> 12.51 +<!-- window showing the filter options --> 12.52 +<div id="MSearchSelectWindow" 12.53 + onmouseover="return searchBox.OnSearchSelectShow()" 12.54 + onmouseout="return searchBox.OnSearchSelectHide()" 12.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 12.56 +</div> 12.57 + 12.58 +<!-- iframe showing the search results (closed by default) --> 12.59 +<div id="MSearchResultsWindow"> 12.60 +<iframe src="javascript:void(0)" frameborder="0" 12.61 + name="MSearchResults" id="MSearchResults"> 12.62 +</iframe> 12.63 +</div> 12.64 + 12.65 +<div class="header"> 12.66 + <div class="headertitle"> 12.67 +<div class="title">Data Structures</div> </div> 12.68 +</div><!--header--> 12.69 +<div class="contents"> 12.70 +<div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory"> 12.71 +<table class="directory"> 12.72 +<tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structscstr__t.html" target="_self">scstr_t</a></td><td class="desc">The UCX string structure for immutable (constant) strings </td></tr> 12.73 +<tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structsstr__t.html" target="_self">sstr_t</a></td><td class="desc">The UCX string structure </td></tr> 12.74 +<tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structucx__memchunk.html" target="_self">ucx_memchunk</a></td><td class="desc">Capsule for destructible memory chunks </td></tr> 12.75 +<tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structucx__regdestr.html" target="_self">ucx_regdestr</a></td><td class="desc">Capsule for data and its destructor </td></tr> 12.76 +<tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structucx__stack__metadata.html" target="_self">ucx_stack_metadata</a></td><td class="desc">Metadata for each UCX stack element </td></tr> 12.77 +<tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxAllocator.html" target="_self">UcxAllocator</a></td><td class="desc">UCX allocator data structure containing memory management functions </td></tr> 12.78 +<tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxArray.html" target="_self">UcxArray</a></td><td class="desc">UCX array type </td></tr> 12.79 +<tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxAVLNode.html" target="_self">UcxAVLNode</a></td><td class="desc">UCX AVL Node </td></tr> 12.80 +<tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxAVLTree.html" target="_self">UcxAVLTree</a></td><td class="desc">UCX AVL Tree </td></tr> 12.81 +<tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxBuffer.html" target="_self">UcxBuffer</a></td><td class="desc">UCX Buffer </td></tr> 12.82 +<tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxKey.html" target="_self">UcxKey</a></td><td class="desc">Structure to publicly denote a key of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a> </td></tr> 12.83 +<tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxList.html" target="_self">UcxList</a></td><td class="desc">UCX list structure </td></tr> 12.84 +<tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxLogger.html" target="_self">UcxLogger</a></td><td class="desc">The UCX Logger object </td></tr> 12.85 +<tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxMap.html" target="_self">UcxMap</a></td><td class="desc">Structure for the UCX map </td></tr> 12.86 +<tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxMapElement.html" target="_self">UcxMapElement</a></td><td class="desc">Structure for an element of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a> </td></tr> 12.87 +<tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxMapIterator.html" target="_self">UcxMapIterator</a></td><td class="desc">Structure for an iterator over a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a> </td></tr> 12.88 +<tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxMapKey.html" target="_self">UcxMapKey</a></td><td class="desc">Internal structure for a key of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a> </td></tr> 12.89 +<tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxMempool.html" target="_self">UcxMempool</a></td><td class="desc">UCX mempool structure </td></tr> 12.90 +<tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxProperties.html" target="_self">UcxProperties</a></td><td class="desc"><a class="el" href="structUcxProperties.html" title="UcxProperties object for parsing properties data. ">UcxProperties</a> object for parsing properties data </td></tr> 12.91 +<tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxStack.html" target="_self">UcxStack</a></td><td class="desc">UCX stack structure </td></tr> 12.92 +<tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxTestList.html" target="_self">UcxTestList</a></td><td class="desc">Structure for the internal list of test cases </td></tr> 12.93 +<tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span class="icona"><span class="icon">C</span></span><a class="el" href="structUcxTestSuite.html" target="_self">UcxTestSuite</a></td><td class="desc">A test suite containing multiple test cases </td></tr> 12.94 +</table> 12.95 +</div><!-- directory --> 12.96 +</div><!-- contents --> 12.97 +<!-- start footer part --> 12.98 +<hr class="footer"/><address class="footer"><small> 12.99 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 12.100 +<img class="footer" src="doxygen.png" alt="doxygen"/> 12.101 +</a> 1.8.13 12.102 +</small></address> 12.103 +</body> 12.104 +</html>
13.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 13.2 +++ b/docs/api-2.1/array_8h.html Sat Feb 06 19:11:44 2021 +0100 13.3 @@ -0,0 +1,1376 @@ 13.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 13.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 13.6 +<head> 13.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 13.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 13.9 +<meta name="generator" content="Doxygen 1.8.13"/> 13.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 13.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/array.h File Reference</title> 13.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 13.13 +<script type="text/javascript" src="jquery.js"></script> 13.14 +<script type="text/javascript" src="dynsections.js"></script> 13.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 13.16 +<script type="text/javascript" src="search/searchdata.js"></script> 13.17 +<script type="text/javascript" src="search/search.js"></script> 13.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 13.19 +</head> 13.20 +<body> 13.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 13.22 +<div id="titlearea"> 13.23 +<table cellspacing="0" cellpadding="0"> 13.24 + <tbody> 13.25 + <tr style="height: 56px;"> 13.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 13.27 + <td id="projectalign" style="padding-left: 0.5em;"> 13.28 + <div id="projectname">ucx 13.29 + </div> 13.30 + <div id="projectbrief">UAP Common Extensions</div> 13.31 + </td> 13.32 + </tr> 13.33 + </tbody> 13.34 +</table> 13.35 +</div> 13.36 +<!-- end header part --> 13.37 +<!-- Generated by Doxygen 1.8.13 --> 13.38 +<script type="text/javascript"> 13.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 13.40 +</script> 13.41 +<script type="text/javascript" src="menudata.js"></script> 13.42 +<script type="text/javascript" src="menu.js"></script> 13.43 +<script type="text/javascript"> 13.44 +$(function() { 13.45 + initMenu('',true,false,'search.php','Search'); 13.46 + $(document).ready(function() { init_search(); }); 13.47 +}); 13.48 +</script> 13.49 +<div id="main-nav"></div> 13.50 +<!-- window showing the filter options --> 13.51 +<div id="MSearchSelectWindow" 13.52 + onmouseover="return searchBox.OnSearchSelectShow()" 13.53 + onmouseout="return searchBox.OnSearchSelectHide()" 13.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 13.55 +</div> 13.56 + 13.57 +<!-- iframe showing the search results (closed by default) --> 13.58 +<div id="MSearchResultsWindow"> 13.59 +<iframe src="javascript:void(0)" frameborder="0" 13.60 + name="MSearchResults" id="MSearchResults"> 13.61 +</iframe> 13.62 +</div> 13.63 + 13.64 +<div id="nav-path" class="navpath"> 13.65 + <ul> 13.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 13.67 +</div> 13.68 +</div><!-- top --> 13.69 +<div class="header"> 13.70 + <div class="summary"> 13.71 +<a href="#nested-classes">Data Structures</a> | 13.72 +<a href="#define-members">Macros</a> | 13.73 +<a href="#func-members">Functions</a> </div> 13.74 + <div class="headertitle"> 13.75 +<div class="title">array.h File Reference</div> </div> 13.76 +</div><!--header--> 13.77 +<div class="contents"> 13.78 + 13.79 +<p>Dynamically allocated array implementation. 13.80 +<a href="#details">More...</a></p> 13.81 +<div class="textblock"><code>#include "<a class="el" href="ucx_8h_source.html">ucx.h</a>"</code><br /> 13.82 +<code>#include "<a class="el" href="allocator_8h_source.html">allocator.h</a>"</code><br /> 13.83 +</div> 13.84 +<p><a href="array_8h_source.html">Go to the source code of this file.</a></p> 13.85 +<table class="memberdecls"> 13.86 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> 13.87 +Data Structures</h2></td></tr> 13.88 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxArray.html">UcxArray</a></td></tr> 13.89 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">UCX array type. <a href="structUcxArray.html#details">More...</a><br /></td></tr> 13.90 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 13.91 +</table><table class="memberdecls"> 13.92 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> 13.93 +Macros</h2></td></tr> 13.94 +<tr class="memitem:a1d959c29af3125bdd37cde3a554e729c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#a1d959c29af3125bdd37cde3a554e729c">ucx_array_util_set</a>(array, capacity, elmsize, idx, data)</td></tr> 13.95 +<tr class="memdesc:a1d959c29af3125bdd37cde3a554e729c"><td class="mdescLeft"> </td><td class="mdescRight">Sets an element in an arbitrary user defined array. <a href="#a1d959c29af3125bdd37cde3a554e729c">More...</a><br /></td></tr> 13.96 +<tr class="separator:a1d959c29af3125bdd37cde3a554e729c"><td class="memSeparator" colspan="2"> </td></tr> 13.97 +<tr class="memitem:a59a5b342965e790945f9c7a3f86b99f9"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#a59a5b342965e790945f9c7a3f86b99f9">ucx_array_util_setptr</a>(array, capacity, idx, ptr)</td></tr> 13.98 +<tr class="memdesc:a59a5b342965e790945f9c7a3f86b99f9"><td class="mdescLeft"> </td><td class="mdescRight">Stores a pointer in an arbitrary user defined array. <a href="#a59a5b342965e790945f9c7a3f86b99f9">More...</a><br /></td></tr> 13.99 +<tr class="separator:a59a5b342965e790945f9c7a3f86b99f9"><td class="memSeparator" colspan="2"> </td></tr> 13.100 +</table><table class="memberdecls"> 13.101 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 13.102 +Functions</h2></td></tr> 13.103 +<tr class="memitem:ad0a8d76980cf1c1910e64a245803fb9a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#ad0a8d76980cf1c1910e64a245803fb9a">ucx_array_util_set_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *alloc, void **array, size_t *capacity, size_t elmsize, size_t idx, void *data)</td></tr> 13.104 +<tr class="memdesc:ad0a8d76980cf1c1910e64a245803fb9a"><td class="mdescLeft"> </td><td class="mdescRight">Sets an element in an arbitrary user defined array. <a href="#ad0a8d76980cf1c1910e64a245803fb9a">More...</a><br /></td></tr> 13.105 +<tr class="separator:ad0a8d76980cf1c1910e64a245803fb9a"><td class="memSeparator" colspan="2"> </td></tr> 13.106 +<tr class="memitem:ad708b333c0c1b02c998309a58ea65e31"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#ad708b333c0c1b02c998309a58ea65e31">ucx_array_util_setptr_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *alloc, void **array, size_t *capacity, size_t idx, void *ptr)</td></tr> 13.107 +<tr class="memdesc:ad708b333c0c1b02c998309a58ea65e31"><td class="mdescLeft"> </td><td class="mdescRight">Stores a pointer in an arbitrary user defined array. <a href="#ad708b333c0c1b02c998309a58ea65e31">More...</a><br /></td></tr> 13.108 +<tr class="separator:ad708b333c0c1b02c998309a58ea65e31"><td class="memSeparator" colspan="2"> </td></tr> 13.109 +<tr class="memitem:a994a2fbf1c33a3833e2a70cd9a4352b7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxArray.html">UcxArray</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#a994a2fbf1c33a3833e2a70cd9a4352b7">ucx_array_new</a> (size_t capacity, size_t elemsize)</td></tr> 13.110 +<tr class="memdesc:a994a2fbf1c33a3833e2a70cd9a4352b7"><td class="mdescLeft"> </td><td class="mdescRight">Creates a new UCX array with the given capacity and element size. <a href="#a994a2fbf1c33a3833e2a70cd9a4352b7">More...</a><br /></td></tr> 13.111 +<tr class="separator:a994a2fbf1c33a3833e2a70cd9a4352b7"><td class="memSeparator" colspan="2"> </td></tr> 13.112 +<tr class="memitem:a177170258c215eb2e4f5a32e59f0cb1b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxArray.html">UcxArray</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#a177170258c215eb2e4f5a32e59f0cb1b">ucx_array_new_a</a> (size_t capacity, size_t elemsize, <a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator)</td></tr> 13.113 +<tr class="memdesc:a177170258c215eb2e4f5a32e59f0cb1b"><td class="mdescLeft"> </td><td class="mdescRight">Creates a new UCX array using the specified allocator. <a href="#a177170258c215eb2e4f5a32e59f0cb1b">More...</a><br /></td></tr> 13.114 +<tr class="separator:a177170258c215eb2e4f5a32e59f0cb1b"><td class="memSeparator" colspan="2"> </td></tr> 13.115 +<tr class="memitem:ad921e85c28ffae32230777a53c5037e5"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#ad921e85c28ffae32230777a53c5037e5">ucx_array_init</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *array, size_t capacity, size_t elemsize)</td></tr> 13.116 +<tr class="memdesc:ad921e85c28ffae32230777a53c5037e5"><td class="mdescLeft"> </td><td class="mdescRight">Initializes a UCX array structure with the given capacity and element size. <a href="#ad921e85c28ffae32230777a53c5037e5">More...</a><br /></td></tr> 13.117 +<tr class="separator:ad921e85c28ffae32230777a53c5037e5"><td class="memSeparator" colspan="2"> </td></tr> 13.118 +<tr class="memitem:a2451e61ebb15a7ba1c1319267ba75b8c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#a2451e61ebb15a7ba1c1319267ba75b8c">ucx_array_init_a</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *array, size_t capacity, size_t elemsize, <a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator)</td></tr> 13.119 +<tr class="memdesc:a2451e61ebb15a7ba1c1319267ba75b8c"><td class="mdescLeft"> </td><td class="mdescRight">Initializes a UCX array structure using the specified allocator. <a href="#a2451e61ebb15a7ba1c1319267ba75b8c">More...</a><br /></td></tr> 13.120 +<tr class="separator:a2451e61ebb15a7ba1c1319267ba75b8c"><td class="memSeparator" colspan="2"> </td></tr> 13.121 +<tr class="memitem:a4a8c273370e4a3a3e2624e364f5ab410"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#a4a8c273370e4a3a3e2624e364f5ab410">ucx_array_clone</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *dest, <a class="el" href="structUcxArray.html">UcxArray</a> const *src)</td></tr> 13.122 +<tr class="memdesc:a4a8c273370e4a3a3e2624e364f5ab410"><td class="mdescLeft"> </td><td class="mdescRight">Creates an shallow copy of an array. <a href="#a4a8c273370e4a3a3e2624e364f5ab410">More...</a><br /></td></tr> 13.123 +<tr class="separator:a4a8c273370e4a3a3e2624e364f5ab410"><td class="memSeparator" colspan="2"> </td></tr> 13.124 +<tr class="memitem:a43292b448adb1741677aa8c578bcc201"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#a43292b448adb1741677aa8c578bcc201">ucx_array_equals</a> (<a class="el" href="structUcxArray.html">UcxArray</a> const *array1, <a class="el" href="structUcxArray.html">UcxArray</a> const *array2, <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, void *data)</td></tr> 13.125 +<tr class="memdesc:a43292b448adb1741677aa8c578bcc201"><td class="mdescLeft"> </td><td class="mdescRight">Compares two UCX arrays element-wise by using a compare function. <a href="#a43292b448adb1741677aa8c578bcc201">More...</a><br /></td></tr> 13.126 +<tr class="separator:a43292b448adb1741677aa8c578bcc201"><td class="memSeparator" colspan="2"> </td></tr> 13.127 +<tr class="memitem:a8e83681d8d5d8cddbf10f63ce5be4c10"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#a8e83681d8d5d8cddbf10f63ce5be4c10">ucx_array_destroy</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *array)</td></tr> 13.128 +<tr class="memdesc:a8e83681d8d5d8cddbf10f63ce5be4c10"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the array. <a href="#a8e83681d8d5d8cddbf10f63ce5be4c10">More...</a><br /></td></tr> 13.129 +<tr class="separator:a8e83681d8d5d8cddbf10f63ce5be4c10"><td class="memSeparator" colspan="2"> </td></tr> 13.130 +<tr class="memitem:ac01ee914468a16f470bf3071fffbe438"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#ac01ee914468a16f470bf3071fffbe438">ucx_array_free</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *array)</td></tr> 13.131 +<tr class="memdesc:ac01ee914468a16f470bf3071fffbe438"><td class="mdescLeft"> </td><td class="mdescRight">Destroys and frees the array. <a href="#ac01ee914468a16f470bf3071fffbe438">More...</a><br /></td></tr> 13.132 +<tr class="separator:ac01ee914468a16f470bf3071fffbe438"><td class="memSeparator" colspan="2"> </td></tr> 13.133 +<tr class="memitem:aea01731ad94ea73c0c8fb1d1b7a35fcf"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#aea01731ad94ea73c0c8fb1d1b7a35fcf">ucx_array_append_from</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *array, void *data, size_t count)</td></tr> 13.134 +<tr class="memdesc:aea01731ad94ea73c0c8fb1d1b7a35fcf"><td class="mdescLeft"> </td><td class="mdescRight">Inserts elements at the end of the array. <a href="#aea01731ad94ea73c0c8fb1d1b7a35fcf">More...</a><br /></td></tr> 13.135 +<tr class="separator:aea01731ad94ea73c0c8fb1d1b7a35fcf"><td class="memSeparator" colspan="2"> </td></tr> 13.136 +<tr class="memitem:a95b52acc2193b5c33cf0eaa4f2082477"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#a95b52acc2193b5c33cf0eaa4f2082477">ucx_array_prepend_from</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *array, void *data, size_t count)</td></tr> 13.137 +<tr class="memdesc:a95b52acc2193b5c33cf0eaa4f2082477"><td class="mdescLeft"> </td><td class="mdescRight">Inserts elements at the beginning of the array. <a href="#a95b52acc2193b5c33cf0eaa4f2082477">More...</a><br /></td></tr> 13.138 +<tr class="separator:a95b52acc2193b5c33cf0eaa4f2082477"><td class="memSeparator" colspan="2"> </td></tr> 13.139 +<tr class="memitem:a1bb545d065358d265d80d815ba382a28"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#a1bb545d065358d265d80d815ba382a28">ucx_array_set_from</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *array, size_t index, void *data, size_t count)</td></tr> 13.140 +<tr class="memdesc:a1bb545d065358d265d80d815ba382a28"><td class="mdescLeft"> </td><td class="mdescRight">Sets elements starting at the specified index. <a href="#a1bb545d065358d265d80d815ba382a28">More...</a><br /></td></tr> 13.141 +<tr class="separator:a1bb545d065358d265d80d815ba382a28"><td class="memSeparator" colspan="2"> </td></tr> 13.142 +<tr class="memitem:aa5a0bf3d3f0df6406beb0e569021cc28"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#aa5a0bf3d3f0df6406beb0e569021cc28">ucx_array_concat</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *array1, const <a class="el" href="structUcxArray.html">UcxArray</a> *array2)</td></tr> 13.143 +<tr class="memdesc:aa5a0bf3d3f0df6406beb0e569021cc28"><td class="mdescLeft"> </td><td class="mdescRight">Concatenates two arrays. <a href="#aa5a0bf3d3f0df6406beb0e569021cc28">More...</a><br /></td></tr> 13.144 +<tr class="separator:aa5a0bf3d3f0df6406beb0e569021cc28"><td class="memSeparator" colspan="2"> </td></tr> 13.145 +<tr class="memitem:aa698085fd1a8b70d6b709999c51b49e8"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#aa698085fd1a8b70d6b709999c51b49e8">ucx_array_at</a> (<a class="el" href="structUcxArray.html">UcxArray</a> const *array, size_t index)</td></tr> 13.146 +<tr class="memdesc:aa698085fd1a8b70d6b709999c51b49e8"><td class="mdescLeft"> </td><td class="mdescRight">Returns a pointer to the array element at the specified index. <a href="#aa698085fd1a8b70d6b709999c51b49e8">More...</a><br /></td></tr> 13.147 +<tr class="separator:aa698085fd1a8b70d6b709999c51b49e8"><td class="memSeparator" colspan="2"> </td></tr> 13.148 +<tr class="memitem:ae7bdbed94afee9b20b38b95e3ab470f0"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#ae7bdbed94afee9b20b38b95e3ab470f0">ucx_array_find</a> (<a class="el" href="structUcxArray.html">UcxArray</a> const *array, void *elem, <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, void *data)</td></tr> 13.149 +<tr class="memdesc:ae7bdbed94afee9b20b38b95e3ab470f0"><td class="mdescLeft"> </td><td class="mdescRight">Returns the index of an element containing the specified data. <a href="#ae7bdbed94afee9b20b38b95e3ab470f0">More...</a><br /></td></tr> 13.150 +<tr class="separator:ae7bdbed94afee9b20b38b95e3ab470f0"><td class="memSeparator" colspan="2"> </td></tr> 13.151 +<tr class="memitem:a5241058cd2329147bc5b1593ae7e51dc"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#a5241058cd2329147bc5b1593ae7e51dc">ucx_array_contains</a> (<a class="el" href="structUcxArray.html">UcxArray</a> const *array, void *elem, <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, void *data)</td></tr> 13.152 +<tr class="memdesc:a5241058cd2329147bc5b1593ae7e51dc"><td class="mdescLeft"> </td><td class="mdescRight">Checks, if an array contains a specific element. <a href="#a5241058cd2329147bc5b1593ae7e51dc">More...</a><br /></td></tr> 13.153 +<tr class="separator:a5241058cd2329147bc5b1593ae7e51dc"><td class="memSeparator" colspan="2"> </td></tr> 13.154 +<tr class="memitem:add773514569b872a6624381b4b6af52c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#add773514569b872a6624381b4b6af52c">ucx_array_sort</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *array, <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, void *data)</td></tr> 13.155 +<tr class="memdesc:add773514569b872a6624381b4b6af52c"><td class="mdescLeft"> </td><td class="mdescRight">Sorts a <a class="el" href="structUcxArray.html" title="UCX array type. ">UcxArray</a> with the best available sort algorithm. <a href="#add773514569b872a6624381b4b6af52c">More...</a><br /></td></tr> 13.156 +<tr class="separator:add773514569b872a6624381b4b6af52c"><td class="memSeparator" colspan="2"> </td></tr> 13.157 +<tr class="memitem:aa45eac6b697f83adac81c0860cf306b8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#aa45eac6b697f83adac81c0860cf306b8">ucx_array_remove</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *array, size_t index)</td></tr> 13.158 +<tr class="memdesc:aa45eac6b697f83adac81c0860cf306b8"><td class="mdescLeft"> </td><td class="mdescRight">Removes an element from the array. <a href="#aa45eac6b697f83adac81c0860cf306b8">More...</a><br /></td></tr> 13.159 +<tr class="separator:aa45eac6b697f83adac81c0860cf306b8"><td class="memSeparator" colspan="2"> </td></tr> 13.160 +<tr class="memitem:a548d81b07612bae3ba8c4c4b49104b8e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#a548d81b07612bae3ba8c4c4b49104b8e">ucx_array_remove_fast</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *array, size_t index)</td></tr> 13.161 +<tr class="memdesc:a548d81b07612bae3ba8c4c4b49104b8e"><td class="mdescLeft"> </td><td class="mdescRight">Removes an element from the array. <a href="#a548d81b07612bae3ba8c4c4b49104b8e">More...</a><br /></td></tr> 13.162 +<tr class="separator:a548d81b07612bae3ba8c4c4b49104b8e"><td class="memSeparator" colspan="2"> </td></tr> 13.163 +<tr class="memitem:a2daf50e80aee9bccebee876a7efd2dfc"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#a2daf50e80aee9bccebee876a7efd2dfc">ucx_array_shrink</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *array)</td></tr> 13.164 +<tr class="memdesc:a2daf50e80aee9bccebee876a7efd2dfc"><td class="mdescLeft"> </td><td class="mdescRight">Shrinks the memory to exactly fit the contents. <a href="#a2daf50e80aee9bccebee876a7efd2dfc">More...</a><br /></td></tr> 13.165 +<tr class="separator:a2daf50e80aee9bccebee876a7efd2dfc"><td class="memSeparator" colspan="2"> </td></tr> 13.166 +<tr class="memitem:a27762e7c06a6c781015e3c8ceeee0ce3"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#a27762e7c06a6c781015e3c8ceeee0ce3">ucx_array_resize</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *array, size_t capacity)</td></tr> 13.167 +<tr class="memdesc:a27762e7c06a6c781015e3c8ceeee0ce3"><td class="mdescLeft"> </td><td class="mdescRight">Sets the capacity of the array. <a href="#a27762e7c06a6c781015e3c8ceeee0ce3">More...</a><br /></td></tr> 13.168 +<tr class="separator:a27762e7c06a6c781015e3c8ceeee0ce3"><td class="memSeparator" colspan="2"> </td></tr> 13.169 +<tr class="memitem:a1c3bf8433c1de3c933f3854ab297fe1d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#a1c3bf8433c1de3c933f3854ab297fe1d">ucx_array_reserve</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *array, size_t capacity)</td></tr> 13.170 +<tr class="memdesc:a1c3bf8433c1de3c933f3854ab297fe1d"><td class="mdescLeft"> </td><td class="mdescRight">Resizes the array only, if the capacity is insufficient. <a href="#a1c3bf8433c1de3c933f3854ab297fe1d">More...</a><br /></td></tr> 13.171 +<tr class="separator:a1c3bf8433c1de3c933f3854ab297fe1d"><td class="memSeparator" colspan="2"> </td></tr> 13.172 +<tr class="memitem:ab0cbf243824aaebee48277315e03afce"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html#ab0cbf243824aaebee48277315e03afce">ucx_array_grow</a> (<a class="el" href="structUcxArray.html">UcxArray</a> *array, size_t count)</td></tr> 13.173 +<tr class="memdesc:ab0cbf243824aaebee48277315e03afce"><td class="mdescLeft"> </td><td class="mdescRight">Resizes the capacity, if the specified number of elements would not fit. <a href="#ab0cbf243824aaebee48277315e03afce">More...</a><br /></td></tr> 13.174 +<tr class="separator:ab0cbf243824aaebee48277315e03afce"><td class="memSeparator" colspan="2"> </td></tr> 13.175 +</table> 13.176 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 13.177 +<div class="textblock"><p>Dynamically allocated array implementation. </p> 13.178 +<dl class="section author"><dt>Author</dt><dd>Mike Becker </dd> 13.179 +<dd> 13.180 +Olaf Wintermann </dd></dl> 13.181 +</div><h2 class="groupheader">Macro Definition Documentation</h2> 13.182 +<a id="a1d959c29af3125bdd37cde3a554e729c"></a> 13.183 +<h2 class="memtitle"><span class="permalink"><a href="#a1d959c29af3125bdd37cde3a554e729c">◆ </a></span>ucx_array_util_set</h2> 13.184 + 13.185 +<div class="memitem"> 13.186 +<div class="memproto"> 13.187 + <table class="memname"> 13.188 + <tr> 13.189 + <td class="memname">#define ucx_array_util_set</td> 13.190 + <td>(</td> 13.191 + <td class="paramtype"> </td> 13.192 + <td class="paramname">array, </td> 13.193 + </tr> 13.194 + <tr> 13.195 + <td class="paramkey"></td> 13.196 + <td></td> 13.197 + <td class="paramtype"> </td> 13.198 + <td class="paramname">capacity, </td> 13.199 + </tr> 13.200 + <tr> 13.201 + <td class="paramkey"></td> 13.202 + <td></td> 13.203 + <td class="paramtype"> </td> 13.204 + <td class="paramname">elmsize, </td> 13.205 + </tr> 13.206 + <tr> 13.207 + <td class="paramkey"></td> 13.208 + <td></td> 13.209 + <td class="paramtype"> </td> 13.210 + <td class="paramname">idx, </td> 13.211 + </tr> 13.212 + <tr> 13.213 + <td class="paramkey"></td> 13.214 + <td></td> 13.215 + <td class="paramtype"> </td> 13.216 + <td class="paramname">data </td> 13.217 + </tr> 13.218 + <tr> 13.219 + <td></td> 13.220 + <td>)</td> 13.221 + <td></td><td></td> 13.222 + </tr> 13.223 + </table> 13.224 +</div><div class="memdoc"> 13.225 +<b>Value:</b><div class="fragment"><div class="line"><a class="code" href="array_8h.html#ad0a8d76980cf1c1910e64a245803fb9a">ucx_array_util_set_a</a>(<a class="code" href="allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf">ucx_default_allocator</a>(), (<span class="keywordtype">void</span>**)(array), capacity, \</div><div class="line"> elmsize, idx, data)</div><div class="ttc" id="array_8h_html_ad0a8d76980cf1c1910e64a245803fb9a"><div class="ttname"><a href="array_8h.html#ad0a8d76980cf1c1910e64a245803fb9a">ucx_array_util_set_a</a></div><div class="ttdeci">int ucx_array_util_set_a(UcxAllocator *alloc, void **array, size_t *capacity, size_t elmsize, size_t idx, void *data)</div><div class="ttdoc">Sets an element in an arbitrary user defined array. </div><div class="ttdef"><b>Definition:</b> array.c:72</div></div> 13.226 +<div class="ttc" id="allocator_8h_html_a98d2f1b341118b7a0e341fda5d8b2ebf"><div class="ttname"><a href="allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf">ucx_default_allocator</a></div><div class="ttdeci">UcxAllocator * ucx_default_allocator()</div><div class="ttdoc">Returns a pointer to the default allocator. </div><div class="ttdef"><b>Definition:</b> allocator.c:41</div></div> 13.227 +</div><!-- fragment --> 13.228 +<p>Sets an element in an arbitrary user defined array. </p> 13.229 +<p>The data is copied from the specified data location.</p> 13.230 +<p>If the capacity is insufficient, the array is automatically reallocated and the possibly new pointer is stored in the <code>array</code> argument.</p> 13.231 +<p>On reallocation the capacity of the array is doubled until it is sufficient. The new capacity is stored back to <code>capacity</code>.</p> 13.232 +<dl class="params"><dt>Parameters</dt><dd> 13.233 + <table class="params"> 13.234 + <tr><td class="paramname">array</td><td>a pointer to location of the array pointer </td></tr> 13.235 + <tr><td class="paramname">capacity</td><td>a pointer to the capacity </td></tr> 13.236 + <tr><td class="paramname">elmsize</td><td>the size of each element </td></tr> 13.237 + <tr><td class="paramname">idx</td><td>the index of the element to set </td></tr> 13.238 + <tr><td class="paramname">data</td><td>a pointer to the element data </td></tr> 13.239 + </table> 13.240 + </dd> 13.241 +</dl> 13.242 +<dl class="section return"><dt>Returns</dt><dd>zero on success or non-zero on error (errno will be set) </dd></dl> 13.243 + 13.244 +</div> 13.245 +</div> 13.246 +<a id="a59a5b342965e790945f9c7a3f86b99f9"></a> 13.247 +<h2 class="memtitle"><span class="permalink"><a href="#a59a5b342965e790945f9c7a3f86b99f9">◆ </a></span>ucx_array_util_setptr</h2> 13.248 + 13.249 +<div class="memitem"> 13.250 +<div class="memproto"> 13.251 + <table class="memname"> 13.252 + <tr> 13.253 + <td class="memname">#define ucx_array_util_setptr</td> 13.254 + <td>(</td> 13.255 + <td class="paramtype"> </td> 13.256 + <td class="paramname">array, </td> 13.257 + </tr> 13.258 + <tr> 13.259 + <td class="paramkey"></td> 13.260 + <td></td> 13.261 + <td class="paramtype"> </td> 13.262 + <td class="paramname">capacity, </td> 13.263 + </tr> 13.264 + <tr> 13.265 + <td class="paramkey"></td> 13.266 + <td></td> 13.267 + <td class="paramtype"> </td> 13.268 + <td class="paramname">idx, </td> 13.269 + </tr> 13.270 + <tr> 13.271 + <td class="paramkey"></td> 13.272 + <td></td> 13.273 + <td class="paramtype"> </td> 13.274 + <td class="paramname">ptr </td> 13.275 + </tr> 13.276 + <tr> 13.277 + <td></td> 13.278 + <td>)</td> 13.279 + <td></td><td></td> 13.280 + </tr> 13.281 + </table> 13.282 +</div><div class="memdoc"> 13.283 +<b>Value:</b><div class="fragment"><div class="line"><a class="code" href="array_8h.html#ad708b333c0c1b02c998309a58ea65e31">ucx_array_util_setptr_a</a>(<a class="code" href="allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf">ucx_default_allocator</a>(), (<span class="keywordtype">void</span>**)(array), \</div><div class="line"> capacity, idx, ptr)</div><div class="ttc" id="allocator_8h_html_a98d2f1b341118b7a0e341fda5d8b2ebf"><div class="ttname"><a href="allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf">ucx_default_allocator</a></div><div class="ttdeci">UcxAllocator * ucx_default_allocator()</div><div class="ttdoc">Returns a pointer to the default allocator. </div><div class="ttdef"><b>Definition:</b> allocator.c:41</div></div> 13.284 +<div class="ttc" id="array_8h_html_ad708b333c0c1b02c998309a58ea65e31"><div class="ttname"><a href="array_8h.html#ad708b333c0c1b02c998309a58ea65e31">ucx_array_util_setptr_a</a></div><div class="ttdeci">int ucx_array_util_setptr_a(UcxAllocator *alloc, void **array, size_t *capacity, size_t idx, void *ptr)</div><div class="ttdoc">Stores a pointer in an arbitrary user defined array. </div><div class="ttdef"><b>Definition:</b> array.c:112</div></div> 13.285 +</div><!-- fragment --> 13.286 +<p>Stores a pointer in an arbitrary user defined array. </p> 13.287 +<p>The element size of the array must be sizeof(void*).</p> 13.288 +<p>If the capacity is insufficient, the array is automatically reallocated and the possibly new pointer is stored in the <code>array</code> argument.</p> 13.289 +<p>On reallocation the capacity of the array is doubled until it is sufficient. The new capacity is stored back to <code>capacity</code>.</p> 13.290 +<dl class="params"><dt>Parameters</dt><dd> 13.291 + <table class="params"> 13.292 + <tr><td class="paramname">array</td><td>a pointer to location of the array pointer </td></tr> 13.293 + <tr><td class="paramname">capacity</td><td>a pointer to the capacity </td></tr> 13.294 + <tr><td class="paramname">idx</td><td>the index of the element to set </td></tr> 13.295 + <tr><td class="paramname">ptr</td><td>the pointer to store </td></tr> 13.296 + </table> 13.297 + </dd> 13.298 +</dl> 13.299 +<dl class="section return"><dt>Returns</dt><dd>zero on success or non-zero on error (errno will be set) </dd></dl> 13.300 + 13.301 +</div> 13.302 +</div> 13.303 +<h2 class="groupheader">Function Documentation</h2> 13.304 +<a id="aea01731ad94ea73c0c8fb1d1b7a35fcf"></a> 13.305 +<h2 class="memtitle"><span class="permalink"><a href="#aea01731ad94ea73c0c8fb1d1b7a35fcf">◆ </a></span>ucx_array_append_from()</h2> 13.306 + 13.307 +<div class="memitem"> 13.308 +<div class="memproto"> 13.309 + <table class="memname"> 13.310 + <tr> 13.311 + <td class="memname">int ucx_array_append_from </td> 13.312 + <td>(</td> 13.313 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.314 + <td class="paramname"><em>array</em>, </td> 13.315 + </tr> 13.316 + <tr> 13.317 + <td class="paramkey"></td> 13.318 + <td></td> 13.319 + <td class="paramtype">void * </td> 13.320 + <td class="paramname"><em>data</em>, </td> 13.321 + </tr> 13.322 + <tr> 13.323 + <td class="paramkey"></td> 13.324 + <td></td> 13.325 + <td class="paramtype">size_t </td> 13.326 + <td class="paramname"><em>count</em> </td> 13.327 + </tr> 13.328 + <tr> 13.329 + <td></td> 13.330 + <td>)</td> 13.331 + <td></td><td></td> 13.332 + </tr> 13.333 + </table> 13.334 +</div><div class="memdoc"> 13.335 + 13.336 +<p>Inserts elements at the end of the array. </p> 13.337 +<p>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.</p> 13.338 +<dl class="params"><dt>Parameters</dt><dd> 13.339 + <table class="params"> 13.340 + <tr><td class="paramname">array</td><td>a pointer the array where to append the data </td></tr> 13.341 + <tr><td class="paramname">data</td><td>a pointer to the data to insert (may be <code>NULL</code>) </td></tr> 13.342 + <tr><td class="paramname">count</td><td>number of elements to copy from data (if data is <code>NULL</code>, zeroed elements are appended) </td></tr> 13.343 + </table> 13.344 + </dd> 13.345 +</dl> 13.346 +<dl class="section return"><dt>Returns</dt><dd>zero on success, non-zero if a reallocation was necessary but failed </dd></dl> 13.347 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="array_8h.html#a1bb545d065358d265d80d815ba382a28" title="Sets elements starting at the specified index. ">ucx_array_set_from()</a> </dd> 13.348 +<dd> 13.349 +ucx_array_append() </dd></dl> 13.350 + 13.351 +</div> 13.352 +</div> 13.353 +<a id="aa698085fd1a8b70d6b709999c51b49e8"></a> 13.354 +<h2 class="memtitle"><span class="permalink"><a href="#aa698085fd1a8b70d6b709999c51b49e8">◆ </a></span>ucx_array_at()</h2> 13.355 + 13.356 +<div class="memitem"> 13.357 +<div class="memproto"> 13.358 + <table class="memname"> 13.359 + <tr> 13.360 + <td class="memname">void* ucx_array_at </td> 13.361 + <td>(</td> 13.362 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> const * </td> 13.363 + <td class="paramname"><em>array</em>, </td> 13.364 + </tr> 13.365 + <tr> 13.366 + <td class="paramkey"></td> 13.367 + <td></td> 13.368 + <td class="paramtype">size_t </td> 13.369 + <td class="paramname"><em>index</em> </td> 13.370 + </tr> 13.371 + <tr> 13.372 + <td></td> 13.373 + <td>)</td> 13.374 + <td></td><td></td> 13.375 + </tr> 13.376 + </table> 13.377 +</div><div class="memdoc"> 13.378 + 13.379 +<p>Returns a pointer to the array element at the specified index. </p> 13.380 +<dl class="params"><dt>Parameters</dt><dd> 13.381 + <table class="params"> 13.382 + <tr><td class="paramname">array</td><td>the array to retrieve the element from </td></tr> 13.383 + <tr><td class="paramname">index</td><td>index of the element to return </td></tr> 13.384 + </table> 13.385 + </dd> 13.386 +</dl> 13.387 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the element at the specified index or <code>NULL</code>, if the index is greater than the array size </dd></dl> 13.388 + 13.389 +</div> 13.390 +</div> 13.391 +<a id="a4a8c273370e4a3a3e2624e364f5ab410"></a> 13.392 +<h2 class="memtitle"><span class="permalink"><a href="#a4a8c273370e4a3a3e2624e364f5ab410">◆ </a></span>ucx_array_clone()</h2> 13.393 + 13.394 +<div class="memitem"> 13.395 +<div class="memproto"> 13.396 + <table class="memname"> 13.397 + <tr> 13.398 + <td class="memname">int ucx_array_clone </td> 13.399 + <td>(</td> 13.400 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.401 + <td class="paramname"><em>dest</em>, </td> 13.402 + </tr> 13.403 + <tr> 13.404 + <td class="paramkey"></td> 13.405 + <td></td> 13.406 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> const * </td> 13.407 + <td class="paramname"><em>src</em> </td> 13.408 + </tr> 13.409 + <tr> 13.410 + <td></td> 13.411 + <td>)</td> 13.412 + <td></td><td></td> 13.413 + </tr> 13.414 + </table> 13.415 +</div><div class="memdoc"> 13.416 + 13.417 +<p>Creates an shallow copy of an array. </p> 13.418 +<p>This function clones the specified array by using memcpy(). If the destination capacity is insufficient, an automatic reallocation is attempted.</p> 13.419 +<p>Note: if the destination array is uninitialized, the behavior is undefined.</p> 13.420 +<dl class="params"><dt>Parameters</dt><dd> 13.421 + <table class="params"> 13.422 + <tr><td class="paramname">dest</td><td>the array to copy to </td></tr> 13.423 + <tr><td class="paramname">src</td><td>the array to copy from </td></tr> 13.424 + </table> 13.425 + </dd> 13.426 +</dl> 13.427 +<dl class="section return"><dt>Returns</dt><dd>zero on success, non-zero on reallocation failure. </dd></dl> 13.428 + 13.429 +</div> 13.430 +</div> 13.431 +<a id="aa5a0bf3d3f0df6406beb0e569021cc28"></a> 13.432 +<h2 class="memtitle"><span class="permalink"><a href="#aa5a0bf3d3f0df6406beb0e569021cc28">◆ </a></span>ucx_array_concat()</h2> 13.433 + 13.434 +<div class="memitem"> 13.435 +<div class="memproto"> 13.436 + <table class="memname"> 13.437 + <tr> 13.438 + <td class="memname">int ucx_array_concat </td> 13.439 + <td>(</td> 13.440 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.441 + <td class="paramname"><em>array1</em>, </td> 13.442 + </tr> 13.443 + <tr> 13.444 + <td class="paramkey"></td> 13.445 + <td></td> 13.446 + <td class="paramtype">const <a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.447 + <td class="paramname"><em>array2</em> </td> 13.448 + </tr> 13.449 + <tr> 13.450 + <td></td> 13.451 + <td>)</td> 13.452 + <td></td><td></td> 13.453 + </tr> 13.454 + </table> 13.455 +</div><div class="memdoc"> 13.456 + 13.457 +<p>Concatenates two arrays. </p> 13.458 +<p>The contents of the second array are appended to the first array in one single operation. The second array is otherwise left untouched.</p> 13.459 +<p>The first array may grow automatically. If this fails, both arrays remain unmodified.</p> 13.460 +<dl class="params"><dt>Parameters</dt><dd> 13.461 + <table class="params"> 13.462 + <tr><td class="paramname">array1</td><td>first array </td></tr> 13.463 + <tr><td class="paramname">array2</td><td>second array </td></tr> 13.464 + </table> 13.465 + </dd> 13.466 +</dl> 13.467 +<dl class="section return"><dt>Returns</dt><dd>zero on success, non-zero if reallocation was necessary but failed or the element size does not match </dd></dl> 13.468 + 13.469 +</div> 13.470 +</div> 13.471 +<a id="a5241058cd2329147bc5b1593ae7e51dc"></a> 13.472 +<h2 class="memtitle"><span class="permalink"><a href="#a5241058cd2329147bc5b1593ae7e51dc">◆ </a></span>ucx_array_contains()</h2> 13.473 + 13.474 +<div class="memitem"> 13.475 +<div class="memproto"> 13.476 + <table class="memname"> 13.477 + <tr> 13.478 + <td class="memname">int ucx_array_contains </td> 13.479 + <td>(</td> 13.480 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> const * </td> 13.481 + <td class="paramname"><em>array</em>, </td> 13.482 + </tr> 13.483 + <tr> 13.484 + <td class="paramkey"></td> 13.485 + <td></td> 13.486 + <td class="paramtype">void * </td> 13.487 + <td class="paramname"><em>elem</em>, </td> 13.488 + </tr> 13.489 + <tr> 13.490 + <td class="paramkey"></td> 13.491 + <td></td> 13.492 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 13.493 + <td class="paramname"><em>cmpfnc</em>, </td> 13.494 + </tr> 13.495 + <tr> 13.496 + <td class="paramkey"></td> 13.497 + <td></td> 13.498 + <td class="paramtype">void * </td> 13.499 + <td class="paramname"><em>data</em> </td> 13.500 + </tr> 13.501 + <tr> 13.502 + <td></td> 13.503 + <td>)</td> 13.504 + <td></td><td></td> 13.505 + </tr> 13.506 + </table> 13.507 +</div><div class="memdoc"> 13.508 + 13.509 +<p>Checks, if an array contains a specific element. </p> 13.510 +<p>An element is found, if <a class="el" href="array_8h.html#ae7bdbed94afee9b20b38b95e3ab470f0" title="Returns the index of an element containing the specified data. ">ucx_array_find()</a> returns a value less than the size.</p> 13.511 +<dl class="params"><dt>Parameters</dt><dd> 13.512 + <table class="params"> 13.513 + <tr><td class="paramname">array</td><td>the array where to search for the data </td></tr> 13.514 + <tr><td class="paramname">elem</td><td>the element data </td></tr> 13.515 + <tr><td class="paramname">cmpfnc</td><td>the compare function </td></tr> 13.516 + <tr><td class="paramname">data</td><td>additional data for the compare function </td></tr> 13.517 + </table> 13.518 + </dd> 13.519 +</dl> 13.520 +<dl class="section return"><dt>Returns</dt><dd>1, if and only if the array contains the specified element data </dd></dl> 13.521 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="array_8h.html#ae7bdbed94afee9b20b38b95e3ab470f0" title="Returns the index of an element containing the specified data. ">ucx_array_find()</a> </dd></dl> 13.522 + 13.523 +</div> 13.524 +</div> 13.525 +<a id="a8e83681d8d5d8cddbf10f63ce5be4c10"></a> 13.526 +<h2 class="memtitle"><span class="permalink"><a href="#a8e83681d8d5d8cddbf10f63ce5be4c10">◆ </a></span>ucx_array_destroy()</h2> 13.527 + 13.528 +<div class="memitem"> 13.529 +<div class="memproto"> 13.530 + <table class="memname"> 13.531 + <tr> 13.532 + <td class="memname">void ucx_array_destroy </td> 13.533 + <td>(</td> 13.534 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.535 + <td class="paramname"><em>array</em></td><td>)</td> 13.536 + <td></td> 13.537 + </tr> 13.538 + </table> 13.539 +</div><div class="memdoc"> 13.540 + 13.541 +<p>Destroys the array. </p> 13.542 +<p>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.</p> 13.543 +<dl class="params"><dt>Parameters</dt><dd> 13.544 + <table class="params"> 13.545 + <tr><td class="paramname">array</td><td>the array to destroy </td></tr> 13.546 + </table> 13.547 + </dd> 13.548 +</dl> 13.549 + 13.550 +</div> 13.551 +</div> 13.552 +<a id="a43292b448adb1741677aa8c578bcc201"></a> 13.553 +<h2 class="memtitle"><span class="permalink"><a href="#a43292b448adb1741677aa8c578bcc201">◆ </a></span>ucx_array_equals()</h2> 13.554 + 13.555 +<div class="memitem"> 13.556 +<div class="memproto"> 13.557 + <table class="memname"> 13.558 + <tr> 13.559 + <td class="memname">int ucx_array_equals </td> 13.560 + <td>(</td> 13.561 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> const * </td> 13.562 + <td class="paramname"><em>array1</em>, </td> 13.563 + </tr> 13.564 + <tr> 13.565 + <td class="paramkey"></td> 13.566 + <td></td> 13.567 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> const * </td> 13.568 + <td class="paramname"><em>array2</em>, </td> 13.569 + </tr> 13.570 + <tr> 13.571 + <td class="paramkey"></td> 13.572 + <td></td> 13.573 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 13.574 + <td class="paramname"><em>cmpfnc</em>, </td> 13.575 + </tr> 13.576 + <tr> 13.577 + <td class="paramkey"></td> 13.578 + <td></td> 13.579 + <td class="paramtype">void * </td> 13.580 + <td class="paramname"><em>data</em> </td> 13.581 + </tr> 13.582 + <tr> 13.583 + <td></td> 13.584 + <td>)</td> 13.585 + <td></td><td></td> 13.586 + </tr> 13.587 + </table> 13.588 +</div><div class="memdoc"> 13.589 + 13.590 +<p>Compares two UCX arrays element-wise by using a compare function. </p> 13.591 +<p>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 <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791" title="Function pointer to a compare function. ">cmp_func()</a> used.</p> 13.592 +<p>This function always returns zero, if the element sizes of the arrays do not match and performs no comparisons in this case.</p> 13.593 +<dl class="params"><dt>Parameters</dt><dd> 13.594 + <table class="params"> 13.595 + <tr><td class="paramname">array1</td><td>the first array </td></tr> 13.596 + <tr><td class="paramname">array2</td><td>the second array </td></tr> 13.597 + <tr><td class="paramname">cmpfnc</td><td>the compare function </td></tr> 13.598 + <tr><td class="paramname">data</td><td>additional data for the compare function </td></tr> 13.599 + </table> 13.600 + </dd> 13.601 +</dl> 13.602 +<dl class="section return"><dt>Returns</dt><dd>1, if and only if the two arrays equal element-wise, 0 otherwise </dd></dl> 13.603 + 13.604 +</div> 13.605 +</div> 13.606 +<a id="ae7bdbed94afee9b20b38b95e3ab470f0"></a> 13.607 +<h2 class="memtitle"><span class="permalink"><a href="#ae7bdbed94afee9b20b38b95e3ab470f0">◆ </a></span>ucx_array_find()</h2> 13.608 + 13.609 +<div class="memitem"> 13.610 +<div class="memproto"> 13.611 + <table class="memname"> 13.612 + <tr> 13.613 + <td class="memname">size_t ucx_array_find </td> 13.614 + <td>(</td> 13.615 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> const * </td> 13.616 + <td class="paramname"><em>array</em>, </td> 13.617 + </tr> 13.618 + <tr> 13.619 + <td class="paramkey"></td> 13.620 + <td></td> 13.621 + <td class="paramtype">void * </td> 13.622 + <td class="paramname"><em>elem</em>, </td> 13.623 + </tr> 13.624 + <tr> 13.625 + <td class="paramkey"></td> 13.626 + <td></td> 13.627 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 13.628 + <td class="paramname"><em>cmpfnc</em>, </td> 13.629 + </tr> 13.630 + <tr> 13.631 + <td class="paramkey"></td> 13.632 + <td></td> 13.633 + <td class="paramtype">void * </td> 13.634 + <td class="paramname"><em>data</em> </td> 13.635 + </tr> 13.636 + <tr> 13.637 + <td></td> 13.638 + <td>)</td> 13.639 + <td></td><td></td> 13.640 + </tr> 13.641 + </table> 13.642 +</div><div class="memdoc"> 13.643 + 13.644 +<p>Returns the index of an element containing the specified data. </p> 13.645 +<p>This function uses a <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791" title="Function pointer to a compare function. ">cmp_func()</a> to compare the data of each list element with the specified data. If no cmp_func is provided, memcmp() is used.</p> 13.646 +<p>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.</p> 13.647 +<dl class="params"><dt>Parameters</dt><dd> 13.648 + <table class="params"> 13.649 + <tr><td class="paramname">array</td><td>the array where to search for the data </td></tr> 13.650 + <tr><td class="paramname">elem</td><td>the element data </td></tr> 13.651 + <tr><td class="paramname">cmpfnc</td><td>the compare function </td></tr> 13.652 + <tr><td class="paramname">data</td><td>additional data for the compare function </td></tr> 13.653 + </table> 13.654 + </dd> 13.655 +</dl> 13.656 +<dl class="section return"><dt>Returns</dt><dd>the index of the element containing the specified data or the size of the array, if the data is not found in this array </dd></dl> 13.657 + 13.658 +</div> 13.659 +</div> 13.660 +<a id="ac01ee914468a16f470bf3071fffbe438"></a> 13.661 +<h2 class="memtitle"><span class="permalink"><a href="#ac01ee914468a16f470bf3071fffbe438">◆ </a></span>ucx_array_free()</h2> 13.662 + 13.663 +<div class="memitem"> 13.664 +<div class="memproto"> 13.665 + <table class="memname"> 13.666 + <tr> 13.667 + <td class="memname">void ucx_array_free </td> 13.668 + <td>(</td> 13.669 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.670 + <td class="paramname"><em>array</em></td><td>)</td> 13.671 + <td></td> 13.672 + </tr> 13.673 + </table> 13.674 +</div><div class="memdoc"> 13.675 + 13.676 +<p>Destroys and frees the array. </p> 13.677 +<dl class="params"><dt>Parameters</dt><dd> 13.678 + <table class="params"> 13.679 + <tr><td class="paramname">array</td><td>the array to free </td></tr> 13.680 + </table> 13.681 + </dd> 13.682 +</dl> 13.683 + 13.684 +</div> 13.685 +</div> 13.686 +<a id="ab0cbf243824aaebee48277315e03afce"></a> 13.687 +<h2 class="memtitle"><span class="permalink"><a href="#ab0cbf243824aaebee48277315e03afce">◆ </a></span>ucx_array_grow()</h2> 13.688 + 13.689 +<div class="memitem"> 13.690 +<div class="memproto"> 13.691 + <table class="memname"> 13.692 + <tr> 13.693 + <td class="memname">int ucx_array_grow </td> 13.694 + <td>(</td> 13.695 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.696 + <td class="paramname"><em>array</em>, </td> 13.697 + </tr> 13.698 + <tr> 13.699 + <td class="paramkey"></td> 13.700 + <td></td> 13.701 + <td class="paramtype">size_t </td> 13.702 + <td class="paramname"><em>count</em> </td> 13.703 + </tr> 13.704 + <tr> 13.705 + <td></td> 13.706 + <td>)</td> 13.707 + <td></td><td></td> 13.708 + </tr> 13.709 + </table> 13.710 +</div><div class="memdoc"> 13.711 + 13.712 +<p>Resizes the capacity, if the specified number of elements would not fit. </p> 13.713 +<p>A call to ucx_array_grow(array, count) is effectively the same as ucx_array_reserve(array, array->size+count).</p> 13.714 +<dl class="params"><dt>Parameters</dt><dd> 13.715 + <table class="params"> 13.716 + <tr><td class="paramname">array</td><td>a pointer to the array </td></tr> 13.717 + <tr><td class="paramname">count</td><td>the number of elements that should additionally fit into the array </td></tr> 13.718 + </table> 13.719 + </dd> 13.720 +</dl> 13.721 +<dl class="section return"><dt>Returns</dt><dd>zero on success, non-zero if reallocation failed </dd></dl> 13.722 + 13.723 +</div> 13.724 +</div> 13.725 +<a id="ad921e85c28ffae32230777a53c5037e5"></a> 13.726 +<h2 class="memtitle"><span class="permalink"><a href="#ad921e85c28ffae32230777a53c5037e5">◆ </a></span>ucx_array_init()</h2> 13.727 + 13.728 +<div class="memitem"> 13.729 +<div class="memproto"> 13.730 + <table class="memname"> 13.731 + <tr> 13.732 + <td class="memname">void ucx_array_init </td> 13.733 + <td>(</td> 13.734 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.735 + <td class="paramname"><em>array</em>, </td> 13.736 + </tr> 13.737 + <tr> 13.738 + <td class="paramkey"></td> 13.739 + <td></td> 13.740 + <td class="paramtype">size_t </td> 13.741 + <td class="paramname"><em>capacity</em>, </td> 13.742 + </tr> 13.743 + <tr> 13.744 + <td class="paramkey"></td> 13.745 + <td></td> 13.746 + <td class="paramtype">size_t </td> 13.747 + <td class="paramname"><em>elemsize</em> </td> 13.748 + </tr> 13.749 + <tr> 13.750 + <td></td> 13.751 + <td>)</td> 13.752 + <td></td><td></td> 13.753 + </tr> 13.754 + </table> 13.755 +</div><div class="memdoc"> 13.756 + 13.757 +<p>Initializes a UCX array structure with the given capacity and element size. </p> 13.758 +<p>The structure must be uninitialized as the data pointer will be overwritten.</p> 13.759 +<dl class="params"><dt>Parameters</dt><dd> 13.760 + <table class="params"> 13.761 + <tr><td class="paramname">array</td><td>the structure to initialize </td></tr> 13.762 + <tr><td class="paramname">capacity</td><td>the initial capacity </td></tr> 13.763 + <tr><td class="paramname">elemsize</td><td>the element size </td></tr> 13.764 + </table> 13.765 + </dd> 13.766 +</dl> 13.767 + 13.768 +</div> 13.769 +</div> 13.770 +<a id="a2451e61ebb15a7ba1c1319267ba75b8c"></a> 13.771 +<h2 class="memtitle"><span class="permalink"><a href="#a2451e61ebb15a7ba1c1319267ba75b8c">◆ </a></span>ucx_array_init_a()</h2> 13.772 + 13.773 +<div class="memitem"> 13.774 +<div class="memproto"> 13.775 + <table class="memname"> 13.776 + <tr> 13.777 + <td class="memname">void ucx_array_init_a </td> 13.778 + <td>(</td> 13.779 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.780 + <td class="paramname"><em>array</em>, </td> 13.781 + </tr> 13.782 + <tr> 13.783 + <td class="paramkey"></td> 13.784 + <td></td> 13.785 + <td class="paramtype">size_t </td> 13.786 + <td class="paramname"><em>capacity</em>, </td> 13.787 + </tr> 13.788 + <tr> 13.789 + <td class="paramkey"></td> 13.790 + <td></td> 13.791 + <td class="paramtype">size_t </td> 13.792 + <td class="paramname"><em>elemsize</em>, </td> 13.793 + </tr> 13.794 + <tr> 13.795 + <td class="paramkey"></td> 13.796 + <td></td> 13.797 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 13.798 + <td class="paramname"><em>allocator</em> </td> 13.799 + </tr> 13.800 + <tr> 13.801 + <td></td> 13.802 + <td>)</td> 13.803 + <td></td><td></td> 13.804 + </tr> 13.805 + </table> 13.806 +</div><div class="memdoc"> 13.807 + 13.808 +<p>Initializes a UCX array structure using the specified allocator. </p> 13.809 +<p>The structure must be uninitialized as the data pointer will be overwritten.</p> 13.810 +<dl class="params"><dt>Parameters</dt><dd> 13.811 + <table class="params"> 13.812 + <tr><td class="paramname">array</td><td>the structure to initialize </td></tr> 13.813 + <tr><td class="paramname">capacity</td><td>the initial capacity </td></tr> 13.814 + <tr><td class="paramname">elemsize</td><td>the element size </td></tr> 13.815 + <tr><td class="paramname">allocator</td><td>the allocator to use </td></tr> 13.816 + </table> 13.817 + </dd> 13.818 +</dl> 13.819 + 13.820 +</div> 13.821 +</div> 13.822 +<a id="a994a2fbf1c33a3833e2a70cd9a4352b7"></a> 13.823 +<h2 class="memtitle"><span class="permalink"><a href="#a994a2fbf1c33a3833e2a70cd9a4352b7">◆ </a></span>ucx_array_new()</h2> 13.824 + 13.825 +<div class="memitem"> 13.826 +<div class="memproto"> 13.827 + <table class="memname"> 13.828 + <tr> 13.829 + <td class="memname"><a class="el" href="structUcxArray.html">UcxArray</a>* ucx_array_new </td> 13.830 + <td>(</td> 13.831 + <td class="paramtype">size_t </td> 13.832 + <td class="paramname"><em>capacity</em>, </td> 13.833 + </tr> 13.834 + <tr> 13.835 + <td class="paramkey"></td> 13.836 + <td></td> 13.837 + <td class="paramtype">size_t </td> 13.838 + <td class="paramname"><em>elemsize</em> </td> 13.839 + </tr> 13.840 + <tr> 13.841 + <td></td> 13.842 + <td>)</td> 13.843 + <td></td><td></td> 13.844 + </tr> 13.845 + </table> 13.846 +</div><div class="memdoc"> 13.847 + 13.848 +<p>Creates a new UCX array with the given capacity and element size. </p> 13.849 +<dl class="params"><dt>Parameters</dt><dd> 13.850 + <table class="params"> 13.851 + <tr><td class="paramname">capacity</td><td>the initial capacity </td></tr> 13.852 + <tr><td class="paramname">elemsize</td><td>the element size </td></tr> 13.853 + </table> 13.854 + </dd> 13.855 +</dl> 13.856 +<dl class="section return"><dt>Returns</dt><dd>a pointer to a new UCX array structure </dd></dl> 13.857 + 13.858 +</div> 13.859 +</div> 13.860 +<a id="a177170258c215eb2e4f5a32e59f0cb1b"></a> 13.861 +<h2 class="memtitle"><span class="permalink"><a href="#a177170258c215eb2e4f5a32e59f0cb1b">◆ </a></span>ucx_array_new_a()</h2> 13.862 + 13.863 +<div class="memitem"> 13.864 +<div class="memproto"> 13.865 + <table class="memname"> 13.866 + <tr> 13.867 + <td class="memname"><a class="el" href="structUcxArray.html">UcxArray</a>* ucx_array_new_a </td> 13.868 + <td>(</td> 13.869 + <td class="paramtype">size_t </td> 13.870 + <td class="paramname"><em>capacity</em>, </td> 13.871 + </tr> 13.872 + <tr> 13.873 + <td class="paramkey"></td> 13.874 + <td></td> 13.875 + <td class="paramtype">size_t </td> 13.876 + <td class="paramname"><em>elemsize</em>, </td> 13.877 + </tr> 13.878 + <tr> 13.879 + <td class="paramkey"></td> 13.880 + <td></td> 13.881 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 13.882 + <td class="paramname"><em>allocator</em> </td> 13.883 + </tr> 13.884 + <tr> 13.885 + <td></td> 13.886 + <td>)</td> 13.887 + <td></td><td></td> 13.888 + </tr> 13.889 + </table> 13.890 +</div><div class="memdoc"> 13.891 + 13.892 +<p>Creates a new UCX array using the specified allocator. </p> 13.893 +<dl class="params"><dt>Parameters</dt><dd> 13.894 + <table class="params"> 13.895 + <tr><td class="paramname">capacity</td><td>the initial capacity </td></tr> 13.896 + <tr><td class="paramname">elemsize</td><td>the element size </td></tr> 13.897 + <tr><td class="paramname">allocator</td><td>the allocator to use </td></tr> 13.898 + </table> 13.899 + </dd> 13.900 +</dl> 13.901 +<dl class="section return"><dt>Returns</dt><dd>a pointer to new UCX array structure </dd></dl> 13.902 + 13.903 +</div> 13.904 +</div> 13.905 +<a id="a95b52acc2193b5c33cf0eaa4f2082477"></a> 13.906 +<h2 class="memtitle"><span class="permalink"><a href="#a95b52acc2193b5c33cf0eaa4f2082477">◆ </a></span>ucx_array_prepend_from()</h2> 13.907 + 13.908 +<div class="memitem"> 13.909 +<div class="memproto"> 13.910 + <table class="memname"> 13.911 + <tr> 13.912 + <td class="memname">int ucx_array_prepend_from </td> 13.913 + <td>(</td> 13.914 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.915 + <td class="paramname"><em>array</em>, </td> 13.916 + </tr> 13.917 + <tr> 13.918 + <td class="paramkey"></td> 13.919 + <td></td> 13.920 + <td class="paramtype">void * </td> 13.921 + <td class="paramname"><em>data</em>, </td> 13.922 + </tr> 13.923 + <tr> 13.924 + <td class="paramkey"></td> 13.925 + <td></td> 13.926 + <td class="paramtype">size_t </td> 13.927 + <td class="paramname"><em>count</em> </td> 13.928 + </tr> 13.929 + <tr> 13.930 + <td></td> 13.931 + <td>)</td> 13.932 + <td></td><td></td> 13.933 + </tr> 13.934 + </table> 13.935 +</div><div class="memdoc"> 13.936 + 13.937 +<p>Inserts elements at the beginning of the array. </p> 13.938 +<p>This is an expensive operation, because the contents must be moved. If there is no particular reason to prepend data, you should use <a class="el" href="array_8h.html#aea01731ad94ea73c0c8fb1d1b7a35fcf" title="Inserts elements at the end of the array. ">ucx_array_append_from()</a> instead.</p> 13.939 +<dl class="params"><dt>Parameters</dt><dd> 13.940 + <table class="params"> 13.941 + <tr><td class="paramname">array</td><td>a pointer the array where to prepend the data </td></tr> 13.942 + <tr><td class="paramname">data</td><td>a pointer to the data to insert (may be <code>NULL</code>) </td></tr> 13.943 + <tr><td class="paramname">count</td><td>number of elements to copy from data (if data is <code>NULL</code>, zeroed elements are inserted) </td></tr> 13.944 + </table> 13.945 + </dd> 13.946 +</dl> 13.947 +<dl class="section return"><dt>Returns</dt><dd>zero on success, non-zero if a reallocation was necessary but failed </dd></dl> 13.948 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="array_8h.html#aea01731ad94ea73c0c8fb1d1b7a35fcf" title="Inserts elements at the end of the array. ">ucx_array_append_from()</a> </dd> 13.949 +<dd> 13.950 +<a class="el" href="array_8h.html#a1bb545d065358d265d80d815ba382a28" title="Sets elements starting at the specified index. ">ucx_array_set_from()</a> </dd> 13.951 +<dd> 13.952 +ucx_array_prepend() </dd></dl> 13.953 + 13.954 +</div> 13.955 +</div> 13.956 +<a id="aa45eac6b697f83adac81c0860cf306b8"></a> 13.957 +<h2 class="memtitle"><span class="permalink"><a href="#aa45eac6b697f83adac81c0860cf306b8">◆ </a></span>ucx_array_remove()</h2> 13.958 + 13.959 +<div class="memitem"> 13.960 +<div class="memproto"> 13.961 + <table class="memname"> 13.962 + <tr> 13.963 + <td class="memname">void ucx_array_remove </td> 13.964 + <td>(</td> 13.965 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.966 + <td class="paramname"><em>array</em>, </td> 13.967 + </tr> 13.968 + <tr> 13.969 + <td class="paramkey"></td> 13.970 + <td></td> 13.971 + <td class="paramtype">size_t </td> 13.972 + <td class="paramname"><em>index</em> </td> 13.973 + </tr> 13.974 + <tr> 13.975 + <td></td> 13.976 + <td>)</td> 13.977 + <td></td><td></td> 13.978 + </tr> 13.979 + </table> 13.980 +</div><div class="memdoc"> 13.981 + 13.982 +<p>Removes an element from the array. </p> 13.983 +<p>This is in general an expensive operation, because several elements may be moved. If the order of the elements is not relevant, use <a class="el" href="array_8h.html#a548d81b07612bae3ba8c4c4b49104b8e" title="Removes an element from the array. ">ucx_array_remove_fast()</a> instead.</p> 13.984 +<dl class="params"><dt>Parameters</dt><dd> 13.985 + <table class="params"> 13.986 + <tr><td class="paramname">array</td><td>pointer to the array from which the element shall be removed </td></tr> 13.987 + <tr><td class="paramname">index</td><td>the index of the element to remove </td></tr> 13.988 + </table> 13.989 + </dd> 13.990 +</dl> 13.991 + 13.992 +</div> 13.993 +</div> 13.994 +<a id="a548d81b07612bae3ba8c4c4b49104b8e"></a> 13.995 +<h2 class="memtitle"><span class="permalink"><a href="#a548d81b07612bae3ba8c4c4b49104b8e">◆ </a></span>ucx_array_remove_fast()</h2> 13.996 + 13.997 +<div class="memitem"> 13.998 +<div class="memproto"> 13.999 + <table class="memname"> 13.1000 + <tr> 13.1001 + <td class="memname">void ucx_array_remove_fast </td> 13.1002 + <td>(</td> 13.1003 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.1004 + <td class="paramname"><em>array</em>, </td> 13.1005 + </tr> 13.1006 + <tr> 13.1007 + <td class="paramkey"></td> 13.1008 + <td></td> 13.1009 + <td class="paramtype">size_t </td> 13.1010 + <td class="paramname"><em>index</em> </td> 13.1011 + </tr> 13.1012 + <tr> 13.1013 + <td></td> 13.1014 + <td>)</td> 13.1015 + <td></td><td></td> 13.1016 + </tr> 13.1017 + </table> 13.1018 +</div><div class="memdoc"> 13.1019 + 13.1020 +<p>Removes an element from the array. </p> 13.1021 +<p>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.</p> 13.1022 +<dl class="params"><dt>Parameters</dt><dd> 13.1023 + <table class="params"> 13.1024 + <tr><td class="paramname">array</td><td>pointer to the array from which the element shall be removed </td></tr> 13.1025 + <tr><td class="paramname">index</td><td>the index of the element to remove </td></tr> 13.1026 + </table> 13.1027 + </dd> 13.1028 +</dl> 13.1029 + 13.1030 +</div> 13.1031 +</div> 13.1032 +<a id="a1c3bf8433c1de3c933f3854ab297fe1d"></a> 13.1033 +<h2 class="memtitle"><span class="permalink"><a href="#a1c3bf8433c1de3c933f3854ab297fe1d">◆ </a></span>ucx_array_reserve()</h2> 13.1034 + 13.1035 +<div class="memitem"> 13.1036 +<div class="memproto"> 13.1037 + <table class="memname"> 13.1038 + <tr> 13.1039 + <td class="memname">int ucx_array_reserve </td> 13.1040 + <td>(</td> 13.1041 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.1042 + <td class="paramname"><em>array</em>, </td> 13.1043 + </tr> 13.1044 + <tr> 13.1045 + <td class="paramkey"></td> 13.1046 + <td></td> 13.1047 + <td class="paramtype">size_t </td> 13.1048 + <td class="paramname"><em>capacity</em> </td> 13.1049 + </tr> 13.1050 + <tr> 13.1051 + <td></td> 13.1052 + <td>)</td> 13.1053 + <td></td><td></td> 13.1054 + </tr> 13.1055 + </table> 13.1056 +</div><div class="memdoc"> 13.1057 + 13.1058 +<p>Resizes the array only, if the capacity is insufficient. </p> 13.1059 +<p>If the requested capacity is smaller than the current capacity, this function does nothing.</p> 13.1060 +<dl class="params"><dt>Parameters</dt><dd> 13.1061 + <table class="params"> 13.1062 + <tr><td class="paramname">array</td><td>a pointer to the array </td></tr> 13.1063 + <tr><td class="paramname">capacity</td><td>the guaranteed capacity </td></tr> 13.1064 + </table> 13.1065 + </dd> 13.1066 +</dl> 13.1067 +<dl class="section return"><dt>Returns</dt><dd>zero on success, non-zero if reallocation failed </dd></dl> 13.1068 + 13.1069 +</div> 13.1070 +</div> 13.1071 +<a id="a27762e7c06a6c781015e3c8ceeee0ce3"></a> 13.1072 +<h2 class="memtitle"><span class="permalink"><a href="#a27762e7c06a6c781015e3c8ceeee0ce3">◆ </a></span>ucx_array_resize()</h2> 13.1073 + 13.1074 +<div class="memitem"> 13.1075 +<div class="memproto"> 13.1076 + <table class="memname"> 13.1077 + <tr> 13.1078 + <td class="memname">int ucx_array_resize </td> 13.1079 + <td>(</td> 13.1080 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.1081 + <td class="paramname"><em>array</em>, </td> 13.1082 + </tr> 13.1083 + <tr> 13.1084 + <td class="paramkey"></td> 13.1085 + <td></td> 13.1086 + <td class="paramtype">size_t </td> 13.1087 + <td class="paramname"><em>capacity</em> </td> 13.1088 + </tr> 13.1089 + <tr> 13.1090 + <td></td> 13.1091 + <td>)</td> 13.1092 + <td></td><td></td> 13.1093 + </tr> 13.1094 + </table> 13.1095 +</div><div class="memdoc"> 13.1096 + 13.1097 +<p>Sets the capacity of the array. </p> 13.1098 +<p>If the new capacity is smaller than the size of the array, the elements are removed and the size is adjusted accordingly.</p> 13.1099 +<dl class="params"><dt>Parameters</dt><dd> 13.1100 + <table class="params"> 13.1101 + <tr><td class="paramname">array</td><td>a pointer to the array </td></tr> 13.1102 + <tr><td class="paramname">capacity</td><td>the new capacity </td></tr> 13.1103 + </table> 13.1104 + </dd> 13.1105 +</dl> 13.1106 +<dl class="section return"><dt>Returns</dt><dd>zero on success, non-zero if reallocation failed </dd></dl> 13.1107 + 13.1108 +</div> 13.1109 +</div> 13.1110 +<a id="a1bb545d065358d265d80d815ba382a28"></a> 13.1111 +<h2 class="memtitle"><span class="permalink"><a href="#a1bb545d065358d265d80d815ba382a28">◆ </a></span>ucx_array_set_from()</h2> 13.1112 + 13.1113 +<div class="memitem"> 13.1114 +<div class="memproto"> 13.1115 + <table class="memname"> 13.1116 + <tr> 13.1117 + <td class="memname">int ucx_array_set_from </td> 13.1118 + <td>(</td> 13.1119 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.1120 + <td class="paramname"><em>array</em>, </td> 13.1121 + </tr> 13.1122 + <tr> 13.1123 + <td class="paramkey"></td> 13.1124 + <td></td> 13.1125 + <td class="paramtype">size_t </td> 13.1126 + <td class="paramname"><em>index</em>, </td> 13.1127 + </tr> 13.1128 + <tr> 13.1129 + <td class="paramkey"></td> 13.1130 + <td></td> 13.1131 + <td class="paramtype">void * </td> 13.1132 + <td class="paramname"><em>data</em>, </td> 13.1133 + </tr> 13.1134 + <tr> 13.1135 + <td class="paramkey"></td> 13.1136 + <td></td> 13.1137 + <td class="paramtype">size_t </td> 13.1138 + <td class="paramname"><em>count</em> </td> 13.1139 + </tr> 13.1140 + <tr> 13.1141 + <td></td> 13.1142 + <td>)</td> 13.1143 + <td></td><td></td> 13.1144 + </tr> 13.1145 + </table> 13.1146 +</div><div class="memdoc"> 13.1147 + 13.1148 +<p>Sets elements starting at the specified index. </p> 13.1149 +<p>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.</p> 13.1150 +<dl class="params"><dt>Parameters</dt><dd> 13.1151 + <table class="params"> 13.1152 + <tr><td class="paramname">array</td><td>a pointer the array where to set the data </td></tr> 13.1153 + <tr><td class="paramname">index</td><td>the index of the element to set </td></tr> 13.1154 + <tr><td class="paramname">data</td><td>a pointer to the data to insert (may be <code>NULL</code>) </td></tr> 13.1155 + <tr><td class="paramname">count</td><td>number of elements to copy from data (if data is <code>NULL</code>, the memory in the array is zeroed) </td></tr> 13.1156 + </table> 13.1157 + </dd> 13.1158 +</dl> 13.1159 +<dl class="section return"><dt>Returns</dt><dd>zero on success, non-zero if a reallocation was necessary but failed </dd></dl> 13.1160 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="array_8h.html#aea01731ad94ea73c0c8fb1d1b7a35fcf" title="Inserts elements at the end of the array. ">ucx_array_append_from()</a> </dd> 13.1161 +<dd> 13.1162 +ucx_array_set() </dd></dl> 13.1163 + 13.1164 +</div> 13.1165 +</div> 13.1166 +<a id="a2daf50e80aee9bccebee876a7efd2dfc"></a> 13.1167 +<h2 class="memtitle"><span class="permalink"><a href="#a2daf50e80aee9bccebee876a7efd2dfc">◆ </a></span>ucx_array_shrink()</h2> 13.1168 + 13.1169 +<div class="memitem"> 13.1170 +<div class="memproto"> 13.1171 + <table class="memname"> 13.1172 + <tr> 13.1173 + <td class="memname">int ucx_array_shrink </td> 13.1174 + <td>(</td> 13.1175 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.1176 + <td class="paramname"><em>array</em></td><td>)</td> 13.1177 + <td></td> 13.1178 + </tr> 13.1179 + </table> 13.1180 +</div><div class="memdoc"> 13.1181 + 13.1182 +<p>Shrinks the memory to exactly fit the contents. </p> 13.1183 +<p>After this operation, the capacity equals the size.</p> 13.1184 +<dl class="params"><dt>Parameters</dt><dd> 13.1185 + <table class="params"> 13.1186 + <tr><td class="paramname">array</td><td>a pointer to the array </td></tr> 13.1187 + </table> 13.1188 + </dd> 13.1189 +</dl> 13.1190 +<dl class="section return"><dt>Returns</dt><dd>zero on success, non-zero if reallocation failed </dd></dl> 13.1191 + 13.1192 +</div> 13.1193 +</div> 13.1194 +<a id="add773514569b872a6624381b4b6af52c"></a> 13.1195 +<h2 class="memtitle"><span class="permalink"><a href="#add773514569b872a6624381b4b6af52c">◆ </a></span>ucx_array_sort()</h2> 13.1196 + 13.1197 +<div class="memitem"> 13.1198 +<div class="memproto"> 13.1199 + <table class="memname"> 13.1200 + <tr> 13.1201 + <td class="memname">void ucx_array_sort </td> 13.1202 + <td>(</td> 13.1203 + <td class="paramtype"><a class="el" href="structUcxArray.html">UcxArray</a> * </td> 13.1204 + <td class="paramname"><em>array</em>, </td> 13.1205 + </tr> 13.1206 + <tr> 13.1207 + <td class="paramkey"></td> 13.1208 + <td></td> 13.1209 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 13.1210 + <td class="paramname"><em>cmpfnc</em>, </td> 13.1211 + </tr> 13.1212 + <tr> 13.1213 + <td class="paramkey"></td> 13.1214 + <td></td> 13.1215 + <td class="paramtype">void * </td> 13.1216 + <td class="paramname"><em>data</em> </td> 13.1217 + </tr> 13.1218 + <tr> 13.1219 + <td></td> 13.1220 + <td>)</td> 13.1221 + <td></td><td></td> 13.1222 + </tr> 13.1223 + </table> 13.1224 +</div><div class="memdoc"> 13.1225 + 13.1226 +<p>Sorts a <a class="el" href="structUcxArray.html" title="UCX array type. ">UcxArray</a> with the best available sort algorithm. </p> 13.1227 +<p>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().</p> 13.1228 +<p>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.</p> 13.1229 +<dl class="params"><dt>Parameters</dt><dd> 13.1230 + <table class="params"> 13.1231 + <tr><td class="paramname">array</td><td>the array to sort </td></tr> 13.1232 + <tr><td class="paramname">cmpfnc</td><td>the function that shall be used to compare the element data </td></tr> 13.1233 + <tr><td class="paramname">data</td><td>additional data for the <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791" title="Function pointer to a compare function. ">cmp_func()</a> or <code>NULL</code> </td></tr> 13.1234 + </table> 13.1235 + </dd> 13.1236 +</dl> 13.1237 + 13.1238 +</div> 13.1239 +</div> 13.1240 +<a id="ad0a8d76980cf1c1910e64a245803fb9a"></a> 13.1241 +<h2 class="memtitle"><span class="permalink"><a href="#ad0a8d76980cf1c1910e64a245803fb9a">◆ </a></span>ucx_array_util_set_a()</h2> 13.1242 + 13.1243 +<div class="memitem"> 13.1244 +<div class="memproto"> 13.1245 + <table class="memname"> 13.1246 + <tr> 13.1247 + <td class="memname">int ucx_array_util_set_a </td> 13.1248 + <td>(</td> 13.1249 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 13.1250 + <td class="paramname"><em>alloc</em>, </td> 13.1251 + </tr> 13.1252 + <tr> 13.1253 + <td class="paramkey"></td> 13.1254 + <td></td> 13.1255 + <td class="paramtype">void ** </td> 13.1256 + <td class="paramname"><em>array</em>, </td> 13.1257 + </tr> 13.1258 + <tr> 13.1259 + <td class="paramkey"></td> 13.1260 + <td></td> 13.1261 + <td class="paramtype">size_t * </td> 13.1262 + <td class="paramname"><em>capacity</em>, </td> 13.1263 + </tr> 13.1264 + <tr> 13.1265 + <td class="paramkey"></td> 13.1266 + <td></td> 13.1267 + <td class="paramtype">size_t </td> 13.1268 + <td class="paramname"><em>elmsize</em>, </td> 13.1269 + </tr> 13.1270 + <tr> 13.1271 + <td class="paramkey"></td> 13.1272 + <td></td> 13.1273 + <td class="paramtype">size_t </td> 13.1274 + <td class="paramname"><em>idx</em>, </td> 13.1275 + </tr> 13.1276 + <tr> 13.1277 + <td class="paramkey"></td> 13.1278 + <td></td> 13.1279 + <td class="paramtype">void * </td> 13.1280 + <td class="paramname"><em>data</em> </td> 13.1281 + </tr> 13.1282 + <tr> 13.1283 + <td></td> 13.1284 + <td>)</td> 13.1285 + <td></td><td></td> 13.1286 + </tr> 13.1287 + </table> 13.1288 +</div><div class="memdoc"> 13.1289 + 13.1290 +<p>Sets an element in an arbitrary user defined array. </p> 13.1291 +<p>The data is copied from the specified data location.</p> 13.1292 +<p>If the capacity is insufficient, the array is automatically reallocated using the specified allocator and the possibly new pointer is stored in the <code>array</code> argument.</p> 13.1293 +<p>On reallocation the capacity of the array is doubled until it is sufficient. The new capacity is stored back to <code>capacity</code>.</p> 13.1294 +<dl class="params"><dt>Parameters</dt><dd> 13.1295 + <table class="params"> 13.1296 + <tr><td class="paramname">alloc</td><td>the allocator that shall be used to reallocate the array </td></tr> 13.1297 + <tr><td class="paramname">array</td><td>a pointer to location of the array pointer </td></tr> 13.1298 + <tr><td class="paramname">capacity</td><td>a pointer to the capacity </td></tr> 13.1299 + <tr><td class="paramname">elmsize</td><td>the size of each element </td></tr> 13.1300 + <tr><td class="paramname">idx</td><td>the index of the element to set </td></tr> 13.1301 + <tr><td class="paramname">data</td><td>a pointer to the element data </td></tr> 13.1302 + </table> 13.1303 + </dd> 13.1304 +</dl> 13.1305 +<dl class="section return"><dt>Returns</dt><dd>zero on success or non-zero on error (errno will be set) </dd></dl> 13.1306 + 13.1307 +</div> 13.1308 +</div> 13.1309 +<a id="ad708b333c0c1b02c998309a58ea65e31"></a> 13.1310 +<h2 class="memtitle"><span class="permalink"><a href="#ad708b333c0c1b02c998309a58ea65e31">◆ </a></span>ucx_array_util_setptr_a()</h2> 13.1311 + 13.1312 +<div class="memitem"> 13.1313 +<div class="memproto"> 13.1314 + <table class="memname"> 13.1315 + <tr> 13.1316 + <td class="memname">int ucx_array_util_setptr_a </td> 13.1317 + <td>(</td> 13.1318 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 13.1319 + <td class="paramname"><em>alloc</em>, </td> 13.1320 + </tr> 13.1321 + <tr> 13.1322 + <td class="paramkey"></td> 13.1323 + <td></td> 13.1324 + <td class="paramtype">void ** </td> 13.1325 + <td class="paramname"><em>array</em>, </td> 13.1326 + </tr> 13.1327 + <tr> 13.1328 + <td class="paramkey"></td> 13.1329 + <td></td> 13.1330 + <td class="paramtype">size_t * </td> 13.1331 + <td class="paramname"><em>capacity</em>, </td> 13.1332 + </tr> 13.1333 + <tr> 13.1334 + <td class="paramkey"></td> 13.1335 + <td></td> 13.1336 + <td class="paramtype">size_t </td> 13.1337 + <td class="paramname"><em>idx</em>, </td> 13.1338 + </tr> 13.1339 + <tr> 13.1340 + <td class="paramkey"></td> 13.1341 + <td></td> 13.1342 + <td class="paramtype">void * </td> 13.1343 + <td class="paramname"><em>ptr</em> </td> 13.1344 + </tr> 13.1345 + <tr> 13.1346 + <td></td> 13.1347 + <td>)</td> 13.1348 + <td></td><td></td> 13.1349 + </tr> 13.1350 + </table> 13.1351 +</div><div class="memdoc"> 13.1352 + 13.1353 +<p>Stores a pointer in an arbitrary user defined array. </p> 13.1354 +<p>The element size of the array must be sizeof(void*).</p> 13.1355 +<p>If the capacity is insufficient, the array is automatically reallocated using the specified allocator and the possibly new pointer is stored in the <code>array</code> argument.</p> 13.1356 +<p>On reallocation the capacity of the array is doubled until it is sufficient. The new capacity is stored back to <code>capacity</code>.</p> 13.1357 +<dl class="params"><dt>Parameters</dt><dd> 13.1358 + <table class="params"> 13.1359 + <tr><td class="paramname">alloc</td><td>the allocator that shall be used to reallocate the array </td></tr> 13.1360 + <tr><td class="paramname">array</td><td>a pointer to location of the array pointer </td></tr> 13.1361 + <tr><td class="paramname">capacity</td><td>a pointer to the capacity </td></tr> 13.1362 + <tr><td class="paramname">idx</td><td>the index of the element to set </td></tr> 13.1363 + <tr><td class="paramname">ptr</td><td>the pointer to store </td></tr> 13.1364 + </table> 13.1365 + </dd> 13.1366 +</dl> 13.1367 +<dl class="section return"><dt>Returns</dt><dd>zero on success or non-zero on error (errno will be set) </dd></dl> 13.1368 + 13.1369 +</div> 13.1370 +</div> 13.1371 +</div><!-- contents --> 13.1372 +<!-- start footer part --> 13.1373 +<hr class="footer"/><address class="footer"><small> 13.1374 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 13.1375 +<img class="footer" src="doxygen.png" alt="doxygen"/> 13.1376 +</a> 1.8.13 13.1377 +</small></address> 13.1378 +</body> 13.1379 +</html>
14.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 14.2 +++ b/docs/api-2.1/array_8h_source.html Sat Feb 06 19:11:44 2021 +0100 14.3 @@ -0,0 +1,113 @@ 14.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 14.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 14.6 +<head> 14.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 14.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 14.9 +<meta name="generator" content="Doxygen 1.8.13"/> 14.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 14.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/array.h Source File</title> 14.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 14.13 +<script type="text/javascript" src="jquery.js"></script> 14.14 +<script type="text/javascript" src="dynsections.js"></script> 14.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 14.16 +<script type="text/javascript" src="search/searchdata.js"></script> 14.17 +<script type="text/javascript" src="search/search.js"></script> 14.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 14.19 +</head> 14.20 +<body> 14.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 14.22 +<div id="titlearea"> 14.23 +<table cellspacing="0" cellpadding="0"> 14.24 + <tbody> 14.25 + <tr style="height: 56px;"> 14.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 14.27 + <td id="projectalign" style="padding-left: 0.5em;"> 14.28 + <div id="projectname">ucx 14.29 + </div> 14.30 + <div id="projectbrief">UAP Common Extensions</div> 14.31 + </td> 14.32 + </tr> 14.33 + </tbody> 14.34 +</table> 14.35 +</div> 14.36 +<!-- end header part --> 14.37 +<!-- Generated by Doxygen 1.8.13 --> 14.38 +<script type="text/javascript"> 14.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 14.40 +</script> 14.41 +<script type="text/javascript" src="menudata.js"></script> 14.42 +<script type="text/javascript" src="menu.js"></script> 14.43 +<script type="text/javascript"> 14.44 +$(function() { 14.45 + initMenu('',true,false,'search.php','Search'); 14.46 + $(document).ready(function() { init_search(); }); 14.47 +}); 14.48 +</script> 14.49 +<div id="main-nav"></div> 14.50 +<!-- window showing the filter options --> 14.51 +<div id="MSearchSelectWindow" 14.52 + onmouseover="return searchBox.OnSearchSelectShow()" 14.53 + onmouseout="return searchBox.OnSearchSelectHide()" 14.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 14.55 +</div> 14.56 + 14.57 +<!-- iframe showing the search results (closed by default) --> 14.58 +<div id="MSearchResultsWindow"> 14.59 +<iframe src="javascript:void(0)" frameborder="0" 14.60 + name="MSearchResults" id="MSearchResults"> 14.61 +</iframe> 14.62 +</div> 14.63 + 14.64 +<div id="nav-path" class="navpath"> 14.65 + <ul> 14.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 14.67 +</div> 14.68 +</div><!-- top --> 14.69 +<div class="header"> 14.70 + <div class="headertitle"> 14.71 +<div class="title">array.h</div> </div> 14.72 +</div><!--header--> 14.73 +<div class="contents"> 14.74 +<a href="array_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright 2019 Mike Becker, Olaf Wintermann All rights reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are met:</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * documentation and/or other materials provided with the distribution.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#ifndef UCX_ARRAY_H</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#define UCX_ARRAY_H</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "<a class="code" href="ucx_8h.html">ucx.h</a>"</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "<a class="code" href="allocator_8h.html">allocator.h</a>"</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="structUcxArray.html"> 49</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="structUcxArray.html#a7ed074887908e45bde7e1fbc67b31c18"> 53</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxArray.html#a7ed074887908e45bde7e1fbc67b31c18">capacity</a>;</div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="structUcxArray.html#a20c11f2c9048cda80062842b7c094e20"> 57</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxArray.html#a20c11f2c9048cda80062842b7c094e20">size</a>;</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="structUcxArray.html#ac4e9ecdf8a8d010644f6e44dfef8190f"> 61</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxArray.html#ac4e9ecdf8a8d010644f6e44dfef8190f">elemsize</a>;</div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="structUcxArray.html#a04d2b03d0a45af1fab19b4216602075a"> 65</a></span>  <span class="keywordtype">void</span>* <a class="code" href="structUcxArray.html#a04d2b03d0a45af1fab19b4216602075a">data</a>;</div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="structUcxArray.html#a2ef31303b7548b9aa8e2b9187e295212"> 69</a></span>  <a class="code" href="structUcxAllocator.html">UcxAllocator</a>* <a class="code" href="structUcxArray.html#a2ef31303b7548b9aa8e2b9187e295212">allocator</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> } <a class="code" href="structUcxArray.html">UcxArray</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="array_8h.html#a1d959c29af3125bdd37cde3a554e729c"> 89</a></span> <span class="preprocessor">#define ucx_array_util_set(array, capacity, elmsize, idx, data) \</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor"> ucx_array_util_set_a(ucx_default_allocator(), (void**)(array), capacity, \</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor"> elmsize, idx, data)</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">int</span> <a class="code" href="array_8h.html#ad0a8d76980cf1c1910e64a245803fb9a">ucx_array_util_set_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a>* alloc, <span class="keywordtype">void</span>** array, <span class="keywordtype">size_t</span>* capacity,</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordtype">size_t</span> elmsize, <span class="keywordtype">size_t</span> idx, <span class="keywordtype">void</span>* data);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="array_8h.html#a59a5b342965e790945f9c7a3f86b99f9"> 131</a></span> <span class="preprocessor">#define ucx_array_util_setptr(array, capacity, idx, ptr) \</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="preprocessor"> ucx_array_util_setptr_a(ucx_default_allocator(), (void**)(array), \</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor"> capacity, idx, ptr)</span></div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="keywordtype">int</span> <a class="code" href="array_8h.html#ad708b333c0c1b02c998309a58ea65e31">ucx_array_util_setptr_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a>* alloc, <span class="keywordtype">void</span>** array, <span class="keywordtype">size_t</span>* capacity,</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordtype">size_t</span> idx, <span class="keywordtype">void</span>* ptr);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <a class="code" href="structUcxArray.html">UcxArray</a>* <a class="code" href="array_8h.html#a994a2fbf1c33a3833e2a70cd9a4352b7">ucx_array_new</a>(<span class="keywordtype">size_t</span> capacity, <span class="keywordtype">size_t</span> elemsize);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> </div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <a class="code" href="structUcxArray.html">UcxArray</a>* <a class="code" href="array_8h.html#a177170258c215eb2e4f5a32e59f0cb1b">ucx_array_new_a</a>(<span class="keywordtype">size_t</span> capacity, <span class="keywordtype">size_t</span> elemsize,</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <a class="code" href="structUcxAllocator.html">UcxAllocator</a>* allocator);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keywordtype">void</span> <a class="code" href="array_8h.html#ad921e85c28ffae32230777a53c5037e5">ucx_array_init</a>(<a class="code" href="structUcxArray.html">UcxArray</a>* array, <span class="keywordtype">size_t</span> capacity, <span class="keywordtype">size_t</span> elemsize);</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">void</span> <a class="code" href="array_8h.html#a2451e61ebb15a7ba1c1319267ba75b8c">ucx_array_init_a</a>(<a class="code" href="structUcxArray.html">UcxArray</a>* array, <span class="keywordtype">size_t</span> capacity, <span class="keywordtype">size_t</span> elemsize,</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <a class="code" href="structUcxAllocator.html">UcxAllocator</a>* allocator);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordtype">int</span> <a class="code" href="array_8h.html#a4a8c273370e4a3a3e2624e364f5ab410">ucx_array_clone</a>(<a class="code" href="structUcxArray.html">UcxArray</a>* dest, <a class="code" href="structUcxArray.html">UcxArray</a> <span class="keyword">const</span>* src);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keywordtype">int</span> <a class="code" href="array_8h.html#a43292b448adb1741677aa8c578bcc201">ucx_array_equals</a>(<a class="code" href="structUcxArray.html">UcxArray</a> <span class="keyword">const</span> *array1, <a class="code" href="structUcxArray.html">UcxArray</a> <span class="keyword">const</span> *array2,</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, <span class="keywordtype">void</span>* data);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> <span class="keywordtype">void</span> <a class="code" href="array_8h.html#a8e83681d8d5d8cddbf10f63ce5be4c10">ucx_array_destroy</a>(<a class="code" href="structUcxArray.html">UcxArray</a> *array);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> <span class="keywordtype">void</span> <a class="code" href="array_8h.html#ac01ee914468a16f470bf3071fffbe438">ucx_array_free</a>(<a class="code" href="structUcxArray.html">UcxArray</a> *array);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> <span class="keywordtype">int</span> <a class="code" href="array_8h.html#aea01731ad94ea73c0c8fb1d1b7a35fcf">ucx_array_append_from</a>(<a class="code" href="structUcxArray.html">UcxArray</a> *array, <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> count);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> </div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> <span class="keywordtype">int</span> <a class="code" href="array_8h.html#a95b52acc2193b5c33cf0eaa4f2082477">ucx_array_prepend_from</a>(<a class="code" href="structUcxArray.html">UcxArray</a> *array, <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> count);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordtype">int</span> <a class="code" href="array_8h.html#a1bb545d065358d265d80d815ba382a28">ucx_array_set_from</a>(<a class="code" href="structUcxArray.html">UcxArray</a> *array, <span class="keywordtype">size_t</span> index, <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> count);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="keywordtype">int</span> <a class="code" href="array_8h.html#aa5a0bf3d3f0df6406beb0e569021cc28">ucx_array_concat</a>(<a class="code" href="structUcxArray.html">UcxArray</a> *array1, <span class="keyword">const</span> <a class="code" href="structUcxArray.html">UcxArray</a> *array2);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordtype">void</span> *<a class="code" href="array_8h.html#aa698085fd1a8b70d6b709999c51b49e8">ucx_array_at</a>(<a class="code" href="structUcxArray.html">UcxArray</a> <span class="keyword">const</span>* array, <span class="keywordtype">size_t</span> index);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="keywordtype">size_t</span> <a class="code" href="array_8h.html#ae7bdbed94afee9b20b38b95e3ab470f0">ucx_array_find</a>(<a class="code" href="structUcxArray.html">UcxArray</a> <span class="keyword">const</span> *array, <span class="keywordtype">void</span> *elem,</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keywordtype">int</span> <a class="code" href="array_8h.html#a5241058cd2329147bc5b1593ae7e51dc">ucx_array_contains</a>(<a class="code" href="structUcxArray.html">UcxArray</a> <span class="keyword">const</span> *array, <span class="keywordtype">void</span> *elem,</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span> <span class="keywordtype">void</span> <a class="code" href="array_8h.html#add773514569b872a6624381b4b6af52c">ucx_array_sort</a>(<a class="code" href="structUcxArray.html">UcxArray</a>* array, <a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="keywordtype">void</span> <a class="code" href="array_8h.html#aa45eac6b697f83adac81c0860cf306b8">ucx_array_remove</a>(<a class="code" href="structUcxArray.html">UcxArray</a> *array, <span class="keywordtype">size_t</span> index);</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keywordtype">void</span> <a class="code" href="array_8h.html#a548d81b07612bae3ba8c4c4b49104b8e">ucx_array_remove_fast</a>(<a class="code" href="structUcxArray.html">UcxArray</a> *array, <span class="keywordtype">size_t</span> index);</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keywordtype">int</span> <a class="code" href="array_8h.html#a2daf50e80aee9bccebee876a7efd2dfc">ucx_array_shrink</a>(<a class="code" href="structUcxArray.html">UcxArray</a>* array);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span> </div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <span class="keywordtype">int</span> <a class="code" href="array_8h.html#a27762e7c06a6c781015e3c8ceeee0ce3">ucx_array_resize</a>(<a class="code" href="structUcxArray.html">UcxArray</a>* array, <span class="keywordtype">size_t</span> capacity);</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> </div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span> <span class="keywordtype">int</span> <a class="code" href="array_8h.html#a1c3bf8433c1de3c933f3854ab297fe1d">ucx_array_reserve</a>(<a class="code" href="structUcxArray.html">UcxArray</a>* array, <span class="keywordtype">size_t</span> capacity);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> <span class="keywordtype">int</span> <a class="code" href="array_8h.html#ab0cbf243824aaebee48277315e03afce">ucx_array_grow</a>(<a class="code" href="structUcxArray.html">UcxArray</a>* array, <span class="keywordtype">size_t</span> count);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span> </div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span> </div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_ARRAY_H */</span><span class="preprocessor"></span></div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div><div class="ttc" id="array_8h_html_aea01731ad94ea73c0c8fb1d1b7a35fcf"><div class="ttname"><a href="array_8h.html#aea01731ad94ea73c0c8fb1d1b7a35fcf">ucx_array_append_from</a></div><div class="ttdeci">int ucx_array_append_from(UcxArray *array, void *data, size_t count)</div><div class="ttdoc">Inserts elements at the end of the array. </div><div class="ttdef"><b>Definition:</b> array.c:206</div></div> 14.75 +<div class="ttc" id="array_8h_html_a95b52acc2193b5c33cf0eaa4f2082477"><div class="ttname"><a href="array_8h.html#a95b52acc2193b5c33cf0eaa4f2082477">ucx_array_prepend_from</a></div><div class="ttdeci">int ucx_array_prepend_from(UcxArray *array, void *data, size_t count)</div><div class="ttdoc">Inserts elements at the beginning of the array. </div><div class="ttdef"><b>Definition:</b> array.c:221</div></div> 14.76 +<div class="ttc" id="array_8h_html_ab0cbf243824aaebee48277315e03afce"><div class="ttname"><a href="array_8h.html#ab0cbf243824aaebee48277315e03afce">ucx_array_grow</a></div><div class="ttdeci">int ucx_array_grow(UcxArray *array, size_t count)</div><div class="ttdoc">Resizes the capacity, if the specified number of elements would not fit. </div><div class="ttdef"><b>Definition:</b> array.c:465</div></div> 14.77 +<div class="ttc" id="ucx_8h_html_afe5e2d5dbf34778e0e97852051570791"><div class="ttname"><a href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a></div><div class="ttdeci">int(* cmp_func)(const void *, const void *, void *)</div><div class="ttdoc">Function pointer to a compare function. </div><div class="ttdef"><b>Definition:</b> ucx.h:84</div></div> 14.78 +<div class="ttc" id="array_8h_html_a2daf50e80aee9bccebee876a7efd2dfc"><div class="ttname"><a href="array_8h.html#a2daf50e80aee9bccebee876a7efd2dfc">ucx_array_shrink</a></div><div class="ttdeci">int ucx_array_shrink(UcxArray *array)</div><div class="ttdoc">Shrinks the memory to exactly fit the contents. </div><div class="ttdef"><b>Definition:</b> array.c:418</div></div> 14.79 +<div class="ttc" id="array_8h_html_aa5a0bf3d3f0df6406beb0e569021cc28"><div class="ttname"><a href="array_8h.html#aa5a0bf3d3f0df6406beb0e569021cc28">ucx_array_concat</a></div><div class="ttdeci">int ucx_array_concat(UcxArray *array1, const UcxArray *array2)</div><div class="ttdoc">Concatenates two arrays. </div><div class="ttdef"><b>Definition:</b> array.c:259</div></div> 14.80 +<div class="ttc" id="ucx_8h_html"><div class="ttname"><a href="ucx_8h.html">ucx.h</a></div><div class="ttdoc">Main UCX Header providing most common definitions. </div></div> 14.81 +<div class="ttc" id="structUcxArray_html_a7ed074887908e45bde7e1fbc67b31c18"><div class="ttname"><a href="structUcxArray.html#a7ed074887908e45bde7e1fbc67b31c18">UcxArray::capacity</a></div><div class="ttdeci">size_t capacity</div><div class="ttdoc">The current capacity of the array. </div><div class="ttdef"><b>Definition:</b> array.h:53</div></div> 14.82 +<div class="ttc" id="array_8h_html_ad0a8d76980cf1c1910e64a245803fb9a"><div class="ttname"><a href="array_8h.html#ad0a8d76980cf1c1910e64a245803fb9a">ucx_array_util_set_a</a></div><div class="ttdeci">int ucx_array_util_set_a(UcxAllocator *alloc, void **array, size_t *capacity, size_t elmsize, size_t idx, void *data)</div><div class="ttdoc">Sets an element in an arbitrary user defined array. </div><div class="ttdef"><b>Definition:</b> array.c:72</div></div> 14.83 +<div class="ttc" id="array_8h_html_a43292b448adb1741677aa8c578bcc201"><div class="ttname"><a href="array_8h.html#a43292b448adb1741677aa8c578bcc201">ucx_array_equals</a></div><div class="ttdeci">int ucx_array_equals(UcxArray const *array1, UcxArray const *array2, cmp_func cmpfnc, void *data)</div><div class="ttdoc">Compares two UCX arrays element-wise by using a compare function. </div><div class="ttdef"><b>Definition:</b> array.c:166</div></div> 14.84 +<div class="ttc" id="array_8h_html_a2451e61ebb15a7ba1c1319267ba75b8c"><div class="ttname"><a href="array_8h.html#a2451e61ebb15a7ba1c1319267ba75b8c">ucx_array_init_a</a></div><div class="ttdeci">void ucx_array_init_a(UcxArray *array, size_t capacity, size_t elemsize, UcxAllocator *allocator)</div><div class="ttdoc">Initializes a UCX array structure using the specified allocator. </div><div class="ttdef"><b>Definition:</b> array.c:136</div></div> 14.85 +<div class="ttc" id="array_8h_html_add773514569b872a6624381b4b6af52c"><div class="ttname"><a href="array_8h.html#add773514569b872a6624381b4b6af52c">ucx_array_sort</a></div><div class="ttdeci">void ucx_array_sort(UcxArray *array, cmp_func cmpfnc, void *data)</div><div class="ttdoc">Sorts a UcxArray with the best available sort algorithm. </div><div class="ttdef"><b>Definition:</b> array.c:395</div></div> 14.86 +<div class="ttc" id="structUcxArray_html_a04d2b03d0a45af1fab19b4216602075a"><div class="ttname"><a href="structUcxArray.html#a04d2b03d0a45af1fab19b4216602075a">UcxArray::data</a></div><div class="ttdeci">void * data</div><div class="ttdoc">A pointer to the data. </div><div class="ttdef"><b>Definition:</b> array.h:65</div></div> 14.87 +<div class="ttc" id="array_8h_html_a994a2fbf1c33a3833e2a70cd9a4352b7"><div class="ttname"><a href="array_8h.html#a994a2fbf1c33a3833e2a70cd9a4352b7">ucx_array_new</a></div><div class="ttdeci">UcxArray * ucx_array_new(size_t capacity, size_t elemsize)</div><div class="ttdoc">Creates a new UCX array with the given capacity and element size. </div><div class="ttdef"><b>Definition:</b> array.c:119</div></div> 14.88 +<div class="ttc" id="array_8h_html_aa45eac6b697f83adac81c0860cf306b8"><div class="ttname"><a href="array_8h.html#aa45eac6b697f83adac81c0860cf306b8">ucx_array_remove</a></div><div class="ttdeci">void ucx_array_remove(UcxArray *array, size_t index)</div><div class="ttdoc">Removes an element from the array. </div><div class="ttdef"><b>Definition:</b> array.c:400</div></div> 14.89 +<div class="ttc" id="structUcxArray_html_a2ef31303b7548b9aa8e2b9187e295212"><div class="ttname"><a href="structUcxArray.html#a2ef31303b7548b9aa8e2b9187e295212">UcxArray::allocator</a></div><div class="ttdeci">UcxAllocator * allocator</div><div class="ttdoc">The allocator used for the data. </div><div class="ttdef"><b>Definition:</b> array.h:69</div></div> 14.90 +<div class="ttc" id="array_8h_html_a1bb545d065358d265d80d815ba382a28"><div class="ttname"><a href="array_8h.html#a1bb545d065358d265d80d815ba382a28">ucx_array_set_from</a></div><div class="ttdeci">int ucx_array_set_from(UcxArray *array, size_t index, void *data, size_t count)</div><div class="ttdoc">Sets elements starting at the specified index. </div><div class="ttdef"><b>Definition:</b> array.c:240</div></div> 14.91 +<div class="ttc" id="array_8h_html_a548d81b07612bae3ba8c4c4b49104b8e"><div class="ttname"><a href="array_8h.html#a548d81b07612bae3ba8c4c4b49104b8e">ucx_array_remove_fast</a></div><div class="ttdeci">void ucx_array_remove_fast(UcxArray *array, size_t index)</div><div class="ttdoc">Removes an element from the array. </div><div class="ttdef"><b>Definition:</b> array.c:409</div></div> 14.92 +<div class="ttc" id="structUcxAllocator_html"><div class="ttname"><a href="structUcxAllocator.html">UcxAllocator</a></div><div class="ttdoc">UCX allocator data structure containing memory management functions. </div><div class="ttdef"><b>Definition:</b> allocator.h:88</div></div> 14.93 +<div class="ttc" id="array_8h_html_a5241058cd2329147bc5b1593ae7e51dc"><div class="ttname"><a href="array_8h.html#a5241058cd2329147bc5b1593ae7e51dc">ucx_array_contains</a></div><div class="ttdeci">int ucx_array_contains(UcxArray const *array, void *elem, cmp_func cmpfnc, void *data)</div><div class="ttdoc">Checks, if an array contains a specific element. </div><div class="ttdef"><b>Definition:</b> array.c:309</div></div> 14.94 +<div class="ttc" id="array_8h_html_ae7bdbed94afee9b20b38b95e3ab470f0"><div class="ttname"><a href="array_8h.html#ae7bdbed94afee9b20b38b95e3ab470f0">ucx_array_find</a></div><div class="ttdeci">size_t ucx_array_find(UcxArray const *array, void *elem, cmp_func cmpfnc, void *data)</div><div class="ttdoc">Returns the index of an element containing the specified data. </div><div class="ttdef"><b>Definition:</b> array.c:286</div></div> 14.95 +<div class="ttc" id="structUcxArray_html"><div class="ttname"><a href="structUcxArray.html">UcxArray</a></div><div class="ttdoc">UCX array type. </div><div class="ttdef"><b>Definition:</b> array.h:49</div></div> 14.96 +<div class="ttc" id="structUcxArray_html_a20c11f2c9048cda80062842b7c094e20"><div class="ttname"><a href="structUcxArray.html#a20c11f2c9048cda80062842b7c094e20">UcxArray::size</a></div><div class="ttdeci">size_t size</div><div class="ttdoc">The actual number of elements in the array. </div><div class="ttdef"><b>Definition:</b> array.h:57</div></div> 14.97 +<div class="ttc" id="array_8h_html_a8e83681d8d5d8cddbf10f63ce5be4c10"><div class="ttname"><a href="array_8h.html#a8e83681d8d5d8cddbf10f63ce5be4c10">ucx_array_destroy</a></div><div class="ttdeci">void ucx_array_destroy(UcxArray *array)</div><div class="ttdoc">Destroys the array. </div><div class="ttdef"><b>Definition:</b> array.c:194</div></div> 14.98 +<div class="ttc" id="array_8h_html_ad708b333c0c1b02c998309a58ea65e31"><div class="ttname"><a href="array_8h.html#ad708b333c0c1b02c998309a58ea65e31">ucx_array_util_setptr_a</a></div><div class="ttdeci">int ucx_array_util_setptr_a(UcxAllocator *alloc, void **array, size_t *capacity, size_t idx, void *ptr)</div><div class="ttdoc">Stores a pointer in an arbitrary user defined array. </div><div class="ttdef"><b>Definition:</b> array.c:112</div></div> 14.99 +<div class="ttc" id="allocator_8h_html"><div class="ttname"><a href="allocator_8h.html">allocator.h</a></div><div class="ttdoc">Allocator for custom memory management. </div></div> 14.100 +<div class="ttc" id="array_8h_html_ac01ee914468a16f470bf3071fffbe438"><div class="ttname"><a href="array_8h.html#ac01ee914468a16f470bf3071fffbe438">ucx_array_free</a></div><div class="ttdeci">void ucx_array_free(UcxArray *array)</div><div class="ttdoc">Destroys and frees the array. </div><div class="ttdef"><b>Definition:</b> array.c:201</div></div> 14.101 +<div class="ttc" id="array_8h_html_a4a8c273370e4a3a3e2624e364f5ab410"><div class="ttname"><a href="array_8h.html#a4a8c273370e4a3a3e2624e364f5ab410">ucx_array_clone</a></div><div class="ttdeci">int ucx_array_clone(UcxArray *dest, UcxArray const *src)</div><div class="ttdoc">Creates an shallow copy of an array. </div><div class="ttdef"><b>Definition:</b> array.c:151</div></div> 14.102 +<div class="ttc" id="array_8h_html_aa698085fd1a8b70d6b709999c51b49e8"><div class="ttname"><a href="array_8h.html#aa698085fd1a8b70d6b709999c51b49e8">ucx_array_at</a></div><div class="ttdeci">void * ucx_array_at(UcxArray const *array, size_t index)</div><div class="ttdoc">Returns a pointer to the array element at the specified index. </div><div class="ttdef"><b>Definition:</b> array.c:280</div></div> 14.103 +<div class="ttc" id="array_8h_html_a27762e7c06a6c781015e3c8ceeee0ce3"><div class="ttname"><a href="array_8h.html#a27762e7c06a6c781015e3c8ceeee0ce3">ucx_array_resize</a></div><div class="ttdeci">int ucx_array_resize(UcxArray *array, size_t capacity)</div><div class="ttdoc">Sets the capacity of the array. </div><div class="ttdef"><b>Definition:</b> array.c:430</div></div> 14.104 +<div class="ttc" id="array_8h_html_ad921e85c28ffae32230777a53c5037e5"><div class="ttname"><a href="array_8h.html#ad921e85c28ffae32230777a53c5037e5">ucx_array_init</a></div><div class="ttdeci">void ucx_array_init(UcxArray *array, size_t capacity, size_t elemsize)</div><div class="ttdoc">Initializes a UCX array structure with the given capacity and element size. </div><div class="ttdef"><b>Definition:</b> array.c:132</div></div> 14.105 +<div class="ttc" id="structUcxArray_html_ac4e9ecdf8a8d010644f6e44dfef8190f"><div class="ttname"><a href="structUcxArray.html#ac4e9ecdf8a8d010644f6e44dfef8190f">UcxArray::elemsize</a></div><div class="ttdeci">size_t elemsize</div><div class="ttdoc">The size of an individual element in bytes. </div><div class="ttdef"><b>Definition:</b> array.h:61</div></div> 14.106 +<div class="ttc" id="array_8h_html_a1c3bf8433c1de3c933f3854ab297fe1d"><div class="ttname"><a href="array_8h.html#a1c3bf8433c1de3c933f3854ab297fe1d">ucx_array_reserve</a></div><div class="ttdeci">int ucx_array_reserve(UcxArray *array, size_t capacity)</div><div class="ttdoc">Resizes the array only, if the capacity is insufficient. </div><div class="ttdef"><b>Definition:</b> array.c:449</div></div> 14.107 +<div class="ttc" id="array_8h_html_a177170258c215eb2e4f5a32e59f0cb1b"><div class="ttname"><a href="array_8h.html#a177170258c215eb2e4f5a32e59f0cb1b">ucx_array_new_a</a></div><div class="ttdeci">UcxArray * ucx_array_new_a(size_t capacity, size_t elemsize, UcxAllocator *allocator)</div><div class="ttdoc">Creates a new UCX array using the specified allocator. </div><div class="ttdef"><b>Definition:</b> array.c:123</div></div> 14.108 +</div><!-- fragment --></div><!-- contents --> 14.109 +<!-- start footer part --> 14.110 +<hr class="footer"/><address class="footer"><small> 14.111 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 14.112 +<img class="footer" src="doxygen.png" alt="doxygen"/> 14.113 +</a> 1.8.13 14.114 +</small></address> 14.115 +</body> 14.116 +</html>
15.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 15.2 +++ b/docs/api-2.1/avl_8h.html Sat Feb 06 19:11:44 2021 +0100 15.3 @@ -0,0 +1,883 @@ 15.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 15.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 15.6 +<head> 15.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 15.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 15.9 +<meta name="generator" content="Doxygen 1.8.13"/> 15.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 15.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/avl.h File Reference</title> 15.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 15.13 +<script type="text/javascript" src="jquery.js"></script> 15.14 +<script type="text/javascript" src="dynsections.js"></script> 15.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 15.16 +<script type="text/javascript" src="search/searchdata.js"></script> 15.17 +<script type="text/javascript" src="search/search.js"></script> 15.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 15.19 +</head> 15.20 +<body> 15.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 15.22 +<div id="titlearea"> 15.23 +<table cellspacing="0" cellpadding="0"> 15.24 + <tbody> 15.25 + <tr style="height: 56px;"> 15.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 15.27 + <td id="projectalign" style="padding-left: 0.5em;"> 15.28 + <div id="projectname">ucx 15.29 + </div> 15.30 + <div id="projectbrief">UAP Common Extensions</div> 15.31 + </td> 15.32 + </tr> 15.33 + </tbody> 15.34 +</table> 15.35 +</div> 15.36 +<!-- end header part --> 15.37 +<!-- Generated by Doxygen 1.8.13 --> 15.38 +<script type="text/javascript"> 15.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 15.40 +</script> 15.41 +<script type="text/javascript" src="menudata.js"></script> 15.42 +<script type="text/javascript" src="menu.js"></script> 15.43 +<script type="text/javascript"> 15.44 +$(function() { 15.45 + initMenu('',true,false,'search.php','Search'); 15.46 + $(document).ready(function() { init_search(); }); 15.47 +}); 15.48 +</script> 15.49 +<div id="main-nav"></div> 15.50 +<!-- window showing the filter options --> 15.51 +<div id="MSearchSelectWindow" 15.52 + onmouseover="return searchBox.OnSearchSelectShow()" 15.53 + onmouseout="return searchBox.OnSearchSelectHide()" 15.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 15.55 +</div> 15.56 + 15.57 +<!-- iframe showing the search results (closed by default) --> 15.58 +<div id="MSearchResultsWindow"> 15.59 +<iframe src="javascript:void(0)" frameborder="0" 15.60 + name="MSearchResults" id="MSearchResults"> 15.61 +</iframe> 15.62 +</div> 15.63 + 15.64 +<div id="nav-path" class="navpath"> 15.65 + <ul> 15.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 15.67 +</div> 15.68 +</div><!-- top --> 15.69 +<div class="header"> 15.70 + <div class="summary"> 15.71 +<a href="#nested-classes">Data Structures</a> | 15.72 +<a href="#define-members">Macros</a> | 15.73 +<a href="#typedef-members">Typedefs</a> | 15.74 +<a href="#func-members">Functions</a> </div> 15.75 + <div class="headertitle"> 15.76 +<div class="title">avl.h File Reference</div> </div> 15.77 +</div><!--header--> 15.78 +<div class="contents"> 15.79 + 15.80 +<p>AVL tree implementation. 15.81 +<a href="#details">More...</a></p> 15.82 +<div class="textblock"><code>#include "<a class="el" href="ucx_8h_source.html">ucx.h</a>"</code><br /> 15.83 +<code>#include "<a class="el" href="allocator_8h_source.html">allocator.h</a>"</code><br /> 15.84 +<code>#include <inttypes.h></code><br /> 15.85 +</div> 15.86 +<p><a href="avl_8h_source.html">Go to the source code of this file.</a></p> 15.87 +<table class="memberdecls"> 15.88 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> 15.89 +Data Structures</h2></td></tr> 15.90 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAVLNode.html">UcxAVLNode</a></td></tr> 15.91 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">UCX AVL Node. <a href="structUcxAVLNode.html#details">More...</a><br /></td></tr> 15.92 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 15.93 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a></td></tr> 15.94 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">UCX AVL Tree. <a href="structUcxAVLTree.html#details">More...</a><br /></td></tr> 15.95 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 15.96 +</table><table class="memberdecls"> 15.97 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> 15.98 +Macros</h2></td></tr> 15.99 +<tr class="memitem:ac2886d4b79b48c9fabf6408873f84cd2"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#ac2886d4b79b48c9fabf6408873f84cd2">ucx_avl_default_new</a>()   <a class="el" href="avl_8h.html#af0f868d67e9dc08b4867c02a06c23ee2">ucx_avl_new_a</a>(<a class="el" href="utils_8h.html#aa174d539de3ea59be4f9640f17ce53d8">ucx_cmp_ptr</a>, <a class="el" href="allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf">ucx_default_allocator</a>())</td></tr> 15.100 +<tr class="memdesc:ac2886d4b79b48c9fabf6408873f84cd2"><td class="mdescLeft"> </td><td class="mdescRight">Macro for initializing a new <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> with the default allocator and a <a class="el" href="utils_8h.html#aa174d539de3ea59be4f9640f17ce53d8" title="Compares two pointers. ">ucx_cmp_ptr()</a> compare function. <a href="#ac2886d4b79b48c9fabf6408873f84cd2">More...</a><br /></td></tr> 15.101 +<tr class="separator:ac2886d4b79b48c9fabf6408873f84cd2"><td class="memSeparator" colspan="2"> </td></tr> 15.102 +<tr class="memitem:aaaf4a6f6f661cda7791db239212285d9"><td class="memItemLeft" align="right" valign="top"><a id="aaaf4a6f6f661cda7791db239212285d9"></a> 15.103 +#define </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#aaaf4a6f6f661cda7791db239212285d9">UCX_AVL_FIND_EXACT</a>   0</td></tr> 15.104 +<tr class="memdesc:aaaf4a6f6f661cda7791db239212285d9"><td class="mdescLeft"> </td><td class="mdescRight">A mode for <a class="el" href="avl_8h.html#a664986f64d6865605199fbff06e19cd5" title="Finds a node within the tree. ">ucx_avl_find_node()</a> with the same behavior as <a class="el" href="avl_8h.html#acf42da9a4168e47dc10b4ba0d27ceb4e" title="Gets the node from the tree, that is associated with the specified key. ">ucx_avl_get_node()</a>. <br /></td></tr> 15.105 +<tr class="separator:aaaf4a6f6f661cda7791db239212285d9"><td class="memSeparator" colspan="2"> </td></tr> 15.106 +<tr class="memitem:abd2446d544d5412b6997ee8a17bd368c"><td class="memItemLeft" align="right" valign="top"><a id="abd2446d544d5412b6997ee8a17bd368c"></a> 15.107 +#define </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#abd2446d544d5412b6997ee8a17bd368c">UCX_AVL_FIND_LOWER_BOUNDED</a>   1</td></tr> 15.108 +<tr class="memdesc:abd2446d544d5412b6997ee8a17bd368c"><td class="mdescLeft"> </td><td class="mdescRight">A mode for <a class="el" href="avl_8h.html#a664986f64d6865605199fbff06e19cd5" title="Finds a node within the tree. ">ucx_avl_find_node()</a> finding the node whose key is at least as large as the specified key. <br /></td></tr> 15.109 +<tr class="separator:abd2446d544d5412b6997ee8a17bd368c"><td class="memSeparator" colspan="2"> </td></tr> 15.110 +<tr class="memitem:ac74ee7649c1e206b08b31f37dd68ca5e"><td class="memItemLeft" align="right" valign="top"><a id="ac74ee7649c1e206b08b31f37dd68ca5e"></a> 15.111 +#define </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#ac74ee7649c1e206b08b31f37dd68ca5e">UCX_AVL_FIND_UPPER_BOUNDED</a>   2</td></tr> 15.112 +<tr class="memdesc:ac74ee7649c1e206b08b31f37dd68ca5e"><td class="mdescLeft"> </td><td class="mdescRight">A mode for <a class="el" href="avl_8h.html#a664986f64d6865605199fbff06e19cd5" title="Finds a node within the tree. ">ucx_avl_find_node()</a> finding the node whose key is at most as large as the specified key. <br /></td></tr> 15.113 +<tr class="separator:ac74ee7649c1e206b08b31f37dd68ca5e"><td class="memSeparator" colspan="2"> </td></tr> 15.114 +<tr class="memitem:af16f24d74fd6af0154de041566c6603b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#af16f24d74fd6af0154de041566c6603b">UCX_AVL_FIND_CLOSEST</a>   3</td></tr> 15.115 +<tr class="memdesc:af16f24d74fd6af0154de041566c6603b"><td class="mdescLeft"> </td><td class="mdescRight">A mode for <a class="el" href="avl_8h.html#a664986f64d6865605199fbff06e19cd5" title="Finds a node within the tree. ">ucx_avl_find_node()</a> finding the node with a key that is as close to the specified key as possible. <a href="#af16f24d74fd6af0154de041566c6603b">More...</a><br /></td></tr> 15.116 +<tr class="separator:af16f24d74fd6af0154de041566c6603b"><td class="memSeparator" colspan="2"> </td></tr> 15.117 +</table><table class="memberdecls"> 15.118 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> 15.119 +Typedefs</h2></td></tr> 15.120 +<tr class="memitem:a08ba2496c2316df58548c3cc29712add"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#a08ba2496c2316df58548c3cc29712add">UcxAVLNode</a></td></tr> 15.121 +<tr class="memdesc:a08ba2496c2316df58548c3cc29712add"><td class="mdescLeft"> </td><td class="mdescRight">UCX AVL Node type. <a href="#a08ba2496c2316df58548c3cc29712add">More...</a><br /></td></tr> 15.122 +<tr class="separator:a08ba2496c2316df58548c3cc29712add"><td class="memSeparator" colspan="2"> </td></tr> 15.123 +</table><table class="memberdecls"> 15.124 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 15.125 +Functions</h2></td></tr> 15.126 +<tr class="memitem:a11b043d65a11b7092d5d98b298e5ede3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#a11b043d65a11b7092d5d98b298e5ede3">ucx_avl_new</a> (<a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfunc)</td></tr> 15.127 +<tr class="memdesc:a11b043d65a11b7092d5d98b298e5ede3"><td class="mdescLeft"> </td><td class="mdescRight">Initializes a new <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> with a default allocator. <a href="#a11b043d65a11b7092d5d98b298e5ede3">More...</a><br /></td></tr> 15.128 +<tr class="separator:a11b043d65a11b7092d5d98b298e5ede3"><td class="memSeparator" colspan="2"> </td></tr> 15.129 +<tr class="memitem:af0f868d67e9dc08b4867c02a06c23ee2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#af0f868d67e9dc08b4867c02a06c23ee2">ucx_avl_new_a</a> (<a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfunc, <a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator)</td></tr> 15.130 +<tr class="memdesc:af0f868d67e9dc08b4867c02a06c23ee2"><td class="mdescLeft"> </td><td class="mdescRight">Initializes a new <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> with the specified allocator. <a href="#af0f868d67e9dc08b4867c02a06c23ee2">More...</a><br /></td></tr> 15.131 +<tr class="separator:af0f868d67e9dc08b4867c02a06c23ee2"><td class="memSeparator" colspan="2"> </td></tr> 15.132 +<tr class="memitem:a2f92db538f25fce908d2cb3e5590944c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#a2f92db538f25fce908d2cb3e5590944c">ucx_avl_free</a> (<a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> *tree)</td></tr> 15.133 +<tr class="memdesc:a2f92db538f25fce908d2cb3e5590944c"><td class="mdescLeft"> </td><td class="mdescRight">Destroys a <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a>. <a href="#a2f92db538f25fce908d2cb3e5590944c">More...</a><br /></td></tr> 15.134 +<tr class="separator:a2f92db538f25fce908d2cb3e5590944c"><td class="memSeparator" colspan="2"> </td></tr> 15.135 +<tr class="memitem:a31ad7fb196ca211f1fc39f4e15f72279"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#a31ad7fb196ca211f1fc39f4e15f72279">ucx_avl_free_content</a> (<a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, <a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> destr)</td></tr> 15.136 +<tr class="memdesc:a31ad7fb196ca211f1fc39f4e15f72279"><td class="mdescLeft"> </td><td class="mdescRight">Frees the contents of a <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a>. <a href="#a31ad7fb196ca211f1fc39f4e15f72279">More...</a><br /></td></tr> 15.137 +<tr class="separator:a31ad7fb196ca211f1fc39f4e15f72279"><td class="memSeparator" colspan="2"> </td></tr> 15.138 +<tr class="memitem:acf42da9a4168e47dc10b4ba0d27ceb4e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#acf42da9a4168e47dc10b4ba0d27ceb4e">ucx_avl_get_node</a> (<a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t key)</td></tr> 15.139 +<tr class="memdesc:acf42da9a4168e47dc10b4ba0d27ceb4e"><td class="mdescLeft"> </td><td class="mdescRight">Gets the node from the tree, that is associated with the specified key. <a href="#acf42da9a4168e47dc10b4ba0d27ceb4e">More...</a><br /></td></tr> 15.140 +<tr class="separator:acf42da9a4168e47dc10b4ba0d27ceb4e"><td class="memSeparator" colspan="2"> </td></tr> 15.141 +<tr class="memitem:adbcf7ceb3f014a30c7214f7304519efe"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#adbcf7ceb3f014a30c7214f7304519efe">ucx_avl_get</a> (<a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t key)</td></tr> 15.142 +<tr class="memdesc:adbcf7ceb3f014a30c7214f7304519efe"><td class="mdescLeft"> </td><td class="mdescRight">Gets the value from the tree, that is associated with the specified key. <a href="#adbcf7ceb3f014a30c7214f7304519efe">More...</a><br /></td></tr> 15.143 +<tr class="separator:adbcf7ceb3f014a30c7214f7304519efe"><td class="memSeparator" colspan="2"> </td></tr> 15.144 +<tr class="memitem:a664986f64d6865605199fbff06e19cd5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#a664986f64d6865605199fbff06e19cd5">ucx_avl_find_node</a> (<a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t key, <a class="el" href="ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9">distance_func</a> dfnc, int mode)</td></tr> 15.145 +<tr class="memdesc:a664986f64d6865605199fbff06e19cd5"><td class="mdescLeft"> </td><td class="mdescRight">Finds a node within the tree. <a href="#a664986f64d6865605199fbff06e19cd5">More...</a><br /></td></tr> 15.146 +<tr class="separator:a664986f64d6865605199fbff06e19cd5"><td class="memSeparator" colspan="2"> </td></tr> 15.147 +<tr class="memitem:a51770e1614b28d7d22dea096c3704f83"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#a51770e1614b28d7d22dea096c3704f83">ucx_avl_find</a> (<a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t key, <a class="el" href="ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9">distance_func</a> dfnc, int mode)</td></tr> 15.148 +<tr class="memdesc:a51770e1614b28d7d22dea096c3704f83"><td class="mdescLeft"> </td><td class="mdescRight">Finds a value within the tree. <a href="#a51770e1614b28d7d22dea096c3704f83">More...</a><br /></td></tr> 15.149 +<tr class="separator:a51770e1614b28d7d22dea096c3704f83"><td class="memSeparator" colspan="2"> </td></tr> 15.150 +<tr class="memitem:aec401fab4a24a7edffa734f9baf88577"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#aec401fab4a24a7edffa734f9baf88577">ucx_avl_put</a> (<a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t key, void *value)</td></tr> 15.151 +<tr class="memdesc:aec401fab4a24a7edffa734f9baf88577"><td class="mdescLeft"> </td><td class="mdescRight">Puts a key/value pair into the tree. <a href="#aec401fab4a24a7edffa734f9baf88577">More...</a><br /></td></tr> 15.152 +<tr class="separator:aec401fab4a24a7edffa734f9baf88577"><td class="memSeparator" colspan="2"> </td></tr> 15.153 +<tr class="memitem:a32cf8955cc0226a82bacfc7b76d6474c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#a32cf8955cc0226a82bacfc7b76d6474c">ucx_avl_put_s</a> (<a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t key, void *value, void **oldvalue)</td></tr> 15.154 +<tr class="memdesc:a32cf8955cc0226a82bacfc7b76d6474c"><td class="mdescLeft"> </td><td class="mdescRight">Puts a key/value pair into the tree. <a href="#a32cf8955cc0226a82bacfc7b76d6474c">More...</a><br /></td></tr> 15.155 +<tr class="separator:a32cf8955cc0226a82bacfc7b76d6474c"><td class="memSeparator" colspan="2"> </td></tr> 15.156 +<tr class="memitem:a9a792b7d9e58073deef74a341f8bc720"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#a9a792b7d9e58073deef74a341f8bc720">ucx_avl_remove_node</a> (<a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, <a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> *node)</td></tr> 15.157 +<tr class="memdesc:a9a792b7d9e58073deef74a341f8bc720"><td class="mdescLeft"> </td><td class="mdescRight">Removes a node from the AVL tree. <a href="#a9a792b7d9e58073deef74a341f8bc720">More...</a><br /></td></tr> 15.158 +<tr class="separator:a9a792b7d9e58073deef74a341f8bc720"><td class="memSeparator" colspan="2"> </td></tr> 15.159 +<tr class="memitem:a1d821119c805d7fbb7e424bc3effeba9"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#a1d821119c805d7fbb7e424bc3effeba9">ucx_avl_remove</a> (<a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t key)</td></tr> 15.160 +<tr class="memdesc:a1d821119c805d7fbb7e424bc3effeba9"><td class="mdescLeft"> </td><td class="mdescRight">Removes an element from the AVL tree. <a href="#a1d821119c805d7fbb7e424bc3effeba9">More...</a><br /></td></tr> 15.161 +<tr class="separator:a1d821119c805d7fbb7e424bc3effeba9"><td class="memSeparator" colspan="2"> </td></tr> 15.162 +<tr class="memitem:a01aeeecd6415f0cc2b623486eb28f254"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#a01aeeecd6415f0cc2b623486eb28f254">ucx_avl_remove_s</a> (<a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t key, intptr_t *oldkey, void **oldvalue)</td></tr> 15.163 +<tr class="memdesc:a01aeeecd6415f0cc2b623486eb28f254"><td class="mdescLeft"> </td><td class="mdescRight">Removes an element from the AVL tree. <a href="#a01aeeecd6415f0cc2b623486eb28f254">More...</a><br /></td></tr> 15.164 +<tr class="separator:a01aeeecd6415f0cc2b623486eb28f254"><td class="memSeparator" colspan="2"> </td></tr> 15.165 +<tr class="memitem:a92c1d41c2b22fe4a029a486ab2153e35"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#a92c1d41c2b22fe4a029a486ab2153e35">ucx_avl_count</a> (<a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> *tree)</td></tr> 15.166 +<tr class="memdesc:a92c1d41c2b22fe4a029a486ab2153e35"><td class="mdescLeft"> </td><td class="mdescRight">Counts the nodes in the specified <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a>. <a href="#a92c1d41c2b22fe4a029a486ab2153e35">More...</a><br /></td></tr> 15.167 +<tr class="separator:a92c1d41c2b22fe4a029a486ab2153e35"><td class="memSeparator" colspan="2"> </td></tr> 15.168 +<tr class="memitem:a0e739aeb66dda6a6a3f6eb51b50cf346"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#a0e739aeb66dda6a6a3f6eb51b50cf346">ucx_avl_pred</a> (<a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> *node)</td></tr> 15.169 +<tr class="memdesc:a0e739aeb66dda6a6a3f6eb51b50cf346"><td class="mdescLeft"> </td><td class="mdescRight">Finds the in-order predecessor of the given node. <a href="#a0e739aeb66dda6a6a3f6eb51b50cf346">More...</a><br /></td></tr> 15.170 +<tr class="separator:a0e739aeb66dda6a6a3f6eb51b50cf346"><td class="memSeparator" colspan="2"> </td></tr> 15.171 +<tr class="memitem:aab1ad9b027ff5e50671aa0ee84e2d541"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html#aab1ad9b027ff5e50671aa0ee84e2d541">ucx_avl_succ</a> (<a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> *node)</td></tr> 15.172 +<tr class="memdesc:aab1ad9b027ff5e50671aa0ee84e2d541"><td class="mdescLeft"> </td><td class="mdescRight">Finds the in-order successor of the given node. <a href="#aab1ad9b027ff5e50671aa0ee84e2d541">More...</a><br /></td></tr> 15.173 +<tr class="separator:aab1ad9b027ff5e50671aa0ee84e2d541"><td class="memSeparator" colspan="2"> </td></tr> 15.174 +</table> 15.175 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 15.176 +<div class="textblock"><p>AVL tree implementation. </p> 15.177 +<p>This binary search tree implementation allows average O(1) insertion and removal of elements (excluding binary search time).</p> 15.178 +<dl class="section author"><dt>Author</dt><dd>Mike Becker </dd> 15.179 +<dd> 15.180 +Olaf Wintermann </dd></dl> 15.181 +</div><h2 class="groupheader">Macro Definition Documentation</h2> 15.182 +<a id="ac2886d4b79b48c9fabf6408873f84cd2"></a> 15.183 +<h2 class="memtitle"><span class="permalink"><a href="#ac2886d4b79b48c9fabf6408873f84cd2">◆ </a></span>ucx_avl_default_new</h2> 15.184 + 15.185 +<div class="memitem"> 15.186 +<div class="memproto"> 15.187 + <table class="memname"> 15.188 + <tr> 15.189 + <td class="memname">#define ucx_avl_default_new</td> 15.190 + <td>(</td> 15.191 + <td class="paramname"></td><td>)</td> 15.192 + <td>   <a class="el" href="avl_8h.html#af0f868d67e9dc08b4867c02a06c23ee2">ucx_avl_new_a</a>(<a class="el" href="utils_8h.html#aa174d539de3ea59be4f9640f17ce53d8">ucx_cmp_ptr</a>, <a class="el" href="allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf">ucx_default_allocator</a>())</td> 15.193 + </tr> 15.194 + </table> 15.195 +</div><div class="memdoc"> 15.196 + 15.197 +<p>Macro for initializing a new <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> with the default allocator and a <a class="el" href="utils_8h.html#aa174d539de3ea59be4f9640f17ce53d8" title="Compares two pointers. ">ucx_cmp_ptr()</a> compare function. </p> 15.198 +<dl class="section return"><dt>Returns</dt><dd>a new default <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> object </dd></dl> 15.199 + 15.200 +</div> 15.201 +</div> 15.202 +<a id="af16f24d74fd6af0154de041566c6603b"></a> 15.203 +<h2 class="memtitle"><span class="permalink"><a href="#af16f24d74fd6af0154de041566c6603b">◆ </a></span>UCX_AVL_FIND_CLOSEST</h2> 15.204 + 15.205 +<div class="memitem"> 15.206 +<div class="memproto"> 15.207 + <table class="memname"> 15.208 + <tr> 15.209 + <td class="memname">#define UCX_AVL_FIND_CLOSEST   3</td> 15.210 + </tr> 15.211 + </table> 15.212 +</div><div class="memdoc"> 15.213 + 15.214 +<p>A mode for <a class="el" href="avl_8h.html#a664986f64d6865605199fbff06e19cd5" title="Finds a node within the tree. ">ucx_avl_find_node()</a> finding the node with a key that is as close to the specified key as possible. </p> 15.215 +<p>If the key is present, the behavior is like <a class="el" href="avl_8h.html#acf42da9a4168e47dc10b4ba0d27ceb4e" title="Gets the node from the tree, that is associated with the specified key. ">ucx_avl_get_node()</a>. This mode only returns <code>NULL</code> on empty trees. </p> 15.216 + 15.217 +</div> 15.218 +</div> 15.219 +<h2 class="groupheader">Typedef Documentation</h2> 15.220 +<a id="a08ba2496c2316df58548c3cc29712add"></a> 15.221 +<h2 class="memtitle"><span class="permalink"><a href="#a08ba2496c2316df58548c3cc29712add">◆ </a></span>UcxAVLNode</h2> 15.222 + 15.223 +<div class="memitem"> 15.224 +<div class="memproto"> 15.225 + <table class="memname"> 15.226 + <tr> 15.227 + <td class="memname">typedef struct <a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> <a class="el" href="structUcxAVLNode.html">UcxAVLNode</a></td> 15.228 + </tr> 15.229 + </table> 15.230 +</div><div class="memdoc"> 15.231 + 15.232 +<p>UCX AVL Node type. </p> 15.233 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="structUcxAVLNode.html" title="UCX AVL Node. ">UcxAVLNode</a> </dd></dl> 15.234 + 15.235 +</div> 15.236 +</div> 15.237 +<h2 class="groupheader">Function Documentation</h2> 15.238 +<a id="a92c1d41c2b22fe4a029a486ab2153e35"></a> 15.239 +<h2 class="memtitle"><span class="permalink"><a href="#a92c1d41c2b22fe4a029a486ab2153e35">◆ </a></span>ucx_avl_count()</h2> 15.240 + 15.241 +<div class="memitem"> 15.242 +<div class="memproto"> 15.243 + <table class="memname"> 15.244 + <tr> 15.245 + <td class="memname">size_t ucx_avl_count </td> 15.246 + <td>(</td> 15.247 + <td class="paramtype"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> * </td> 15.248 + <td class="paramname"><em>tree</em></td><td>)</td> 15.249 + <td></td> 15.250 + </tr> 15.251 + </table> 15.252 +</div><div class="memdoc"> 15.253 + 15.254 +<p>Counts the nodes in the specified <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a>. </p> 15.255 +<dl class="params"><dt>Parameters</dt><dd> 15.256 + <table class="params"> 15.257 + <tr><td class="paramname">tree</td><td>the AVL tree </td></tr> 15.258 + </table> 15.259 + </dd> 15.260 +</dl> 15.261 +<dl class="section return"><dt>Returns</dt><dd>the node count </dd></dl> 15.262 + 15.263 +</div> 15.264 +</div> 15.265 +<a id="a51770e1614b28d7d22dea096c3704f83"></a> 15.266 +<h2 class="memtitle"><span class="permalink"><a href="#a51770e1614b28d7d22dea096c3704f83">◆ </a></span>ucx_avl_find()</h2> 15.267 + 15.268 +<div class="memitem"> 15.269 +<div class="memproto"> 15.270 + <table class="memname"> 15.271 + <tr> 15.272 + <td class="memname">void* ucx_avl_find </td> 15.273 + <td>(</td> 15.274 + <td class="paramtype"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> * </td> 15.275 + <td class="paramname"><em>tree</em>, </td> 15.276 + </tr> 15.277 + <tr> 15.278 + <td class="paramkey"></td> 15.279 + <td></td> 15.280 + <td class="paramtype">intptr_t </td> 15.281 + <td class="paramname"><em>key</em>, </td> 15.282 + </tr> 15.283 + <tr> 15.284 + <td class="paramkey"></td> 15.285 + <td></td> 15.286 + <td class="paramtype"><a class="el" href="ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9">distance_func</a> </td> 15.287 + <td class="paramname"><em>dfnc</em>, </td> 15.288 + </tr> 15.289 + <tr> 15.290 + <td class="paramkey"></td> 15.291 + <td></td> 15.292 + <td class="paramtype">int </td> 15.293 + <td class="paramname"><em>mode</em> </td> 15.294 + </tr> 15.295 + <tr> 15.296 + <td></td> 15.297 + <td>)</td> 15.298 + <td></td><td></td> 15.299 + </tr> 15.300 + </table> 15.301 +</div><div class="memdoc"> 15.302 + 15.303 +<p>Finds a value within the tree. </p> 15.304 +<p>See <a class="el" href="avl_8h.html#a664986f64d6865605199fbff06e19cd5" title="Finds a node within the tree. ">ucx_avl_find_node()</a> for details.</p> 15.305 +<dl class="params"><dt>Parameters</dt><dd> 15.306 + <table class="params"> 15.307 + <tr><td class="paramname">tree</td><td>the <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> </td></tr> 15.308 + <tr><td class="paramname">key</td><td>the key </td></tr> 15.309 + <tr><td class="paramname">dfnc</td><td>the distance function </td></tr> 15.310 + <tr><td class="paramname">mode</td><td>the find mode </td></tr> 15.311 + </table> 15.312 + </dd> 15.313 +</dl> 15.314 +<dl class="section return"><dt>Returns</dt><dd>the value (or <code>NULL</code>, if no value can be found) </dd></dl> 15.315 + 15.316 +</div> 15.317 +</div> 15.318 +<a id="a664986f64d6865605199fbff06e19cd5"></a> 15.319 +<h2 class="memtitle"><span class="permalink"><a href="#a664986f64d6865605199fbff06e19cd5">◆ </a></span>ucx_avl_find_node()</h2> 15.320 + 15.321 +<div class="memitem"> 15.322 +<div class="memproto"> 15.323 + <table class="memname"> 15.324 + <tr> 15.325 + <td class="memname"><a class="el" href="structUcxAVLNode.html">UcxAVLNode</a>* ucx_avl_find_node </td> 15.326 + <td>(</td> 15.327 + <td class="paramtype"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> * </td> 15.328 + <td class="paramname"><em>tree</em>, </td> 15.329 + </tr> 15.330 + <tr> 15.331 + <td class="paramkey"></td> 15.332 + <td></td> 15.333 + <td class="paramtype">intptr_t </td> 15.334 + <td class="paramname"><em>key</em>, </td> 15.335 + </tr> 15.336 + <tr> 15.337 + <td class="paramkey"></td> 15.338 + <td></td> 15.339 + <td class="paramtype"><a class="el" href="ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9">distance_func</a> </td> 15.340 + <td class="paramname"><em>dfnc</em>, </td> 15.341 + </tr> 15.342 + <tr> 15.343 + <td class="paramkey"></td> 15.344 + <td></td> 15.345 + <td class="paramtype">int </td> 15.346 + <td class="paramname"><em>mode</em> </td> 15.347 + </tr> 15.348 + <tr> 15.349 + <td></td> 15.350 + <td>)</td> 15.351 + <td></td><td></td> 15.352 + </tr> 15.353 + </table> 15.354 +</div><div class="memdoc"> 15.355 + 15.356 +<p>Finds a node within the tree. </p> 15.357 +<p>The following modes are supported: </p><ul> 15.358 +<li> 15.359 +<a class="el" href="avl_8h.html#aaaf4a6f6f661cda7791db239212285d9" title="A mode for ucx_avl_find_node() with the same behavior as ucx_avl_get_node(). ">UCX_AVL_FIND_EXACT</a>: the same behavior as <a class="el" href="avl_8h.html#acf42da9a4168e47dc10b4ba0d27ceb4e" title="Gets the node from the tree, that is associated with the specified key. ">ucx_avl_get_node()</a> </li> 15.360 +<li> 15.361 +<a class="el" href="avl_8h.html#abd2446d544d5412b6997ee8a17bd368c" title="A mode for ucx_avl_find_node() finding the node whose key is at least as large as the specified key...">UCX_AVL_FIND_LOWER_BOUNDED</a>: finds the node whose key is at least as large as the specified key </li> 15.362 +<li> 15.363 +<a class="el" href="avl_8h.html#ac74ee7649c1e206b08b31f37dd68ca5e" title="A mode for ucx_avl_find_node() finding the node whose key is at most as large as the specified key...">UCX_AVL_FIND_UPPER_BOUNDED</a>: finds the node whose key is at most as large as the specified key </li> 15.364 +<li> 15.365 +<a class="el" href="avl_8h.html#af16f24d74fd6af0154de041566c6603b" title="A mode for ucx_avl_find_node() finding the node with a key that is as close to the specified key as p...">UCX_AVL_FIND_CLOSEST</a>: finds the node with a key that is as close to the specified key as possible. If the key is present, the behavior is like <a class="el" href="avl_8h.html#acf42da9a4168e47dc10b4ba0d27ceb4e" title="Gets the node from the tree, that is associated with the specified key. ">ucx_avl_get_node()</a>. This mode only returns <code>NULL</code> on empty trees. </li> 15.366 +</ul> 15.367 +<p>The distance function provided MUST agree with the compare function of the AVL tree.</p> 15.368 +<dl class="params"><dt>Parameters</dt><dd> 15.369 + <table class="params"> 15.370 + <tr><td class="paramname">tree</td><td>the <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> </td></tr> 15.371 + <tr><td class="paramname">key</td><td>the key </td></tr> 15.372 + <tr><td class="paramname">dfnc</td><td>the distance function </td></tr> 15.373 + <tr><td class="paramname">mode</td><td>the find mode </td></tr> 15.374 + </table> 15.375 + </dd> 15.376 +</dl> 15.377 +<dl class="section return"><dt>Returns</dt><dd>the node (or <code>NULL</code>, if no node can be found) </dd></dl> 15.378 + 15.379 +</div> 15.380 +</div> 15.381 +<a id="a2f92db538f25fce908d2cb3e5590944c"></a> 15.382 +<h2 class="memtitle"><span class="permalink"><a href="#a2f92db538f25fce908d2cb3e5590944c">◆ </a></span>ucx_avl_free()</h2> 15.383 + 15.384 +<div class="memitem"> 15.385 +<div class="memproto"> 15.386 + <table class="memname"> 15.387 + <tr> 15.388 + <td class="memname">void ucx_avl_free </td> 15.389 + <td>(</td> 15.390 + <td class="paramtype"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> * </td> 15.391 + <td class="paramname"><em>tree</em></td><td>)</td> 15.392 + <td></td> 15.393 + </tr> 15.394 + </table> 15.395 +</div><div class="memdoc"> 15.396 + 15.397 +<p>Destroys a <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a>. </p> 15.398 +<p>Note, that the contents are not automatically freed. Use may use <a class="el" href="avl_8h.html#a31ad7fb196ca211f1fc39f4e15f72279" title="Frees the contents of a UcxAVLTree. ">ucx_avl_free_content()</a> before calling this function.</p> 15.399 +<dl class="params"><dt>Parameters</dt><dd> 15.400 + <table class="params"> 15.401 + <tr><td class="paramname">tree</td><td>the tree to destroy </td></tr> 15.402 + </table> 15.403 + </dd> 15.404 +</dl> 15.405 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="avl_8h.html#a31ad7fb196ca211f1fc39f4e15f72279" title="Frees the contents of a UcxAVLTree. ">ucx_avl_free_content()</a> </dd></dl> 15.406 + 15.407 +</div> 15.408 +</div> 15.409 +<a id="a31ad7fb196ca211f1fc39f4e15f72279"></a> 15.410 +<h2 class="memtitle"><span class="permalink"><a href="#a31ad7fb196ca211f1fc39f4e15f72279">◆ </a></span>ucx_avl_free_content()</h2> 15.411 + 15.412 +<div class="memitem"> 15.413 +<div class="memproto"> 15.414 + <table class="memname"> 15.415 + <tr> 15.416 + <td class="memname">void ucx_avl_free_content </td> 15.417 + <td>(</td> 15.418 + <td class="paramtype"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> * </td> 15.419 + <td class="paramname"><em>tree</em>, </td> 15.420 + </tr> 15.421 + <tr> 15.422 + <td class="paramkey"></td> 15.423 + <td></td> 15.424 + <td class="paramtype"><a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> </td> 15.425 + <td class="paramname"><em>destr</em> </td> 15.426 + </tr> 15.427 + <tr> 15.428 + <td></td> 15.429 + <td>)</td> 15.430 + <td></td><td></td> 15.431 + </tr> 15.432 + </table> 15.433 +</div><div class="memdoc"> 15.434 + 15.435 +<p>Frees the contents of a <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a>. </p> 15.436 +<p>This is a convenience function that iterates over the tree and passes all values to the specified destructor function.</p> 15.437 +<p>If no destructor is specified (<code>NULL</code>), the free() function of the tree's own allocator is used.</p> 15.438 +<p>You must ensure, that it is valid to pass each value in the map to the same destructor function.</p> 15.439 +<p>You should free the entire tree afterwards, as the contents will be invalid.</p> 15.440 +<dl class="params"><dt>Parameters</dt><dd> 15.441 + <table class="params"> 15.442 + <tr><td class="paramname">tree</td><td>for which the contents shall be freed </td></tr> 15.443 + <tr><td class="paramname">destr</td><td>optional pointer to a destructor function </td></tr> 15.444 + </table> 15.445 + </dd> 15.446 +</dl> 15.447 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="avl_8h.html#a2f92db538f25fce908d2cb3e5590944c" title="Destroys a UcxAVLTree. ">ucx_avl_free()</a> </dd></dl> 15.448 + 15.449 +</div> 15.450 +</div> 15.451 +<a id="adbcf7ceb3f014a30c7214f7304519efe"></a> 15.452 +<h2 class="memtitle"><span class="permalink"><a href="#adbcf7ceb3f014a30c7214f7304519efe">◆ </a></span>ucx_avl_get()</h2> 15.453 + 15.454 +<div class="memitem"> 15.455 +<div class="memproto"> 15.456 + <table class="memname"> 15.457 + <tr> 15.458 + <td class="memname">void* ucx_avl_get </td> 15.459 + <td>(</td> 15.460 + <td class="paramtype"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> * </td> 15.461 + <td class="paramname"><em>tree</em>, </td> 15.462 + </tr> 15.463 + <tr> 15.464 + <td class="paramkey"></td> 15.465 + <td></td> 15.466 + <td class="paramtype">intptr_t </td> 15.467 + <td class="paramname"><em>key</em> </td> 15.468 + </tr> 15.469 + <tr> 15.470 + <td></td> 15.471 + <td>)</td> 15.472 + <td></td><td></td> 15.473 + </tr> 15.474 + </table> 15.475 +</div><div class="memdoc"> 15.476 + 15.477 +<p>Gets the value from the tree, that is associated with the specified key. </p> 15.478 +<dl class="params"><dt>Parameters</dt><dd> 15.479 + <table class="params"> 15.480 + <tr><td class="paramname">tree</td><td>the <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> </td></tr> 15.481 + <tr><td class="paramname">key</td><td>the key </td></tr> 15.482 + </table> 15.483 + </dd> 15.484 +</dl> 15.485 +<dl class="section return"><dt>Returns</dt><dd>the value (or <code>NULL</code>, if the key is not present) </dd></dl> 15.486 + 15.487 +</div> 15.488 +</div> 15.489 +<a id="acf42da9a4168e47dc10b4ba0d27ceb4e"></a> 15.490 +<h2 class="memtitle"><span class="permalink"><a href="#acf42da9a4168e47dc10b4ba0d27ceb4e">◆ </a></span>ucx_avl_get_node()</h2> 15.491 + 15.492 +<div class="memitem"> 15.493 +<div class="memproto"> 15.494 + <table class="memname"> 15.495 + <tr> 15.496 + <td class="memname"><a class="el" href="structUcxAVLNode.html">UcxAVLNode</a>* ucx_avl_get_node </td> 15.497 + <td>(</td> 15.498 + <td class="paramtype"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> * </td> 15.499 + <td class="paramname"><em>tree</em>, </td> 15.500 + </tr> 15.501 + <tr> 15.502 + <td class="paramkey"></td> 15.503 + <td></td> 15.504 + <td class="paramtype">intptr_t </td> 15.505 + <td class="paramname"><em>key</em> </td> 15.506 + </tr> 15.507 + <tr> 15.508 + <td></td> 15.509 + <td>)</td> 15.510 + <td></td><td></td> 15.511 + </tr> 15.512 + </table> 15.513 +</div><div class="memdoc"> 15.514 + 15.515 +<p>Gets the node from the tree, that is associated with the specified key. </p> 15.516 +<dl class="params"><dt>Parameters</dt><dd> 15.517 + <table class="params"> 15.518 + <tr><td class="paramname">tree</td><td>the <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> </td></tr> 15.519 + <tr><td class="paramname">key</td><td>the key </td></tr> 15.520 + </table> 15.521 + </dd> 15.522 +</dl> 15.523 +<dl class="section return"><dt>Returns</dt><dd>the node (or <code>NULL</code>, if the key is not present) </dd></dl> 15.524 + 15.525 +</div> 15.526 +</div> 15.527 +<a id="a11b043d65a11b7092d5d98b298e5ede3"></a> 15.528 +<h2 class="memtitle"><span class="permalink"><a href="#a11b043d65a11b7092d5d98b298e5ede3">◆ </a></span>ucx_avl_new()</h2> 15.529 + 15.530 +<div class="memitem"> 15.531 +<div class="memproto"> 15.532 + <table class="memname"> 15.533 + <tr> 15.534 + <td class="memname"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a>* ucx_avl_new </td> 15.535 + <td>(</td> 15.536 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 15.537 + <td class="paramname"><em>cmpfunc</em></td><td>)</td> 15.538 + <td></td> 15.539 + </tr> 15.540 + </table> 15.541 +</div><div class="memdoc"> 15.542 + 15.543 +<p>Initializes a new <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> with a default allocator. </p> 15.544 +<dl class="params"><dt>Parameters</dt><dd> 15.545 + <table class="params"> 15.546 + <tr><td class="paramname">cmpfunc</td><td>the compare function that shall be used </td></tr> 15.547 + </table> 15.548 + </dd> 15.549 +</dl> 15.550 +<dl class="section return"><dt>Returns</dt><dd>a new <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> object </dd></dl> 15.551 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="avl_8h.html#af0f868d67e9dc08b4867c02a06c23ee2" title="Initializes a new UcxAVLTree with the specified allocator. ">ucx_avl_new_a()</a> </dd></dl> 15.552 + 15.553 +</div> 15.554 +</div> 15.555 +<a id="af0f868d67e9dc08b4867c02a06c23ee2"></a> 15.556 +<h2 class="memtitle"><span class="permalink"><a href="#af0f868d67e9dc08b4867c02a06c23ee2">◆ </a></span>ucx_avl_new_a()</h2> 15.557 + 15.558 +<div class="memitem"> 15.559 +<div class="memproto"> 15.560 + <table class="memname"> 15.561 + <tr> 15.562 + <td class="memname"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a>* ucx_avl_new_a </td> 15.563 + <td>(</td> 15.564 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 15.565 + <td class="paramname"><em>cmpfunc</em>, </td> 15.566 + </tr> 15.567 + <tr> 15.568 + <td class="paramkey"></td> 15.569 + <td></td> 15.570 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 15.571 + <td class="paramname"><em>allocator</em> </td> 15.572 + </tr> 15.573 + <tr> 15.574 + <td></td> 15.575 + <td>)</td> 15.576 + <td></td><td></td> 15.577 + </tr> 15.578 + </table> 15.579 +</div><div class="memdoc"> 15.580 + 15.581 +<p>Initializes a new <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> with the specified allocator. </p> 15.582 +<p>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 <a class="el" href="utils_8h.html#aa6a37b9d172b6a5b2803d152f9e1b258" title="Wraps the strcmp function. ">ucx_cmp_str()</a> function here.</p> 15.583 +<dl class="params"><dt>Parameters</dt><dd> 15.584 + <table class="params"> 15.585 + <tr><td class="paramname">cmpfunc</td><td>the compare function that shall be used </td></tr> 15.586 + <tr><td class="paramname">allocator</td><td>the <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> that shall be used </td></tr> 15.587 + </table> 15.588 + </dd> 15.589 +</dl> 15.590 +<dl class="section return"><dt>Returns</dt><dd>a new <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> object </dd></dl> 15.591 + 15.592 +</div> 15.593 +</div> 15.594 +<a id="a0e739aeb66dda6a6a3f6eb51b50cf346"></a> 15.595 +<h2 class="memtitle"><span class="permalink"><a href="#a0e739aeb66dda6a6a3f6eb51b50cf346">◆ </a></span>ucx_avl_pred()</h2> 15.596 + 15.597 +<div class="memitem"> 15.598 +<div class="memproto"> 15.599 + <table class="memname"> 15.600 + <tr> 15.601 + <td class="memname"><a class="el" href="structUcxAVLNode.html">UcxAVLNode</a>* ucx_avl_pred </td> 15.602 + <td>(</td> 15.603 + <td class="paramtype"><a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> * </td> 15.604 + <td class="paramname"><em>node</em></td><td>)</td> 15.605 + <td></td> 15.606 + </tr> 15.607 + </table> 15.608 +</div><div class="memdoc"> 15.609 + 15.610 +<p>Finds the in-order predecessor of the given node. </p> 15.611 +<dl class="params"><dt>Parameters</dt><dd> 15.612 + <table class="params"> 15.613 + <tr><td class="paramname">node</td><td>an AVL node </td></tr> 15.614 + </table> 15.615 + </dd> 15.616 +</dl> 15.617 +<dl class="section return"><dt>Returns</dt><dd>the in-order predecessor of the given node, or <code>NULL</code> if the given node is the in-order minimum </dd></dl> 15.618 + 15.619 +</div> 15.620 +</div> 15.621 +<a id="aec401fab4a24a7edffa734f9baf88577"></a> 15.622 +<h2 class="memtitle"><span class="permalink"><a href="#aec401fab4a24a7edffa734f9baf88577">◆ </a></span>ucx_avl_put()</h2> 15.623 + 15.624 +<div class="memitem"> 15.625 +<div class="memproto"> 15.626 + <table class="memname"> 15.627 + <tr> 15.628 + <td class="memname">int ucx_avl_put </td> 15.629 + <td>(</td> 15.630 + <td class="paramtype"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> * </td> 15.631 + <td class="paramname"><em>tree</em>, </td> 15.632 + </tr> 15.633 + <tr> 15.634 + <td class="paramkey"></td> 15.635 + <td></td> 15.636 + <td class="paramtype">intptr_t </td> 15.637 + <td class="paramname"><em>key</em>, </td> 15.638 + </tr> 15.639 + <tr> 15.640 + <td class="paramkey"></td> 15.641 + <td></td> 15.642 + <td class="paramtype">void * </td> 15.643 + <td class="paramname"><em>value</em> </td> 15.644 + </tr> 15.645 + <tr> 15.646 + <td></td> 15.647 + <td>)</td> 15.648 + <td></td><td></td> 15.649 + </tr> 15.650 + </table> 15.651 +</div><div class="memdoc"> 15.652 + 15.653 +<p>Puts a key/value pair into the tree. </p> 15.654 +<p>Attention: use this function only, if a possible old value does not need to be preserved.</p> 15.655 +<dl class="params"><dt>Parameters</dt><dd> 15.656 + <table class="params"> 15.657 + <tr><td class="paramname">tree</td><td>the <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> </td></tr> 15.658 + <tr><td class="paramname">key</td><td>the key </td></tr> 15.659 + <tr><td class="paramname">value</td><td>the new value </td></tr> 15.660 + </table> 15.661 + </dd> 15.662 +</dl> 15.663 +<dl class="section return"><dt>Returns</dt><dd>zero, if and only if the operation succeeded </dd></dl> 15.664 + 15.665 +</div> 15.666 +</div> 15.667 +<a id="a32cf8955cc0226a82bacfc7b76d6474c"></a> 15.668 +<h2 class="memtitle"><span class="permalink"><a href="#a32cf8955cc0226a82bacfc7b76d6474c">◆ </a></span>ucx_avl_put_s()</h2> 15.669 + 15.670 +<div class="memitem"> 15.671 +<div class="memproto"> 15.672 + <table class="memname"> 15.673 + <tr> 15.674 + <td class="memname">int ucx_avl_put_s </td> 15.675 + <td>(</td> 15.676 + <td class="paramtype"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> * </td> 15.677 + <td class="paramname"><em>tree</em>, </td> 15.678 + </tr> 15.679 + <tr> 15.680 + <td class="paramkey"></td> 15.681 + <td></td> 15.682 + <td class="paramtype">intptr_t </td> 15.683 + <td class="paramname"><em>key</em>, </td> 15.684 + </tr> 15.685 + <tr> 15.686 + <td class="paramkey"></td> 15.687 + <td></td> 15.688 + <td class="paramtype">void * </td> 15.689 + <td class="paramname"><em>value</em>, </td> 15.690 + </tr> 15.691 + <tr> 15.692 + <td class="paramkey"></td> 15.693 + <td></td> 15.694 + <td class="paramtype">void ** </td> 15.695 + <td class="paramname"><em>oldvalue</em> </td> 15.696 + </tr> 15.697 + <tr> 15.698 + <td></td> 15.699 + <td>)</td> 15.700 + <td></td><td></td> 15.701 + </tr> 15.702 + </table> 15.703 +</div><div class="memdoc"> 15.704 + 15.705 +<p>Puts a key/value pair into the tree. </p> 15.706 +<p>This is a secure function which saves the old value to the variable pointed at by oldvalue.</p> 15.707 +<dl class="params"><dt>Parameters</dt><dd> 15.708 + <table class="params"> 15.709 + <tr><td class="paramname">tree</td><td>the <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> </td></tr> 15.710 + <tr><td class="paramname">key</td><td>the key </td></tr> 15.711 + <tr><td class="paramname">value</td><td>the new value </td></tr> 15.712 + <tr><td class="paramname">oldvalue</td><td>optional: a pointer to the location where a possible old value shall be stored </td></tr> 15.713 + </table> 15.714 + </dd> 15.715 +</dl> 15.716 +<dl class="section return"><dt>Returns</dt><dd>zero, if and only if the operation succeeded </dd></dl> 15.717 + 15.718 +</div> 15.719 +</div> 15.720 +<a id="a1d821119c805d7fbb7e424bc3effeba9"></a> 15.721 +<h2 class="memtitle"><span class="permalink"><a href="#a1d821119c805d7fbb7e424bc3effeba9">◆ </a></span>ucx_avl_remove()</h2> 15.722 + 15.723 +<div class="memitem"> 15.724 +<div class="memproto"> 15.725 + <table class="memname"> 15.726 + <tr> 15.727 + <td class="memname">int ucx_avl_remove </td> 15.728 + <td>(</td> 15.729 + <td class="paramtype"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> * </td> 15.730 + <td class="paramname"><em>tree</em>, </td> 15.731 + </tr> 15.732 + <tr> 15.733 + <td class="paramkey"></td> 15.734 + <td></td> 15.735 + <td class="paramtype">intptr_t </td> 15.736 + <td class="paramname"><em>key</em> </td> 15.737 + </tr> 15.738 + <tr> 15.739 + <td></td> 15.740 + <td>)</td> 15.741 + <td></td><td></td> 15.742 + </tr> 15.743 + </table> 15.744 +</div><div class="memdoc"> 15.745 + 15.746 +<p>Removes an element from the AVL tree. </p> 15.747 +<dl class="params"><dt>Parameters</dt><dd> 15.748 + <table class="params"> 15.749 + <tr><td class="paramname">tree</td><td>the <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> </td></tr> 15.750 + <tr><td class="paramname">key</td><td>the key </td></tr> 15.751 + </table> 15.752 + </dd> 15.753 +</dl> 15.754 +<dl class="section return"><dt>Returns</dt><dd>zero, if and only if an element has been removed </dd></dl> 15.755 + 15.756 +</div> 15.757 +</div> 15.758 +<a id="a9a792b7d9e58073deef74a341f8bc720"></a> 15.759 +<h2 class="memtitle"><span class="permalink"><a href="#a9a792b7d9e58073deef74a341f8bc720">◆ </a></span>ucx_avl_remove_node()</h2> 15.760 + 15.761 +<div class="memitem"> 15.762 +<div class="memproto"> 15.763 + <table class="memname"> 15.764 + <tr> 15.765 + <td class="memname">int ucx_avl_remove_node </td> 15.766 + <td>(</td> 15.767 + <td class="paramtype"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> * </td> 15.768 + <td class="paramname"><em>tree</em>, </td> 15.769 + </tr> 15.770 + <tr> 15.771 + <td class="paramkey"></td> 15.772 + <td></td> 15.773 + <td class="paramtype"><a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> * </td> 15.774 + <td class="paramname"><em>node</em> </td> 15.775 + </tr> 15.776 + <tr> 15.777 + <td></td> 15.778 + <td>)</td> 15.779 + <td></td><td></td> 15.780 + </tr> 15.781 + </table> 15.782 +</div><div class="memdoc"> 15.783 + 15.784 +<p>Removes a node from the AVL tree. </p> 15.785 +<p>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.</p> 15.786 +<dl class="params"><dt>Parameters</dt><dd> 15.787 + <table class="params"> 15.788 + <tr><td class="paramname">tree</td><td>the <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> </td></tr> 15.789 + <tr><td class="paramname">node</td><td>the node to remove </td></tr> 15.790 + </table> 15.791 + </dd> 15.792 +</dl> 15.793 +<dl class="section return"><dt>Returns</dt><dd>zero, if and only if an element has been removed </dd></dl> 15.794 + 15.795 +</div> 15.796 +</div> 15.797 +<a id="a01aeeecd6415f0cc2b623486eb28f254"></a> 15.798 +<h2 class="memtitle"><span class="permalink"><a href="#a01aeeecd6415f0cc2b623486eb28f254">◆ </a></span>ucx_avl_remove_s()</h2> 15.799 + 15.800 +<div class="memitem"> 15.801 +<div class="memproto"> 15.802 + <table class="memname"> 15.803 + <tr> 15.804 + <td class="memname">int ucx_avl_remove_s </td> 15.805 + <td>(</td> 15.806 + <td class="paramtype"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a> * </td> 15.807 + <td class="paramname"><em>tree</em>, </td> 15.808 + </tr> 15.809 + <tr> 15.810 + <td class="paramkey"></td> 15.811 + <td></td> 15.812 + <td class="paramtype">intptr_t </td> 15.813 + <td class="paramname"><em>key</em>, </td> 15.814 + </tr> 15.815 + <tr> 15.816 + <td class="paramkey"></td> 15.817 + <td></td> 15.818 + <td class="paramtype">intptr_t * </td> 15.819 + <td class="paramname"><em>oldkey</em>, </td> 15.820 + </tr> 15.821 + <tr> 15.822 + <td class="paramkey"></td> 15.823 + <td></td> 15.824 + <td class="paramtype">void ** </td> 15.825 + <td class="paramname"><em>oldvalue</em> </td> 15.826 + </tr> 15.827 + <tr> 15.828 + <td></td> 15.829 + <td>)</td> 15.830 + <td></td><td></td> 15.831 + </tr> 15.832 + </table> 15.833 +</div><div class="memdoc"> 15.834 + 15.835 +<p>Removes an element from the AVL tree. </p> 15.836 +<p>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).</p> 15.837 +<p>Note: the returned key in oldkey is possibly not the same as the provided key for the lookup (in terms of memory location).</p> 15.838 +<dl class="params"><dt>Parameters</dt><dd> 15.839 + <table class="params"> 15.840 + <tr><td class="paramname">tree</td><td>the <a class="el" href="structUcxAVLTree.html" title="UCX AVL Tree. ">UcxAVLTree</a> </td></tr> 15.841 + <tr><td class="paramname">key</td><td>the key of the element to remove </td></tr> 15.842 + <tr><td class="paramname">oldkey</td><td>optional: a pointer to the location where the old key shall be stored </td></tr> 15.843 + <tr><td class="paramname">oldvalue</td><td>optional: a pointer to the location where the old value shall be stored </td></tr> 15.844 + </table> 15.845 + </dd> 15.846 +</dl> 15.847 +<dl class="section return"><dt>Returns</dt><dd>zero, if and only if an element has been removed </dd></dl> 15.848 + 15.849 +</div> 15.850 +</div> 15.851 +<a id="aab1ad9b027ff5e50671aa0ee84e2d541"></a> 15.852 +<h2 class="memtitle"><span class="permalink"><a href="#aab1ad9b027ff5e50671aa0ee84e2d541">◆ </a></span>ucx_avl_succ()</h2> 15.853 + 15.854 +<div class="memitem"> 15.855 +<div class="memproto"> 15.856 + <table class="memname"> 15.857 + <tr> 15.858 + <td class="memname"><a class="el" href="structUcxAVLNode.html">UcxAVLNode</a>* ucx_avl_succ </td> 15.859 + <td>(</td> 15.860 + <td class="paramtype"><a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> * </td> 15.861 + <td class="paramname"><em>node</em></td><td>)</td> 15.862 + <td></td> 15.863 + </tr> 15.864 + </table> 15.865 +</div><div class="memdoc"> 15.866 + 15.867 +<p>Finds the in-order successor of the given node. </p> 15.868 +<dl class="params"><dt>Parameters</dt><dd> 15.869 + <table class="params"> 15.870 + <tr><td class="paramname">node</td><td>an AVL node </td></tr> 15.871 + </table> 15.872 + </dd> 15.873 +</dl> 15.874 +<dl class="section return"><dt>Returns</dt><dd>the in-order successor of the given node, or <code>NULL</code> if the given node is the in-order maximum </dd></dl> 15.875 + 15.876 +</div> 15.877 +</div> 15.878 +</div><!-- contents --> 15.879 +<!-- start footer part --> 15.880 +<hr class="footer"/><address class="footer"><small> 15.881 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 15.882 +<img class="footer" src="doxygen.png" alt="doxygen"/> 15.883 +</a> 1.8.13 15.884 +</small></address> 15.885 +</body> 15.886 +</html>
16.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 16.2 +++ b/docs/api-2.1/avl_8h_source.html Sat Feb 06 19:11:44 2021 +0100 16.3 @@ -0,0 +1,113 @@ 16.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 16.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 16.6 +<head> 16.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 16.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 16.9 +<meta name="generator" content="Doxygen 1.8.13"/> 16.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 16.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/avl.h Source File</title> 16.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 16.13 +<script type="text/javascript" src="jquery.js"></script> 16.14 +<script type="text/javascript" src="dynsections.js"></script> 16.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 16.16 +<script type="text/javascript" src="search/searchdata.js"></script> 16.17 +<script type="text/javascript" src="search/search.js"></script> 16.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 16.19 +</head> 16.20 +<body> 16.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 16.22 +<div id="titlearea"> 16.23 +<table cellspacing="0" cellpadding="0"> 16.24 + <tbody> 16.25 + <tr style="height: 56px;"> 16.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 16.27 + <td id="projectalign" style="padding-left: 0.5em;"> 16.28 + <div id="projectname">ucx 16.29 + </div> 16.30 + <div id="projectbrief">UAP Common Extensions</div> 16.31 + </td> 16.32 + </tr> 16.33 + </tbody> 16.34 +</table> 16.35 +</div> 16.36 +<!-- end header part --> 16.37 +<!-- Generated by Doxygen 1.8.13 --> 16.38 +<script type="text/javascript"> 16.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 16.40 +</script> 16.41 +<script type="text/javascript" src="menudata.js"></script> 16.42 +<script type="text/javascript" src="menu.js"></script> 16.43 +<script type="text/javascript"> 16.44 +$(function() { 16.45 + initMenu('',true,false,'search.php','Search'); 16.46 + $(document).ready(function() { init_search(); }); 16.47 +}); 16.48 +</script> 16.49 +<div id="main-nav"></div> 16.50 +<!-- window showing the filter options --> 16.51 +<div id="MSearchSelectWindow" 16.52 + onmouseover="return searchBox.OnSearchSelectShow()" 16.53 + onmouseout="return searchBox.OnSearchSelectHide()" 16.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 16.55 +</div> 16.56 + 16.57 +<!-- iframe showing the search results (closed by default) --> 16.58 +<div id="MSearchResultsWindow"> 16.59 +<iframe src="javascript:void(0)" frameborder="0" 16.60 + name="MSearchResults" id="MSearchResults"> 16.61 +</iframe> 16.62 +</div> 16.63 + 16.64 +<div id="nav-path" class="navpath"> 16.65 + <ul> 16.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 16.67 +</div> 16.68 +</div><!-- top --> 16.69 +<div class="header"> 16.70 + <div class="headertitle"> 16.71 +<div class="title">avl.h</div> </div> 16.72 +</div><!--header--> 16.73 +<div class="contents"> 16.74 +<a href="avl_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are met:</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * documentation and/or other materials provided with the distribution.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#ifndef UCX_AVL_H</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#define UCX_AVL_H</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "<a class="code" href="ucx_8h.html">ucx.h</a>"</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include "<a class="code" href="allocator_8h.html">allocator.h</a>"</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include <inttypes.h></span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="avl_8h.html#a08ba2496c2316df58548c3cc29712add"> 58</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structUcxAVLNode.html">UcxAVLNode</a> <a class="code" href="structUcxAVLNode.html">UcxAVLNode</a>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="structUcxAVLNode.html"> 63</a></span> <span class="keyword">struct </span><a class="code" href="structUcxAVLNode.html">UcxAVLNode</a> {</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6"> 67</a></span>  intptr_t <a class="code" href="structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6">key</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="structUcxAVLNode.html#a302501b8c04c3fde668fe72249871258"> 71</a></span>  <span class="keywordtype">void</span> *<a class="code" href="structUcxAVLNode.html#a302501b8c04c3fde668fe72249871258">value</a>;</div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="structUcxAVLNode.html#af129fd32863a7c35e82c5cd9d11dc95a"> 75</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxAVLNode.html#af129fd32863a7c35e82c5cd9d11dc95a">height</a>;</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="structUcxAVLNode.html#afc4e3b4f452aa2d91cabb2135b9d42f7"> 79</a></span>  <a class="code" href="structUcxAVLNode.html">UcxAVLNode</a> *<a class="code" href="structUcxAVLNode.html#afc4e3b4f452aa2d91cabb2135b9d42f7">parent</a>;</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="structUcxAVLNode.html#ad3a1c733f2c1cc81ac527f846fc24b9c"> 83</a></span>  <a class="code" href="structUcxAVLNode.html">UcxAVLNode</a> *<a class="code" href="structUcxAVLNode.html#ad3a1c733f2c1cc81ac527f846fc24b9c">left</a>;</div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="structUcxAVLNode.html#a7cbaa31dba8c7a89f4f8f7905f6fd238"> 87</a></span>  <a class="code" href="structUcxAVLNode.html">UcxAVLNode</a> *<a class="code" href="structUcxAVLNode.html#a7cbaa31dba8c7a89f4f8f7905f6fd238">right</a>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> };</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="structUcxAVLTree.html"> 93</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="structUcxAVLTree.html#a30652776b540156ad54c7d52833e4e28"> 97</a></span>  <a class="code" href="structUcxAllocator.html">UcxAllocator</a> *<a class="code" href="structUcxAVLTree.html#a30652776b540156ad54c7d52833e4e28">allocator</a>;</div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="structUcxAVLTree.html#a393a8fc99eb2c290d3cb67170081d742"> 101</a></span>  <a class="code" href="structUcxAVLNode.html">UcxAVLNode</a> *<a class="code" href="structUcxAVLTree.html#a393a8fc99eb2c290d3cb67170081d742">root</a>;</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="structUcxAVLTree.html#a87aff25cb726cb9eb88eb815a10d1004"> 106</a></span>  <a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> <a class="code" href="structUcxAVLTree.html#a87aff25cb726cb9eb88eb815a10d1004">cmpfunc</a>;</div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="structUcxAVLTree.html#ae92a3bfad3fe33c8dcbdad85112f83fd"> 111</a></span>  <span class="keywordtype">void</span> *<a class="code" href="structUcxAVLTree.html#ae92a3bfad3fe33c8dcbdad85112f83fd">userdata</a>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> } <a class="code" href="structUcxAVLTree.html">UcxAVLTree</a>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <a class="code" href="structUcxAVLTree.html">UcxAVLTree</a> *<a class="code" href="avl_8h.html#a11b043d65a11b7092d5d98b298e5ede3">ucx_avl_new</a>(<a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfunc);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <a class="code" href="structUcxAVLTree.html">UcxAVLTree</a> *<a class="code" href="avl_8h.html#af0f868d67e9dc08b4867c02a06c23ee2">ucx_avl_new_a</a>(<a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfunc, <a class="code" href="structUcxAllocator.html">UcxAllocator</a> *allocator);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="keywordtype">void</span> <a class="code" href="avl_8h.html#a2f92db538f25fce908d2cb3e5590944c">ucx_avl_free</a>(<a class="code" href="structUcxAVLTree.html">UcxAVLTree</a> *tree);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordtype">void</span> <a class="code" href="avl_8h.html#a31ad7fb196ca211f1fc39f4e15f72279">ucx_avl_free_content</a>(<a class="code" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, <a class="code" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> destr);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="avl_8h.html#ac2886d4b79b48c9fabf6408873f84cd2"> 173</a></span> <span class="preprocessor">#define ucx_avl_default_new() \</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> <span class="preprocessor"> ucx_avl_new_a(ucx_cmp_ptr, ucx_default_allocator())</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <a class="code" href="structUcxAVLNode.html">UcxAVLNode</a> *<a class="code" href="avl_8h.html#acf42da9a4168e47dc10b4ba0d27ceb4e">ucx_avl_get_node</a>(<a class="code" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t <a class="code" href="structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6">key</a>);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="keywordtype">void</span> *<a class="code" href="avl_8h.html#adbcf7ceb3f014a30c7214f7304519efe">ucx_avl_get</a>(<a class="code" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t <a class="code" href="structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6">key</a>);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div><div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="avl_8h.html#aaaf4a6f6f661cda7791db239212285d9"> 196</a></span> <span class="preprocessor">#define UCX_AVL_FIND_EXACT 0</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> </div><div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="avl_8h.html#abd2446d544d5412b6997ee8a17bd368c"> 201</a></span> <span class="preprocessor">#define UCX_AVL_FIND_LOWER_BOUNDED 1</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="avl_8h.html#ac74ee7649c1e206b08b31f37dd68ca5e"> 206</a></span> <span class="preprocessor">#define UCX_AVL_FIND_UPPER_BOUNDED 2</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="avl_8h.html#af16f24d74fd6af0154de041566c6603b"> 213</a></span> <span class="preprocessor">#define UCX_AVL_FIND_CLOSEST 3</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <a class="code" href="structUcxAVLNode.html">UcxAVLNode</a> *<a class="code" href="avl_8h.html#a664986f64d6865605199fbff06e19cd5">ucx_avl_find_node</a>(<a class="code" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t <a class="code" href="structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6">key</a>,</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <a class="code" href="ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9">distance_func</a> dfnc, <span class="keywordtype">int</span> mode);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keywordtype">void</span> *<a class="code" href="avl_8h.html#a51770e1614b28d7d22dea096c3704f83">ucx_avl_find</a>(<a class="code" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t <a class="code" href="structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6">key</a>,</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <a class="code" href="ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9">distance_func</a> dfnc, <span class="keywordtype">int</span> mode);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordtype">int</span> <a class="code" href="avl_8h.html#aec401fab4a24a7edffa734f9baf88577">ucx_avl_put</a>(<a class="code" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t <a class="code" href="structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6">key</a>, <span class="keywordtype">void</span> *<a class="code" href="structUcxAVLNode.html#a302501b8c04c3fde668fe72249871258">value</a>);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> <span class="keywordtype">int</span> <a class="code" href="avl_8h.html#a32cf8955cc0226a82bacfc7b76d6474c">ucx_avl_put_s</a>(<a class="code" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t <a class="code" href="structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6">key</a>, <span class="keywordtype">void</span> *<a class="code" href="structUcxAVLNode.html#a302501b8c04c3fde668fe72249871258">value</a>, <span class="keywordtype">void</span> **oldvalue);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keywordtype">int</span> <a class="code" href="avl_8h.html#a9a792b7d9e58073deef74a341f8bc720">ucx_avl_remove_node</a>(<a class="code" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, <a class="code" href="structUcxAVLNode.html">UcxAVLNode</a> *node);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> </div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keywordtype">int</span> <a class="code" href="avl_8h.html#a1d821119c805d7fbb7e424bc3effeba9">ucx_avl_remove</a>(<a class="code" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t <a class="code" href="structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6">key</a>);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> </div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keywordtype">int</span> <a class="code" href="avl_8h.html#a01aeeecd6415f0cc2b623486eb28f254">ucx_avl_remove_s</a>(<a class="code" href="structUcxAVLTree.html">UcxAVLTree</a> *tree, intptr_t <a class="code" href="structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6">key</a>,</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  intptr_t *oldkey, <span class="keywordtype">void</span> **oldvalue);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keywordtype">size_t</span> <a class="code" href="avl_8h.html#a92c1d41c2b22fe4a029a486ab2153e35">ucx_avl_count</a>(<a class="code" href="structUcxAVLTree.html">UcxAVLTree</a> *tree);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <a class="code" href="structUcxAVLNode.html">UcxAVLNode</a>* <a class="code" href="avl_8h.html#a0e739aeb66dda6a6a3f6eb51b50cf346">ucx_avl_pred</a>(<a class="code" href="structUcxAVLNode.html">UcxAVLNode</a>* node);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <a class="code" href="structUcxAVLNode.html">UcxAVLNode</a>* <a class="code" href="avl_8h.html#aab1ad9b027ff5e50671aa0ee84e2d541">ucx_avl_succ</a>(<a class="code" href="structUcxAVLNode.html">UcxAVLNode</a>* node);</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> </div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> </div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_AVL_H */</span><span class="preprocessor"></span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> </div><div class="ttc" id="avl_8h_html_a11b043d65a11b7092d5d98b298e5ede3"><div class="ttname"><a href="avl_8h.html#a11b043d65a11b7092d5d98b298e5ede3">ucx_avl_new</a></div><div class="ttdeci">UcxAVLTree * ucx_avl_new(cmp_func cmpfunc)</div><div class="ttdoc">Initializes a new UcxAVLTree with a default allocator. </div><div class="ttdef"><b>Definition:</b> avl.c:109</div></div> 16.75 +<div class="ttc" id="avl_8h_html_a1d821119c805d7fbb7e424bc3effeba9"><div class="ttname"><a href="avl_8h.html#a1d821119c805d7fbb7e424bc3effeba9">ucx_avl_remove</a></div><div class="ttdeci">int ucx_avl_remove(UcxAVLTree *tree, intptr_t key)</div><div class="ttdoc">Removes an element from the AVL tree. </div><div class="ttdef"><b>Definition:</b> avl.c:266</div></div> 16.76 +<div class="ttc" id="structUcxAVLNode_html"><div class="ttname"><a href="structUcxAVLNode.html">UcxAVLNode</a></div><div class="ttdoc">UCX AVL Node. </div><div class="ttdef"><b>Definition:</b> avl.h:63</div></div> 16.77 +<div class="ttc" id="ucx_8h_html_afe5e2d5dbf34778e0e97852051570791"><div class="ttname"><a href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a></div><div class="ttdeci">int(* cmp_func)(const void *, const void *, void *)</div><div class="ttdoc">Function pointer to a compare function. </div><div class="ttdef"><b>Definition:</b> ucx.h:84</div></div> 16.78 +<div class="ttc" id="structUcxAVLNode_html_afc4e3b4f452aa2d91cabb2135b9d42f7"><div class="ttname"><a href="structUcxAVLNode.html#afc4e3b4f452aa2d91cabb2135b9d42f7">UcxAVLNode::parent</a></div><div class="ttdeci">UcxAVLNode * parent</div><div class="ttdoc">Parent node. </div><div class="ttdef"><b>Definition:</b> avl.h:79</div></div> 16.79 +<div class="ttc" id="avl_8h_html_a0e739aeb66dda6a6a3f6eb51b50cf346"><div class="ttname"><a href="avl_8h.html#a0e739aeb66dda6a6a3f6eb51b50cf346">ucx_avl_pred</a></div><div class="ttdeci">UcxAVLNode * ucx_avl_pred(UcxAVLNode *node)</div><div class="ttdoc">Finds the in-order predecessor of the given node. </div><div class="ttdef"><b>Definition:</b> avl.c:335</div></div> 16.80 +<div class="ttc" id="avl_8h_html_aec401fab4a24a7edffa734f9baf88577"><div class="ttname"><a href="avl_8h.html#aec401fab4a24a7edffa734f9baf88577">ucx_avl_put</a></div><div class="ttdeci">int ucx_avl_put(UcxAVLTree *tree, intptr_t key, void *value)</div><div class="ttdoc">Puts a key/value pair into the tree. </div><div class="ttdef"><b>Definition:</b> avl.c:211</div></div> 16.81 +<div class="ttc" id="ucx_8h_html"><div class="ttname"><a href="ucx_8h.html">ucx.h</a></div><div class="ttdoc">Main UCX Header providing most common definitions. </div></div> 16.82 +<div class="ttc" id="structUcxAVLTree_html"><div class="ttname"><a href="structUcxAVLTree.html">UcxAVLTree</a></div><div class="ttdoc">UCX AVL Tree. </div><div class="ttdef"><b>Definition:</b> avl.h:93</div></div> 16.83 +<div class="ttc" id="avl_8h_html_a92c1d41c2b22fe4a029a486ab2153e35"><div class="ttname"><a href="avl_8h.html#a92c1d41c2b22fe4a029a486ab2153e35">ucx_avl_count</a></div><div class="ttdeci">size_t ucx_avl_count(UcxAVLTree *tree)</div><div class="ttdoc">Counts the nodes in the specified UcxAVLTree. </div><div class="ttdef"><b>Definition:</b> avl.c:331</div></div> 16.84 +<div class="ttc" id="avl_8h_html_af0f868d67e9dc08b4867c02a06c23ee2"><div class="ttname"><a href="avl_8h.html#af0f868d67e9dc08b4867c02a06c23ee2">ucx_avl_new_a</a></div><div class="ttdeci">UcxAVLTree * ucx_avl_new_a(cmp_func cmpfunc, UcxAllocator *allocator)</div><div class="ttdoc">Initializes a new UcxAVLTree with the specified allocator. </div><div class="ttdef"><b>Definition:</b> avl.c:113</div></div> 16.85 +<div class="ttc" id="structUcxAVLTree_html_ae92a3bfad3fe33c8dcbdad85112f83fd"><div class="ttname"><a href="structUcxAVLTree.html#ae92a3bfad3fe33c8dcbdad85112f83fd">UcxAVLTree::userdata</a></div><div class="ttdeci">void * userdata</div><div class="ttdoc">Custom user data. </div><div class="ttdef"><b>Definition:</b> avl.h:111</div></div> 16.86 +<div class="ttc" id="avl_8h_html_a9a792b7d9e58073deef74a341f8bc720"><div class="ttname"><a href="avl_8h.html#a9a792b7d9e58073deef74a341f8bc720">ucx_avl_remove_node</a></div><div class="ttdeci">int ucx_avl_remove_node(UcxAVLTree *tree, UcxAVLNode *node)</div><div class="ttdoc">Removes a node from the AVL tree. </div><div class="ttdef"><b>Definition:</b> avl.c:270</div></div> 16.87 +<div class="ttc" id="structUcxAVLTree_html_a87aff25cb726cb9eb88eb815a10d1004"><div class="ttname"><a href="structUcxAVLTree.html#a87aff25cb726cb9eb88eb815a10d1004">UcxAVLTree::cmpfunc</a></div><div class="ttdeci">cmp_func cmpfunc</div><div class="ttdoc">Compare function that shall be used to compare the UcxAVLNode keys. </div><div class="ttdef"><b>Definition:</b> avl.h:106</div></div> 16.88 +<div class="ttc" id="avl_8h_html_aab1ad9b027ff5e50671aa0ee84e2d541"><div class="ttname"><a href="avl_8h.html#aab1ad9b027ff5e50671aa0ee84e2d541">ucx_avl_succ</a></div><div class="ttdeci">UcxAVLNode * ucx_avl_succ(UcxAVLNode *node)</div><div class="ttdoc">Finds the in-order successor of the given node. </div><div class="ttdef"><b>Definition:</b> avl.c:355</div></div> 16.89 +<div class="ttc" id="avl_8h_html_a31ad7fb196ca211f1fc39f4e15f72279"><div class="ttname"><a href="avl_8h.html#a31ad7fb196ca211f1fc39f4e15f72279">ucx_avl_free_content</a></div><div class="ttdeci">void ucx_avl_free_content(UcxAVLTree *tree, ucx_destructor destr)</div><div class="ttdoc">Frees the contents of a UcxAVLTree. </div><div class="ttdef"><b>Definition:</b> avl.c:152</div></div> 16.90 +<div class="ttc" id="structUcxAVLTree_html_a30652776b540156ad54c7d52833e4e28"><div class="ttname"><a href="structUcxAVLTree.html#a30652776b540156ad54c7d52833e4e28">UcxAVLTree::allocator</a></div><div class="ttdeci">UcxAllocator * allocator</div><div class="ttdoc">The UcxAllocator that shall be used to manage the memory for node data. </div><div class="ttdef"><b>Definition:</b> avl.h:97</div></div> 16.91 +<div class="ttc" id="avl_8h_html_a01aeeecd6415f0cc2b623486eb28f254"><div class="ttname"><a href="avl_8h.html#a01aeeecd6415f0cc2b623486eb28f254">ucx_avl_remove_s</a></div><div class="ttdeci">int ucx_avl_remove_s(UcxAVLTree *tree, intptr_t key, intptr_t *oldkey, void **oldvalue)</div><div class="ttdoc">Removes an element from the AVL tree. </div><div class="ttdef"><b>Definition:</b> avl.c:274</div></div> 16.92 +<div class="ttc" id="avl_8h_html_a51770e1614b28d7d22dea096c3704f83"><div class="ttname"><a href="avl_8h.html#a51770e1614b28d7d22dea096c3704f83">ucx_avl_find</a></div><div class="ttdeci">void * ucx_avl_find(UcxAVLTree *tree, intptr_t key, distance_func dfnc, int mode)</div><div class="ttdoc">Finds a value within the tree. </div><div class="ttdef"><b>Definition:</b> avl.c:205</div></div> 16.93 +<div class="ttc" id="structUcxAllocator_html"><div class="ttname"><a href="structUcxAllocator.html">UcxAllocator</a></div><div class="ttdoc">UCX allocator data structure containing memory management functions. </div><div class="ttdef"><b>Definition:</b> allocator.h:88</div></div> 16.94 +<div class="ttc" id="avl_8h_html_a32cf8955cc0226a82bacfc7b76d6474c"><div class="ttname"><a href="avl_8h.html#a32cf8955cc0226a82bacfc7b76d6474c">ucx_avl_put_s</a></div><div class="ttdeci">int ucx_avl_put_s(UcxAVLTree *tree, intptr_t key, void *value, void **oldvalue)</div><div class="ttdoc">Puts a key/value pair into the tree. </div><div class="ttdef"><b>Definition:</b> avl.c:215</div></div> 16.95 +<div class="ttc" id="structUcxAVLTree_html_a393a8fc99eb2c290d3cb67170081d742"><div class="ttname"><a href="structUcxAVLTree.html#a393a8fc99eb2c290d3cb67170081d742">UcxAVLTree::root</a></div><div class="ttdeci">UcxAVLNode * root</div><div class="ttdoc">Root node of the tree. </div><div class="ttdef"><b>Definition:</b> avl.h:101</div></div> 16.96 +<div class="ttc" id="ucx_8h_html_a0bc5bf89e556c1d45d10863d52728ac9"><div class="ttname"><a href="ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9">distance_func</a></div><div class="ttdeci">intmax_t(* distance_func)(const void *, const void *, void *)</div><div class="ttdoc">Function pointer to a distance function. </div><div class="ttdef"><b>Definition:</b> ucx.h:93</div></div> 16.97 +<div class="ttc" id="allocator_8h_html"><div class="ttname"><a href="allocator_8h.html">allocator.h</a></div><div class="ttdoc">Allocator for custom memory management. </div></div> 16.98 +<div class="ttc" id="avl_8h_html_adbcf7ceb3f014a30c7214f7304519efe"><div class="ttname"><a href="avl_8h.html#adbcf7ceb3f014a30c7214f7304519efe">ucx_avl_get</a></div><div class="ttdeci">void * ucx_avl_get(UcxAVLTree *tree, intptr_t key)</div><div class="ttdoc">Gets the value from the tree, that is associated with the specified key. </div><div class="ttdef"><b>Definition:</b> avl.c:166</div></div> 16.99 +<div class="ttc" id="structUcxAVLNode_html_ad3a1c733f2c1cc81ac527f846fc24b9c"><div class="ttname"><a href="structUcxAVLNode.html#ad3a1c733f2c1cc81ac527f846fc24b9c">UcxAVLNode::left</a></div><div class="ttdeci">UcxAVLNode * left</div><div class="ttdoc">Root node of left subtree. </div><div class="ttdef"><b>Definition:</b> avl.h:83</div></div> 16.100 +<div class="ttc" id="avl_8h_html_a2f92db538f25fce908d2cb3e5590944c"><div class="ttname"><a href="avl_8h.html#a2f92db538f25fce908d2cb3e5590944c">ucx_avl_free</a></div><div class="ttdeci">void ucx_avl_free(UcxAVLTree *tree)</div><div class="ttdoc">Destroys a UcxAVLTree. </div><div class="ttdef"><b>Definition:</b> avl.c:133</div></div> 16.101 +<div class="ttc" id="structUcxAVLNode_html_a302501b8c04c3fde668fe72249871258"><div class="ttname"><a href="structUcxAVLNode.html#a302501b8c04c3fde668fe72249871258">UcxAVLNode::value</a></div><div class="ttdeci">void * value</div><div class="ttdoc">Data contained by this node. </div><div class="ttdef"><b>Definition:</b> avl.h:71</div></div> 16.102 +<div class="ttc" id="avl_8h_html_a664986f64d6865605199fbff06e19cd5"><div class="ttname"><a href="avl_8h.html#a664986f64d6865605199fbff06e19cd5">ucx_avl_find_node</a></div><div class="ttdeci">UcxAVLNode * ucx_avl_find_node(UcxAVLTree *tree, intptr_t key, distance_func dfnc, int mode)</div><div class="ttdoc">Finds a node within the tree. </div><div class="ttdef"><b>Definition:</b> avl.c:171</div></div> 16.103 +<div class="ttc" id="structUcxAVLNode_html_ab65a31010d26a3df898e6ba534702af6"><div class="ttname"><a href="structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6">UcxAVLNode::key</a></div><div class="ttdeci">intptr_t key</div><div class="ttdoc">The key for this node. </div><div class="ttdef"><b>Definition:</b> avl.h:67</div></div> 16.104 +<div class="ttc" id="structUcxAVLNode_html_a7cbaa31dba8c7a89f4f8f7905f6fd238"><div class="ttname"><a href="structUcxAVLNode.html#a7cbaa31dba8c7a89f4f8f7905f6fd238">UcxAVLNode::right</a></div><div class="ttdeci">UcxAVLNode * right</div><div class="ttdoc">Root node of right subtree. </div><div class="ttdef"><b>Definition:</b> avl.h:87</div></div> 16.105 +<div class="ttc" id="avl_8h_html_acf42da9a4168e47dc10b4ba0d27ceb4e"><div class="ttname"><a href="avl_8h.html#acf42da9a4168e47dc10b4ba0d27ceb4e">ucx_avl_get_node</a></div><div class="ttdeci">UcxAVLNode * ucx_avl_get_node(UcxAVLTree *tree, intptr_t key)</div><div class="ttdoc">Gets the node from the tree, that is associated with the specified key. </div><div class="ttdef"><b>Definition:</b> avl.c:156</div></div> 16.106 +<div class="ttc" id="structUcxAVLNode_html_af129fd32863a7c35e82c5cd9d11dc95a"><div class="ttname"><a href="structUcxAVLNode.html#af129fd32863a7c35e82c5cd9d11dc95a">UcxAVLNode::height</a></div><div class="ttdeci">size_t height</div><div class="ttdoc">The height of this (sub)-tree. </div><div class="ttdef"><b>Definition:</b> avl.h:75</div></div> 16.107 +<div class="ttc" id="ucx_8h_html_ad2b370c2809914c8b7fedab163c266b3"><div class="ttname"><a href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a></div><div class="ttdeci">void(* ucx_destructor)(void *)</div><div class="ttdoc">A function pointer to a destructor function. </div><div class="ttdef"><b>Definition:</b> ucx.h:72</div></div> 16.108 +</div><!-- fragment --></div><!-- contents --> 16.109 +<!-- start footer part --> 16.110 +<hr class="footer"/><address class="footer"><small> 16.111 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 16.112 +<img class="footer" src="doxygen.png" alt="doxygen"/> 16.113 +</a> 1.8.13 16.114 +</small></address> 16.115 +</body> 16.116 +</html>
17.1 Binary file docs/api-2.1/bc_s.png has changed
18.1 Binary file docs/api-2.1/bdwn.png has changed
19.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 19.2 +++ b/docs/api-2.1/buffer_8h.html Sat Feb 06 19:11:44 2021 +0100 19.3 @@ -0,0 +1,844 @@ 19.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 19.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 19.6 +<head> 19.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 19.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 19.9 +<meta name="generator" content="Doxygen 1.8.13"/> 19.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 19.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/buffer.h File Reference</title> 19.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 19.13 +<script type="text/javascript" src="jquery.js"></script> 19.14 +<script type="text/javascript" src="dynsections.js"></script> 19.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 19.16 +<script type="text/javascript" src="search/searchdata.js"></script> 19.17 +<script type="text/javascript" src="search/search.js"></script> 19.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 19.19 +</head> 19.20 +<body> 19.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 19.22 +<div id="titlearea"> 19.23 +<table cellspacing="0" cellpadding="0"> 19.24 + <tbody> 19.25 + <tr style="height: 56px;"> 19.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 19.27 + <td id="projectalign" style="padding-left: 0.5em;"> 19.28 + <div id="projectname">ucx 19.29 + </div> 19.30 + <div id="projectbrief">UAP Common Extensions</div> 19.31 + </td> 19.32 + </tr> 19.33 + </tbody> 19.34 +</table> 19.35 +</div> 19.36 +<!-- end header part --> 19.37 +<!-- Generated by Doxygen 1.8.13 --> 19.38 +<script type="text/javascript"> 19.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 19.40 +</script> 19.41 +<script type="text/javascript" src="menudata.js"></script> 19.42 +<script type="text/javascript" src="menu.js"></script> 19.43 +<script type="text/javascript"> 19.44 +$(function() { 19.45 + initMenu('',true,false,'search.php','Search'); 19.46 + $(document).ready(function() { init_search(); }); 19.47 +}); 19.48 +</script> 19.49 +<div id="main-nav"></div> 19.50 +<!-- window showing the filter options --> 19.51 +<div id="MSearchSelectWindow" 19.52 + onmouseover="return searchBox.OnSearchSelectShow()" 19.53 + onmouseout="return searchBox.OnSearchSelectHide()" 19.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 19.55 +</div> 19.56 + 19.57 +<!-- iframe showing the search results (closed by default) --> 19.58 +<div id="MSearchResultsWindow"> 19.59 +<iframe src="javascript:void(0)" frameborder="0" 19.60 + name="MSearchResults" id="MSearchResults"> 19.61 +</iframe> 19.62 +</div> 19.63 + 19.64 +<div id="nav-path" class="navpath"> 19.65 + <ul> 19.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 19.67 +</div> 19.68 +</div><!-- top --> 19.69 +<div class="header"> 19.70 + <div class="summary"> 19.71 +<a href="#nested-classes">Data Structures</a> | 19.72 +<a href="#define-members">Macros</a> | 19.73 +<a href="#func-members">Functions</a> </div> 19.74 + <div class="headertitle"> 19.75 +<div class="title">buffer.h File Reference</div> </div> 19.76 +</div><!--header--> 19.77 +<div class="contents"> 19.78 + 19.79 +<p>Advanced buffer implementation. 19.80 +<a href="#details">More...</a></p> 19.81 +<div class="textblock"><code>#include "<a class="el" href="ucx_8h_source.html">ucx.h</a>"</code><br /> 19.82 +<code>#include <sys/types.h></code><br /> 19.83 +<code>#include <stdio.h></code><br /> 19.84 +</div> 19.85 +<p><a href="buffer_8h_source.html">Go to the source code of this file.</a></p> 19.86 +<table class="memberdecls"> 19.87 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> 19.88 +Data Structures</h2></td></tr> 19.89 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxBuffer.html">UcxBuffer</a></td></tr> 19.90 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">UCX Buffer. <a href="structUcxBuffer.html#details">More...</a><br /></td></tr> 19.91 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 19.92 +</table><table class="memberdecls"> 19.93 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> 19.94 +Macros</h2></td></tr> 19.95 +<tr class="memitem:acc77c8ed7b26854f555d4a5d11e49ea2"><td class="memItemLeft" align="right" valign="top"><a id="acc77c8ed7b26854f555d4a5d11e49ea2"></a> 19.96 +#define </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#acc77c8ed7b26854f555d4a5d11e49ea2">UCX_BUFFER_DEFAULT</a>   0x00</td></tr> 19.97 +<tr class="memdesc:acc77c8ed7b26854f555d4a5d11e49ea2"><td class="mdescLeft"> </td><td class="mdescRight">No buffer features enabled (all flags cleared). <br /></td></tr> 19.98 +<tr class="separator:acc77c8ed7b26854f555d4a5d11e49ea2"><td class="memSeparator" colspan="2"> </td></tr> 19.99 +<tr class="memitem:a8bab11ad8a76719228b9ee91e2e45535"><td class="memItemLeft" align="right" valign="top"><a id="a8bab11ad8a76719228b9ee91e2e45535"></a> 19.100 +#define </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#a8bab11ad8a76719228b9ee91e2e45535">UCX_BUFFER_AUTOFREE</a>   0x01</td></tr> 19.101 +<tr class="memdesc:a8bab11ad8a76719228b9ee91e2e45535"><td class="mdescLeft"> </td><td class="mdescRight">If this flag is enabled, the buffer will automatically free its contents. <br /></td></tr> 19.102 +<tr class="separator:a8bab11ad8a76719228b9ee91e2e45535"><td class="memSeparator" colspan="2"> </td></tr> 19.103 +<tr class="memitem:a05f9565f2d04399168c3b1c152a632be"><td class="memItemLeft" align="right" valign="top"><a id="a05f9565f2d04399168c3b1c152a632be"></a> 19.104 +#define </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#a05f9565f2d04399168c3b1c152a632be">UCX_BUFFER_AUTOEXTEND</a>   0x02</td></tr> 19.105 +<tr class="memdesc:a05f9565f2d04399168c3b1c152a632be"><td class="mdescLeft"> </td><td class="mdescRight">If this flag is enabled, the buffer will automatically extends its capacity. <br /></td></tr> 19.106 +<tr class="separator:a05f9565f2d04399168c3b1c152a632be"><td class="memSeparator" colspan="2"> </td></tr> 19.107 +<tr class="memitem:a828353846428c2c2f695f9938f059e52"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#a828353846428c2c2f695f9938f059e52">ucx_buffer_clone</a>(src, flags)   <a class="el" href="buffer_8h.html#a33fa7bb35fe08bbb3542f227514332ef">ucx_buffer_extract</a>(src, 0, (src)->capacity, flags)</td></tr> 19.108 +<tr class="memdesc:a828353846428c2c2f695f9938f059e52"><td class="mdescLeft"> </td><td class="mdescRight">A shorthand macro for the full extraction of the buffer. <a href="#a828353846428c2c2f695f9938f059e52">More...</a><br /></td></tr> 19.109 +<tr class="separator:a828353846428c2c2f695f9938f059e52"><td class="memSeparator" colspan="2"> </td></tr> 19.110 +<tr class="memitem:a374abd5aabfcc3ee0777a79d5fe651ab"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#a374abd5aabfcc3ee0777a79d5fe651ab">ucx_buffer_clear</a>(buffer)</td></tr> 19.111 +<tr class="memdesc:a374abd5aabfcc3ee0777a79d5fe651ab"><td class="mdescLeft"> </td><td class="mdescRight">Clears the buffer by resetting the position and deleting the data. <a href="#a374abd5aabfcc3ee0777a79d5fe651ab">More...</a><br /></td></tr> 19.112 +<tr class="separator:a374abd5aabfcc3ee0777a79d5fe651ab"><td class="memSeparator" colspan="2"> </td></tr> 19.113 +<tr class="memitem:a0f4b64f1b3a74c4f6c5d9409d6b6086a"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#a0f4b64f1b3a74c4f6c5d9409d6b6086a">ucx_buffer_to_sstr</a>(buffer)   <a class="el" href="string_8h.html#a2744c38ac44abf3e01fa059056dcf36c">sstrn</a>((buffer)->space, (buffer)->size)</td></tr> 19.114 +<tr class="memdesc:a0f4b64f1b3a74c4f6c5d9409d6b6086a"><td class="mdescLeft"> </td><td class="mdescRight">Returns the complete buffer content as <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a>. <a href="#a0f4b64f1b3a74c4f6c5d9409d6b6086a">More...</a><br /></td></tr> 19.115 +<tr class="separator:a0f4b64f1b3a74c4f6c5d9409d6b6086a"><td class="memSeparator" colspan="2"> </td></tr> 19.116 +</table><table class="memberdecls"> 19.117 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 19.118 +Functions</h2></td></tr> 19.119 +<tr class="memitem:aacea876d692193ec6f859ce98da7351c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxBuffer.html">UcxBuffer</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#aacea876d692193ec6f859ce98da7351c">ucx_buffer_new</a> (void *space, size_t capacity, int flags)</td></tr> 19.120 +<tr class="memdesc:aacea876d692193ec6f859ce98da7351c"><td class="mdescLeft"> </td><td class="mdescRight">Creates a new buffer. <a href="#aacea876d692193ec6f859ce98da7351c">More...</a><br /></td></tr> 19.121 +<tr class="separator:aacea876d692193ec6f859ce98da7351c"><td class="memSeparator" colspan="2"> </td></tr> 19.122 +<tr class="memitem:a2af8646d8905c22c7322e7540b0440af"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#a2af8646d8905c22c7322e7540b0440af">ucx_buffer_free</a> (<a class="el" href="structUcxBuffer.html">UcxBuffer</a> *buffer)</td></tr> 19.123 +<tr class="memdesc:a2af8646d8905c22c7322e7540b0440af"><td class="mdescLeft"> </td><td class="mdescRight">Destroys a buffer. <a href="#a2af8646d8905c22c7322e7540b0440af">More...</a><br /></td></tr> 19.124 +<tr class="separator:a2af8646d8905c22c7322e7540b0440af"><td class="memSeparator" colspan="2"> </td></tr> 19.125 +<tr class="memitem:a33fa7bb35fe08bbb3542f227514332ef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxBuffer.html">UcxBuffer</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#a33fa7bb35fe08bbb3542f227514332ef">ucx_buffer_extract</a> (<a class="el" href="structUcxBuffer.html">UcxBuffer</a> *src, size_t start, size_t length, int flags)</td></tr> 19.126 +<tr class="memdesc:a33fa7bb35fe08bbb3542f227514332ef"><td class="mdescLeft"> </td><td class="mdescRight">Creates a new buffer and fills it with extracted content from another buffer. <a href="#a33fa7bb35fe08bbb3542f227514332ef">More...</a><br /></td></tr> 19.127 +<tr class="separator:a33fa7bb35fe08bbb3542f227514332ef"><td class="memSeparator" colspan="2"> </td></tr> 19.128 +<tr class="memitem:a12a0c6a2379ef080043e6286bb8bad69"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#a12a0c6a2379ef080043e6286bb8bad69">ucx_buffer_shift</a> (<a class="el" href="structUcxBuffer.html">UcxBuffer</a> *buffer, off_t shift)</td></tr> 19.129 +<tr class="memdesc:a12a0c6a2379ef080043e6286bb8bad69"><td class="mdescLeft"> </td><td class="mdescRight">Shifts the contents of the buffer by the given offset. <a href="#a12a0c6a2379ef080043e6286bb8bad69">More...</a><br /></td></tr> 19.130 +<tr class="separator:a12a0c6a2379ef080043e6286bb8bad69"><td class="memSeparator" colspan="2"> </td></tr> 19.131 +<tr class="memitem:a4fa10b6471495547eb981248fd4f1bc2"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#a4fa10b6471495547eb981248fd4f1bc2">ucx_buffer_shift_right</a> (<a class="el" href="structUcxBuffer.html">UcxBuffer</a> *buffer, size_t shift)</td></tr> 19.132 +<tr class="memdesc:a4fa10b6471495547eb981248fd4f1bc2"><td class="mdescLeft"> </td><td class="mdescRight">Shifts the buffer to the right. <a href="#a4fa10b6471495547eb981248fd4f1bc2">More...</a><br /></td></tr> 19.133 +<tr class="separator:a4fa10b6471495547eb981248fd4f1bc2"><td class="memSeparator" colspan="2"> </td></tr> 19.134 +<tr class="memitem:a20431dd0ed6a6fe9f15333bd72afe4db"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#a20431dd0ed6a6fe9f15333bd72afe4db">ucx_buffer_shift_left</a> (<a class="el" href="structUcxBuffer.html">UcxBuffer</a> *buffer, size_t shift)</td></tr> 19.135 +<tr class="memdesc:a20431dd0ed6a6fe9f15333bd72afe4db"><td class="mdescLeft"> </td><td class="mdescRight">Shifts the buffer to the left. <a href="#a20431dd0ed6a6fe9f15333bd72afe4db">More...</a><br /></td></tr> 19.136 +<tr class="separator:a20431dd0ed6a6fe9f15333bd72afe4db"><td class="memSeparator" colspan="2"> </td></tr> 19.137 +<tr class="memitem:a47d98482662073c74f35deb0957d15d1"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#a47d98482662073c74f35deb0957d15d1">ucx_buffer_seek</a> (<a class="el" href="structUcxBuffer.html">UcxBuffer</a> *buffer, off_t offset, int whence)</td></tr> 19.138 +<tr class="memdesc:a47d98482662073c74f35deb0957d15d1"><td class="mdescLeft"> </td><td class="mdescRight">Moves the position of the buffer. <a href="#a47d98482662073c74f35deb0957d15d1">More...</a><br /></td></tr> 19.139 +<tr class="separator:a47d98482662073c74f35deb0957d15d1"><td class="memSeparator" colspan="2"> </td></tr> 19.140 +<tr class="memitem:abad7fd9ad5061224c780b8d1d4c55f09"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#abad7fd9ad5061224c780b8d1d4c55f09">ucx_buffer_eof</a> (<a class="el" href="structUcxBuffer.html">UcxBuffer</a> *buffer)</td></tr> 19.141 +<tr class="memdesc:abad7fd9ad5061224c780b8d1d4c55f09"><td class="mdescLeft"> </td><td class="mdescRight">Tests, if the buffer position has exceeded the buffer capacity. <a href="#abad7fd9ad5061224c780b8d1d4c55f09">More...</a><br /></td></tr> 19.142 +<tr class="separator:abad7fd9ad5061224c780b8d1d4c55f09"><td class="memSeparator" colspan="2"> </td></tr> 19.143 +<tr class="memitem:afaf97d2cd7e9faad79a9d35fe33e30c6"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#afaf97d2cd7e9faad79a9d35fe33e30c6">ucx_buffer_extend</a> (<a class="el" href="structUcxBuffer.html">UcxBuffer</a> *buffer, size_t additional_bytes)</td></tr> 19.144 +<tr class="memdesc:afaf97d2cd7e9faad79a9d35fe33e30c6"><td class="mdescLeft"> </td><td class="mdescRight">Extends the capacity of the buffer. <a href="#afaf97d2cd7e9faad79a9d35fe33e30c6">More...</a><br /></td></tr> 19.145 +<tr class="separator:afaf97d2cd7e9faad79a9d35fe33e30c6"><td class="memSeparator" colspan="2"> </td></tr> 19.146 +<tr class="memitem:af8aacc7401814392b58c1b7b81bffc05"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#af8aacc7401814392b58c1b7b81bffc05">ucx_buffer_write</a> (const void *ptr, size_t size, size_t nitems, <a class="el" href="structUcxBuffer.html">UcxBuffer</a> *buffer)</td></tr> 19.147 +<tr class="memdesc:af8aacc7401814392b58c1b7b81bffc05"><td class="mdescLeft"> </td><td class="mdescRight">Writes data to a <a class="el" href="structUcxBuffer.html" title="UCX Buffer. ">UcxBuffer</a>. <a href="#af8aacc7401814392b58c1b7b81bffc05">More...</a><br /></td></tr> 19.148 +<tr class="separator:af8aacc7401814392b58c1b7b81bffc05"><td class="memSeparator" colspan="2"> </td></tr> 19.149 +<tr class="memitem:ae5c3430759f0059547b35d5a254d4da5"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#ae5c3430759f0059547b35d5a254d4da5">ucx_buffer_read</a> (void *ptr, size_t size, size_t nitems, <a class="el" href="structUcxBuffer.html">UcxBuffer</a> *buffer)</td></tr> 19.150 +<tr class="memdesc:ae5c3430759f0059547b35d5a254d4da5"><td class="mdescLeft"> </td><td class="mdescRight">Reads data from a <a class="el" href="structUcxBuffer.html" title="UCX Buffer. ">UcxBuffer</a>. <a href="#ae5c3430759f0059547b35d5a254d4da5">More...</a><br /></td></tr> 19.151 +<tr class="separator:ae5c3430759f0059547b35d5a254d4da5"><td class="memSeparator" colspan="2"> </td></tr> 19.152 +<tr class="memitem:a7d6f01b9d631b0123475dfb98fb849ac"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#a7d6f01b9d631b0123475dfb98fb849ac">ucx_buffer_putc</a> (<a class="el" href="structUcxBuffer.html">UcxBuffer</a> *buffer, int c)</td></tr> 19.153 +<tr class="memdesc:a7d6f01b9d631b0123475dfb98fb849ac"><td class="mdescLeft"> </td><td class="mdescRight">Writes a character to a buffer. <a href="#a7d6f01b9d631b0123475dfb98fb849ac">More...</a><br /></td></tr> 19.154 +<tr class="separator:a7d6f01b9d631b0123475dfb98fb849ac"><td class="memSeparator" colspan="2"> </td></tr> 19.155 +<tr class="memitem:a396339022159ce4ca6d069de9f9209b0"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#a396339022159ce4ca6d069de9f9209b0">ucx_buffer_getc</a> (<a class="el" href="structUcxBuffer.html">UcxBuffer</a> *buffer)</td></tr> 19.156 +<tr class="memdesc:a396339022159ce4ca6d069de9f9209b0"><td class="mdescLeft"> </td><td class="mdescRight">Gets a character from a buffer. <a href="#a396339022159ce4ca6d069de9f9209b0">More...</a><br /></td></tr> 19.157 +<tr class="separator:a396339022159ce4ca6d069de9f9209b0"><td class="memSeparator" colspan="2"> </td></tr> 19.158 +<tr class="memitem:af1d4b478e04b3ae0bf30e7c2ea964ea2"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html#af1d4b478e04b3ae0bf30e7c2ea964ea2">ucx_buffer_puts</a> (<a class="el" href="structUcxBuffer.html">UcxBuffer</a> *buffer, const char *str)</td></tr> 19.159 +<tr class="memdesc:af1d4b478e04b3ae0bf30e7c2ea964ea2"><td class="mdescLeft"> </td><td class="mdescRight">Writes a string to a buffer. <a href="#af1d4b478e04b3ae0bf30e7c2ea964ea2">More...</a><br /></td></tr> 19.160 +<tr class="separator:af1d4b478e04b3ae0bf30e7c2ea964ea2"><td class="memSeparator" colspan="2"> </td></tr> 19.161 +</table> 19.162 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 19.163 +<div class="textblock"><p>Advanced buffer implementation. </p> 19.164 +<p>Instances of <a class="el" href="structUcxBuffer.html" title="UCX Buffer. ">UcxBuffer</a> can be used to read from or to write to like one would do with a stream. This allows the use of <a class="el" href="utils_8h.html#a41ca1344f781c0d3bf7a414a6e811392" title="Shorthand for an unbounded ucx_stream_bncopy call using a default buffer. ">ucx_stream_copy()</a> to copy contents from one buffer to another.</p> 19.165 +<p>Some features for convenient use of the buffer can be enabled. See the documentation of the macro constants for more information.</p> 19.166 +<dl class="section author"><dt>Author</dt><dd>Mike Becker </dd> 19.167 +<dd> 19.168 +Olaf Wintermann </dd></dl> 19.169 +</div><h2 class="groupheader">Macro Definition Documentation</h2> 19.170 +<a id="a374abd5aabfcc3ee0777a79d5fe651ab"></a> 19.171 +<h2 class="memtitle"><span class="permalink"><a href="#a374abd5aabfcc3ee0777a79d5fe651ab">◆ </a></span>ucx_buffer_clear</h2> 19.172 + 19.173 +<div class="memitem"> 19.174 +<div class="memproto"> 19.175 + <table class="memname"> 19.176 + <tr> 19.177 + <td class="memname">#define ucx_buffer_clear</td> 19.178 + <td>(</td> 19.179 + <td class="paramtype"> </td> 19.180 + <td class="paramname">buffer</td><td>)</td> 19.181 + <td></td> 19.182 + </tr> 19.183 + </table> 19.184 +</div><div class="memdoc"> 19.185 +<b>Value:</b><div class="fragment"><div class="line">memset((buffer)->space, 0, (buffer)->size); \</div><div class="line"> (buffer)->size = 0; (buffer)->pos = 0;</div></div><!-- fragment --> 19.186 +<p>Clears the buffer by resetting the position and deleting the data. </p> 19.187 +<p>The data is deleted by a zeroing it with call to <code>memset()</code>.</p> 19.188 +<dl class="params"><dt>Parameters</dt><dd> 19.189 + <table class="params"> 19.190 + <tr><td class="paramname">buffer</td><td>the buffer to be cleared </td></tr> 19.191 + </table> 19.192 + </dd> 19.193 +</dl> 19.194 + 19.195 +</div> 19.196 +</div> 19.197 +<a id="a828353846428c2c2f695f9938f059e52"></a> 19.198 +<h2 class="memtitle"><span class="permalink"><a href="#a828353846428c2c2f695f9938f059e52">◆ </a></span>ucx_buffer_clone</h2> 19.199 + 19.200 +<div class="memitem"> 19.201 +<div class="memproto"> 19.202 + <table class="memname"> 19.203 + <tr> 19.204 + <td class="memname">#define ucx_buffer_clone</td> 19.205 + <td>(</td> 19.206 + <td class="paramtype"> </td> 19.207 + <td class="paramname">src, </td> 19.208 + </tr> 19.209 + <tr> 19.210 + <td class="paramkey"></td> 19.211 + <td></td> 19.212 + <td class="paramtype"> </td> 19.213 + <td class="paramname">flags </td> 19.214 + </tr> 19.215 + <tr> 19.216 + <td></td> 19.217 + <td>)</td> 19.218 + <td></td><td>   <a class="el" href="buffer_8h.html#a33fa7bb35fe08bbb3542f227514332ef">ucx_buffer_extract</a>(src, 0, (src)->capacity, flags)</td> 19.219 + </tr> 19.220 + </table> 19.221 +</div><div class="memdoc"> 19.222 + 19.223 +<p>A shorthand macro for the full extraction of the buffer. </p> 19.224 +<dl class="params"><dt>Parameters</dt><dd> 19.225 + <table class="params"> 19.226 + <tr><td class="paramname">src</td><td>the source buffer </td></tr> 19.227 + <tr><td class="paramname">flags</td><td>feature mask for the new buffer </td></tr> 19.228 + </table> 19.229 + </dd> 19.230 +</dl> 19.231 +<dl class="section return"><dt>Returns</dt><dd>a new buffer with the extracted content </dd></dl> 19.232 + 19.233 +</div> 19.234 +</div> 19.235 +<a id="a0f4b64f1b3a74c4f6c5d9409d6b6086a"></a> 19.236 +<h2 class="memtitle"><span class="permalink"><a href="#a0f4b64f1b3a74c4f6c5d9409d6b6086a">◆ </a></span>ucx_buffer_to_sstr</h2> 19.237 + 19.238 +<div class="memitem"> 19.239 +<div class="memproto"> 19.240 + <table class="memname"> 19.241 + <tr> 19.242 + <td class="memname">#define ucx_buffer_to_sstr</td> 19.243 + <td>(</td> 19.244 + <td class="paramtype"> </td> 19.245 + <td class="paramname">buffer</td><td>)</td> 19.246 + <td>   <a class="el" href="string_8h.html#a2744c38ac44abf3e01fa059056dcf36c">sstrn</a>((buffer)->space, (buffer)->size)</td> 19.247 + </tr> 19.248 + </table> 19.249 +</div><div class="memdoc"> 19.250 + 19.251 +<p>Returns the complete buffer content as <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a>. </p> 19.252 +<dl class="params"><dt>Parameters</dt><dd> 19.253 + <table class="params"> 19.254 + <tr><td class="paramname">buffer</td><td>the buffer </td></tr> 19.255 + </table> 19.256 + </dd> 19.257 +</dl> 19.258 +<dl class="section return"><dt>Returns</dt><dd>the result of <code><a class="el" href="string_8h.html#a2744c38ac44abf3e01fa059056dcf36c" title="Creates a new sstr_t of the specified length based on a C string. ">sstrn()</a></code> with the buffer space and size as arguments </dd></dl> 19.259 + 19.260 +</div> 19.261 +</div> 19.262 +<h2 class="groupheader">Function Documentation</h2> 19.263 +<a id="abad7fd9ad5061224c780b8d1d4c55f09"></a> 19.264 +<h2 class="memtitle"><span class="permalink"><a href="#abad7fd9ad5061224c780b8d1d4c55f09">◆ </a></span>ucx_buffer_eof()</h2> 19.265 + 19.266 +<div class="memitem"> 19.267 +<div class="memproto"> 19.268 + <table class="memname"> 19.269 + <tr> 19.270 + <td class="memname">int ucx_buffer_eof </td> 19.271 + <td>(</td> 19.272 + <td class="paramtype"><a class="el" href="structUcxBuffer.html">UcxBuffer</a> * </td> 19.273 + <td class="paramname"><em>buffer</em></td><td>)</td> 19.274 + <td></td> 19.275 + </tr> 19.276 + </table> 19.277 +</div><div class="memdoc"> 19.278 + 19.279 +<p>Tests, if the buffer position has exceeded the buffer capacity. </p> 19.280 +<dl class="params"><dt>Parameters</dt><dd> 19.281 + <table class="params"> 19.282 + <tr><td class="paramname">buffer</td><td>the buffer to test </td></tr> 19.283 + </table> 19.284 + </dd> 19.285 +</dl> 19.286 +<dl class="section return"><dt>Returns</dt><dd>non-zero, if the current buffer position has exceeded the last available byte of the buffer. </dd></dl> 19.287 + 19.288 +</div> 19.289 +</div> 19.290 +<a id="afaf97d2cd7e9faad79a9d35fe33e30c6"></a> 19.291 +<h2 class="memtitle"><span class="permalink"><a href="#afaf97d2cd7e9faad79a9d35fe33e30c6">◆ </a></span>ucx_buffer_extend()</h2> 19.292 + 19.293 +<div class="memitem"> 19.294 +<div class="memproto"> 19.295 + <table class="memname"> 19.296 + <tr> 19.297 + <td class="memname">int ucx_buffer_extend </td> 19.298 + <td>(</td> 19.299 + <td class="paramtype"><a class="el" href="structUcxBuffer.html">UcxBuffer</a> * </td> 19.300 + <td class="paramname"><em>buffer</em>, </td> 19.301 + </tr> 19.302 + <tr> 19.303 + <td class="paramkey"></td> 19.304 + <td></td> 19.305 + <td class="paramtype">size_t </td> 19.306 + <td class="paramname"><em>additional_bytes</em> </td> 19.307 + </tr> 19.308 + <tr> 19.309 + <td></td> 19.310 + <td>)</td> 19.311 + <td></td><td></td> 19.312 + </tr> 19.313 + </table> 19.314 +</div><div class="memdoc"> 19.315 + 19.316 +<p>Extends the capacity of the buffer. </p> 19.317 +<p><b>Note:</b> 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.</p> 19.318 +<p><b>Attention:</b> the argument provided is the number of <em>additional</em> bytes the buffer shall hold. It is <b>NOT</b> the total number of bytes the buffer shall hold.</p> 19.319 +<dl class="params"><dt>Parameters</dt><dd> 19.320 + <table class="params"> 19.321 + <tr><td class="paramname">buffer</td><td>the buffer to extend </td></tr> 19.322 + <tr><td class="paramname">additional_bytes</td><td>the number of additional bytes the buffer shall <em>at least</em> hold </td></tr> 19.323 + </table> 19.324 + </dd> 19.325 +</dl> 19.326 +<dl class="section return"><dt>Returns</dt><dd>0 on success or a non-zero value on failure </dd></dl> 19.327 + 19.328 +</div> 19.329 +</div> 19.330 +<a id="a33fa7bb35fe08bbb3542f227514332ef"></a> 19.331 +<h2 class="memtitle"><span class="permalink"><a href="#a33fa7bb35fe08bbb3542f227514332ef">◆ </a></span>ucx_buffer_extract()</h2> 19.332 + 19.333 +<div class="memitem"> 19.334 +<div class="memproto"> 19.335 + <table class="memname"> 19.336 + <tr> 19.337 + <td class="memname"><a class="el" href="structUcxBuffer.html">UcxBuffer</a>* ucx_buffer_extract </td> 19.338 + <td>(</td> 19.339 + <td class="paramtype"><a class="el" href="structUcxBuffer.html">UcxBuffer</a> * </td> 19.340 + <td class="paramname"><em>src</em>, </td> 19.341 + </tr> 19.342 + <tr> 19.343 + <td class="paramkey"></td> 19.344 + <td></td> 19.345 + <td class="paramtype">size_t </td> 19.346 + <td class="paramname"><em>start</em>, </td> 19.347 + </tr> 19.348 + <tr> 19.349 + <td class="paramkey"></td> 19.350 + <td></td> 19.351 + <td class="paramtype">size_t </td> 19.352 + <td class="paramname"><em>length</em>, </td> 19.353 + </tr> 19.354 + <tr> 19.355 + <td class="paramkey"></td> 19.356 + <td></td> 19.357 + <td class="paramtype">int </td> 19.358 + <td class="paramname"><em>flags</em> </td> 19.359 + </tr> 19.360 + <tr> 19.361 + <td></td> 19.362 + <td>)</td> 19.363 + <td></td><td></td> 19.364 + </tr> 19.365 + </table> 19.366 +</div><div class="memdoc"> 19.367 + 19.368 +<p>Creates a new buffer and fills it with extracted content from another buffer. </p> 19.369 +<p><b>Note:</b> the <a class="el" href="buffer_8h.html#a8bab11ad8a76719228b9ee91e2e45535" title="If this flag is enabled, the buffer will automatically free its contents. ">UCX_BUFFER_AUTOFREE</a> feature is enforced for the new buffer.</p> 19.370 +<dl class="params"><dt>Parameters</dt><dd> 19.371 + <table class="params"> 19.372 + <tr><td class="paramname">src</td><td>the source buffer </td></tr> 19.373 + <tr><td class="paramname">start</td><td>the start position of extraction </td></tr> 19.374 + <tr><td class="paramname">length</td><td>the count of bytes to extract (must not be zero) </td></tr> 19.375 + <tr><td class="paramname">flags</td><td>feature mask for the new buffer </td></tr> 19.376 + </table> 19.377 + </dd> 19.378 +</dl> 19.379 +<dl class="section return"><dt>Returns</dt><dd>a new buffer containing the extraction </dd></dl> 19.380 + 19.381 +</div> 19.382 +</div> 19.383 +<a id="a2af8646d8905c22c7322e7540b0440af"></a> 19.384 +<h2 class="memtitle"><span class="permalink"><a href="#a2af8646d8905c22c7322e7540b0440af">◆ </a></span>ucx_buffer_free()</h2> 19.385 + 19.386 +<div class="memitem"> 19.387 +<div class="memproto"> 19.388 + <table class="memname"> 19.389 + <tr> 19.390 + <td class="memname">void ucx_buffer_free </td> 19.391 + <td>(</td> 19.392 + <td class="paramtype"><a class="el" href="structUcxBuffer.html">UcxBuffer</a> * </td> 19.393 + <td class="paramname"><em>buffer</em></td><td>)</td> 19.394 + <td></td> 19.395 + </tr> 19.396 + </table> 19.397 +</div><div class="memdoc"> 19.398 + 19.399 +<p>Destroys a buffer. </p> 19.400 +<p>If the <a class="el" href="buffer_8h.html#a8bab11ad8a76719228b9ee91e2e45535" title="If this flag is enabled, the buffer will automatically free its contents. ">UCX_BUFFER_AUTOFREE</a> feature is enabled, the contents of the buffer are also freed.</p> 19.401 +<dl class="params"><dt>Parameters</dt><dd> 19.402 + <table class="params"> 19.403 + <tr><td class="paramname">buffer</td><td>the buffer to destroy </td></tr> 19.404 + </table> 19.405 + </dd> 19.406 +</dl> 19.407 + 19.408 +</div> 19.409 +</div> 19.410 +<a id="a396339022159ce4ca6d069de9f9209b0"></a> 19.411 +<h2 class="memtitle"><span class="permalink"><a href="#a396339022159ce4ca6d069de9f9209b0">◆ </a></span>ucx_buffer_getc()</h2> 19.412 + 19.413 +<div class="memitem"> 19.414 +<div class="memproto"> 19.415 + <table class="memname"> 19.416 + <tr> 19.417 + <td class="memname">int ucx_buffer_getc </td> 19.418 + <td>(</td> 19.419 + <td class="paramtype"><a class="el" href="structUcxBuffer.html">UcxBuffer</a> * </td> 19.420 + <td class="paramname"><em>buffer</em></td><td>)</td> 19.421 + <td></td> 19.422 + </tr> 19.423 + </table> 19.424 +</div><div class="memdoc"> 19.425 + 19.426 +<p>Gets a character from a buffer. </p> 19.427 +<p>The current position of the buffer is increased after a successful read.</p> 19.428 +<dl class="params"><dt>Parameters</dt><dd> 19.429 + <table class="params"> 19.430 + <tr><td class="paramname">buffer</td><td>the buffer to read from </td></tr> 19.431 + </table> 19.432 + </dd> 19.433 +</dl> 19.434 +<dl class="section return"><dt>Returns</dt><dd>the character as <code>int</code> value or <code>EOF</code>, if the end of the buffer is reached </dd></dl> 19.435 + 19.436 +</div> 19.437 +</div> 19.438 +<a id="aacea876d692193ec6f859ce98da7351c"></a> 19.439 +<h2 class="memtitle"><span class="permalink"><a href="#aacea876d692193ec6f859ce98da7351c">◆ </a></span>ucx_buffer_new()</h2> 19.440 + 19.441 +<div class="memitem"> 19.442 +<div class="memproto"> 19.443 + <table class="memname"> 19.444 + <tr> 19.445 + <td class="memname"><a class="el" href="structUcxBuffer.html">UcxBuffer</a>* ucx_buffer_new </td> 19.446 + <td>(</td> 19.447 + <td class="paramtype">void * </td> 19.448 + <td class="paramname"><em>space</em>, </td> 19.449 + </tr> 19.450 + <tr> 19.451 + <td class="paramkey"></td> 19.452 + <td></td> 19.453 + <td class="paramtype">size_t </td> 19.454 + <td class="paramname"><em>capacity</em>, </td> 19.455 + </tr> 19.456 + <tr> 19.457 + <td class="paramkey"></td> 19.458 + <td></td> 19.459 + <td class="paramtype">int </td> 19.460 + <td class="paramname"><em>flags</em> </td> 19.461 + </tr> 19.462 + <tr> 19.463 + <td></td> 19.464 + <td>)</td> 19.465 + <td></td><td></td> 19.466 + </tr> 19.467 + </table> 19.468 +</div><div class="memdoc"> 19.469 + 19.470 +<p>Creates a new buffer. </p> 19.471 +<p><b>Note:</b> you may provide <code>NULL</code> as argument for <code>space</code>. Then this function will allocate the space and enforce the <a class="el" href="buffer_8h.html#a8bab11ad8a76719228b9ee91e2e45535" title="If this flag is enabled, the buffer will automatically free its contents. ">UCX_BUFFER_AUTOFREE</a> flag.</p> 19.472 +<dl class="params"><dt>Parameters</dt><dd> 19.473 + <table class="params"> 19.474 + <tr><td class="paramname">space</td><td>pointer to the memory area, or <code>NULL</code> to allocate new memory </td></tr> 19.475 + <tr><td class="paramname">capacity</td><td>the capacity of the buffer </td></tr> 19.476 + <tr><td class="paramname">flags</td><td>buffer features (see <a class="el" href="structUcxBuffer.html#ac642e07b0a03be5aac48eb4aa5bec2f7" title="Flag register for buffer features. ">UcxBuffer.flags</a>) </td></tr> 19.477 + </table> 19.478 + </dd> 19.479 +</dl> 19.480 +<dl class="section return"><dt>Returns</dt><dd>the new buffer </dd></dl> 19.481 + 19.482 +</div> 19.483 +</div> 19.484 +<a id="a7d6f01b9d631b0123475dfb98fb849ac"></a> 19.485 +<h2 class="memtitle"><span class="permalink"><a href="#a7d6f01b9d631b0123475dfb98fb849ac">◆ </a></span>ucx_buffer_putc()</h2> 19.486 + 19.487 +<div class="memitem"> 19.488 +<div class="memproto"> 19.489 + <table class="memname"> 19.490 + <tr> 19.491 + <td class="memname">int ucx_buffer_putc </td> 19.492 + <td>(</td> 19.493 + <td class="paramtype"><a class="el" href="structUcxBuffer.html">UcxBuffer</a> * </td> 19.494 + <td class="paramname"><em>buffer</em>, </td> 19.495 + </tr> 19.496 + <tr> 19.497 + <td class="paramkey"></td> 19.498 + <td></td> 19.499 + <td class="paramtype">int </td> 19.500 + <td class="paramname"><em>c</em> </td> 19.501 + </tr> 19.502 + <tr> 19.503 + <td></td> 19.504 + <td>)</td> 19.505 + <td></td><td></td> 19.506 + </tr> 19.507 + </table> 19.508 +</div><div class="memdoc"> 19.509 + 19.510 +<p>Writes a character to a buffer. </p> 19.511 +<p>The least significant byte of the argument is written to the buffer. If the end of the buffer is reached and <a class="el" href="buffer_8h.html#a05f9565f2d04399168c3b1c152a632be" title="If this flag is enabled, the buffer will automatically extends its capacity. ">UCX_BUFFER_AUTOEXTEND</a> feature is enabled, the buffer capacity is extended by <a class="el" href="buffer_8h.html#afaf97d2cd7e9faad79a9d35fe33e30c6" title="Extends the capacity of the buffer. ">ucx_buffer_extend()</a>. If the feature is disabled or buffer extension fails, <code>EOF</code> is returned.</p> 19.512 +<p>On successful write the position of the buffer is increased.</p> 19.513 +<dl class="params"><dt>Parameters</dt><dd> 19.514 + <table class="params"> 19.515 + <tr><td class="paramname">buffer</td><td>the buffer to write to </td></tr> 19.516 + <tr><td class="paramname">c</td><td>the character to write as <code>int</code> value </td></tr> 19.517 + </table> 19.518 + </dd> 19.519 +</dl> 19.520 +<dl class="section return"><dt>Returns</dt><dd>the byte that has bean written as <code>int</code> value or <code>EOF</code> when the end of the stream is reached and automatic extension is not enabled or not possible </dd></dl> 19.521 + 19.522 +</div> 19.523 +</div> 19.524 +<a id="af1d4b478e04b3ae0bf30e7c2ea964ea2"></a> 19.525 +<h2 class="memtitle"><span class="permalink"><a href="#af1d4b478e04b3ae0bf30e7c2ea964ea2">◆ </a></span>ucx_buffer_puts()</h2> 19.526 + 19.527 +<div class="memitem"> 19.528 +<div class="memproto"> 19.529 + <table class="memname"> 19.530 + <tr> 19.531 + <td class="memname">size_t ucx_buffer_puts </td> 19.532 + <td>(</td> 19.533 + <td class="paramtype"><a class="el" href="structUcxBuffer.html">UcxBuffer</a> * </td> 19.534 + <td class="paramname"><em>buffer</em>, </td> 19.535 + </tr> 19.536 + <tr> 19.537 + <td class="paramkey"></td> 19.538 + <td></td> 19.539 + <td class="paramtype">const char * </td> 19.540 + <td class="paramname"><em>str</em> </td> 19.541 + </tr> 19.542 + <tr> 19.543 + <td></td> 19.544 + <td>)</td> 19.545 + <td></td><td></td> 19.546 + </tr> 19.547 + </table> 19.548 +</div><div class="memdoc"> 19.549 + 19.550 +<p>Writes a string to a buffer. </p> 19.551 +<dl class="params"><dt>Parameters</dt><dd> 19.552 + <table class="params"> 19.553 + <tr><td class="paramname">buffer</td><td>the buffer </td></tr> 19.554 + <tr><td class="paramname">str</td><td>the string </td></tr> 19.555 + </table> 19.556 + </dd> 19.557 +</dl> 19.558 +<dl class="section return"><dt>Returns</dt><dd>the number of bytes written </dd></dl> 19.559 + 19.560 +</div> 19.561 +</div> 19.562 +<a id="ae5c3430759f0059547b35d5a254d4da5"></a> 19.563 +<h2 class="memtitle"><span class="permalink"><a href="#ae5c3430759f0059547b35d5a254d4da5">◆ </a></span>ucx_buffer_read()</h2> 19.564 + 19.565 +<div class="memitem"> 19.566 +<div class="memproto"> 19.567 + <table class="memname"> 19.568 + <tr> 19.569 + <td class="memname">size_t ucx_buffer_read </td> 19.570 + <td>(</td> 19.571 + <td class="paramtype">void * </td> 19.572 + <td class="paramname"><em>ptr</em>, </td> 19.573 + </tr> 19.574 + <tr> 19.575 + <td class="paramkey"></td> 19.576 + <td></td> 19.577 + <td class="paramtype">size_t </td> 19.578 + <td class="paramname"><em>size</em>, </td> 19.579 + </tr> 19.580 + <tr> 19.581 + <td class="paramkey"></td> 19.582 + <td></td> 19.583 + <td class="paramtype">size_t </td> 19.584 + <td class="paramname"><em>nitems</em>, </td> 19.585 + </tr> 19.586 + <tr> 19.587 + <td class="paramkey"></td> 19.588 + <td></td> 19.589 + <td class="paramtype"><a class="el" href="structUcxBuffer.html">UcxBuffer</a> * </td> 19.590 + <td class="paramname"><em>buffer</em> </td> 19.591 + </tr> 19.592 + <tr> 19.593 + <td></td> 19.594 + <td>)</td> 19.595 + <td></td><td></td> 19.596 + </tr> 19.597 + </table> 19.598 +</div><div class="memdoc"> 19.599 + 19.600 +<p>Reads data from a <a class="el" href="structUcxBuffer.html" title="UCX Buffer. ">UcxBuffer</a>. </p> 19.601 +<p>The position of the buffer is increased by the number of bytes read.</p> 19.602 +<dl class="params"><dt>Parameters</dt><dd> 19.603 + <table class="params"> 19.604 + <tr><td class="paramname">ptr</td><td>a pointer to the memory area where to store the read data </td></tr> 19.605 + <tr><td class="paramname">size</td><td>the length of one element </td></tr> 19.606 + <tr><td class="paramname">nitems</td><td>the element count </td></tr> 19.607 + <tr><td class="paramname">buffer</td><td>the <a class="el" href="structUcxBuffer.html" title="UCX Buffer. ">UcxBuffer</a> to read from </td></tr> 19.608 + </table> 19.609 + </dd> 19.610 +</dl> 19.611 +<dl class="section return"><dt>Returns</dt><dd>the total number of elements read </dd></dl> 19.612 + 19.613 +</div> 19.614 +</div> 19.615 +<a id="a47d98482662073c74f35deb0957d15d1"></a> 19.616 +<h2 class="memtitle"><span class="permalink"><a href="#a47d98482662073c74f35deb0957d15d1">◆ </a></span>ucx_buffer_seek()</h2> 19.617 + 19.618 +<div class="memitem"> 19.619 +<div class="memproto"> 19.620 + <table class="memname"> 19.621 + <tr> 19.622 + <td class="memname">int ucx_buffer_seek </td> 19.623 + <td>(</td> 19.624 + <td class="paramtype"><a class="el" href="structUcxBuffer.html">UcxBuffer</a> * </td> 19.625 + <td class="paramname"><em>buffer</em>, </td> 19.626 + </tr> 19.627 + <tr> 19.628 + <td class="paramkey"></td> 19.629 + <td></td> 19.630 + <td class="paramtype">off_t </td> 19.631 + <td class="paramname"><em>offset</em>, </td> 19.632 + </tr> 19.633 + <tr> 19.634 + <td class="paramkey"></td> 19.635 + <td></td> 19.636 + <td class="paramtype">int </td> 19.637 + <td class="paramname"><em>whence</em> </td> 19.638 + </tr> 19.639 + <tr> 19.640 + <td></td> 19.641 + <td>)</td> 19.642 + <td></td><td></td> 19.643 + </tr> 19.644 + </table> 19.645 +</div><div class="memdoc"> 19.646 + 19.647 +<p>Moves the position of the buffer. </p> 19.648 +<p>The new position is relative to the <code>whence</code> argument.</p> 19.649 +<p>SEEK_SET marks the start of the buffer. SEEK_CUR marks the current position. SEEK_END marks the end of the buffer.</p> 19.650 +<p>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).</p> 19.651 +<dl class="params"><dt>Parameters</dt><dd> 19.652 + <table class="params"> 19.653 + <tr><td class="paramname">buffer</td><td></td></tr> 19.654 + <tr><td class="paramname">offset</td><td>position offset relative to <code>whence</code> </td></tr> 19.655 + <tr><td class="paramname">whence</td><td>one of SEEK_SET, SEEK_CUR or SEEK_END </td></tr> 19.656 + </table> 19.657 + </dd> 19.658 +</dl> 19.659 +<dl class="section return"><dt>Returns</dt><dd>0 on success, non-zero if the position is invalid </dd></dl> 19.660 + 19.661 +</div> 19.662 +</div> 19.663 +<a id="a12a0c6a2379ef080043e6286bb8bad69"></a> 19.664 +<h2 class="memtitle"><span class="permalink"><a href="#a12a0c6a2379ef080043e6286bb8bad69">◆ </a></span>ucx_buffer_shift()</h2> 19.665 + 19.666 +<div class="memitem"> 19.667 +<div class="memproto"> 19.668 + <table class="memname"> 19.669 + <tr> 19.670 + <td class="memname">int ucx_buffer_shift </td> 19.671 + <td>(</td> 19.672 + <td class="paramtype"><a class="el" href="structUcxBuffer.html">UcxBuffer</a> * </td> 19.673 + <td class="paramname"><em>buffer</em>, </td> 19.674 + </tr> 19.675 + <tr> 19.676 + <td class="paramkey"></td> 19.677 + <td></td> 19.678 + <td class="paramtype">off_t </td> 19.679 + <td class="paramname"><em>shift</em> </td> 19.680 + </tr> 19.681 + <tr> 19.682 + <td></td> 19.683 + <td>)</td> 19.684 + <td></td><td></td> 19.685 + </tr> 19.686 + </table> 19.687 +</div><div class="memdoc"> 19.688 + 19.689 +<p>Shifts the contents of the buffer by the given offset. </p> 19.690 +<p>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.</p> 19.691 +<p>If the offset is negative, the contents are shifted to the left where the first <code>shift</code> 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).</p> 19.692 +<p>The buffer position gets shifted alongside with the content but is kept within the boundaries of the buffer.</p> 19.693 +<p><b>Security note:</b> the shifting operation does <em>not</em> erase the previously occupied memory cells. You can easily do that manually, e.g. by calling <code>memset(buffer->space, 0, shift)</code> for a right shift or <code>memset(buffer->size, 0, buffer->capacity-buffer->size)</code> for a left shift.</p> 19.694 +<dl class="params"><dt>Parameters</dt><dd> 19.695 + <table class="params"> 19.696 + <tr><td class="paramname">buffer</td><td>the buffer </td></tr> 19.697 + <tr><td class="paramname">shift</td><td>the shift offset (negative means left shift) </td></tr> 19.698 + </table> 19.699 + </dd> 19.700 +</dl> 19.701 +<dl class="section return"><dt>Returns</dt><dd>0 on success, non-zero if a required auto-extension fails </dd></dl> 19.702 + 19.703 +</div> 19.704 +</div> 19.705 +<a id="a20431dd0ed6a6fe9f15333bd72afe4db"></a> 19.706 +<h2 class="memtitle"><span class="permalink"><a href="#a20431dd0ed6a6fe9f15333bd72afe4db">◆ </a></span>ucx_buffer_shift_left()</h2> 19.707 + 19.708 +<div class="memitem"> 19.709 +<div class="memproto"> 19.710 + <table class="memname"> 19.711 + <tr> 19.712 + <td class="memname">int ucx_buffer_shift_left </td> 19.713 + <td>(</td> 19.714 + <td class="paramtype"><a class="el" href="structUcxBuffer.html">UcxBuffer</a> * </td> 19.715 + <td class="paramname"><em>buffer</em>, </td> 19.716 + </tr> 19.717 + <tr> 19.718 + <td class="paramkey"></td> 19.719 + <td></td> 19.720 + <td class="paramtype">size_t </td> 19.721 + <td class="paramname"><em>shift</em> </td> 19.722 + </tr> 19.723 + <tr> 19.724 + <td></td> 19.725 + <td>)</td> 19.726 + <td></td><td></td> 19.727 + </tr> 19.728 + </table> 19.729 +</div><div class="memdoc"> 19.730 + 19.731 +<p>Shifts the buffer to the left. </p> 19.732 +<p>See <a class="el" href="buffer_8h.html#a12a0c6a2379ef080043e6286bb8bad69" title="Shifts the contents of the buffer by the given offset. ">ucx_buffer_shift()</a> for details. Note, however, that this method expects a positive shift offset.</p> 19.733 +<p>Since a left shift cannot fail due to memory allocation problems, this function always returns zero.</p> 19.734 +<dl class="params"><dt>Parameters</dt><dd> 19.735 + <table class="params"> 19.736 + <tr><td class="paramname">buffer</td><td>the buffer </td></tr> 19.737 + <tr><td class="paramname">shift</td><td>the shift offset </td></tr> 19.738 + </table> 19.739 + </dd> 19.740 +</dl> 19.741 +<dl class="section return"><dt>Returns</dt><dd>always zero </dd></dl> 19.742 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="buffer_8h.html#a12a0c6a2379ef080043e6286bb8bad69" title="Shifts the contents of the buffer by the given offset. ">ucx_buffer_shift()</a> </dd></dl> 19.743 + 19.744 +</div> 19.745 +</div> 19.746 +<a id="a4fa10b6471495547eb981248fd4f1bc2"></a> 19.747 +<h2 class="memtitle"><span class="permalink"><a href="#a4fa10b6471495547eb981248fd4f1bc2">◆ </a></span>ucx_buffer_shift_right()</h2> 19.748 + 19.749 +<div class="memitem"> 19.750 +<div class="memproto"> 19.751 + <table class="memname"> 19.752 + <tr> 19.753 + <td class="memname">int ucx_buffer_shift_right </td> 19.754 + <td>(</td> 19.755 + <td class="paramtype"><a class="el" href="structUcxBuffer.html">UcxBuffer</a> * </td> 19.756 + <td class="paramname"><em>buffer</em>, </td> 19.757 + </tr> 19.758 + <tr> 19.759 + <td class="paramkey"></td> 19.760 + <td></td> 19.761 + <td class="paramtype">size_t </td> 19.762 + <td class="paramname"><em>shift</em> </td> 19.763 + </tr> 19.764 + <tr> 19.765 + <td></td> 19.766 + <td>)</td> 19.767 + <td></td><td></td> 19.768 + </tr> 19.769 + </table> 19.770 +</div><div class="memdoc"> 19.771 + 19.772 +<p>Shifts the buffer to the right. </p> 19.773 +<p>See <a class="el" href="buffer_8h.html#a12a0c6a2379ef080043e6286bb8bad69" title="Shifts the contents of the buffer by the given offset. ">ucx_buffer_shift()</a> for details.</p> 19.774 +<dl class="params"><dt>Parameters</dt><dd> 19.775 + <table class="params"> 19.776 + <tr><td class="paramname">buffer</td><td>the buffer </td></tr> 19.777 + <tr><td class="paramname">shift</td><td>the shift offset </td></tr> 19.778 + </table> 19.779 + </dd> 19.780 +</dl> 19.781 +<dl class="section return"><dt>Returns</dt><dd>0 on success, non-zero if a required auto-extension fails </dd></dl> 19.782 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="buffer_8h.html#a12a0c6a2379ef080043e6286bb8bad69" title="Shifts the contents of the buffer by the given offset. ">ucx_buffer_shift()</a> </dd></dl> 19.783 + 19.784 +</div> 19.785 +</div> 19.786 +<a id="af8aacc7401814392b58c1b7b81bffc05"></a> 19.787 +<h2 class="memtitle"><span class="permalink"><a href="#af8aacc7401814392b58c1b7b81bffc05">◆ </a></span>ucx_buffer_write()</h2> 19.788 + 19.789 +<div class="memitem"> 19.790 +<div class="memproto"> 19.791 + <table class="memname"> 19.792 + <tr> 19.793 + <td class="memname">size_t ucx_buffer_write </td> 19.794 + <td>(</td> 19.795 + <td class="paramtype">const void * </td> 19.796 + <td class="paramname"><em>ptr</em>, </td> 19.797 + </tr> 19.798 + <tr> 19.799 + <td class="paramkey"></td> 19.800 + <td></td> 19.801 + <td class="paramtype">size_t </td> 19.802 + <td class="paramname"><em>size</em>, </td> 19.803 + </tr> 19.804 + <tr> 19.805 + <td class="paramkey"></td> 19.806 + <td></td> 19.807 + <td class="paramtype">size_t </td> 19.808 + <td class="paramname"><em>nitems</em>, </td> 19.809 + </tr> 19.810 + <tr> 19.811 + <td class="paramkey"></td> 19.812 + <td></td> 19.813 + <td class="paramtype"><a class="el" href="structUcxBuffer.html">UcxBuffer</a> * </td> 19.814 + <td class="paramname"><em>buffer</em> </td> 19.815 + </tr> 19.816 + <tr> 19.817 + <td></td> 19.818 + <td>)</td> 19.819 + <td></td><td></td> 19.820 + </tr> 19.821 + </table> 19.822 +</div><div class="memdoc"> 19.823 + 19.824 +<p>Writes data to a <a class="el" href="structUcxBuffer.html" title="UCX Buffer. ">UcxBuffer</a>. </p> 19.825 +<p>The position of the buffer is increased by the number of bytes written.</p> 19.826 +<dl class="params"><dt>Parameters</dt><dd> 19.827 + <table class="params"> 19.828 + <tr><td class="paramname">ptr</td><td>a pointer to the memory area containing the bytes to be written </td></tr> 19.829 + <tr><td class="paramname">size</td><td>the length of one element </td></tr> 19.830 + <tr><td class="paramname">nitems</td><td>the element count </td></tr> 19.831 + <tr><td class="paramname">buffer</td><td>the <a class="el" href="structUcxBuffer.html" title="UCX Buffer. ">UcxBuffer</a> to write to </td></tr> 19.832 + </table> 19.833 + </dd> 19.834 +</dl> 19.835 +<dl class="section return"><dt>Returns</dt><dd>the total count of bytes written </dd></dl> 19.836 + 19.837 +</div> 19.838 +</div> 19.839 +</div><!-- contents --> 19.840 +<!-- start footer part --> 19.841 +<hr class="footer"/><address class="footer"><small> 19.842 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 19.843 +<img class="footer" src="doxygen.png" alt="doxygen"/> 19.844 +</a> 1.8.13 19.845 +</small></address> 19.846 +</body> 19.847 +</html>
20.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 20.2 +++ b/docs/api-2.1/buffer_8h_source.html Sat Feb 06 19:11:44 2021 +0100 20.3 @@ -0,0 +1,100 @@ 20.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 20.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 20.6 +<head> 20.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 20.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 20.9 +<meta name="generator" content="Doxygen 1.8.13"/> 20.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 20.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/buffer.h Source File</title> 20.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 20.13 +<script type="text/javascript" src="jquery.js"></script> 20.14 +<script type="text/javascript" src="dynsections.js"></script> 20.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 20.16 +<script type="text/javascript" src="search/searchdata.js"></script> 20.17 +<script type="text/javascript" src="search/search.js"></script> 20.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 20.19 +</head> 20.20 +<body> 20.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 20.22 +<div id="titlearea"> 20.23 +<table cellspacing="0" cellpadding="0"> 20.24 + <tbody> 20.25 + <tr style="height: 56px;"> 20.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 20.27 + <td id="projectalign" style="padding-left: 0.5em;"> 20.28 + <div id="projectname">ucx 20.29 + </div> 20.30 + <div id="projectbrief">UAP Common Extensions</div> 20.31 + </td> 20.32 + </tr> 20.33 + </tbody> 20.34 +</table> 20.35 +</div> 20.36 +<!-- end header part --> 20.37 +<!-- Generated by Doxygen 1.8.13 --> 20.38 +<script type="text/javascript"> 20.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 20.40 +</script> 20.41 +<script type="text/javascript" src="menudata.js"></script> 20.42 +<script type="text/javascript" src="menu.js"></script> 20.43 +<script type="text/javascript"> 20.44 +$(function() { 20.45 + initMenu('',true,false,'search.php','Search'); 20.46 + $(document).ready(function() { init_search(); }); 20.47 +}); 20.48 +</script> 20.49 +<div id="main-nav"></div> 20.50 +<!-- window showing the filter options --> 20.51 +<div id="MSearchSelectWindow" 20.52 + onmouseover="return searchBox.OnSearchSelectShow()" 20.53 + onmouseout="return searchBox.OnSearchSelectHide()" 20.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 20.55 +</div> 20.56 + 20.57 +<!-- iframe showing the search results (closed by default) --> 20.58 +<div id="MSearchResultsWindow"> 20.59 +<iframe src="javascript:void(0)" frameborder="0" 20.60 + name="MSearchResults" id="MSearchResults"> 20.61 +</iframe> 20.62 +</div> 20.63 + 20.64 +<div id="nav-path" class="navpath"> 20.65 + <ul> 20.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 20.67 +</div> 20.68 +</div><!-- top --> 20.69 +<div class="header"> 20.70 + <div class="headertitle"> 20.71 +<div class="title">buffer.h</div> </div> 20.72 +</div><!--header--> 20.73 +<div class="contents"> 20.74 +<a href="buffer_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are met:</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * documentation and/or other materials provided with the distribution.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#ifndef UCX_BUFFER_H</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#define UCX_BUFFER_H</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include "<a class="code" href="ucx_8h.html">ucx.h</a>"</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#include <sys/types.h></span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#include <stdio.h></span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="buffer_8h.html#acc77c8ed7b26854f555d4a5d11e49ea2"> 60</a></span> <span class="preprocessor">#define UCX_BUFFER_DEFAULT 0x00</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="buffer_8h.html#a8bab11ad8a76719228b9ee91e2e45535"> 65</a></span> <span class="preprocessor">#define UCX_BUFFER_AUTOFREE 0x01</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="buffer_8h.html#a05f9565f2d04399168c3b1c152a632be"> 70</a></span> <span class="preprocessor">#define UCX_BUFFER_AUTOEXTEND 0x02</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="structUcxBuffer.html"> 73</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="structUcxBuffer.html#a1a5076e85acb84b715a53bc0f37fb721"> 75</a></span>  <span class="keywordtype">char</span> *<a class="code" href="structUcxBuffer.html#a1a5076e85acb84b715a53bc0f37fb721">space</a>;</div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="structUcxBuffer.html#a7a64288f002cf62b492e2ea49c79615c"> 77</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxBuffer.html#a7a64288f002cf62b492e2ea49c79615c">pos</a>;</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="structUcxBuffer.html#a385661894f3cee9c549bfe07a8b316bf"> 79</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxBuffer.html#a385661894f3cee9c549bfe07a8b316bf">capacity</a>;</div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="structUcxBuffer.html#aec0aea8325394951d5ad4a9fbb8e1ac7"> 81</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxBuffer.html#aec0aea8325394951d5ad4a9fbb8e1ac7">size</a>;</div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="structUcxBuffer.html#ac642e07b0a03be5aac48eb4aa5bec2f7"> 88</a></span>  <span class="keywordtype">int</span> <a class="code" href="structUcxBuffer.html#ac642e07b0a03be5aac48eb4aa5bec2f7">flags</a>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> } <a class="code" href="structUcxBuffer.html">UcxBuffer</a>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <a class="code" href="structUcxBuffer.html">UcxBuffer</a> *<a class="code" href="buffer_8h.html#aacea876d692193ec6f859ce98da7351c">ucx_buffer_new</a>(<span class="keywordtype">void</span> *space, <span class="keywordtype">size_t</span> capacity, <span class="keywordtype">int</span> flags);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">void</span> <a class="code" href="buffer_8h.html#a2af8646d8905c22c7322e7540b0440af">ucx_buffer_free</a>(<a class="code" href="structUcxBuffer.html">UcxBuffer</a>* buffer);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <a class="code" href="structUcxBuffer.html">UcxBuffer</a>* <a class="code" href="buffer_8h.html#a33fa7bb35fe08bbb3542f227514332ef">ucx_buffer_extract</a>(<a class="code" href="structUcxBuffer.html">UcxBuffer</a> *src,</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordtype">size_t</span> start, <span class="keywordtype">size_t</span> length, <span class="keywordtype">int</span> flags);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="buffer_8h.html#a828353846428c2c2f695f9938f059e52"> 137</a></span> <span class="preprocessor">#define ucx_buffer_clone(src,flags) \</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="preprocessor"> ucx_buffer_extract(src, 0, (src)->capacity, flags)</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> <span class="keywordtype">int</span> <a class="code" href="buffer_8h.html#a12a0c6a2379ef080043e6286bb8bad69">ucx_buffer_shift</a>(<a class="code" href="structUcxBuffer.html">UcxBuffer</a>* buffer, off_t shift);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keywordtype">int</span> <a class="code" href="buffer_8h.html#a4fa10b6471495547eb981248fd4f1bc2">ucx_buffer_shift_right</a>(<a class="code" href="structUcxBuffer.html">UcxBuffer</a>* buffer, <span class="keywordtype">size_t</span> shift);</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keywordtype">int</span> <a class="code" href="buffer_8h.html#a20431dd0ed6a6fe9f15333bd72afe4db">ucx_buffer_shift_left</a>(<a class="code" href="structUcxBuffer.html">UcxBuffer</a>* buffer, <span class="keywordtype">size_t</span> shift);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keywordtype">int</span> <a class="code" href="buffer_8h.html#a47d98482662073c74f35deb0957d15d1">ucx_buffer_seek</a>(<a class="code" href="structUcxBuffer.html">UcxBuffer</a> *buffer, off_t offset, <span class="keywordtype">int</span> whence);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="buffer_8h.html#a374abd5aabfcc3ee0777a79d5fe651ab"> 229</a></span> <span class="preprocessor">#define ucx_buffer_clear(buffer) memset((buffer)->space, 0, (buffer)->size); \</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="preprocessor"> (buffer)->size = 0; (buffer)->pos = 0;</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keywordtype">int</span> <a class="code" href="buffer_8h.html#abad7fd9ad5061224c780b8d1d4c55f09">ucx_buffer_eof</a>(<a class="code" href="structUcxBuffer.html">UcxBuffer</a> *buffer);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <span class="keywordtype">int</span> <a class="code" href="buffer_8h.html#afaf97d2cd7e9faad79a9d35fe33e30c6">ucx_buffer_extend</a>(<a class="code" href="structUcxBuffer.html">UcxBuffer</a> *buffer, <span class="keywordtype">size_t</span> additional_bytes);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keywordtype">size_t</span> <a class="code" href="buffer_8h.html#af8aacc7401814392b58c1b7b81bffc05">ucx_buffer_write</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> size, <span class="keywordtype">size_t</span> nitems,</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <a class="code" href="structUcxBuffer.html">UcxBuffer</a> *buffer);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordtype">size_t</span> <a class="code" href="buffer_8h.html#ae5c3430759f0059547b35d5a254d4da5">ucx_buffer_read</a>(<span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> size, <span class="keywordtype">size_t</span> nitems,</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <a class="code" href="structUcxBuffer.html">UcxBuffer</a> *buffer);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> <span class="keywordtype">int</span> <a class="code" href="buffer_8h.html#a7d6f01b9d631b0123475dfb98fb849ac">ucx_buffer_putc</a>(<a class="code" href="structUcxBuffer.html">UcxBuffer</a> *buffer, <span class="keywordtype">int</span> c);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> <span class="keywordtype">int</span> <a class="code" href="buffer_8h.html#a396339022159ce4ca6d069de9f9209b0">ucx_buffer_getc</a>(<a class="code" href="structUcxBuffer.html">UcxBuffer</a> *buffer);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> <span class="keywordtype">size_t</span> <a class="code" href="buffer_8h.html#af1d4b478e04b3ae0bf30e7c2ea964ea2">ucx_buffer_puts</a>(<a class="code" href="structUcxBuffer.html">UcxBuffer</a> *buffer, <span class="keyword">const</span> <span class="keywordtype">char</span> *str);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div><div class="line"><a name="l00332"></a><span class="lineno"><a class="line" href="buffer_8h.html#a0f4b64f1b3a74c4f6c5d9409d6b6086a"> 332</a></span> <span class="preprocessor">#define ucx_buffer_to_sstr(buffer) sstrn((buffer)->space, (buffer)->size)</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> }</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> </div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_BUFFER_H */</span><span class="preprocessor"></span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div><div class="ttc" id="structUcxBuffer_html_ac642e07b0a03be5aac48eb4aa5bec2f7"><div class="ttname"><a href="structUcxBuffer.html#ac642e07b0a03be5aac48eb4aa5bec2f7">UcxBuffer::flags</a></div><div class="ttdeci">int flags</div><div class="ttdoc">Flag register for buffer features. </div><div class="ttdef"><b>Definition:</b> buffer.h:88</div></div> 20.75 +<div class="ttc" id="buffer_8h_html_a47d98482662073c74f35deb0957d15d1"><div class="ttname"><a href="buffer_8h.html#a47d98482662073c74f35deb0957d15d1">ucx_buffer_seek</a></div><div class="ttdeci">int ucx_buffer_seek(UcxBuffer *buffer, off_t offset, int whence)</div><div class="ttdoc">Moves the position of the buffer. </div><div class="ttdef"><b>Definition:</b> buffer.c:90</div></div> 20.76 +<div class="ttc" id="buffer_8h_html_ae5c3430759f0059547b35d5a254d4da5"><div class="ttname"><a href="buffer_8h.html#ae5c3430759f0059547b35d5a254d4da5">ucx_buffer_read</a></div><div class="ttdeci">size_t ucx_buffer_read(void *ptr, size_t size, size_t nitems, UcxBuffer *buffer)</div><div class="ttdoc">Reads data from a UcxBuffer. </div><div class="ttdef"><b>Definition:</b> buffer.c:189</div></div> 20.77 +<div class="ttc" id="buffer_8h_html_a20431dd0ed6a6fe9f15333bd72afe4db"><div class="ttname"><a href="buffer_8h.html#a20431dd0ed6a6fe9f15333bd72afe4db">ucx_buffer_shift_left</a></div><div class="ttdeci">int ucx_buffer_shift_left(UcxBuffer *buffer, size_t shift)</div><div class="ttdoc">Shifts the buffer to the left. </div><div class="ttdef"><b>Definition:</b> buffer.c:244</div></div> 20.78 +<div class="ttc" id="ucx_8h_html"><div class="ttname"><a href="ucx_8h.html">ucx.h</a></div><div class="ttdoc">Main UCX Header providing most common definitions. </div></div> 20.79 +<div class="ttc" id="buffer_8h_html_afaf97d2cd7e9faad79a9d35fe33e30c6"><div class="ttname"><a href="buffer_8h.html#afaf97d2cd7e9faad79a9d35fe33e30c6">ucx_buffer_extend</a></div><div class="ttdeci">int ucx_buffer_extend(UcxBuffer *buffer, size_t additional_bytes)</div><div class="ttdoc">Extends the capacity of the buffer. </div><div class="ttdef"><b>Definition:</b> buffer.c:126</div></div> 20.80 +<div class="ttc" id="buffer_8h_html_a2af8646d8905c22c7322e7540b0440af"><div class="ttname"><a href="buffer_8h.html#a2af8646d8905c22c7322e7540b0440af">ucx_buffer_free</a></div><div class="ttdeci">void ucx_buffer_free(UcxBuffer *buffer)</div><div class="ttdoc">Destroys a buffer. </div><div class="ttdef"><b>Definition:</b> buffer.c:59</div></div> 20.81 +<div class="ttc" id="structUcxBuffer_html_a7a64288f002cf62b492e2ea49c79615c"><div class="ttname"><a href="structUcxBuffer.html#a7a64288f002cf62b492e2ea49c79615c">UcxBuffer::pos</a></div><div class="ttdeci">size_t pos</div><div class="ttdoc">Current position of the buffer. </div><div class="ttdef"><b>Definition:</b> buffer.h:77</div></div> 20.82 +<div class="ttc" id="buffer_8h_html_af8aacc7401814392b58c1b7b81bffc05"><div class="ttname"><a href="buffer_8h.html#af8aacc7401814392b58c1b7b81bffc05">ucx_buffer_write</a></div><div class="ttdeci">size_t ucx_buffer_write(const void *ptr, size_t size, size_t nitems, UcxBuffer *buffer)</div><div class="ttdoc">Writes data to a UcxBuffer. </div><div class="ttdef"><b>Definition:</b> buffer.c:152</div></div> 20.83 +<div class="ttc" id="structUcxBuffer_html_a385661894f3cee9c549bfe07a8b316bf"><div class="ttname"><a href="structUcxBuffer.html#a385661894f3cee9c549bfe07a8b316bf">UcxBuffer::capacity</a></div><div class="ttdeci">size_t capacity</div><div class="ttdoc">Current capacity (i.e. </div><div class="ttdef"><b>Definition:</b> buffer.h:79</div></div> 20.84 +<div class="ttc" id="structUcxBuffer_html_a1a5076e85acb84b715a53bc0f37fb721"><div class="ttname"><a href="structUcxBuffer.html#a1a5076e85acb84b715a53bc0f37fb721">UcxBuffer::space</a></div><div class="ttdeci">char * space</div><div class="ttdoc">A pointer to the buffer contents. </div><div class="ttdef"><b>Definition:</b> buffer.h:75</div></div> 20.85 +<div class="ttc" id="buffer_8h_html_abad7fd9ad5061224c780b8d1d4c55f09"><div class="ttname"><a href="buffer_8h.html#abad7fd9ad5061224c780b8d1d4c55f09">ucx_buffer_eof</a></div><div class="ttdeci">int ucx_buffer_eof(UcxBuffer *buffer)</div><div class="ttdoc">Tests, if the buffer position has exceeded the buffer capacity. </div><div class="ttdef"><b>Definition:</b> buffer.c:122</div></div> 20.86 +<div class="ttc" id="structUcxBuffer_html"><div class="ttname"><a href="structUcxBuffer.html">UcxBuffer</a></div><div class="ttdoc">UCX Buffer. </div><div class="ttdef"><b>Definition:</b> buffer.h:73</div></div> 20.87 +<div class="ttc" id="buffer_8h_html_af1d4b478e04b3ae0bf30e7c2ea964ea2"><div class="ttname"><a href="buffer_8h.html#af1d4b478e04b3ae0bf30e7c2ea964ea2">ucx_buffer_puts</a></div><div class="ttdeci">size_t ucx_buffer_puts(UcxBuffer *buffer, const char *str)</div><div class="ttdoc">Writes a string to a buffer. </div><div class="ttdef"><b>Definition:</b> buffer.c:240</div></div> 20.88 +<div class="ttc" id="buffer_8h_html_a7d6f01b9d631b0123475dfb98fb849ac"><div class="ttname"><a href="buffer_8h.html#a7d6f01b9d631b0123475dfb98fb849ac">ucx_buffer_putc</a></div><div class="ttdeci">int ucx_buffer_putc(UcxBuffer *buffer, int c)</div><div class="ttdoc">Writes a character to a buffer. </div><div class="ttdef"><b>Definition:</b> buffer.c:210</div></div> 20.89 +<div class="ttc" id="buffer_8h_html_a12a0c6a2379ef080043e6286bb8bad69"><div class="ttname"><a href="buffer_8h.html#a12a0c6a2379ef080043e6286bb8bad69">ucx_buffer_shift</a></div><div class="ttdeci">int ucx_buffer_shift(UcxBuffer *buffer, off_t shift)</div><div class="ttdoc">Shifts the contents of the buffer by the given offset. </div><div class="ttdef"><b>Definition:</b> buffer.c:289</div></div> 20.90 +<div class="ttc" id="buffer_8h_html_aacea876d692193ec6f859ce98da7351c"><div class="ttname"><a href="buffer_8h.html#aacea876d692193ec6f859ce98da7351c">ucx_buffer_new</a></div><div class="ttdeci">UcxBuffer * ucx_buffer_new(void *space, size_t capacity, int flags)</div><div class="ttdoc">Creates a new buffer. </div><div class="ttdef"><b>Definition:</b> buffer.c:35</div></div> 20.91 +<div class="ttc" id="buffer_8h_html_a33fa7bb35fe08bbb3542f227514332ef"><div class="ttname"><a href="buffer_8h.html#a33fa7bb35fe08bbb3542f227514332ef">ucx_buffer_extract</a></div><div class="ttdeci">UcxBuffer * ucx_buffer_extract(UcxBuffer *src, size_t start, size_t length, int flags)</div><div class="ttdoc">Creates a new buffer and fills it with extracted content from another buffer. </div><div class="ttdef"><b>Definition:</b> buffer.c:66</div></div> 20.92 +<div class="ttc" id="structUcxBuffer_html_aec0aea8325394951d5ad4a9fbb8e1ac7"><div class="ttname"><a href="structUcxBuffer.html#aec0aea8325394951d5ad4a9fbb8e1ac7">UcxBuffer::size</a></div><div class="ttdeci">size_t size</div><div class="ttdoc">Current size of the buffer content. </div><div class="ttdef"><b>Definition:</b> buffer.h:81</div></div> 20.93 +<div class="ttc" id="buffer_8h_html_a396339022159ce4ca6d069de9f9209b0"><div class="ttname"><a href="buffer_8h.html#a396339022159ce4ca6d069de9f9209b0">ucx_buffer_getc</a></div><div class="ttdeci">int ucx_buffer_getc(UcxBuffer *buffer)</div><div class="ttdoc">Gets a character from a buffer. </div><div class="ttdef"><b>Definition:</b> buffer.c:230</div></div> 20.94 +<div class="ttc" id="buffer_8h_html_a4fa10b6471495547eb981248fd4f1bc2"><div class="ttname"><a href="buffer_8h.html#a4fa10b6471495547eb981248fd4f1bc2">ucx_buffer_shift_right</a></div><div class="ttdeci">int ucx_buffer_shift_right(UcxBuffer *buffer, size_t shift)</div><div class="ttdoc">Shifts the buffer to the right. </div><div class="ttdef"><b>Definition:</b> buffer.c:260</div></div> 20.95 +</div><!-- fragment --></div><!-- contents --> 20.96 +<!-- start footer part --> 20.97 +<hr class="footer"/><address class="footer"><small> 20.98 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 20.99 +<img class="footer" src="doxygen.png" alt="doxygen"/> 20.100 +</a> 1.8.13 20.101 +</small></address> 20.102 +</body> 20.103 +</html>
21.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 21.2 +++ b/docs/api-2.1/classes.html Sat Feb 06 19:11:44 2021 +0100 21.3 @@ -0,0 +1,89 @@ 21.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 21.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 21.6 +<head> 21.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 21.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 21.9 +<meta name="generator" content="Doxygen 1.8.13"/> 21.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 21.11 +<title>ucx: Data Structure Index</title> 21.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 21.13 +<script type="text/javascript" src="jquery.js"></script> 21.14 +<script type="text/javascript" src="dynsections.js"></script> 21.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 21.16 +<script type="text/javascript" src="search/searchdata.js"></script> 21.17 +<script type="text/javascript" src="search/search.js"></script> 21.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 21.19 +</head> 21.20 +<body> 21.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 21.22 +<div id="titlearea"> 21.23 +<table cellspacing="0" cellpadding="0"> 21.24 + <tbody> 21.25 + <tr style="height: 56px;"> 21.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 21.27 + <td id="projectalign" style="padding-left: 0.5em;"> 21.28 + <div id="projectname">ucx 21.29 + </div> 21.30 + <div id="projectbrief">UAP Common Extensions</div> 21.31 + </td> 21.32 + </tr> 21.33 + </tbody> 21.34 +</table> 21.35 +</div> 21.36 +<!-- end header part --> 21.37 +<!-- Generated by Doxygen 1.8.13 --> 21.38 +<script type="text/javascript"> 21.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 21.40 +</script> 21.41 +<script type="text/javascript" src="menudata.js"></script> 21.42 +<script type="text/javascript" src="menu.js"></script> 21.43 +<script type="text/javascript"> 21.44 +$(function() { 21.45 + initMenu('',true,false,'search.php','Search'); 21.46 + $(document).ready(function() { init_search(); }); 21.47 +}); 21.48 +</script> 21.49 +<div id="main-nav"></div> 21.50 +</div><!-- top --> 21.51 +<!-- window showing the filter options --> 21.52 +<div id="MSearchSelectWindow" 21.53 + onmouseover="return searchBox.OnSearchSelectShow()" 21.54 + onmouseout="return searchBox.OnSearchSelectHide()" 21.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 21.56 +</div> 21.57 + 21.58 +<!-- iframe showing the search results (closed by default) --> 21.59 +<div id="MSearchResultsWindow"> 21.60 +<iframe src="javascript:void(0)" frameborder="0" 21.61 + name="MSearchResults" id="MSearchResults"> 21.62 +</iframe> 21.63 +</div> 21.64 + 21.65 +<div class="header"> 21.66 + <div class="headertitle"> 21.67 +<div class="title">Data Structure Index</div> </div> 21.68 +</div><!--header--> 21.69 +<div class="contents"> 21.70 +<div class="qindex"><a class="qindex" href="#letter_s">s</a> | <a class="qindex" href="#letter_u">u</a></div> 21.71 +<table class="classindex"> 21.72 +<tr><td rowspan="2" valign="bottom"><a name="letter_s"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  s  </div></td></tr></table> 21.73 +</td><td valign="top"><a class="el" href="structucx__regdestr.html">ucx_regdestr</a>   </td><td valign="top"><a class="el" href="structUcxBuffer.html">UcxBuffer</a>   </td><td valign="top"><a class="el" href="structUcxMapIterator.html">UcxMapIterator</a>   </td><td valign="top"><a class="el" href="structUcxTestSuite.html">UcxTestSuite</a>   </td></tr> 21.74 +<tr><td valign="top"><a class="el" href="structucx__stack__metadata.html">ucx_stack_metadata</a>   </td><td valign="top"><a class="el" href="structUcxKey.html">UcxKey</a>   </td><td valign="top"><a class="el" href="structUcxMapKey.html">UcxMapKey</a>   </td><td></td></tr> 21.75 +<tr><td valign="top"><a class="el" href="structscstr__t.html">scstr_t</a>   </td><td valign="top"><a class="el" href="structUcxAllocator.html">UcxAllocator</a>   </td><td valign="top"><a class="el" href="structUcxList.html">UcxList</a>   </td><td valign="top"><a class="el" href="structUcxMempool.html">UcxMempool</a>   </td><td></td></tr> 21.76 +<tr><td valign="top"><a class="el" href="structsstr__t.html">sstr_t</a>   </td><td valign="top"><a class="el" href="structUcxArray.html">UcxArray</a>   </td><td valign="top"><a class="el" href="structUcxLogger.html">UcxLogger</a>   </td><td valign="top"><a class="el" href="structUcxProperties.html">UcxProperties</a>   </td><td></td></tr> 21.77 +<tr><td rowspan="2" valign="bottom"><a name="letter_u"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">  u  </div></td></tr></table> 21.78 +</td><td valign="top"><a class="el" href="structUcxAVLNode.html">UcxAVLNode</a>   </td><td valign="top"><a class="el" href="structUcxMap.html">UcxMap</a>   </td><td valign="top"><a class="el" href="structUcxStack.html">UcxStack</a>   </td><td></td></tr> 21.79 +<tr><td valign="top"><a class="el" href="structUcxAVLTree.html">UcxAVLTree</a>   </td><td valign="top"><a class="el" href="structUcxMapElement.html">UcxMapElement</a>   </td><td valign="top"><a class="el" href="structUcxTestList.html">UcxTestList</a>   </td><td></td></tr> 21.80 +<tr><td valign="top"><a class="el" href="structucx__memchunk.html">ucx_memchunk</a>   </td><td></td><td></td><td></td><td></td></tr> 21.81 +<tr><td></td><td></td><td></td><td></td><td></td></tr> 21.82 +</table> 21.83 +<div class="qindex"><a class="qindex" href="#letter_s">s</a> | <a class="qindex" href="#letter_u">u</a></div> 21.84 +</div><!-- contents --> 21.85 +<!-- start footer part --> 21.86 +<hr class="footer"/><address class="footer"><small> 21.87 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 21.88 +<img class="footer" src="doxygen.png" alt="doxygen"/> 21.89 +</a> 1.8.13 21.90 +</small></address> 21.91 +</body> 21.92 +</html>
22.1 Binary file docs/api-2.1/closed.png has changed
23.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 23.2 +++ b/docs/api-2.1/dir_68267d1309a1af8e8297ef4c3efbcdba.html Sat Feb 06 19:11:44 2021 +0100 23.3 @@ -0,0 +1,83 @@ 23.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 23.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 23.6 +<head> 23.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 23.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 23.9 +<meta name="generator" content="Doxygen 1.8.13"/> 23.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 23.11 +<title>ucx: /home/mike/workspace/c/ucx/src Directory Reference</title> 23.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 23.13 +<script type="text/javascript" src="jquery.js"></script> 23.14 +<script type="text/javascript" src="dynsections.js"></script> 23.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 23.16 +<script type="text/javascript" src="search/searchdata.js"></script> 23.17 +<script type="text/javascript" src="search/search.js"></script> 23.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 23.19 +</head> 23.20 +<body> 23.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 23.22 +<div id="titlearea"> 23.23 +<table cellspacing="0" cellpadding="0"> 23.24 + <tbody> 23.25 + <tr style="height: 56px;"> 23.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 23.27 + <td id="projectalign" style="padding-left: 0.5em;"> 23.28 + <div id="projectname">ucx 23.29 + </div> 23.30 + <div id="projectbrief">UAP Common Extensions</div> 23.31 + </td> 23.32 + </tr> 23.33 + </tbody> 23.34 +</table> 23.35 +</div> 23.36 +<!-- end header part --> 23.37 +<!-- Generated by Doxygen 1.8.13 --> 23.38 +<script type="text/javascript"> 23.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 23.40 +</script> 23.41 +<script type="text/javascript" src="menudata.js"></script> 23.42 +<script type="text/javascript" src="menu.js"></script> 23.43 +<script type="text/javascript"> 23.44 +$(function() { 23.45 + initMenu('',true,false,'search.php','Search'); 23.46 + $(document).ready(function() { init_search(); }); 23.47 +}); 23.48 +</script> 23.49 +<div id="main-nav"></div> 23.50 +<!-- window showing the filter options --> 23.51 +<div id="MSearchSelectWindow" 23.52 + onmouseover="return searchBox.OnSearchSelectShow()" 23.53 + onmouseout="return searchBox.OnSearchSelectHide()" 23.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 23.55 +</div> 23.56 + 23.57 +<!-- iframe showing the search results (closed by default) --> 23.58 +<div id="MSearchResultsWindow"> 23.59 +<iframe src="javascript:void(0)" frameborder="0" 23.60 + name="MSearchResults" id="MSearchResults"> 23.61 +</iframe> 23.62 +</div> 23.63 + 23.64 +<div id="nav-path" class="navpath"> 23.65 + <ul> 23.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul> 23.67 +</div> 23.68 +</div><!-- top --> 23.69 +<div class="header"> 23.70 + <div class="headertitle"> 23.71 +<div class="title">src Directory Reference</div> </div> 23.72 +</div><!--header--> 23.73 +<div class="contents"> 23.74 +<table class="memberdecls"> 23.75 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="subdirs"></a> 23.76 +Directories</h2></td></tr> 23.77 +</table> 23.78 +</div><!-- contents --> 23.79 +<!-- start footer part --> 23.80 +<hr class="footer"/><address class="footer"><small> 23.81 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 23.82 +<img class="footer" src="doxygen.png" alt="doxygen"/> 23.83 +</a> 1.8.13 23.84 +</small></address> 23.85 +</body> 23.86 +</html>
24.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 24.2 +++ b/docs/api-2.1/dir_69f4ea29401808fe6229564976cde3ce.html Sat Feb 06 19:11:44 2021 +0100 24.3 @@ -0,0 +1,125 @@ 24.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 24.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 24.6 +<head> 24.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 24.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 24.9 +<meta name="generator" content="Doxygen 1.8.13"/> 24.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 24.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx Directory Reference</title> 24.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 24.13 +<script type="text/javascript" src="jquery.js"></script> 24.14 +<script type="text/javascript" src="dynsections.js"></script> 24.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 24.16 +<script type="text/javascript" src="search/searchdata.js"></script> 24.17 +<script type="text/javascript" src="search/search.js"></script> 24.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 24.19 +</head> 24.20 +<body> 24.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 24.22 +<div id="titlearea"> 24.23 +<table cellspacing="0" cellpadding="0"> 24.24 + <tbody> 24.25 + <tr style="height: 56px;"> 24.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 24.27 + <td id="projectalign" style="padding-left: 0.5em;"> 24.28 + <div id="projectname">ucx 24.29 + </div> 24.30 + <div id="projectbrief">UAP Common Extensions</div> 24.31 + </td> 24.32 + </tr> 24.33 + </tbody> 24.34 +</table> 24.35 +</div> 24.36 +<!-- end header part --> 24.37 +<!-- Generated by Doxygen 1.8.13 --> 24.38 +<script type="text/javascript"> 24.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 24.40 +</script> 24.41 +<script type="text/javascript" src="menudata.js"></script> 24.42 +<script type="text/javascript" src="menu.js"></script> 24.43 +<script type="text/javascript"> 24.44 +$(function() { 24.45 + initMenu('',true,false,'search.php','Search'); 24.46 + $(document).ready(function() { init_search(); }); 24.47 +}); 24.48 +</script> 24.49 +<div id="main-nav"></div> 24.50 +<!-- window showing the filter options --> 24.51 +<div id="MSearchSelectWindow" 24.52 + onmouseover="return searchBox.OnSearchSelectShow()" 24.53 + onmouseout="return searchBox.OnSearchSelectHide()" 24.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 24.55 +</div> 24.56 + 24.57 +<!-- iframe showing the search results (closed by default) --> 24.58 +<div id="MSearchResultsWindow"> 24.59 +<iframe src="javascript:void(0)" frameborder="0" 24.60 + name="MSearchResults" id="MSearchResults"> 24.61 +</iframe> 24.62 +</div> 24.63 + 24.64 +<div id="nav-path" class="navpath"> 24.65 + <ul> 24.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 24.67 +</div> 24.68 +</div><!-- top --> 24.69 +<div class="header"> 24.70 + <div class="headertitle"> 24.71 +<div class="title">ucx Directory Reference</div> </div> 24.72 +</div><!--header--> 24.73 +<div class="contents"> 24.74 +<table class="memberdecls"> 24.75 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a> 24.76 +Files</h2></td></tr> 24.77 +<tr class="memitem:allocator_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="allocator_8h.html">allocator.h</a> <a href="allocator_8h_source.html">[code]</a></td></tr> 24.78 +<tr class="memdesc:allocator_8h"><td class="mdescLeft"> </td><td class="mdescRight">Allocator for custom memory management. <br /></td></tr> 24.79 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 24.80 +<tr class="memitem:array_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="array_8h.html">array.h</a> <a href="array_8h_source.html">[code]</a></td></tr> 24.81 +<tr class="memdesc:array_8h"><td class="mdescLeft"> </td><td class="mdescRight">Dynamically allocated array implementation. <br /></td></tr> 24.82 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 24.83 +<tr class="memitem:avl_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="avl_8h.html">avl.h</a> <a href="avl_8h_source.html">[code]</a></td></tr> 24.84 +<tr class="memdesc:avl_8h"><td class="mdescLeft"> </td><td class="mdescRight">AVL tree implementation. <br /></td></tr> 24.85 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 24.86 +<tr class="memitem:buffer_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="buffer_8h.html">buffer.h</a> <a href="buffer_8h_source.html">[code]</a></td></tr> 24.87 +<tr class="memdesc:buffer_8h"><td class="mdescLeft"> </td><td class="mdescRight">Advanced buffer implementation. <br /></td></tr> 24.88 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 24.89 +<tr class="memitem:list_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html">list.h</a> <a href="list_8h_source.html">[code]</a></td></tr> 24.90 +<tr class="memdesc:list_8h"><td class="mdescLeft"> </td><td class="mdescRight">Doubly linked list implementation. <br /></td></tr> 24.91 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 24.92 +<tr class="memitem:logging_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html">logging.h</a> <a href="logging_8h_source.html">[code]</a></td></tr> 24.93 +<tr class="memdesc:logging_8h"><td class="mdescLeft"> </td><td class="mdescRight">Logging API. <br /></td></tr> 24.94 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 24.95 +<tr class="memitem:map_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html">map.h</a> <a href="map_8h_source.html">[code]</a></td></tr> 24.96 +<tr class="memdesc:map_8h"><td class="mdescLeft"> </td><td class="mdescRight">Hash map implementation. <br /></td></tr> 24.97 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 24.98 +<tr class="memitem:mempool_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="mempool_8h.html">mempool.h</a> <a href="mempool_8h_source.html">[code]</a></td></tr> 24.99 +<tr class="memdesc:mempool_8h"><td class="mdescLeft"> </td><td class="mdescRight">Memory pool implementation. <br /></td></tr> 24.100 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 24.101 +<tr class="memitem:properties_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="properties_8h.html">properties.h</a> <a href="properties_8h_source.html">[code]</a></td></tr> 24.102 +<tr class="memdesc:properties_8h"><td class="mdescLeft"> </td><td class="mdescRight">Load / store utilities for properties files. <br /></td></tr> 24.103 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 24.104 +<tr class="memitem:stack_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html">stack.h</a> <a href="stack_8h_source.html">[code]</a></td></tr> 24.105 +<tr class="memdesc:stack_8h"><td class="mdescLeft"> </td><td class="mdescRight">Default stack memory allocation implementation. <br /></td></tr> 24.106 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 24.107 +<tr class="memitem:string_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html">string.h</a> <a href="string_8h_source.html">[code]</a></td></tr> 24.108 +<tr class="memdesc:string_8h"><td class="mdescLeft"> </td><td class="mdescRight">Bounded string implementation. <br /></td></tr> 24.109 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 24.110 +<tr class="memitem:test_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="test_8h.html">test.h</a> <a href="test_8h_source.html">[code]</a></td></tr> 24.111 +<tr class="memdesc:test_8h"><td class="mdescLeft"> </td><td class="mdescRight">UCX Test Framework. <br /></td></tr> 24.112 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 24.113 +<tr class="memitem:ucx_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html">ucx.h</a> <a href="ucx_8h_source.html">[code]</a></td></tr> 24.114 +<tr class="memdesc:ucx_8h"><td class="mdescLeft"> </td><td class="mdescRight">Main UCX Header providing most common definitions. <br /></td></tr> 24.115 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 24.116 +<tr class="memitem:utils_8h"><td class="memItemLeft" align="right" valign="top">file  </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html">utils.h</a> <a href="utils_8h_source.html">[code]</a></td></tr> 24.117 +<tr class="memdesc:utils_8h"><td class="mdescLeft"> </td><td class="mdescRight">Compare, copy and printf functions. <br /></td></tr> 24.118 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 24.119 +</table> 24.120 +</div><!-- contents --> 24.121 +<!-- start footer part --> 24.122 +<hr class="footer"/><address class="footer"><small> 24.123 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 24.124 +<img class="footer" src="doxygen.png" alt="doxygen"/> 24.125 +</a> 1.8.13 24.126 +</small></address> 24.127 +</body> 24.128 +</html>
25.1 Binary file docs/api-2.1/doc.png has changed
26.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 26.2 +++ b/docs/api-2.1/doxygen.css Sat Feb 06 19:11:44 2021 +0100 26.3 @@ -0,0 +1,1596 @@ 26.4 +/* The standard CSS for doxygen 1.8.13 */ 26.5 + 26.6 +body, table, div, p, dl { 26.7 + font: 400 14px/22px Roboto,sans-serif; 26.8 +} 26.9 + 26.10 +p.reference, p.definition { 26.11 + font: 400 14px/22px Roboto,sans-serif; 26.12 +} 26.13 + 26.14 +/* @group Heading Levels */ 26.15 + 26.16 +h1.groupheader { 26.17 + font-size: 150%; 26.18 +} 26.19 + 26.20 +.title { 26.21 + font: 400 14px/28px Roboto,sans-serif; 26.22 + font-size: 150%; 26.23 + font-weight: bold; 26.24 + margin: 10px 2px; 26.25 +} 26.26 + 26.27 +h2.groupheader { 26.28 + border-bottom: 1px solid #879ECB; 26.29 + color: #354C7B; 26.30 + font-size: 150%; 26.31 + font-weight: normal; 26.32 + margin-top: 1.75em; 26.33 + padding-top: 8px; 26.34 + padding-bottom: 4px; 26.35 + width: 100%; 26.36 +} 26.37 + 26.38 +h3.groupheader { 26.39 + font-size: 100%; 26.40 +} 26.41 + 26.42 +h1, h2, h3, h4, h5, h6 { 26.43 + -webkit-transition: text-shadow 0.5s linear; 26.44 + -moz-transition: text-shadow 0.5s linear; 26.45 + -ms-transition: text-shadow 0.5s linear; 26.46 + -o-transition: text-shadow 0.5s linear; 26.47 + transition: text-shadow 0.5s linear; 26.48 + margin-right: 15px; 26.49 +} 26.50 + 26.51 +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { 26.52 + text-shadow: 0 0 15px cyan; 26.53 +} 26.54 + 26.55 +dt { 26.56 + font-weight: bold; 26.57 +} 26.58 + 26.59 +div.multicol { 26.60 + -moz-column-gap: 1em; 26.61 + -webkit-column-gap: 1em; 26.62 + -moz-column-count: 3; 26.63 + -webkit-column-count: 3; 26.64 +} 26.65 + 26.66 +p.startli, p.startdd { 26.67 + margin-top: 2px; 26.68 +} 26.69 + 26.70 +p.starttd { 26.71 + margin-top: 0px; 26.72 +} 26.73 + 26.74 +p.endli { 26.75 + margin-bottom: 0px; 26.76 +} 26.77 + 26.78 +p.enddd { 26.79 + margin-bottom: 4px; 26.80 +} 26.81 + 26.82 +p.endtd { 26.83 + margin-bottom: 2px; 26.84 +} 26.85 + 26.86 +/* @end */ 26.87 + 26.88 +caption { 26.89 + font-weight: bold; 26.90 +} 26.91 + 26.92 +span.legend { 26.93 + font-size: 70%; 26.94 + text-align: center; 26.95 +} 26.96 + 26.97 +h3.version { 26.98 + font-size: 90%; 26.99 + text-align: center; 26.100 +} 26.101 + 26.102 +div.qindex, div.navtab{ 26.103 + background-color: #EBEFF6; 26.104 + border: 1px solid #A3B4D7; 26.105 + text-align: center; 26.106 +} 26.107 + 26.108 +div.qindex, div.navpath { 26.109 + width: 100%; 26.110 + line-height: 140%; 26.111 +} 26.112 + 26.113 +div.navtab { 26.114 + margin-right: 15px; 26.115 +} 26.116 + 26.117 +/* @group Link Styling */ 26.118 + 26.119 +a { 26.120 + color: #3D578C; 26.121 + font-weight: normal; 26.122 + text-decoration: none; 26.123 +} 26.124 + 26.125 +.contents a:visited { 26.126 + color: #4665A2; 26.127 +} 26.128 + 26.129 +a:hover { 26.130 + text-decoration: underline; 26.131 +} 26.132 + 26.133 +a.qindex { 26.134 + font-weight: bold; 26.135 +} 26.136 + 26.137 +a.qindexHL { 26.138 + font-weight: bold; 26.139 + background-color: #9CAFD4; 26.140 + color: #ffffff; 26.141 + border: 1px double #869DCA; 26.142 +} 26.143 + 26.144 +.contents a.qindexHL:visited { 26.145 + color: #ffffff; 26.146 +} 26.147 + 26.148 +a.el { 26.149 + font-weight: bold; 26.150 +} 26.151 + 26.152 +a.elRef { 26.153 +} 26.154 + 26.155 +a.code, a.code:visited, a.line, a.line:visited { 26.156 + color: #4665A2; 26.157 +} 26.158 + 26.159 +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { 26.160 + color: #4665A2; 26.161 +} 26.162 + 26.163 +/* @end */ 26.164 + 26.165 +dl.el { 26.166 + margin-left: -1cm; 26.167 +} 26.168 + 26.169 +pre.fragment { 26.170 + border: 1px solid #C4CFE5; 26.171 + background-color: #FBFCFD; 26.172 + padding: 4px 6px; 26.173 + margin: 4px 8px 4px 2px; 26.174 + overflow: auto; 26.175 + word-wrap: break-word; 26.176 + font-size: 9pt; 26.177 + line-height: 125%; 26.178 + font-family: monospace, fixed; 26.179 + font-size: 105%; 26.180 +} 26.181 + 26.182 +div.fragment { 26.183 + padding: 0px; 26.184 + margin: 4px 8px 4px 2px; 26.185 + background-color: #FBFCFD; 26.186 + border: 1px solid #C4CFE5; 26.187 +} 26.188 + 26.189 +div.line { 26.190 + font-family: monospace, fixed; 26.191 + font-size: 13px; 26.192 + min-height: 13px; 26.193 + line-height: 1.0; 26.194 + text-wrap: unrestricted; 26.195 + white-space: -moz-pre-wrap; /* Moz */ 26.196 + white-space: -pre-wrap; /* Opera 4-6 */ 26.197 + white-space: -o-pre-wrap; /* Opera 7 */ 26.198 + white-space: pre-wrap; /* CSS3 */ 26.199 + word-wrap: break-word; /* IE 5.5+ */ 26.200 + text-indent: -53px; 26.201 + padding-left: 53px; 26.202 + padding-bottom: 0px; 26.203 + margin: 0px; 26.204 + -webkit-transition-property: background-color, box-shadow; 26.205 + -webkit-transition-duration: 0.5s; 26.206 + -moz-transition-property: background-color, box-shadow; 26.207 + -moz-transition-duration: 0.5s; 26.208 + -ms-transition-property: background-color, box-shadow; 26.209 + -ms-transition-duration: 0.5s; 26.210 + -o-transition-property: background-color, box-shadow; 26.211 + -o-transition-duration: 0.5s; 26.212 + transition-property: background-color, box-shadow; 26.213 + transition-duration: 0.5s; 26.214 +} 26.215 + 26.216 +div.line:after { 26.217 + content:"\000A"; 26.218 + white-space: pre; 26.219 +} 26.220 + 26.221 +div.line.glow { 26.222 + background-color: cyan; 26.223 + box-shadow: 0 0 10px cyan; 26.224 +} 26.225 + 26.226 + 26.227 +span.lineno { 26.228 + padding-right: 4px; 26.229 + text-align: right; 26.230 + border-right: 2px solid #0F0; 26.231 + background-color: #E8E8E8; 26.232 + white-space: pre; 26.233 +} 26.234 +span.lineno a { 26.235 + background-color: #D8D8D8; 26.236 +} 26.237 + 26.238 +span.lineno a:hover { 26.239 + background-color: #C8C8C8; 26.240 +} 26.241 + 26.242 +.lineno { 26.243 + -webkit-touch-callout: none; 26.244 + -webkit-user-select: none; 26.245 + -khtml-user-select: none; 26.246 + -moz-user-select: none; 26.247 + -ms-user-select: none; 26.248 + user-select: none; 26.249 +} 26.250 + 26.251 +div.ah, span.ah { 26.252 + background-color: black; 26.253 + font-weight: bold; 26.254 + color: #ffffff; 26.255 + margin-bottom: 3px; 26.256 + margin-top: 3px; 26.257 + padding: 0.2em; 26.258 + border: solid thin #333; 26.259 + border-radius: 0.5em; 26.260 + -webkit-border-radius: .5em; 26.261 + -moz-border-radius: .5em; 26.262 + box-shadow: 2px 2px 3px #999; 26.263 + -webkit-box-shadow: 2px 2px 3px #999; 26.264 + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; 26.265 + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); 26.266 + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); 26.267 +} 26.268 + 26.269 +div.classindex ul { 26.270 + list-style: none; 26.271 + padding-left: 0; 26.272 +} 26.273 + 26.274 +div.classindex span.ai { 26.275 + display: inline-block; 26.276 +} 26.277 + 26.278 +div.groupHeader { 26.279 + margin-left: 16px; 26.280 + margin-top: 12px; 26.281 + font-weight: bold; 26.282 +} 26.283 + 26.284 +div.groupText { 26.285 + margin-left: 16px; 26.286 + font-style: italic; 26.287 +} 26.288 + 26.289 +body { 26.290 + background-color: white; 26.291 + color: black; 26.292 + margin: 0; 26.293 +} 26.294 + 26.295 +div.contents { 26.296 + margin-top: 10px; 26.297 + margin-left: 12px; 26.298 + margin-right: 8px; 26.299 +} 26.300 + 26.301 +td.indexkey { 26.302 + background-color: #EBEFF6; 26.303 + font-weight: bold; 26.304 + border: 1px solid #C4CFE5; 26.305 + margin: 2px 0px 2px 0; 26.306 + padding: 2px 10px; 26.307 + white-space: nowrap; 26.308 + vertical-align: top; 26.309 +} 26.310 + 26.311 +td.indexvalue { 26.312 + background-color: #EBEFF6; 26.313 + border: 1px solid #C4CFE5; 26.314 + padding: 2px 10px; 26.315 + margin: 2px 0px; 26.316 +} 26.317 + 26.318 +tr.memlist { 26.319 + background-color: #EEF1F7; 26.320 +} 26.321 + 26.322 +p.formulaDsp { 26.323 + text-align: center; 26.324 +} 26.325 + 26.326 +img.formulaDsp { 26.327 + 26.328 +} 26.329 + 26.330 +img.formulaInl { 26.331 + vertical-align: middle; 26.332 +} 26.333 + 26.334 +div.center { 26.335 + text-align: center; 26.336 + margin-top: 0px; 26.337 + margin-bottom: 0px; 26.338 + padding: 0px; 26.339 +} 26.340 + 26.341 +div.center img { 26.342 + border: 0px; 26.343 +} 26.344 + 26.345 +address.footer { 26.346 + text-align: right; 26.347 + padding-right: 12px; 26.348 +} 26.349 + 26.350 +img.footer { 26.351 + border: 0px; 26.352 + vertical-align: middle; 26.353 +} 26.354 + 26.355 +/* @group Code Colorization */ 26.356 + 26.357 +span.keyword { 26.358 + color: #008000 26.359 +} 26.360 + 26.361 +span.keywordtype { 26.362 + color: #604020 26.363 +} 26.364 + 26.365 +span.keywordflow { 26.366 + color: #e08000 26.367 +} 26.368 + 26.369 +span.comment { 26.370 + color: #800000 26.371 +} 26.372 + 26.373 +span.preprocessor { 26.374 + color: #806020 26.375 +} 26.376 + 26.377 +span.stringliteral { 26.378 + color: #002080 26.379 +} 26.380 + 26.381 +span.charliteral { 26.382 + color: #008080 26.383 +} 26.384 + 26.385 +span.vhdldigit { 26.386 + color: #ff00ff 26.387 +} 26.388 + 26.389 +span.vhdlchar { 26.390 + color: #000000 26.391 +} 26.392 + 26.393 +span.vhdlkeyword { 26.394 + color: #700070 26.395 +} 26.396 + 26.397 +span.vhdllogic { 26.398 + color: #ff0000 26.399 +} 26.400 + 26.401 +blockquote { 26.402 + background-color: #F7F8FB; 26.403 + border-left: 2px solid #9CAFD4; 26.404 + margin: 0 24px 0 4px; 26.405 + padding: 0 12px 0 16px; 26.406 +} 26.407 + 26.408 +/* @end */ 26.409 + 26.410 +/* 26.411 +.search { 26.412 + color: #003399; 26.413 + font-weight: bold; 26.414 +} 26.415 + 26.416 +form.search { 26.417 + margin-bottom: 0px; 26.418 + margin-top: 0px; 26.419 +} 26.420 + 26.421 +input.search { 26.422 + font-size: 75%; 26.423 + color: #000080; 26.424 + font-weight: normal; 26.425 + background-color: #e8eef2; 26.426 +} 26.427 +*/ 26.428 + 26.429 +td.tiny { 26.430 + font-size: 75%; 26.431 +} 26.432 + 26.433 +.dirtab { 26.434 + padding: 4px; 26.435 + border-collapse: collapse; 26.436 + border: 1px solid #A3B4D7; 26.437 +} 26.438 + 26.439 +th.dirtab { 26.440 + background: #EBEFF6; 26.441 + font-weight: bold; 26.442 +} 26.443 + 26.444 +hr { 26.445 + height: 0px; 26.446 + border: none; 26.447 + border-top: 1px solid #4A6AAA; 26.448 +} 26.449 + 26.450 +hr.footer { 26.451 + height: 1px; 26.452 +} 26.453 + 26.454 +/* @group Member Descriptions */ 26.455 + 26.456 +table.memberdecls { 26.457 + border-spacing: 0px; 26.458 + padding: 0px; 26.459 +} 26.460 + 26.461 +.memberdecls td, .fieldtable tr { 26.462 + -webkit-transition-property: background-color, box-shadow; 26.463 + -webkit-transition-duration: 0.5s; 26.464 + -moz-transition-property: background-color, box-shadow; 26.465 + -moz-transition-duration: 0.5s; 26.466 + -ms-transition-property: background-color, box-shadow; 26.467 + -ms-transition-duration: 0.5s; 26.468 + -o-transition-property: background-color, box-shadow; 26.469 + -o-transition-duration: 0.5s; 26.470 + transition-property: background-color, box-shadow; 26.471 + transition-duration: 0.5s; 26.472 +} 26.473 + 26.474 +.memberdecls td.glow, .fieldtable tr.glow { 26.475 + background-color: cyan; 26.476 + box-shadow: 0 0 15px cyan; 26.477 +} 26.478 + 26.479 +.mdescLeft, .mdescRight, 26.480 +.memItemLeft, .memItemRight, 26.481 +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { 26.482 + background-color: #F9FAFC; 26.483 + border: none; 26.484 + margin: 4px; 26.485 + padding: 1px 0 0 8px; 26.486 +} 26.487 + 26.488 +.mdescLeft, .mdescRight { 26.489 + padding: 0px 8px 4px 8px; 26.490 + color: #555; 26.491 +} 26.492 + 26.493 +.memSeparator { 26.494 + border-bottom: 1px solid #DEE4F0; 26.495 + line-height: 1px; 26.496 + margin: 0px; 26.497 + padding: 0px; 26.498 +} 26.499 + 26.500 +.memItemLeft, .memTemplItemLeft { 26.501 + white-space: nowrap; 26.502 +} 26.503 + 26.504 +.memItemRight { 26.505 + width: 100%; 26.506 +} 26.507 + 26.508 +.memTemplParams { 26.509 + color: #4665A2; 26.510 + white-space: nowrap; 26.511 + font-size: 80%; 26.512 +} 26.513 + 26.514 +/* @end */ 26.515 + 26.516 +/* @group Member Details */ 26.517 + 26.518 +/* Styles for detailed member documentation */ 26.519 + 26.520 +.memtitle { 26.521 + padding: 8px; 26.522 + border-top: 1px solid #A8B8D9; 26.523 + border-left: 1px solid #A8B8D9; 26.524 + border-right: 1px solid #A8B8D9; 26.525 + border-top-right-radius: 4px; 26.526 + border-top-left-radius: 4px; 26.527 + margin-bottom: -1px; 26.528 + background-image: url('nav_f.png'); 26.529 + background-repeat: repeat-x; 26.530 + background-color: #E2E8F2; 26.531 + line-height: 1.25; 26.532 + font-weight: 300; 26.533 + float:left; 26.534 +} 26.535 + 26.536 +.permalink 26.537 +{ 26.538 + font-size: 65%; 26.539 + display: inline-block; 26.540 + vertical-align: middle; 26.541 +} 26.542 + 26.543 +.memtemplate { 26.544 + font-size: 80%; 26.545 + color: #4665A2; 26.546 + font-weight: normal; 26.547 + margin-left: 9px; 26.548 +} 26.549 + 26.550 +.memnav { 26.551 + background-color: #EBEFF6; 26.552 + border: 1px solid #A3B4D7; 26.553 + text-align: center; 26.554 + margin: 2px; 26.555 + margin-right: 15px; 26.556 + padding: 2px; 26.557 +} 26.558 + 26.559 +.mempage { 26.560 + width: 100%; 26.561 +} 26.562 + 26.563 +.memitem { 26.564 + padding: 0; 26.565 + margin-bottom: 10px; 26.566 + margin-right: 5px; 26.567 + -webkit-transition: box-shadow 0.5s linear; 26.568 + -moz-transition: box-shadow 0.5s linear; 26.569 + -ms-transition: box-shadow 0.5s linear; 26.570 + -o-transition: box-shadow 0.5s linear; 26.571 + transition: box-shadow 0.5s linear; 26.572 + display: table !important; 26.573 + width: 100%; 26.574 +} 26.575 + 26.576 +.memitem.glow { 26.577 + box-shadow: 0 0 15px cyan; 26.578 +} 26.579 + 26.580 +.memname { 26.581 + font-weight: 400; 26.582 + margin-left: 6px; 26.583 +} 26.584 + 26.585 +.memname td { 26.586 + vertical-align: bottom; 26.587 +} 26.588 + 26.589 +.memproto, dl.reflist dt { 26.590 + border-top: 1px solid #A8B8D9; 26.591 + border-left: 1px solid #A8B8D9; 26.592 + border-right: 1px solid #A8B8D9; 26.593 + padding: 6px 0px 6px 0px; 26.594 + color: #253555; 26.595 + font-weight: bold; 26.596 + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); 26.597 + background-color: #DFE5F1; 26.598 + /* opera specific markup */ 26.599 + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); 26.600 + border-top-right-radius: 4px; 26.601 + /* firefox specific markup */ 26.602 + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; 26.603 + -moz-border-radius-topright: 4px; 26.604 + /* webkit specific markup */ 26.605 + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); 26.606 + -webkit-border-top-right-radius: 4px; 26.607 + 26.608 +} 26.609 + 26.610 +.overload { 26.611 + font-family: "courier new",courier,monospace; 26.612 + font-size: 65%; 26.613 +} 26.614 + 26.615 +.memdoc, dl.reflist dd { 26.616 + border-bottom: 1px solid #A8B8D9; 26.617 + border-left: 1px solid #A8B8D9; 26.618 + border-right: 1px solid #A8B8D9; 26.619 + padding: 6px 10px 2px 10px; 26.620 + background-color: #FBFCFD; 26.621 + border-top-width: 0; 26.622 + background-image:url('nav_g.png'); 26.623 + background-repeat:repeat-x; 26.624 + background-color: #FFFFFF; 26.625 + /* opera specific markup */ 26.626 + border-bottom-left-radius: 4px; 26.627 + border-bottom-right-radius: 4px; 26.628 + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); 26.629 + /* firefox specific markup */ 26.630 + -moz-border-radius-bottomleft: 4px; 26.631 + -moz-border-radius-bottomright: 4px; 26.632 + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; 26.633 + /* webkit specific markup */ 26.634 + -webkit-border-bottom-left-radius: 4px; 26.635 + -webkit-border-bottom-right-radius: 4px; 26.636 + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); 26.637 +} 26.638 + 26.639 +dl.reflist dt { 26.640 + padding: 5px; 26.641 +} 26.642 + 26.643 +dl.reflist dd { 26.644 + margin: 0px 0px 10px 0px; 26.645 + padding: 5px; 26.646 +} 26.647 + 26.648 +.paramkey { 26.649 + text-align: right; 26.650 +} 26.651 + 26.652 +.paramtype { 26.653 + white-space: nowrap; 26.654 +} 26.655 + 26.656 +.paramname { 26.657 + color: #602020; 26.658 + white-space: nowrap; 26.659 +} 26.660 +.paramname em { 26.661 + font-style: normal; 26.662 +} 26.663 +.paramname code { 26.664 + line-height: 14px; 26.665 +} 26.666 + 26.667 +.params, .retval, .exception, .tparams { 26.668 + margin-left: 0px; 26.669 + padding-left: 0px; 26.670 +} 26.671 + 26.672 +.params .paramname, .retval .paramname { 26.673 + font-weight: bold; 26.674 + vertical-align: top; 26.675 +} 26.676 + 26.677 +.params .paramtype { 26.678 + font-style: italic; 26.679 + vertical-align: top; 26.680 +} 26.681 + 26.682 +.params .paramdir { 26.683 + font-family: "courier new",courier,monospace; 26.684 + vertical-align: top; 26.685 +} 26.686 + 26.687 +table.mlabels { 26.688 + border-spacing: 0px; 26.689 +} 26.690 + 26.691 +td.mlabels-left { 26.692 + width: 100%; 26.693 + padding: 0px; 26.694 +} 26.695 + 26.696 +td.mlabels-right { 26.697 + vertical-align: bottom; 26.698 + padding: 0px; 26.699 + white-space: nowrap; 26.700 +} 26.701 + 26.702 +span.mlabels { 26.703 + margin-left: 8px; 26.704 +} 26.705 + 26.706 +span.mlabel { 26.707 + background-color: #728DC1; 26.708 + border-top:1px solid #5373B4; 26.709 + border-left:1px solid #5373B4; 26.710 + border-right:1px solid #C4CFE5; 26.711 + border-bottom:1px solid #C4CFE5; 26.712 + text-shadow: none; 26.713 + color: white; 26.714 + margin-right: 4px; 26.715 + padding: 2px 3px; 26.716 + border-radius: 3px; 26.717 + font-size: 7pt; 26.718 + white-space: nowrap; 26.719 + vertical-align: middle; 26.720 +} 26.721 + 26.722 + 26.723 + 26.724 +/* @end */ 26.725 + 26.726 +/* these are for tree view inside a (index) page */ 26.727 + 26.728 +div.directory { 26.729 + margin: 10px 0px; 26.730 + border-top: 1px solid #9CAFD4; 26.731 + border-bottom: 1px solid #9CAFD4; 26.732 + width: 100%; 26.733 +} 26.734 + 26.735 +.directory table { 26.736 + border-collapse:collapse; 26.737 +} 26.738 + 26.739 +.directory td { 26.740 + margin: 0px; 26.741 + padding: 0px; 26.742 + vertical-align: top; 26.743 +} 26.744 + 26.745 +.directory td.entry { 26.746 + white-space: nowrap; 26.747 + padding-right: 6px; 26.748 + padding-top: 3px; 26.749 +} 26.750 + 26.751 +.directory td.entry a { 26.752 + outline:none; 26.753 +} 26.754 + 26.755 +.directory td.entry a img { 26.756 + border: none; 26.757 +} 26.758 + 26.759 +.directory td.desc { 26.760 + width: 100%; 26.761 + padding-left: 6px; 26.762 + padding-right: 6px; 26.763 + padding-top: 3px; 26.764 + border-left: 1px solid rgba(0,0,0,0.05); 26.765 +} 26.766 + 26.767 +.directory tr.even { 26.768 + padding-left: 6px; 26.769 + background-color: #F7F8FB; 26.770 +} 26.771 + 26.772 +.directory img { 26.773 + vertical-align: -30%; 26.774 +} 26.775 + 26.776 +.directory .levels { 26.777 + white-space: nowrap; 26.778 + width: 100%; 26.779 + text-align: right; 26.780 + font-size: 9pt; 26.781 +} 26.782 + 26.783 +.directory .levels span { 26.784 + cursor: pointer; 26.785 + padding-left: 2px; 26.786 + padding-right: 2px; 26.787 + color: #3D578C; 26.788 +} 26.789 + 26.790 +.arrow { 26.791 + color: #9CAFD4; 26.792 + -webkit-user-select: none; 26.793 + -khtml-user-select: none; 26.794 + -moz-user-select: none; 26.795 + -ms-user-select: none; 26.796 + user-select: none; 26.797 + cursor: pointer; 26.798 + font-size: 80%; 26.799 + display: inline-block; 26.800 + width: 16px; 26.801 + height: 22px; 26.802 +} 26.803 + 26.804 +.icon { 26.805 + font-family: Arial, Helvetica; 26.806 + font-weight: bold; 26.807 + font-size: 12px; 26.808 + height: 14px; 26.809 + width: 16px; 26.810 + display: inline-block; 26.811 + background-color: #728DC1; 26.812 + color: white; 26.813 + text-align: center; 26.814 + border-radius: 4px; 26.815 + margin-left: 2px; 26.816 + margin-right: 2px; 26.817 +} 26.818 + 26.819 +.icona { 26.820 + width: 24px; 26.821 + height: 22px; 26.822 + display: inline-block; 26.823 +} 26.824 + 26.825 +.iconfopen { 26.826 + width: 24px; 26.827 + height: 18px; 26.828 + margin-bottom: 4px; 26.829 + background-image:url('folderopen.png'); 26.830 + background-position: 0px -4px; 26.831 + background-repeat: repeat-y; 26.832 + vertical-align:top; 26.833 + display: inline-block; 26.834 +} 26.835 + 26.836 +.iconfclosed { 26.837 + width: 24px; 26.838 + height: 18px; 26.839 + margin-bottom: 4px; 26.840 + background-image:url('folderclosed.png'); 26.841 + background-position: 0px -4px; 26.842 + background-repeat: repeat-y; 26.843 + vertical-align:top; 26.844 + display: inline-block; 26.845 +} 26.846 + 26.847 +.icondoc { 26.848 + width: 24px; 26.849 + height: 18px; 26.850 + margin-bottom: 4px; 26.851 + background-image:url('doc.png'); 26.852 + background-position: 0px -4px; 26.853 + background-repeat: repeat-y; 26.854 + vertical-align:top; 26.855 + display: inline-block; 26.856 +} 26.857 + 26.858 +table.directory { 26.859 + font: 400 14px Roboto,sans-serif; 26.860 +} 26.861 + 26.862 +/* @end */ 26.863 + 26.864 +div.dynheader { 26.865 + margin-top: 8px; 26.866 + -webkit-touch-callout: none; 26.867 + -webkit-user-select: none; 26.868 + -khtml-user-select: none; 26.869 + -moz-user-select: none; 26.870 + -ms-user-select: none; 26.871 + user-select: none; 26.872 +} 26.873 + 26.874 +address { 26.875 + font-style: normal; 26.876 + color: #2A3D61; 26.877 +} 26.878 + 26.879 +table.doxtable caption { 26.880 + caption-side: top; 26.881 +} 26.882 + 26.883 +table.doxtable { 26.884 + border-collapse:collapse; 26.885 + margin-top: 4px; 26.886 + margin-bottom: 4px; 26.887 +} 26.888 + 26.889 +table.doxtable td, table.doxtable th { 26.890 + border: 1px solid #2D4068; 26.891 + padding: 3px 7px 2px; 26.892 +} 26.893 + 26.894 +table.doxtable th { 26.895 + background-color: #374F7F; 26.896 + color: #FFFFFF; 26.897 + font-size: 110%; 26.898 + padding-bottom: 4px; 26.899 + padding-top: 5px; 26.900 +} 26.901 + 26.902 +table.fieldtable { 26.903 + /*width: 100%;*/ 26.904 + margin-bottom: 10px; 26.905 + border: 1px solid #A8B8D9; 26.906 + border-spacing: 0px; 26.907 + -moz-border-radius: 4px; 26.908 + -webkit-border-radius: 4px; 26.909 + border-radius: 4px; 26.910 + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; 26.911 + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); 26.912 + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); 26.913 +} 26.914 + 26.915 +.fieldtable td, .fieldtable th { 26.916 + padding: 3px 7px 2px; 26.917 +} 26.918 + 26.919 +.fieldtable td.fieldtype, .fieldtable td.fieldname { 26.920 + white-space: nowrap; 26.921 + border-right: 1px solid #A8B8D9; 26.922 + border-bottom: 1px solid #A8B8D9; 26.923 + vertical-align: top; 26.924 +} 26.925 + 26.926 +.fieldtable td.fieldname { 26.927 + padding-top: 3px; 26.928 +} 26.929 + 26.930 +.fieldtable td.fielddoc { 26.931 + border-bottom: 1px solid #A8B8D9; 26.932 + /*width: 100%;*/ 26.933 +} 26.934 + 26.935 +.fieldtable td.fielddoc p:first-child { 26.936 + margin-top: 0px; 26.937 +} 26.938 + 26.939 +.fieldtable td.fielddoc p:last-child { 26.940 + margin-bottom: 2px; 26.941 +} 26.942 + 26.943 +.fieldtable tr:last-child td { 26.944 + border-bottom: none; 26.945 +} 26.946 + 26.947 +.fieldtable th { 26.948 + background-image:url('nav_f.png'); 26.949 + background-repeat:repeat-x; 26.950 + background-color: #E2E8F2; 26.951 + font-size: 90%; 26.952 + color: #253555; 26.953 + padding-bottom: 4px; 26.954 + padding-top: 5px; 26.955 + text-align:left; 26.956 + font-weight: 400; 26.957 + -moz-border-radius-topleft: 4px; 26.958 + -moz-border-radius-topright: 4px; 26.959 + -webkit-border-top-left-radius: 4px; 26.960 + -webkit-border-top-right-radius: 4px; 26.961 + border-top-left-radius: 4px; 26.962 + border-top-right-radius: 4px; 26.963 + border-bottom: 1px solid #A8B8D9; 26.964 +} 26.965 + 26.966 + 26.967 +.tabsearch { 26.968 + top: 0px; 26.969 + left: 10px; 26.970 + height: 36px; 26.971 + background-image: url('tab_b.png'); 26.972 + z-index: 101; 26.973 + overflow: hidden; 26.974 + font-size: 13px; 26.975 +} 26.976 + 26.977 +.navpath ul 26.978 +{ 26.979 + font-size: 11px; 26.980 + background-image:url('tab_b.png'); 26.981 + background-repeat:repeat-x; 26.982 + background-position: 0 -5px; 26.983 + height:30px; 26.984 + line-height:30px; 26.985 + color:#8AA0CC; 26.986 + border:solid 1px #C2CDE4; 26.987 + overflow:hidden; 26.988 + margin:0px; 26.989 + padding:0px; 26.990 +} 26.991 + 26.992 +.navpath li 26.993 +{ 26.994 + list-style-type:none; 26.995 + float:left; 26.996 + padding-left:10px; 26.997 + padding-right:15px; 26.998 + background-image:url('bc_s.png'); 26.999 + background-repeat:no-repeat; 26.1000 + background-position:right; 26.1001 + color:#364D7C; 26.1002 +} 26.1003 + 26.1004 +.navpath li.navelem a 26.1005 +{ 26.1006 + height:32px; 26.1007 + display:block; 26.1008 + text-decoration: none; 26.1009 + outline: none; 26.1010 + color: #283A5D; 26.1011 + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; 26.1012 + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); 26.1013 + text-decoration: none; 26.1014 +} 26.1015 + 26.1016 +.navpath li.navelem a:hover 26.1017 +{ 26.1018 + color:#6884BD; 26.1019 +} 26.1020 + 26.1021 +.navpath li.footer 26.1022 +{ 26.1023 + list-style-type:none; 26.1024 + float:right; 26.1025 + padding-left:10px; 26.1026 + padding-right:15px; 26.1027 + background-image:none; 26.1028 + background-repeat:no-repeat; 26.1029 + background-position:right; 26.1030 + color:#364D7C; 26.1031 + font-size: 8pt; 26.1032 +} 26.1033 + 26.1034 + 26.1035 +div.summary 26.1036 +{ 26.1037 + float: right; 26.1038 + font-size: 8pt; 26.1039 + padding-right: 5px; 26.1040 + width: 50%; 26.1041 + text-align: right; 26.1042 +} 26.1043 + 26.1044 +div.summary a 26.1045 +{ 26.1046 + white-space: nowrap; 26.1047 +} 26.1048 + 26.1049 +table.classindex 26.1050 +{ 26.1051 + margin: 10px; 26.1052 + white-space: nowrap; 26.1053 + margin-left: 3%; 26.1054 + margin-right: 3%; 26.1055 + width: 94%; 26.1056 + border: 0; 26.1057 + border-spacing: 0; 26.1058 + padding: 0; 26.1059 +} 26.1060 + 26.1061 +div.ingroups 26.1062 +{ 26.1063 + font-size: 8pt; 26.1064 + width: 50%; 26.1065 + text-align: left; 26.1066 +} 26.1067 + 26.1068 +div.ingroups a 26.1069 +{ 26.1070 + white-space: nowrap; 26.1071 +} 26.1072 + 26.1073 +div.header 26.1074 +{ 26.1075 + background-image:url('nav_h.png'); 26.1076 + background-repeat:repeat-x; 26.1077 + background-color: #F9FAFC; 26.1078 + margin: 0px; 26.1079 + border-bottom: 1px solid #C4CFE5; 26.1080 +} 26.1081 + 26.1082 +div.headertitle 26.1083 +{ 26.1084 + padding: 5px 5px 5px 10px; 26.1085 +} 26.1086 + 26.1087 +dl 26.1088 +{ 26.1089 + padding: 0 0 0 10px; 26.1090 +} 26.1091 + 26.1092 +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ 26.1093 +dl.section 26.1094 +{ 26.1095 + margin-left: 0px; 26.1096 + padding-left: 0px; 26.1097 +} 26.1098 + 26.1099 +dl.note 26.1100 +{ 26.1101 + margin-left:-7px; 26.1102 + padding-left: 3px; 26.1103 + border-left:4px solid; 26.1104 + border-color: #D0C000; 26.1105 +} 26.1106 + 26.1107 +dl.warning, dl.attention 26.1108 +{ 26.1109 + margin-left:-7px; 26.1110 + padding-left: 3px; 26.1111 + border-left:4px solid; 26.1112 + border-color: #FF0000; 26.1113 +} 26.1114 + 26.1115 +dl.pre, dl.post, dl.invariant 26.1116 +{ 26.1117 + margin-left:-7px; 26.1118 + padding-left: 3px; 26.1119 + border-left:4px solid; 26.1120 + border-color: #00D000; 26.1121 +} 26.1122 + 26.1123 +dl.deprecated 26.1124 +{ 26.1125 + margin-left:-7px; 26.1126 + padding-left: 3px; 26.1127 + border-left:4px solid; 26.1128 + border-color: #505050; 26.1129 +} 26.1130 + 26.1131 +dl.todo 26.1132 +{ 26.1133 + margin-left:-7px; 26.1134 + padding-left: 3px; 26.1135 + border-left:4px solid; 26.1136 + border-color: #00C0E0; 26.1137 +} 26.1138 + 26.1139 +dl.test 26.1140 +{ 26.1141 + margin-left:-7px; 26.1142 + padding-left: 3px; 26.1143 + border-left:4px solid; 26.1144 + border-color: #3030E0; 26.1145 +} 26.1146 + 26.1147 +dl.bug 26.1148 +{ 26.1149 + margin-left:-7px; 26.1150 + padding-left: 3px; 26.1151 + border-left:4px solid; 26.1152 + border-color: #C08050; 26.1153 +} 26.1154 + 26.1155 +dl.section dd { 26.1156 + margin-bottom: 6px; 26.1157 +} 26.1158 + 26.1159 + 26.1160 +#projectlogo 26.1161 +{ 26.1162 + text-align: center; 26.1163 + vertical-align: bottom; 26.1164 + border-collapse: separate; 26.1165 +} 26.1166 + 26.1167 +#projectlogo img 26.1168 +{ 26.1169 + border: 0px none; 26.1170 +} 26.1171 + 26.1172 +#projectalign 26.1173 +{ 26.1174 + vertical-align: middle; 26.1175 +} 26.1176 + 26.1177 +#projectname 26.1178 +{ 26.1179 + font: 300% Tahoma, Arial,sans-serif; 26.1180 + margin: 0px; 26.1181 + padding: 2px 0px; 26.1182 +} 26.1183 + 26.1184 +#projectbrief 26.1185 +{ 26.1186 + font: 120% Tahoma, Arial,sans-serif; 26.1187 + margin: 0px; 26.1188 + padding: 0px; 26.1189 +} 26.1190 + 26.1191 +#projectnumber 26.1192 +{ 26.1193 + font: 50% Tahoma, Arial,sans-serif; 26.1194 + margin: 0px; 26.1195 + padding: 0px; 26.1196 +} 26.1197 + 26.1198 +#titlearea 26.1199 +{ 26.1200 + padding: 0px; 26.1201 + margin: 0px; 26.1202 + width: 100%; 26.1203 + border-bottom: 1px solid #5373B4; 26.1204 +} 26.1205 + 26.1206 +.image 26.1207 +{ 26.1208 + text-align: center; 26.1209 +} 26.1210 + 26.1211 +.dotgraph 26.1212 +{ 26.1213 + text-align: center; 26.1214 +} 26.1215 + 26.1216 +.mscgraph 26.1217 +{ 26.1218 + text-align: center; 26.1219 +} 26.1220 + 26.1221 +.plantumlgraph 26.1222 +{ 26.1223 + text-align: center; 26.1224 +} 26.1225 + 26.1226 +.diagraph 26.1227 +{ 26.1228 + text-align: center; 26.1229 +} 26.1230 + 26.1231 +.caption 26.1232 +{ 26.1233 + font-weight: bold; 26.1234 +} 26.1235 + 26.1236 +div.zoom 26.1237 +{ 26.1238 + border: 1px solid #90A5CE; 26.1239 +} 26.1240 + 26.1241 +dl.citelist { 26.1242 + margin-bottom:50px; 26.1243 +} 26.1244 + 26.1245 +dl.citelist dt { 26.1246 + color:#334975; 26.1247 + float:left; 26.1248 + font-weight:bold; 26.1249 + margin-right:10px; 26.1250 + padding:5px; 26.1251 +} 26.1252 + 26.1253 +dl.citelist dd { 26.1254 + margin:2px 0; 26.1255 + padding:5px 0; 26.1256 +} 26.1257 + 26.1258 +div.toc { 26.1259 + padding: 14px 25px; 26.1260 + background-color: #F4F6FA; 26.1261 + border: 1px solid #D8DFEE; 26.1262 + border-radius: 7px 7px 7px 7px; 26.1263 + float: right; 26.1264 + height: auto; 26.1265 + margin: 0 8px 10px 10px; 26.1266 + width: 200px; 26.1267 +} 26.1268 + 26.1269 +div.toc li { 26.1270 + background: url("bdwn.png") no-repeat scroll 0 5px transparent; 26.1271 + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; 26.1272 + margin-top: 5px; 26.1273 + padding-left: 10px; 26.1274 + padding-top: 2px; 26.1275 +} 26.1276 + 26.1277 +div.toc h3 { 26.1278 + font: bold 12px/1.2 Arial,FreeSans,sans-serif; 26.1279 + color: #4665A2; 26.1280 + border-bottom: 0 none; 26.1281 + margin: 0; 26.1282 +} 26.1283 + 26.1284 +div.toc ul { 26.1285 + list-style: none outside none; 26.1286 + border: medium none; 26.1287 + padding: 0px; 26.1288 +} 26.1289 + 26.1290 +div.toc li.level1 { 26.1291 + margin-left: 0px; 26.1292 +} 26.1293 + 26.1294 +div.toc li.level2 { 26.1295 + margin-left: 15px; 26.1296 +} 26.1297 + 26.1298 +div.toc li.level3 { 26.1299 + margin-left: 30px; 26.1300 +} 26.1301 + 26.1302 +div.toc li.level4 { 26.1303 + margin-left: 45px; 26.1304 +} 26.1305 + 26.1306 +.inherit_header { 26.1307 + font-weight: bold; 26.1308 + color: gray; 26.1309 + cursor: pointer; 26.1310 + -webkit-touch-callout: none; 26.1311 + -webkit-user-select: none; 26.1312 + -khtml-user-select: none; 26.1313 + -moz-user-select: none; 26.1314 + -ms-user-select: none; 26.1315 + user-select: none; 26.1316 +} 26.1317 + 26.1318 +.inherit_header td { 26.1319 + padding: 6px 0px 2px 5px; 26.1320 +} 26.1321 + 26.1322 +.inherit { 26.1323 + display: none; 26.1324 +} 26.1325 + 26.1326 +tr.heading h2 { 26.1327 + margin-top: 12px; 26.1328 + margin-bottom: 4px; 26.1329 +} 26.1330 + 26.1331 +/* tooltip related style info */ 26.1332 + 26.1333 +.ttc { 26.1334 + position: absolute; 26.1335 + display: none; 26.1336 +} 26.1337 + 26.1338 +#powerTip { 26.1339 + cursor: default; 26.1340 + white-space: nowrap; 26.1341 + background-color: white; 26.1342 + border: 1px solid gray; 26.1343 + border-radius: 4px 4px 4px 4px; 26.1344 + box-shadow: 1px 1px 7px gray; 26.1345 + display: none; 26.1346 + font-size: smaller; 26.1347 + max-width: 80%; 26.1348 + opacity: 0.9; 26.1349 + padding: 1ex 1em 1em; 26.1350 + position: absolute; 26.1351 + z-index: 2147483647; 26.1352 +} 26.1353 + 26.1354 +#powerTip div.ttdoc { 26.1355 + color: grey; 26.1356 + font-style: italic; 26.1357 +} 26.1358 + 26.1359 +#powerTip div.ttname a { 26.1360 + font-weight: bold; 26.1361 +} 26.1362 + 26.1363 +#powerTip div.ttname { 26.1364 + font-weight: bold; 26.1365 +} 26.1366 + 26.1367 +#powerTip div.ttdeci { 26.1368 + color: #006318; 26.1369 +} 26.1370 + 26.1371 +#powerTip div { 26.1372 + margin: 0px; 26.1373 + padding: 0px; 26.1374 + font: 12px/16px Roboto,sans-serif; 26.1375 +} 26.1376 + 26.1377 +#powerTip:before, #powerTip:after { 26.1378 + content: ""; 26.1379 + position: absolute; 26.1380 + margin: 0px; 26.1381 +} 26.1382 + 26.1383 +#powerTip.n:after, #powerTip.n:before, 26.1384 +#powerTip.s:after, #powerTip.s:before, 26.1385 +#powerTip.w:after, #powerTip.w:before, 26.1386 +#powerTip.e:after, #powerTip.e:before, 26.1387 +#powerTip.ne:after, #powerTip.ne:before, 26.1388 +#powerTip.se:after, #powerTip.se:before, 26.1389 +#powerTip.nw:after, #powerTip.nw:before, 26.1390 +#powerTip.sw:after, #powerTip.sw:before { 26.1391 + border: solid transparent; 26.1392 + content: " "; 26.1393 + height: 0; 26.1394 + width: 0; 26.1395 + position: absolute; 26.1396 +} 26.1397 + 26.1398 +#powerTip.n:after, #powerTip.s:after, 26.1399 +#powerTip.w:after, #powerTip.e:after, 26.1400 +#powerTip.nw:after, #powerTip.ne:after, 26.1401 +#powerTip.sw:after, #powerTip.se:after { 26.1402 + border-color: rgba(255, 255, 255, 0); 26.1403 +} 26.1404 + 26.1405 +#powerTip.n:before, #powerTip.s:before, 26.1406 +#powerTip.w:before, #powerTip.e:before, 26.1407 +#powerTip.nw:before, #powerTip.ne:before, 26.1408 +#powerTip.sw:before, #powerTip.se:before { 26.1409 + border-color: rgba(128, 128, 128, 0); 26.1410 +} 26.1411 + 26.1412 +#powerTip.n:after, #powerTip.n:before, 26.1413 +#powerTip.ne:after, #powerTip.ne:before, 26.1414 +#powerTip.nw:after, #powerTip.nw:before { 26.1415 + top: 100%; 26.1416 +} 26.1417 + 26.1418 +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { 26.1419 + border-top-color: #ffffff; 26.1420 + border-width: 10px; 26.1421 + margin: 0px -10px; 26.1422 +} 26.1423 +#powerTip.n:before { 26.1424 + border-top-color: #808080; 26.1425 + border-width: 11px; 26.1426 + margin: 0px -11px; 26.1427 +} 26.1428 +#powerTip.n:after, #powerTip.n:before { 26.1429 + left: 50%; 26.1430 +} 26.1431 + 26.1432 +#powerTip.nw:after, #powerTip.nw:before { 26.1433 + right: 14px; 26.1434 +} 26.1435 + 26.1436 +#powerTip.ne:after, #powerTip.ne:before { 26.1437 + left: 14px; 26.1438 +} 26.1439 + 26.1440 +#powerTip.s:after, #powerTip.s:before, 26.1441 +#powerTip.se:after, #powerTip.se:before, 26.1442 +#powerTip.sw:after, #powerTip.sw:before { 26.1443 + bottom: 100%; 26.1444 +} 26.1445 + 26.1446 +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { 26.1447 + border-bottom-color: #ffffff; 26.1448 + border-width: 10px; 26.1449 + margin: 0px -10px; 26.1450 +} 26.1451 + 26.1452 +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { 26.1453 + border-bottom-color: #808080; 26.1454 + border-width: 11px; 26.1455 + margin: 0px -11px; 26.1456 +} 26.1457 + 26.1458 +#powerTip.s:after, #powerTip.s:before { 26.1459 + left: 50%; 26.1460 +} 26.1461 + 26.1462 +#powerTip.sw:after, #powerTip.sw:before { 26.1463 + right: 14px; 26.1464 +} 26.1465 + 26.1466 +#powerTip.se:after, #powerTip.se:before { 26.1467 + left: 14px; 26.1468 +} 26.1469 + 26.1470 +#powerTip.e:after, #powerTip.e:before { 26.1471 + left: 100%; 26.1472 +} 26.1473 +#powerTip.e:after { 26.1474 + border-left-color: #ffffff; 26.1475 + border-width: 10px; 26.1476 + top: 50%; 26.1477 + margin-top: -10px; 26.1478 +} 26.1479 +#powerTip.e:before { 26.1480 + border-left-color: #808080; 26.1481 + border-width: 11px; 26.1482 + top: 50%; 26.1483 + margin-top: -11px; 26.1484 +} 26.1485 + 26.1486 +#powerTip.w:after, #powerTip.w:before { 26.1487 + right: 100%; 26.1488 +} 26.1489 +#powerTip.w:after { 26.1490 + border-right-color: #ffffff; 26.1491 + border-width: 10px; 26.1492 + top: 50%; 26.1493 + margin-top: -10px; 26.1494 +} 26.1495 +#powerTip.w:before { 26.1496 + border-right-color: #808080; 26.1497 + border-width: 11px; 26.1498 + top: 50%; 26.1499 + margin-top: -11px; 26.1500 +} 26.1501 + 26.1502 +@media print 26.1503 +{ 26.1504 + #top { display: none; } 26.1505 + #side-nav { display: none; } 26.1506 + #nav-path { display: none; } 26.1507 + body { overflow:visible; } 26.1508 + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } 26.1509 + .summary { display: none; } 26.1510 + .memitem { page-break-inside: avoid; } 26.1511 + #doc-content 26.1512 + { 26.1513 + margin-left:0 !important; 26.1514 + height:auto !important; 26.1515 + width:auto !important; 26.1516 + overflow:inherit; 26.1517 + display:inline; 26.1518 + } 26.1519 +} 26.1520 + 26.1521 +/* @group Markdown */ 26.1522 + 26.1523 +/* 26.1524 +table.markdownTable { 26.1525 + border-collapse:collapse; 26.1526 + margin-top: 4px; 26.1527 + margin-bottom: 4px; 26.1528 +} 26.1529 + 26.1530 +table.markdownTable td, table.markdownTable th { 26.1531 + border: 1px solid #2D4068; 26.1532 + padding: 3px 7px 2px; 26.1533 +} 26.1534 + 26.1535 +table.markdownTableHead tr { 26.1536 +} 26.1537 + 26.1538 +table.markdownTableBodyLeft td, table.markdownTable th { 26.1539 + border: 1px solid #2D4068; 26.1540 + padding: 3px 7px 2px; 26.1541 +} 26.1542 + 26.1543 +th.markdownTableHeadLeft th.markdownTableHeadRight th.markdownTableHeadCenter th.markdownTableHeadNone { 26.1544 + background-color: #374F7F; 26.1545 + color: #FFFFFF; 26.1546 + font-size: 110%; 26.1547 + padding-bottom: 4px; 26.1548 + padding-top: 5px; 26.1549 +} 26.1550 + 26.1551 +th.markdownTableHeadLeft { 26.1552 + text-align: left 26.1553 +} 26.1554 + 26.1555 +th.markdownTableHeadRight { 26.1556 + text-align: right 26.1557 +} 26.1558 + 26.1559 +th.markdownTableHeadCenter { 26.1560 + text-align: center 26.1561 +} 26.1562 +*/ 26.1563 + 26.1564 +table.markdownTable { 26.1565 + border-collapse:collapse; 26.1566 + margin-top: 4px; 26.1567 + margin-bottom: 4px; 26.1568 +} 26.1569 + 26.1570 +table.markdownTable td, table.markdownTable th { 26.1571 + border: 1px solid #2D4068; 26.1572 + padding: 3px 7px 2px; 26.1573 +} 26.1574 + 26.1575 +table.markdownTable tr { 26.1576 +} 26.1577 + 26.1578 +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { 26.1579 + background-color: #374F7F; 26.1580 + color: #FFFFFF; 26.1581 + font-size: 110%; 26.1582 + padding-bottom: 4px; 26.1583 + padding-top: 5px; 26.1584 +} 26.1585 + 26.1586 +th.markdownTableHeadLeft, td.markdownTableBodyLeft { 26.1587 + text-align: left 26.1588 +} 26.1589 + 26.1590 +th.markdownTableHeadRight, td.markdownTableBodyRight { 26.1591 + text-align: right 26.1592 +} 26.1593 + 26.1594 +th.markdownTableHeadCenter, td.markdownTableBodyCenter { 26.1595 + text-align: center 26.1596 +} 26.1597 + 26.1598 + 26.1599 +/* @end */
27.1 Binary file docs/api-2.1/doxygen.png has changed
28.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 28.2 +++ b/docs/api-2.1/dynsections.js Sat Feb 06 19:11:44 2021 +0100 28.3 @@ -0,0 +1,97 @@ 28.4 +function toggleVisibility(linkObj) 28.5 +{ 28.6 + var base = $(linkObj).attr('id'); 28.7 + var summary = $('#'+base+'-summary'); 28.8 + var content = $('#'+base+'-content'); 28.9 + var trigger = $('#'+base+'-trigger'); 28.10 + var src=$(trigger).attr('src'); 28.11 + if (content.is(':visible')===true) { 28.12 + content.hide(); 28.13 + summary.show(); 28.14 + $(linkObj).addClass('closed').removeClass('opened'); 28.15 + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); 28.16 + } else { 28.17 + content.show(); 28.18 + summary.hide(); 28.19 + $(linkObj).removeClass('closed').addClass('opened'); 28.20 + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); 28.21 + } 28.22 + return false; 28.23 +} 28.24 + 28.25 +function updateStripes() 28.26 +{ 28.27 + $('table.directory tr'). 28.28 + removeClass('even').filter(':visible:even').addClass('even'); 28.29 +} 28.30 + 28.31 +function toggleLevel(level) 28.32 +{ 28.33 + $('table.directory tr').each(function() { 28.34 + var l = this.id.split('_').length-1; 28.35 + var i = $('#img'+this.id.substring(3)); 28.36 + var a = $('#arr'+this.id.substring(3)); 28.37 + if (l<level+1) { 28.38 + i.removeClass('iconfopen iconfclosed').addClass('iconfopen'); 28.39 + a.html('▼'); 28.40 + $(this).show(); 28.41 + } else if (l==level+1) { 28.42 + i.removeClass('iconfclosed iconfopen').addClass('iconfclosed'); 28.43 + a.html('►'); 28.44 + $(this).show(); 28.45 + } else { 28.46 + $(this).hide(); 28.47 + } 28.48 + }); 28.49 + updateStripes(); 28.50 +} 28.51 + 28.52 +function toggleFolder(id) 28.53 +{ 28.54 + // the clicked row 28.55 + var currentRow = $('#row_'+id); 28.56 + 28.57 + // all rows after the clicked row 28.58 + var rows = currentRow.nextAll("tr"); 28.59 + 28.60 + var re = new RegExp('^row_'+id+'\\d+_$', "i"); //only one sub 28.61 + 28.62 + // only match elements AFTER this one (can't hide elements before) 28.63 + var childRows = rows.filter(function() { return this.id.match(re); }); 28.64 + 28.65 + // first row is visible we are HIDING 28.66 + if (childRows.filter(':first').is(':visible')===true) { 28.67 + // replace down arrow by right arrow for current row 28.68 + var currentRowSpans = currentRow.find("span"); 28.69 + currentRowSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed"); 28.70 + currentRowSpans.filter(".arrow").html('►'); 28.71 + rows.filter("[id^=row_"+id+"]").hide(); // hide all children 28.72 + } else { // we are SHOWING 28.73 + // replace right arrow by down arrow for current row 28.74 + var currentRowSpans = currentRow.find("span"); 28.75 + currentRowSpans.filter(".iconfclosed").removeClass("iconfclosed").addClass("iconfopen"); 28.76 + currentRowSpans.filter(".arrow").html('▼'); 28.77 + // replace down arrows by right arrows for child rows 28.78 + var childRowsSpans = childRows.find("span"); 28.79 + childRowsSpans.filter(".iconfopen").removeClass("iconfopen").addClass("iconfclosed"); 28.80 + childRowsSpans.filter(".arrow").html('►'); 28.81 + childRows.show(); //show all children 28.82 + } 28.83 + updateStripes(); 28.84 +} 28.85 + 28.86 + 28.87 +function toggleInherit(id) 28.88 +{ 28.89 + var rows = $('tr.inherit.'+id); 28.90 + var img = $('tr.inherit_header.'+id+' img'); 28.91 + var src = $(img).attr('src'); 28.92 + if (rows.filter(':first').is(':visible')===true) { 28.93 + rows.css('display','none'); 28.94 + $(img).attr('src',src.substring(0,src.length-8)+'closed.png'); 28.95 + } else { 28.96 + rows.css('display','table-row'); // using show() causes jump in firefox 28.97 + $(img).attr('src',src.substring(0,src.length-10)+'open.png'); 28.98 + } 28.99 +} 28.100 +
29.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 29.2 +++ b/docs/api-2.1/files.html Sat Feb 06 19:11:44 2021 +0100 29.3 @@ -0,0 +1,95 @@ 29.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 29.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 29.6 +<head> 29.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 29.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 29.9 +<meta name="generator" content="Doxygen 1.8.13"/> 29.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 29.11 +<title>ucx: File List</title> 29.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 29.13 +<script type="text/javascript" src="jquery.js"></script> 29.14 +<script type="text/javascript" src="dynsections.js"></script> 29.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 29.16 +<script type="text/javascript" src="search/searchdata.js"></script> 29.17 +<script type="text/javascript" src="search/search.js"></script> 29.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 29.19 +</head> 29.20 +<body> 29.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 29.22 +<div id="titlearea"> 29.23 +<table cellspacing="0" cellpadding="0"> 29.24 + <tbody> 29.25 + <tr style="height: 56px;"> 29.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 29.27 + <td id="projectalign" style="padding-left: 0.5em;"> 29.28 + <div id="projectname">ucx 29.29 + </div> 29.30 + <div id="projectbrief">UAP Common Extensions</div> 29.31 + </td> 29.32 + </tr> 29.33 + </tbody> 29.34 +</table> 29.35 +</div> 29.36 +<!-- end header part --> 29.37 +<!-- Generated by Doxygen 1.8.13 --> 29.38 +<script type="text/javascript"> 29.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 29.40 +</script> 29.41 +<script type="text/javascript" src="menudata.js"></script> 29.42 +<script type="text/javascript" src="menu.js"></script> 29.43 +<script type="text/javascript"> 29.44 +$(function() { 29.45 + initMenu('',true,false,'search.php','Search'); 29.46 + $(document).ready(function() { init_search(); }); 29.47 +}); 29.48 +</script> 29.49 +<div id="main-nav"></div> 29.50 +</div><!-- top --> 29.51 +<!-- window showing the filter options --> 29.52 +<div id="MSearchSelectWindow" 29.53 + onmouseover="return searchBox.OnSearchSelectShow()" 29.54 + onmouseout="return searchBox.OnSearchSelectHide()" 29.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 29.56 +</div> 29.57 + 29.58 +<!-- iframe showing the search results (closed by default) --> 29.59 +<div id="MSearchResultsWindow"> 29.60 +<iframe src="javascript:void(0)" frameborder="0" 29.61 + name="MSearchResults" id="MSearchResults"> 29.62 +</iframe> 29.63 +</div> 29.64 + 29.65 +<div class="header"> 29.66 + <div class="headertitle"> 29.67 +<div class="title">File List</div> </div> 29.68 +</div><!--header--> 29.69 +<div class="contents"> 29.70 +<div class="textblock">Here is a list of all documented files with brief descriptions:</div><div class="directory"> 29.71 +<div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory"> 29.72 +<tr id="row_0_" class="even"><td class="entry"><span style="width:0px;display:inline-block;"> </span><span id="arr_0_" class="arrow" onclick="toggleFolder('0_')">▼</span><span id="img_0_" class="iconfopen" onclick="toggleFolder('0_')"> </span><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html" target="_self">src</a></td><td class="desc"></td></tr> 29.73 +<tr id="row_0_0_"><td class="entry"><span style="width:16px;display:inline-block;"> </span><span id="arr_0_0_" class="arrow" onclick="toggleFolder('0_0_')">▼</span><span id="img_0_0_" class="iconfopen" onclick="toggleFolder('0_0_')"> </span><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html" target="_self">ucx</a></td><td class="desc"></td></tr> 29.74 +<tr id="row_0_0_0_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="allocator_8h_source.html"><span class="icondoc"></span></a><a class="el" href="allocator_8h.html" target="_self">allocator.h</a></td><td class="desc">Allocator for custom memory management </td></tr> 29.75 +<tr id="row_0_0_1_"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="array_8h_source.html"><span class="icondoc"></span></a><a class="el" href="array_8h.html" target="_self">array.h</a></td><td class="desc">Dynamically allocated array implementation </td></tr> 29.76 +<tr id="row_0_0_2_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="avl_8h_source.html"><span class="icondoc"></span></a><a class="el" href="avl_8h.html" target="_self">avl.h</a></td><td class="desc">AVL tree implementation </td></tr> 29.77 +<tr id="row_0_0_3_"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="buffer_8h_source.html"><span class="icondoc"></span></a><a class="el" href="buffer_8h.html" target="_self">buffer.h</a></td><td class="desc">Advanced buffer implementation </td></tr> 29.78 +<tr id="row_0_0_4_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="list_8h_source.html"><span class="icondoc"></span></a><a class="el" href="list_8h.html" target="_self">list.h</a></td><td class="desc">Doubly linked list implementation </td></tr> 29.79 +<tr id="row_0_0_5_"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="logging_8h_source.html"><span class="icondoc"></span></a><a class="el" href="logging_8h.html" target="_self">logging.h</a></td><td class="desc">Logging API </td></tr> 29.80 +<tr id="row_0_0_6_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="map_8h_source.html"><span class="icondoc"></span></a><a class="el" href="map_8h.html" target="_self">map.h</a></td><td class="desc">Hash map implementation </td></tr> 29.81 +<tr id="row_0_0_7_"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="mempool_8h_source.html"><span class="icondoc"></span></a><a class="el" href="mempool_8h.html" target="_self">mempool.h</a></td><td class="desc">Memory pool implementation </td></tr> 29.82 +<tr id="row_0_0_8_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="properties_8h_source.html"><span class="icondoc"></span></a><a class="el" href="properties_8h.html" target="_self">properties.h</a></td><td class="desc">Load / store utilities for properties files </td></tr> 29.83 +<tr id="row_0_0_9_"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="stack_8h_source.html"><span class="icondoc"></span></a><a class="el" href="stack_8h.html" target="_self">stack.h</a></td><td class="desc">Default stack memory allocation implementation </td></tr> 29.84 +<tr id="row_0_0_10_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="string_8h_source.html"><span class="icondoc"></span></a><a class="el" href="string_8h.html" target="_self">string.h</a></td><td class="desc">Bounded string implementation </td></tr> 29.85 +<tr id="row_0_0_11_"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="test_8h_source.html"><span class="icondoc"></span></a><a class="el" href="test_8h.html" target="_self">test.h</a></td><td class="desc">UCX Test Framework </td></tr> 29.86 +<tr id="row_0_0_12_" class="even"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="ucx_8h_source.html"><span class="icondoc"></span></a><a class="el" href="ucx_8h.html" target="_self">ucx.h</a></td><td class="desc">Main UCX Header providing most common definitions </td></tr> 29.87 +<tr id="row_0_0_13_"><td class="entry"><span style="width:48px;display:inline-block;"> </span><a href="utils_8h_source.html"><span class="icondoc"></span></a><a class="el" href="utils_8h.html" target="_self">utils.h</a></td><td class="desc">Compare, copy and printf functions </td></tr> 29.88 +</table> 29.89 +</div><!-- directory --> 29.90 +</div><!-- contents --> 29.91 +<!-- start footer part --> 29.92 +<hr class="footer"/><address class="footer"><small> 29.93 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 29.94 +<img class="footer" src="doxygen.png" alt="doxygen"/> 29.95 +</a> 1.8.13 29.96 +</small></address> 29.97 +</body> 29.98 +</html>
30.1 Binary file docs/api-2.1/folderclosed.png has changed
31.1 Binary file docs/api-2.1/folderopen.png has changed
32.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 32.2 +++ b/docs/api-2.1/functions.html Sat Feb 06 19:11:44 2021 +0100 32.3 @@ -0,0 +1,343 @@ 32.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 32.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 32.6 +<head> 32.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 32.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 32.9 +<meta name="generator" content="Doxygen 1.8.13"/> 32.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 32.11 +<title>ucx: Data Fields</title> 32.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 32.13 +<script type="text/javascript" src="jquery.js"></script> 32.14 +<script type="text/javascript" src="dynsections.js"></script> 32.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 32.16 +<script type="text/javascript" src="search/searchdata.js"></script> 32.17 +<script type="text/javascript" src="search/search.js"></script> 32.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 32.19 +</head> 32.20 +<body> 32.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 32.22 +<div id="titlearea"> 32.23 +<table cellspacing="0" cellpadding="0"> 32.24 + <tbody> 32.25 + <tr style="height: 56px;"> 32.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 32.27 + <td id="projectalign" style="padding-left: 0.5em;"> 32.28 + <div id="projectname">ucx 32.29 + </div> 32.30 + <div id="projectbrief">UAP Common Extensions</div> 32.31 + </td> 32.32 + </tr> 32.33 + </tbody> 32.34 +</table> 32.35 +</div> 32.36 +<!-- end header part --> 32.37 +<!-- Generated by Doxygen 1.8.13 --> 32.38 +<script type="text/javascript"> 32.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 32.40 +</script> 32.41 +<script type="text/javascript" src="menudata.js"></script> 32.42 +<script type="text/javascript" src="menu.js"></script> 32.43 +<script type="text/javascript"> 32.44 +$(function() { 32.45 + initMenu('',true,false,'search.php','Search'); 32.46 + $(document).ready(function() { init_search(); }); 32.47 +}); 32.48 +</script> 32.49 +<div id="main-nav"></div> 32.50 +</div><!-- top --> 32.51 +<!-- window showing the filter options --> 32.52 +<div id="MSearchSelectWindow" 32.53 + onmouseover="return searchBox.OnSearchSelectShow()" 32.54 + onmouseout="return searchBox.OnSearchSelectHide()" 32.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 32.56 +</div> 32.57 + 32.58 +<!-- iframe showing the search results (closed by default) --> 32.59 +<div id="MSearchResultsWindow"> 32.60 +<iframe src="javascript:void(0)" frameborder="0" 32.61 + name="MSearchResults" id="MSearchResults"> 32.62 +</iframe> 32.63 +</div> 32.64 + 32.65 +<div class="contents"> 32.66 +<div class="textblock">Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:</div> 32.67 + 32.68 +<h3><a id="index_a"></a>- a -</h3><ul> 32.69 +<li>allocator 32.70 +: <a class="el" href="structUcxArray.html#a2ef31303b7548b9aa8e2b9187e295212">UcxArray</a> 32.71 +, <a class="el" href="structUcxAVLTree.html#a30652776b540156ad54c7d52833e4e28">UcxAVLTree</a> 32.72 +, <a class="el" href="structUcxMap.html#a531f3e481c1c331cf037b916192e974d">UcxMap</a> 32.73 +, <a class="el" href="structUcxMempool.html#ac45fd1e9269399e4c434d6bdaa770d92">UcxMempool</a> 32.74 +, <a class="el" href="structUcxStack.html#a33cda4f6890ac56ab31701598bc1ae10">UcxStack</a> 32.75 +</li> 32.76 +</ul> 32.77 + 32.78 + 32.79 +<h3><a id="index_b"></a>- b -</h3><ul> 32.80 +<li>buffer 32.81 +: <a class="el" href="structUcxProperties.html#a6bb4d29686df41a0f42641ee15232bfd">UcxProperties</a> 32.82 +</li> 32.83 +<li>buflen 32.84 +: <a class="el" href="structUcxProperties.html#a4e7524434525267e29f493a25dcca6b5">UcxProperties</a> 32.85 +</li> 32.86 +</ul> 32.87 + 32.88 + 32.89 +<h3><a id="index_c"></a>- c -</h3><ul> 32.90 +<li>c 32.91 +: <a class="el" href="structucx__memchunk.html#ab86550503e5f019bfa61a1e91f1c40da">ucx_memchunk</a> 32.92 +</li> 32.93 +<li>calloc 32.94 +: <a class="el" href="structUcxAllocator.html#ab94ec1cba45cc4e7d81e1588a11cbb62">UcxAllocator</a> 32.95 +</li> 32.96 +<li>capacity 32.97 +: <a class="el" href="structUcxArray.html#a7ed074887908e45bde7e1fbc67b31c18">UcxArray</a> 32.98 +, <a class="el" href="structUcxBuffer.html#a385661894f3cee9c549bfe07a8b316bf">UcxBuffer</a> 32.99 +</li> 32.100 +<li>cmpfunc 32.101 +: <a class="el" href="structUcxAVLTree.html#a87aff25cb726cb9eb88eb815a10d1004">UcxAVLTree</a> 32.102 +</li> 32.103 +<li>comment1 32.104 +: <a class="el" href="structUcxProperties.html#afaa2e6a289fa6949b7b01df35fa5def8">UcxProperties</a> 32.105 +</li> 32.106 +<li>comment2 32.107 +: <a class="el" href="structUcxProperties.html#a9ea7ecb414ca8bc7bef62cdd19cc6363">UcxProperties</a> 32.108 +</li> 32.109 +<li>comment3 32.110 +: <a class="el" href="structUcxProperties.html#a5f3e561e32bac03e36a191a6940cca92">UcxProperties</a> 32.111 +</li> 32.112 +<li>count 32.113 +: <a class="el" href="structUcxMap.html#a14e9163f71f6c014dfa2103de70ae9cd">UcxMap</a> 32.114 +</li> 32.115 +<li>cur 32.116 +: <a class="el" href="structUcxMapIterator.html#af1fc40f899f37280adb5b85acf6e742f">UcxMapIterator</a> 32.117 +</li> 32.118 +</ul> 32.119 + 32.120 + 32.121 +<h3><a id="index_d"></a>- d -</h3><ul> 32.122 +<li>data 32.123 +: <a class="el" href="structUcxArray.html#a04d2b03d0a45af1fab19b4216602075a">UcxArray</a> 32.124 +, <a class="el" href="structUcxKey.html#a6176109f25b34f3fa92bcfbc8ae7a88c">UcxKey</a> 32.125 +, <a class="el" href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2">UcxList</a> 32.126 +, <a class="el" href="structUcxMapElement.html#abbd7f3bf5beef370f702d2d5bb07733c">UcxMapElement</a> 32.127 +, <a class="el" href="structUcxMapKey.html#ab71d1841e4f538628c00f782267fb6d5">UcxMapKey</a> 32.128 +, <a class="el" href="structUcxMempool.html#ae98c1b0150bb119ee0a8506a6f310d6e">UcxMempool</a> 32.129 +</li> 32.130 +<li>dateformat 32.131 +: <a class="el" href="structUcxLogger.html#a086f75df0f6c81ec491f25c0a4d9262b">UcxLogger</a> 32.132 +</li> 32.133 +<li>delimiter 32.134 +: <a class="el" href="structUcxProperties.html#af6adb3f69616cf9d2bb5ea7b4d837ca5">UcxProperties</a> 32.135 +</li> 32.136 +<li>destructor 32.137 +: <a class="el" href="structucx__memchunk.html#ac7b5e3fda47b917d6fb2a1d7ea28447b">ucx_memchunk</a> 32.138 +, <a class="el" href="structucx__regdestr.html#acea2a3bb66909aa800a931ac8b0cce56">ucx_regdestr</a> 32.139 +</li> 32.140 +</ul> 32.141 + 32.142 + 32.143 +<h3><a id="index_e"></a>- e -</h3><ul> 32.144 +<li>elemsize 32.145 +: <a class="el" href="structUcxArray.html#ac4e9ecdf8a8d010644f6e44dfef8190f">UcxArray</a> 32.146 +</li> 32.147 +<li>error 32.148 +: <a class="el" href="structUcxProperties.html#a34f71a6ab6dcb6892e3b4eb802e75bff">UcxProperties</a> 32.149 +</li> 32.150 +</ul> 32.151 + 32.152 + 32.153 +<h3><a id="index_f"></a>- f -</h3><ul> 32.154 +<li>failure 32.155 +: <a class="el" href="structUcxTestSuite.html#abfd240541d1e956e49cde0ac36286951">UcxTestSuite</a> 32.156 +</li> 32.157 +<li>flags 32.158 +: <a class="el" href="structUcxBuffer.html#ac642e07b0a03be5aac48eb4aa5bec2f7">UcxBuffer</a> 32.159 +</li> 32.160 +<li>free 32.161 +: <a class="el" href="structUcxAllocator.html#aecce1840378ed53f1002190f4f87026f">UcxAllocator</a> 32.162 +</li> 32.163 +</ul> 32.164 + 32.165 + 32.166 +<h3><a id="index_h"></a>- h -</h3><ul> 32.167 +<li>hash 32.168 +: <a class="el" href="structUcxKey.html#aac9d372ac34a4cbd8459e2b04e505752">UcxKey</a> 32.169 +, <a class="el" href="structUcxMapKey.html#a34c1f8fec98174583944fffd30e7c913">UcxMapKey</a> 32.170 +</li> 32.171 +<li>height 32.172 +: <a class="el" href="structUcxAVLNode.html#af129fd32863a7c35e82c5cd9d11dc95a">UcxAVLNode</a> 32.173 +</li> 32.174 +</ul> 32.175 + 32.176 + 32.177 +<h3><a id="index_i"></a>- i -</h3><ul> 32.178 +<li>index 32.179 +: <a class="el" href="structUcxMapIterator.html#ac2376545c8816dd6895de4995e558c65">UcxMapIterator</a> 32.180 +</li> 32.181 +</ul> 32.182 + 32.183 + 32.184 +<h3><a id="index_k"></a>- k -</h3><ul> 32.185 +<li>key 32.186 +: <a class="el" href="structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6">UcxAVLNode</a> 32.187 +, <a class="el" href="structUcxMapElement.html#aa446141b708e106e2c8de1303318187c">UcxMapElement</a> 32.188 +</li> 32.189 +</ul> 32.190 + 32.191 + 32.192 +<h3><a id="index_l"></a>- l -</h3><ul> 32.193 +<li>left 32.194 +: <a class="el" href="structUcxAVLNode.html#ad3a1c733f2c1cc81ac527f846fc24b9c">UcxAVLNode</a> 32.195 +</li> 32.196 +<li>len 32.197 +: <a class="el" href="structUcxKey.html#abef01de37f355688f2ac797d2c280683">UcxKey</a> 32.198 +, <a class="el" href="structUcxMapKey.html#a504d46caa45c79cd87ff8cd835654270">UcxMapKey</a> 32.199 +</li> 32.200 +<li>length 32.201 +: <a class="el" href="structscstr__t.html#aaa0229f64f1057b6f65adededaa5a172">scstr_t</a> 32.202 +, <a class="el" href="structsstr__t.html#a5cf571708cdff92e45f08458f2b98229">sstr_t</a> 32.203 +</li> 32.204 +<li>level 32.205 +: <a class="el" href="structUcxLogger.html#a2e0ee94c25b2307096c7970280d189cd">UcxLogger</a> 32.206 +</li> 32.207 +<li>levels 32.208 +: <a class="el" href="structUcxLogger.html#a187129f7bc6e5064b3d92a5f1217f396">UcxLogger</a> 32.209 +</li> 32.210 +</ul> 32.211 + 32.212 + 32.213 +<h3><a id="index_m"></a>- m -</h3><ul> 32.214 +<li>malloc 32.215 +: <a class="el" href="structUcxAllocator.html#a013376172be39ed54f77c4be6898845a">UcxAllocator</a> 32.216 +</li> 32.217 +<li>map 32.218 +: <a class="el" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790">UcxMap</a> 32.219 +, <a class="el" href="structUcxMapIterator.html#af88d6e22547d09fe1d665dd650dcdb95">UcxMapIterator</a> 32.220 +</li> 32.221 +<li>mask 32.222 +: <a class="el" href="structUcxLogger.html#a1de0db2e02dcf03366268f6943f8b97c">UcxLogger</a> 32.223 +</li> 32.224 +</ul> 32.225 + 32.226 + 32.227 +<h3><a id="index_n"></a>- n -</h3><ul> 32.228 +<li>ndata 32.229 +: <a class="el" href="structUcxMempool.html#aa3a73ab231e1bc207d526f46f1c1e23a">UcxMempool</a> 32.230 +</li> 32.231 +<li>next 32.232 +: <a class="el" href="structUcxList.html#a82a1818f1abf765b026fa91478569a8f">UcxList</a> 32.233 +, <a class="el" href="structUcxMapElement.html#a99fe8188b0889201d70ff5f922deef51">UcxMapElement</a> 32.234 +, <a class="el" href="structUcxTestList.html#aeebb80ff75d9f6f82ab6dc2641a3c74e">UcxTestList</a> 32.235 +</li> 32.236 +</ul> 32.237 + 32.238 + 32.239 +<h3><a id="index_p"></a>- p -</h3><ul> 32.240 +<li>parent 32.241 +: <a class="el" href="structUcxAVLNode.html#afc4e3b4f452aa2d91cabb2135b9d42f7">UcxAVLNode</a> 32.242 +</li> 32.243 +<li>pool 32.244 +: <a class="el" href="structUcxAllocator.html#a1b78012998d1c28be86dc595f8f0aac9">UcxAllocator</a> 32.245 +</li> 32.246 +<li>pos 32.247 +: <a class="el" href="structUcxBuffer.html#a7a64288f002cf62b492e2ea49c79615c">UcxBuffer</a> 32.248 +, <a class="el" href="structUcxProperties.html#addd36ac8e5e42241c0a57453633970db">UcxProperties</a> 32.249 +</li> 32.250 +<li>prev 32.251 +: <a class="el" href="structucx__stack__metadata.html#ad46d2e8e5b0acf05f2def41d451c5579">ucx_stack_metadata</a> 32.252 +, <a class="el" href="structUcxList.html#a0f1fddce9088b9c1414745d0b1b5c08b">UcxList</a> 32.253 +</li> 32.254 +<li>ptr 32.255 +: <a class="el" href="structscstr__t.html#a305fd48934b474a9bf4a40869030e391">scstr_t</a> 32.256 +, <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0">sstr_t</a> 32.257 +, <a class="el" href="structucx__regdestr.html#aac0e9ec8df4aab08728b4f8292b5f5e7">ucx_regdestr</a> 32.258 +</li> 32.259 +</ul> 32.260 + 32.261 + 32.262 +<h3><a id="index_r"></a>- r -</h3><ul> 32.263 +<li>realloc 32.264 +: <a class="el" href="structUcxAllocator.html#a3550e3847f31d9e9ce3ffcb0d3440c15">UcxAllocator</a> 32.265 +</li> 32.266 +<li>right 32.267 +: <a class="el" href="structUcxAVLNode.html#a7cbaa31dba8c7a89f4f8f7905f6fd238">UcxAVLNode</a> 32.268 +</li> 32.269 +<li>root 32.270 +: <a class="el" href="structUcxAVLTree.html#a393a8fc99eb2c290d3cb67170081d742">UcxAVLTree</a> 32.271 +</li> 32.272 +</ul> 32.273 + 32.274 + 32.275 +<h3><a id="index_s"></a>- s -</h3><ul> 32.276 +<li>size 32.277 +: <a class="el" href="structucx__stack__metadata.html#ae2a2848b721cfa44a7e963484c5e4b28">ucx_stack_metadata</a> 32.278 +, <a class="el" href="structUcxArray.html#a20c11f2c9048cda80062842b7c094e20">UcxArray</a> 32.279 +, <a class="el" href="structUcxBuffer.html#aec0aea8325394951d5ad4a9fbb8e1ac7">UcxBuffer</a> 32.280 +, <a class="el" href="structUcxMap.html#afe120846b26d99580a7ff1276464e838">UcxMap</a> 32.281 +, <a class="el" href="structUcxMempool.html#a304729986f2894971d0469e71e196bf0">UcxMempool</a> 32.282 +, <a class="el" href="structUcxStack.html#a4df86b1917bfc3bbf760220870638143">UcxStack</a> 32.283 +</li> 32.284 +<li>space 32.285 +: <a class="el" href="structUcxBuffer.html#a1a5076e85acb84b715a53bc0f37fb721">UcxBuffer</a> 32.286 +, <a class="el" href="structUcxStack.html#af64d528744bf3a47fec87d2e45d2992f">UcxStack</a> 32.287 +</li> 32.288 +<li>stream 32.289 +: <a class="el" href="structUcxLogger.html#a33fddf4791e8d49e479ecc78bf5d1b9e">UcxLogger</a> 32.290 +</li> 32.291 +<li>success 32.292 +: <a class="el" href="structUcxTestSuite.html#a6cefa870a3c2e38d6ee682e38643dbbb">UcxTestSuite</a> 32.293 +</li> 32.294 +</ul> 32.295 + 32.296 + 32.297 +<h3><a id="index_t"></a>- t -</h3><ul> 32.298 +<li>test 32.299 +: <a class="el" href="structUcxTestList.html#a6022faa52e772b073141ca0a2f5a56c9">UcxTestList</a> 32.300 +</li> 32.301 +<li>tests 32.302 +: <a class="el" href="structUcxTestSuite.html#a630677a70ebc2c3296704cda3196492b">UcxTestSuite</a> 32.303 +</li> 32.304 +<li>tmp 32.305 +: <a class="el" href="structUcxProperties.html#a68556d4260153f58dde44e4c365edce6">UcxProperties</a> 32.306 +</li> 32.307 +<li>tmpcap 32.308 +: <a class="el" href="structUcxProperties.html#a5af10131ea9f679b4ee174499f92e210">UcxProperties</a> 32.309 +</li> 32.310 +<li>tmplen 32.311 +: <a class="el" href="structUcxProperties.html#a8a81853d5903bee2f4e1fa53fdffae6e">UcxProperties</a> 32.312 +</li> 32.313 +<li>top 32.314 +: <a class="el" href="structUcxStack.html#af0ff6f58edce469f17683013b86ade27">UcxStack</a> 32.315 +</li> 32.316 +</ul> 32.317 + 32.318 + 32.319 +<h3><a id="index_u"></a>- u -</h3><ul> 32.320 +<li>userdata 32.321 +: <a class="el" href="structUcxAVLTree.html#ae92a3bfad3fe33c8dcbdad85112f83fd">UcxAVLTree</a> 32.322 +</li> 32.323 +</ul> 32.324 + 32.325 + 32.326 +<h3><a id="index_v"></a>- v -</h3><ul> 32.327 +<li>value 32.328 +: <a class="el" href="structUcxAVLNode.html#a302501b8c04c3fde668fe72249871258">UcxAVLNode</a> 32.329 +</li> 32.330 +</ul> 32.331 + 32.332 + 32.333 +<h3><a id="index_w"></a>- w -</h3><ul> 32.334 +<li>writer 32.335 +: <a class="el" href="structUcxLogger.html#ada13bba090a9dc4f8d6cd9be73c60930">UcxLogger</a> 32.336 +</li> 32.337 +</ul> 32.338 +</div><!-- contents --> 32.339 +<!-- start footer part --> 32.340 +<hr class="footer"/><address class="footer"><small> 32.341 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 32.342 +<img class="footer" src="doxygen.png" alt="doxygen"/> 32.343 +</a> 1.8.13 32.344 +</small></address> 32.345 +</body> 32.346 +</html>
33.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 33.2 +++ b/docs/api-2.1/functions_vars.html Sat Feb 06 19:11:44 2021 +0100 33.3 @@ -0,0 +1,343 @@ 33.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 33.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 33.6 +<head> 33.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 33.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 33.9 +<meta name="generator" content="Doxygen 1.8.13"/> 33.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 33.11 +<title>ucx: Data Fields - Variables</title> 33.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 33.13 +<script type="text/javascript" src="jquery.js"></script> 33.14 +<script type="text/javascript" src="dynsections.js"></script> 33.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 33.16 +<script type="text/javascript" src="search/searchdata.js"></script> 33.17 +<script type="text/javascript" src="search/search.js"></script> 33.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 33.19 +</head> 33.20 +<body> 33.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 33.22 +<div id="titlearea"> 33.23 +<table cellspacing="0" cellpadding="0"> 33.24 + <tbody> 33.25 + <tr style="height: 56px;"> 33.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 33.27 + <td id="projectalign" style="padding-left: 0.5em;"> 33.28 + <div id="projectname">ucx 33.29 + </div> 33.30 + <div id="projectbrief">UAP Common Extensions</div> 33.31 + </td> 33.32 + </tr> 33.33 + </tbody> 33.34 +</table> 33.35 +</div> 33.36 +<!-- end header part --> 33.37 +<!-- Generated by Doxygen 1.8.13 --> 33.38 +<script type="text/javascript"> 33.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 33.40 +</script> 33.41 +<script type="text/javascript" src="menudata.js"></script> 33.42 +<script type="text/javascript" src="menu.js"></script> 33.43 +<script type="text/javascript"> 33.44 +$(function() { 33.45 + initMenu('',true,false,'search.php','Search'); 33.46 + $(document).ready(function() { init_search(); }); 33.47 +}); 33.48 +</script> 33.49 +<div id="main-nav"></div> 33.50 +</div><!-- top --> 33.51 +<!-- window showing the filter options --> 33.52 +<div id="MSearchSelectWindow" 33.53 + onmouseover="return searchBox.OnSearchSelectShow()" 33.54 + onmouseout="return searchBox.OnSearchSelectHide()" 33.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 33.56 +</div> 33.57 + 33.58 +<!-- iframe showing the search results (closed by default) --> 33.59 +<div id="MSearchResultsWindow"> 33.60 +<iframe src="javascript:void(0)" frameborder="0" 33.61 + name="MSearchResults" id="MSearchResults"> 33.62 +</iframe> 33.63 +</div> 33.64 + 33.65 +<div class="contents"> 33.66 +  33.67 + 33.68 +<h3><a id="index_a"></a>- a -</h3><ul> 33.69 +<li>allocator 33.70 +: <a class="el" href="structUcxArray.html#a2ef31303b7548b9aa8e2b9187e295212">UcxArray</a> 33.71 +, <a class="el" href="structUcxAVLTree.html#a30652776b540156ad54c7d52833e4e28">UcxAVLTree</a> 33.72 +, <a class="el" href="structUcxMap.html#a531f3e481c1c331cf037b916192e974d">UcxMap</a> 33.73 +, <a class="el" href="structUcxMempool.html#ac45fd1e9269399e4c434d6bdaa770d92">UcxMempool</a> 33.74 +, <a class="el" href="structUcxStack.html#a33cda4f6890ac56ab31701598bc1ae10">UcxStack</a> 33.75 +</li> 33.76 +</ul> 33.77 + 33.78 + 33.79 +<h3><a id="index_b"></a>- b -</h3><ul> 33.80 +<li>buffer 33.81 +: <a class="el" href="structUcxProperties.html#a6bb4d29686df41a0f42641ee15232bfd">UcxProperties</a> 33.82 +</li> 33.83 +<li>buflen 33.84 +: <a class="el" href="structUcxProperties.html#a4e7524434525267e29f493a25dcca6b5">UcxProperties</a> 33.85 +</li> 33.86 +</ul> 33.87 + 33.88 + 33.89 +<h3><a id="index_c"></a>- c -</h3><ul> 33.90 +<li>c 33.91 +: <a class="el" href="structucx__memchunk.html#ab86550503e5f019bfa61a1e91f1c40da">ucx_memchunk</a> 33.92 +</li> 33.93 +<li>calloc 33.94 +: <a class="el" href="structUcxAllocator.html#ab94ec1cba45cc4e7d81e1588a11cbb62">UcxAllocator</a> 33.95 +</li> 33.96 +<li>capacity 33.97 +: <a class="el" href="structUcxArray.html#a7ed074887908e45bde7e1fbc67b31c18">UcxArray</a> 33.98 +, <a class="el" href="structUcxBuffer.html#a385661894f3cee9c549bfe07a8b316bf">UcxBuffer</a> 33.99 +</li> 33.100 +<li>cmpfunc 33.101 +: <a class="el" href="structUcxAVLTree.html#a87aff25cb726cb9eb88eb815a10d1004">UcxAVLTree</a> 33.102 +</li> 33.103 +<li>comment1 33.104 +: <a class="el" href="structUcxProperties.html#afaa2e6a289fa6949b7b01df35fa5def8">UcxProperties</a> 33.105 +</li> 33.106 +<li>comment2 33.107 +: <a class="el" href="structUcxProperties.html#a9ea7ecb414ca8bc7bef62cdd19cc6363">UcxProperties</a> 33.108 +</li> 33.109 +<li>comment3 33.110 +: <a class="el" href="structUcxProperties.html#a5f3e561e32bac03e36a191a6940cca92">UcxProperties</a> 33.111 +</li> 33.112 +<li>count 33.113 +: <a class="el" href="structUcxMap.html#a14e9163f71f6c014dfa2103de70ae9cd">UcxMap</a> 33.114 +</li> 33.115 +<li>cur 33.116 +: <a class="el" href="structUcxMapIterator.html#af1fc40f899f37280adb5b85acf6e742f">UcxMapIterator</a> 33.117 +</li> 33.118 +</ul> 33.119 + 33.120 + 33.121 +<h3><a id="index_d"></a>- d -</h3><ul> 33.122 +<li>data 33.123 +: <a class="el" href="structUcxArray.html#a04d2b03d0a45af1fab19b4216602075a">UcxArray</a> 33.124 +, <a class="el" href="structUcxKey.html#a6176109f25b34f3fa92bcfbc8ae7a88c">UcxKey</a> 33.125 +, <a class="el" href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2">UcxList</a> 33.126 +, <a class="el" href="structUcxMapElement.html#abbd7f3bf5beef370f702d2d5bb07733c">UcxMapElement</a> 33.127 +, <a class="el" href="structUcxMapKey.html#ab71d1841e4f538628c00f782267fb6d5">UcxMapKey</a> 33.128 +, <a class="el" href="structUcxMempool.html#ae98c1b0150bb119ee0a8506a6f310d6e">UcxMempool</a> 33.129 +</li> 33.130 +<li>dateformat 33.131 +: <a class="el" href="structUcxLogger.html#a086f75df0f6c81ec491f25c0a4d9262b">UcxLogger</a> 33.132 +</li> 33.133 +<li>delimiter 33.134 +: <a class="el" href="structUcxProperties.html#af6adb3f69616cf9d2bb5ea7b4d837ca5">UcxProperties</a> 33.135 +</li> 33.136 +<li>destructor 33.137 +: <a class="el" href="structucx__memchunk.html#ac7b5e3fda47b917d6fb2a1d7ea28447b">ucx_memchunk</a> 33.138 +, <a class="el" href="structucx__regdestr.html#acea2a3bb66909aa800a931ac8b0cce56">ucx_regdestr</a> 33.139 +</li> 33.140 +</ul> 33.141 + 33.142 + 33.143 +<h3><a id="index_e"></a>- e -</h3><ul> 33.144 +<li>elemsize 33.145 +: <a class="el" href="structUcxArray.html#ac4e9ecdf8a8d010644f6e44dfef8190f">UcxArray</a> 33.146 +</li> 33.147 +<li>error 33.148 +: <a class="el" href="structUcxProperties.html#a34f71a6ab6dcb6892e3b4eb802e75bff">UcxProperties</a> 33.149 +</li> 33.150 +</ul> 33.151 + 33.152 + 33.153 +<h3><a id="index_f"></a>- f -</h3><ul> 33.154 +<li>failure 33.155 +: <a class="el" href="structUcxTestSuite.html#abfd240541d1e956e49cde0ac36286951">UcxTestSuite</a> 33.156 +</li> 33.157 +<li>flags 33.158 +: <a class="el" href="structUcxBuffer.html#ac642e07b0a03be5aac48eb4aa5bec2f7">UcxBuffer</a> 33.159 +</li> 33.160 +<li>free 33.161 +: <a class="el" href="structUcxAllocator.html#aecce1840378ed53f1002190f4f87026f">UcxAllocator</a> 33.162 +</li> 33.163 +</ul> 33.164 + 33.165 + 33.166 +<h3><a id="index_h"></a>- h -</h3><ul> 33.167 +<li>hash 33.168 +: <a class="el" href="structUcxKey.html#aac9d372ac34a4cbd8459e2b04e505752">UcxKey</a> 33.169 +, <a class="el" href="structUcxMapKey.html#a34c1f8fec98174583944fffd30e7c913">UcxMapKey</a> 33.170 +</li> 33.171 +<li>height 33.172 +: <a class="el" href="structUcxAVLNode.html#af129fd32863a7c35e82c5cd9d11dc95a">UcxAVLNode</a> 33.173 +</li> 33.174 +</ul> 33.175 + 33.176 + 33.177 +<h3><a id="index_i"></a>- i -</h3><ul> 33.178 +<li>index 33.179 +: <a class="el" href="structUcxMapIterator.html#ac2376545c8816dd6895de4995e558c65">UcxMapIterator</a> 33.180 +</li> 33.181 +</ul> 33.182 + 33.183 + 33.184 +<h3><a id="index_k"></a>- k -</h3><ul> 33.185 +<li>key 33.186 +: <a class="el" href="structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6">UcxAVLNode</a> 33.187 +, <a class="el" href="structUcxMapElement.html#aa446141b708e106e2c8de1303318187c">UcxMapElement</a> 33.188 +</li> 33.189 +</ul> 33.190 + 33.191 + 33.192 +<h3><a id="index_l"></a>- l -</h3><ul> 33.193 +<li>left 33.194 +: <a class="el" href="structUcxAVLNode.html#ad3a1c733f2c1cc81ac527f846fc24b9c">UcxAVLNode</a> 33.195 +</li> 33.196 +<li>len 33.197 +: <a class="el" href="structUcxKey.html#abef01de37f355688f2ac797d2c280683">UcxKey</a> 33.198 +, <a class="el" href="structUcxMapKey.html#a504d46caa45c79cd87ff8cd835654270">UcxMapKey</a> 33.199 +</li> 33.200 +<li>length 33.201 +: <a class="el" href="structscstr__t.html#aaa0229f64f1057b6f65adededaa5a172">scstr_t</a> 33.202 +, <a class="el" href="structsstr__t.html#a5cf571708cdff92e45f08458f2b98229">sstr_t</a> 33.203 +</li> 33.204 +<li>level 33.205 +: <a class="el" href="structUcxLogger.html#a2e0ee94c25b2307096c7970280d189cd">UcxLogger</a> 33.206 +</li> 33.207 +<li>levels 33.208 +: <a class="el" href="structUcxLogger.html#a187129f7bc6e5064b3d92a5f1217f396">UcxLogger</a> 33.209 +</li> 33.210 +</ul> 33.211 + 33.212 + 33.213 +<h3><a id="index_m"></a>- m -</h3><ul> 33.214 +<li>malloc 33.215 +: <a class="el" href="structUcxAllocator.html#a013376172be39ed54f77c4be6898845a">UcxAllocator</a> 33.216 +</li> 33.217 +<li>map 33.218 +: <a class="el" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790">UcxMap</a> 33.219 +, <a class="el" href="structUcxMapIterator.html#af88d6e22547d09fe1d665dd650dcdb95">UcxMapIterator</a> 33.220 +</li> 33.221 +<li>mask 33.222 +: <a class="el" href="structUcxLogger.html#a1de0db2e02dcf03366268f6943f8b97c">UcxLogger</a> 33.223 +</li> 33.224 +</ul> 33.225 + 33.226 + 33.227 +<h3><a id="index_n"></a>- n -</h3><ul> 33.228 +<li>ndata 33.229 +: <a class="el" href="structUcxMempool.html#aa3a73ab231e1bc207d526f46f1c1e23a">UcxMempool</a> 33.230 +</li> 33.231 +<li>next 33.232 +: <a class="el" href="structUcxList.html#a82a1818f1abf765b026fa91478569a8f">UcxList</a> 33.233 +, <a class="el" href="structUcxMapElement.html#a99fe8188b0889201d70ff5f922deef51">UcxMapElement</a> 33.234 +, <a class="el" href="structUcxTestList.html#aeebb80ff75d9f6f82ab6dc2641a3c74e">UcxTestList</a> 33.235 +</li> 33.236 +</ul> 33.237 + 33.238 + 33.239 +<h3><a id="index_p"></a>- p -</h3><ul> 33.240 +<li>parent 33.241 +: <a class="el" href="structUcxAVLNode.html#afc4e3b4f452aa2d91cabb2135b9d42f7">UcxAVLNode</a> 33.242 +</li> 33.243 +<li>pool 33.244 +: <a class="el" href="structUcxAllocator.html#a1b78012998d1c28be86dc595f8f0aac9">UcxAllocator</a> 33.245 +</li> 33.246 +<li>pos 33.247 +: <a class="el" href="structUcxBuffer.html#a7a64288f002cf62b492e2ea49c79615c">UcxBuffer</a> 33.248 +, <a class="el" href="structUcxProperties.html#addd36ac8e5e42241c0a57453633970db">UcxProperties</a> 33.249 +</li> 33.250 +<li>prev 33.251 +: <a class="el" href="structucx__stack__metadata.html#ad46d2e8e5b0acf05f2def41d451c5579">ucx_stack_metadata</a> 33.252 +, <a class="el" href="structUcxList.html#a0f1fddce9088b9c1414745d0b1b5c08b">UcxList</a> 33.253 +</li> 33.254 +<li>ptr 33.255 +: <a class="el" href="structscstr__t.html#a305fd48934b474a9bf4a40869030e391">scstr_t</a> 33.256 +, <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0">sstr_t</a> 33.257 +, <a class="el" href="structucx__regdestr.html#aac0e9ec8df4aab08728b4f8292b5f5e7">ucx_regdestr</a> 33.258 +</li> 33.259 +</ul> 33.260 + 33.261 + 33.262 +<h3><a id="index_r"></a>- r -</h3><ul> 33.263 +<li>realloc 33.264 +: <a class="el" href="structUcxAllocator.html#a3550e3847f31d9e9ce3ffcb0d3440c15">UcxAllocator</a> 33.265 +</li> 33.266 +<li>right 33.267 +: <a class="el" href="structUcxAVLNode.html#a7cbaa31dba8c7a89f4f8f7905f6fd238">UcxAVLNode</a> 33.268 +</li> 33.269 +<li>root 33.270 +: <a class="el" href="structUcxAVLTree.html#a393a8fc99eb2c290d3cb67170081d742">UcxAVLTree</a> 33.271 +</li> 33.272 +</ul> 33.273 + 33.274 + 33.275 +<h3><a id="index_s"></a>- s -</h3><ul> 33.276 +<li>size 33.277 +: <a class="el" href="structucx__stack__metadata.html#ae2a2848b721cfa44a7e963484c5e4b28">ucx_stack_metadata</a> 33.278 +, <a class="el" href="structUcxArray.html#a20c11f2c9048cda80062842b7c094e20">UcxArray</a> 33.279 +, <a class="el" href="structUcxBuffer.html#aec0aea8325394951d5ad4a9fbb8e1ac7">UcxBuffer</a> 33.280 +, <a class="el" href="structUcxMap.html#afe120846b26d99580a7ff1276464e838">UcxMap</a> 33.281 +, <a class="el" href="structUcxMempool.html#a304729986f2894971d0469e71e196bf0">UcxMempool</a> 33.282 +, <a class="el" href="structUcxStack.html#a4df86b1917bfc3bbf760220870638143">UcxStack</a> 33.283 +</li> 33.284 +<li>space 33.285 +: <a class="el" href="structUcxBuffer.html#a1a5076e85acb84b715a53bc0f37fb721">UcxBuffer</a> 33.286 +, <a class="el" href="structUcxStack.html#af64d528744bf3a47fec87d2e45d2992f">UcxStack</a> 33.287 +</li> 33.288 +<li>stream 33.289 +: <a class="el" href="structUcxLogger.html#a33fddf4791e8d49e479ecc78bf5d1b9e">UcxLogger</a> 33.290 +</li> 33.291 +<li>success 33.292 +: <a class="el" href="structUcxTestSuite.html#a6cefa870a3c2e38d6ee682e38643dbbb">UcxTestSuite</a> 33.293 +</li> 33.294 +</ul> 33.295 + 33.296 + 33.297 +<h3><a id="index_t"></a>- t -</h3><ul> 33.298 +<li>test 33.299 +: <a class="el" href="structUcxTestList.html#a6022faa52e772b073141ca0a2f5a56c9">UcxTestList</a> 33.300 +</li> 33.301 +<li>tests 33.302 +: <a class="el" href="structUcxTestSuite.html#a630677a70ebc2c3296704cda3196492b">UcxTestSuite</a> 33.303 +</li> 33.304 +<li>tmp 33.305 +: <a class="el" href="structUcxProperties.html#a68556d4260153f58dde44e4c365edce6">UcxProperties</a> 33.306 +</li> 33.307 +<li>tmpcap 33.308 +: <a class="el" href="structUcxProperties.html#a5af10131ea9f679b4ee174499f92e210">UcxProperties</a> 33.309 +</li> 33.310 +<li>tmplen 33.311 +: <a class="el" href="structUcxProperties.html#a8a81853d5903bee2f4e1fa53fdffae6e">UcxProperties</a> 33.312 +</li> 33.313 +<li>top 33.314 +: <a class="el" href="structUcxStack.html#af0ff6f58edce469f17683013b86ade27">UcxStack</a> 33.315 +</li> 33.316 +</ul> 33.317 + 33.318 + 33.319 +<h3><a id="index_u"></a>- u -</h3><ul> 33.320 +<li>userdata 33.321 +: <a class="el" href="structUcxAVLTree.html#ae92a3bfad3fe33c8dcbdad85112f83fd">UcxAVLTree</a> 33.322 +</li> 33.323 +</ul> 33.324 + 33.325 + 33.326 +<h3><a id="index_v"></a>- v -</h3><ul> 33.327 +<li>value 33.328 +: <a class="el" href="structUcxAVLNode.html#a302501b8c04c3fde668fe72249871258">UcxAVLNode</a> 33.329 +</li> 33.330 +</ul> 33.331 + 33.332 + 33.333 +<h3><a id="index_w"></a>- w -</h3><ul> 33.334 +<li>writer 33.335 +: <a class="el" href="structUcxLogger.html#ada13bba090a9dc4f8d6cd9be73c60930">UcxLogger</a> 33.336 +</li> 33.337 +</ul> 33.338 +</div><!-- contents --> 33.339 +<!-- start footer part --> 33.340 +<hr class="footer"/><address class="footer"><small> 33.341 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 33.342 +<img class="footer" src="doxygen.png" alt="doxygen"/> 33.343 +</a> 1.8.13 33.344 +</small></address> 33.345 +</body> 33.346 +</html>
34.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 34.2 +++ b/docs/api-2.1/globals.html Sat Feb 06 19:11:44 2021 +0100 34.3 @@ -0,0 +1,78 @@ 34.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 34.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 34.6 +<head> 34.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 34.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 34.9 +<meta name="generator" content="Doxygen 1.8.13"/> 34.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 34.11 +<title>ucx: Globals</title> 34.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 34.13 +<script type="text/javascript" src="jquery.js"></script> 34.14 +<script type="text/javascript" src="dynsections.js"></script> 34.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 34.16 +<script type="text/javascript" src="search/searchdata.js"></script> 34.17 +<script type="text/javascript" src="search/search.js"></script> 34.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 34.19 +</head> 34.20 +<body> 34.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 34.22 +<div id="titlearea"> 34.23 +<table cellspacing="0" cellpadding="0"> 34.24 + <tbody> 34.25 + <tr style="height: 56px;"> 34.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 34.27 + <td id="projectalign" style="padding-left: 0.5em;"> 34.28 + <div id="projectname">ucx 34.29 + </div> 34.30 + <div id="projectbrief">UAP Common Extensions</div> 34.31 + </td> 34.32 + </tr> 34.33 + </tbody> 34.34 +</table> 34.35 +</div> 34.36 +<!-- end header part --> 34.37 +<!-- Generated by Doxygen 1.8.13 --> 34.38 +<script type="text/javascript"> 34.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 34.40 +</script> 34.41 +<script type="text/javascript" src="menudata.js"></script> 34.42 +<script type="text/javascript" src="menu.js"></script> 34.43 +<script type="text/javascript"> 34.44 +$(function() { 34.45 + initMenu('',true,false,'search.php','Search'); 34.46 + $(document).ready(function() { init_search(); }); 34.47 +}); 34.48 +</script> 34.49 +<div id="main-nav"></div> 34.50 +</div><!-- top --> 34.51 +<!-- window showing the filter options --> 34.52 +<div id="MSearchSelectWindow" 34.53 + onmouseover="return searchBox.OnSearchSelectShow()" 34.54 + onmouseout="return searchBox.OnSearchSelectHide()" 34.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 34.56 +</div> 34.57 + 34.58 +<!-- iframe showing the search results (closed by default) --> 34.59 +<div id="MSearchResultsWindow"> 34.60 +<iframe src="javascript:void(0)" frameborder="0" 34.61 + name="MSearchResults" id="MSearchResults"> 34.62 +</iframe> 34.63 +</div> 34.64 + 34.65 +<div class="contents"> 34.66 +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> 34.67 + 34.68 +<h3><a id="index__"></a>- _ -</h3><ul> 34.69 +<li>__FUNCTION__ 34.70 +: <a class="el" href="test_8h.html#a828bb1dfda1afd67ca795075903d227d">test.h</a> 34.71 +</li> 34.72 +</ul> 34.73 +</div><!-- contents --> 34.74 +<!-- start footer part --> 34.75 +<hr class="footer"/><address class="footer"><small> 34.76 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 34.77 +<img class="footer" src="doxygen.png" alt="doxygen"/> 34.78 +</a> 1.8.13 34.79 +</small></address> 34.80 +</body> 34.81 +</html>
35.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 35.2 +++ b/docs/api-2.1/globals_a.html Sat Feb 06 19:11:44 2021 +0100 35.3 @@ -0,0 +1,87 @@ 35.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 35.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 35.6 +<head> 35.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 35.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 35.9 +<meta name="generator" content="Doxygen 1.8.13"/> 35.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 35.11 +<title>ucx: Globals</title> 35.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 35.13 +<script type="text/javascript" src="jquery.js"></script> 35.14 +<script type="text/javascript" src="dynsections.js"></script> 35.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 35.16 +<script type="text/javascript" src="search/searchdata.js"></script> 35.17 +<script type="text/javascript" src="search/search.js"></script> 35.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 35.19 +</head> 35.20 +<body> 35.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 35.22 +<div id="titlearea"> 35.23 +<table cellspacing="0" cellpadding="0"> 35.24 + <tbody> 35.25 + <tr style="height: 56px;"> 35.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 35.27 + <td id="projectalign" style="padding-left: 0.5em;"> 35.28 + <div id="projectname">ucx 35.29 + </div> 35.30 + <div id="projectbrief">UAP Common Extensions</div> 35.31 + </td> 35.32 + </tr> 35.33 + </tbody> 35.34 +</table> 35.35 +</div> 35.36 +<!-- end header part --> 35.37 +<!-- Generated by Doxygen 1.8.13 --> 35.38 +<script type="text/javascript"> 35.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 35.40 +</script> 35.41 +<script type="text/javascript" src="menudata.js"></script> 35.42 +<script type="text/javascript" src="menu.js"></script> 35.43 +<script type="text/javascript"> 35.44 +$(function() { 35.45 + initMenu('',true,false,'search.php','Search'); 35.46 + $(document).ready(function() { init_search(); }); 35.47 +}); 35.48 +</script> 35.49 +<div id="main-nav"></div> 35.50 +</div><!-- top --> 35.51 +<!-- window showing the filter options --> 35.52 +<div id="MSearchSelectWindow" 35.53 + onmouseover="return searchBox.OnSearchSelectShow()" 35.54 + onmouseout="return searchBox.OnSearchSelectHide()" 35.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 35.56 +</div> 35.57 + 35.58 +<!-- iframe showing the search results (closed by default) --> 35.59 +<div id="MSearchResultsWindow"> 35.60 +<iframe src="javascript:void(0)" frameborder="0" 35.61 + name="MSearchResults" id="MSearchResults"> 35.62 +</iframe> 35.63 +</div> 35.64 + 35.65 +<div class="contents"> 35.66 +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> 35.67 + 35.68 +<h3><a id="index_a"></a>- a -</h3><ul> 35.69 +<li>alcalloc 35.70 +: <a class="el" href="allocator_8h.html#a8d71470816f88f78cb9a9686c57e1b10">allocator.h</a> 35.71 +</li> 35.72 +<li>alfree 35.73 +: <a class="el" href="allocator_8h.html#acd775785b54e97dc2b33a432c12c8fb2">allocator.h</a> 35.74 +</li> 35.75 +<li>almalloc 35.76 +: <a class="el" href="allocator_8h.html#ae1bc218fea8a35f4a3706f0beefcfb19">allocator.h</a> 35.77 +</li> 35.78 +<li>alrealloc 35.79 +: <a class="el" href="allocator_8h.html#a029ee5c9bcbb3f873571553f788c5820">allocator.h</a> 35.80 +</li> 35.81 +</ul> 35.82 +</div><!-- contents --> 35.83 +<!-- start footer part --> 35.84 +<hr class="footer"/><address class="footer"><small> 35.85 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 35.86 +<img class="footer" src="doxygen.png" alt="doxygen"/> 35.87 +</a> 1.8.13 35.88 +</small></address> 35.89 +</body> 35.90 +</html>
36.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 36.2 +++ b/docs/api-2.1/globals_c.html Sat Feb 06 19:11:44 2021 +0100 36.3 @@ -0,0 +1,81 @@ 36.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 36.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 36.6 +<head> 36.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 36.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 36.9 +<meta name="generator" content="Doxygen 1.8.13"/> 36.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 36.11 +<title>ucx: Globals</title> 36.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 36.13 +<script type="text/javascript" src="jquery.js"></script> 36.14 +<script type="text/javascript" src="dynsections.js"></script> 36.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 36.16 +<script type="text/javascript" src="search/searchdata.js"></script> 36.17 +<script type="text/javascript" src="search/search.js"></script> 36.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 36.19 +</head> 36.20 +<body> 36.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 36.22 +<div id="titlearea"> 36.23 +<table cellspacing="0" cellpadding="0"> 36.24 + <tbody> 36.25 + <tr style="height: 56px;"> 36.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 36.27 + <td id="projectalign" style="padding-left: 0.5em;"> 36.28 + <div id="projectname">ucx 36.29 + </div> 36.30 + <div id="projectbrief">UAP Common Extensions</div> 36.31 + </td> 36.32 + </tr> 36.33 + </tbody> 36.34 +</table> 36.35 +</div> 36.36 +<!-- end header part --> 36.37 +<!-- Generated by Doxygen 1.8.13 --> 36.38 +<script type="text/javascript"> 36.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 36.40 +</script> 36.41 +<script type="text/javascript" src="menudata.js"></script> 36.42 +<script type="text/javascript" src="menu.js"></script> 36.43 +<script type="text/javascript"> 36.44 +$(function() { 36.45 + initMenu('',true,false,'search.php','Search'); 36.46 + $(document).ready(function() { init_search(); }); 36.47 +}); 36.48 +</script> 36.49 +<div id="main-nav"></div> 36.50 +</div><!-- top --> 36.51 +<!-- window showing the filter options --> 36.52 +<div id="MSearchSelectWindow" 36.53 + onmouseover="return searchBox.OnSearchSelectShow()" 36.54 + onmouseout="return searchBox.OnSearchSelectHide()" 36.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 36.56 +</div> 36.57 + 36.58 +<!-- iframe showing the search results (closed by default) --> 36.59 +<div id="MSearchResultsWindow"> 36.60 +<iframe src="javascript:void(0)" frameborder="0" 36.61 + name="MSearchResults" id="MSearchResults"> 36.62 +</iframe> 36.63 +</div> 36.64 + 36.65 +<div class="contents"> 36.66 +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> 36.67 + 36.68 +<h3><a id="index_c"></a>- c -</h3><ul> 36.69 +<li>cmp_func 36.70 +: <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">ucx.h</a> 36.71 +</li> 36.72 +<li>copy_func 36.73 +: <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">ucx.h</a> 36.74 +</li> 36.75 +</ul> 36.76 +</div><!-- contents --> 36.77 +<!-- start footer part --> 36.78 +<hr class="footer"/><address class="footer"><small> 36.79 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 36.80 +<img class="footer" src="doxygen.png" alt="doxygen"/> 36.81 +</a> 1.8.13 36.82 +</small></address> 36.83 +</body> 36.84 +</html>
37.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 37.2 +++ b/docs/api-2.1/globals_d.html Sat Feb 06 19:11:44 2021 +0100 37.3 @@ -0,0 +1,78 @@ 37.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 37.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 37.6 +<head> 37.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 37.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 37.9 +<meta name="generator" content="Doxygen 1.8.13"/> 37.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 37.11 +<title>ucx: Globals</title> 37.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 37.13 +<script type="text/javascript" src="jquery.js"></script> 37.14 +<script type="text/javascript" src="dynsections.js"></script> 37.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 37.16 +<script type="text/javascript" src="search/searchdata.js"></script> 37.17 +<script type="text/javascript" src="search/search.js"></script> 37.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 37.19 +</head> 37.20 +<body> 37.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 37.22 +<div id="titlearea"> 37.23 +<table cellspacing="0" cellpadding="0"> 37.24 + <tbody> 37.25 + <tr style="height: 56px;"> 37.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 37.27 + <td id="projectalign" style="padding-left: 0.5em;"> 37.28 + <div id="projectname">ucx 37.29 + </div> 37.30 + <div id="projectbrief">UAP Common Extensions</div> 37.31 + </td> 37.32 + </tr> 37.33 + </tbody> 37.34 +</table> 37.35 +</div> 37.36 +<!-- end header part --> 37.37 +<!-- Generated by Doxygen 1.8.13 --> 37.38 +<script type="text/javascript"> 37.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 37.40 +</script> 37.41 +<script type="text/javascript" src="menudata.js"></script> 37.42 +<script type="text/javascript" src="menu.js"></script> 37.43 +<script type="text/javascript"> 37.44 +$(function() { 37.45 + initMenu('',true,false,'search.php','Search'); 37.46 + $(document).ready(function() { init_search(); }); 37.47 +}); 37.48 +</script> 37.49 +<div id="main-nav"></div> 37.50 +</div><!-- top --> 37.51 +<!-- window showing the filter options --> 37.52 +<div id="MSearchSelectWindow" 37.53 + onmouseover="return searchBox.OnSearchSelectShow()" 37.54 + onmouseout="return searchBox.OnSearchSelectHide()" 37.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 37.56 +</div> 37.57 + 37.58 +<!-- iframe showing the search results (closed by default) --> 37.59 +<div id="MSearchResultsWindow"> 37.60 +<iframe src="javascript:void(0)" frameborder="0" 37.61 + name="MSearchResults" id="MSearchResults"> 37.62 +</iframe> 37.63 +</div> 37.64 + 37.65 +<div class="contents"> 37.66 +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> 37.67 + 37.68 +<h3><a id="index_d"></a>- d -</h3><ul> 37.69 +<li>distance_func 37.70 +: <a class="el" href="ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9">ucx.h</a> 37.71 +</li> 37.72 +</ul> 37.73 +</div><!-- contents --> 37.74 +<!-- start footer part --> 37.75 +<hr class="footer"/><address class="footer"><small> 37.76 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 37.77 +<img class="footer" src="doxygen.png" alt="doxygen"/> 37.78 +</a> 1.8.13 37.79 +</small></address> 37.80 +</body> 37.81 +</html>
38.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 38.2 +++ b/docs/api-2.1/globals_defs.html Sat Feb 06 19:11:44 2021 +0100 38.3 @@ -0,0 +1,364 @@ 38.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 38.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 38.6 +<head> 38.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 38.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 38.9 +<meta name="generator" content="Doxygen 1.8.13"/> 38.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 38.11 +<title>ucx: Globals</title> 38.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 38.13 +<script type="text/javascript" src="jquery.js"></script> 38.14 +<script type="text/javascript" src="dynsections.js"></script> 38.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 38.16 +<script type="text/javascript" src="search/searchdata.js"></script> 38.17 +<script type="text/javascript" src="search/search.js"></script> 38.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 38.19 +</head> 38.20 +<body> 38.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 38.22 +<div id="titlearea"> 38.23 +<table cellspacing="0" cellpadding="0"> 38.24 + <tbody> 38.25 + <tr style="height: 56px;"> 38.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 38.27 + <td id="projectalign" style="padding-left: 0.5em;"> 38.28 + <div id="projectname">ucx 38.29 + </div> 38.30 + <div id="projectbrief">UAP Common Extensions</div> 38.31 + </td> 38.32 + </tr> 38.33 + </tbody> 38.34 +</table> 38.35 +</div> 38.36 +<!-- end header part --> 38.37 +<!-- Generated by Doxygen 1.8.13 --> 38.38 +<script type="text/javascript"> 38.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 38.40 +</script> 38.41 +<script type="text/javascript" src="menudata.js"></script> 38.42 +<script type="text/javascript" src="menu.js"></script> 38.43 +<script type="text/javascript"> 38.44 +$(function() { 38.45 + initMenu('',true,false,'search.php','Search'); 38.46 + $(document).ready(function() { init_search(); }); 38.47 +}); 38.48 +</script> 38.49 +<div id="main-nav"></div> 38.50 +</div><!-- top --> 38.51 +<!-- window showing the filter options --> 38.52 +<div id="MSearchSelectWindow" 38.53 + onmouseover="return searchBox.OnSearchSelectShow()" 38.54 + onmouseout="return searchBox.OnSearchSelectHide()" 38.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 38.56 +</div> 38.57 + 38.58 +<!-- iframe showing the search results (closed by default) --> 38.59 +<div id="MSearchResultsWindow"> 38.60 +<iframe src="javascript:void(0)" frameborder="0" 38.61 + name="MSearchResults" id="MSearchResults"> 38.62 +</iframe> 38.63 +</div> 38.64 + 38.65 +<div class="contents"> 38.66 +  38.67 + 38.68 +<h3><a id="index__"></a>- _ -</h3><ul> 38.69 +<li>__FUNCTION__ 38.70 +: <a class="el" href="test_8h.html#a828bb1dfda1afd67ca795075903d227d">test.h</a> 38.71 +</li> 38.72 +</ul> 38.73 + 38.74 + 38.75 +<h3><a id="index_a"></a>- a -</h3><ul> 38.76 +<li>alcalloc 38.77 +: <a class="el" href="allocator_8h.html#a8d71470816f88f78cb9a9686c57e1b10">allocator.h</a> 38.78 +</li> 38.79 +<li>alfree 38.80 +: <a class="el" href="allocator_8h.html#acd775785b54e97dc2b33a432c12c8fb2">allocator.h</a> 38.81 +</li> 38.82 +<li>almalloc 38.83 +: <a class="el" href="allocator_8h.html#ae1bc218fea8a35f4a3706f0beefcfb19">allocator.h</a> 38.84 +</li> 38.85 +<li>alrealloc 38.86 +: <a class="el" href="allocator_8h.html#a029ee5c9bcbb3f873571553f788c5820">allocator.h</a> 38.87 +</li> 38.88 +</ul> 38.89 + 38.90 + 38.91 +<h3><a id="index_p"></a>- p -</h3><ul> 38.92 +<li>PRIsstr 38.93 +: <a class="el" href="string_8h.html#a7d5bc48708405a28b23667e32dfcecae">string.h</a> 38.94 +</li> 38.95 +</ul> 38.96 + 38.97 + 38.98 +<h3><a id="index_s"></a>- s -</h3><ul> 38.99 +<li>S 38.100 +: <a class="el" href="string_8h.html#a8fa17c8cf4c36df48f4108c36da8573e">string.h</a> 38.101 +</li> 38.102 +<li>SC 38.103 +: <a class="el" href="string_8h.html#a7d261dd0bc358c957a368bc058c1ce53">string.h</a> 38.104 +</li> 38.105 +<li>SCSTR 38.106 +: <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">string.h</a> 38.107 +</li> 38.108 +<li>SFMT 38.109 +: <a class="el" href="string_8h.html#a23ed51e87385886bb65e8cd19c839362">string.h</a> 38.110 +</li> 38.111 +<li>sstrcasecmp 38.112 +: <a class="el" href="string_8h.html#a81b0f6df794152c2038703d4e9d0ad59">string.h</a> 38.113 +</li> 38.114 +<li>sstrcaseprefix 38.115 +: <a class="el" href="string_8h.html#acd3dc64e90db9b4046e14f115a815ff4">string.h</a> 38.116 +</li> 38.117 +<li>sstrcasesuffix 38.118 +: <a class="el" href="string_8h.html#a57eabd4862d531dd685bbf2feb8468bf">string.h</a> 38.119 +</li> 38.120 +<li>sstrcat 38.121 +: <a class="el" href="string_8h.html#a6af8a4c347c7fdb5980d4c4803be2759">string.h</a> 38.122 +</li> 38.123 +<li>sstrcat_a 38.124 +: <a class="el" href="string_8h.html#a6068d460f9bc05962666a917d26568b3">string.h</a> 38.125 +</li> 38.126 +<li>sstrcmp 38.127 +: <a class="el" href="string_8h.html#a7ae7156c8de57454ca38d306100b8160">string.h</a> 38.128 +</li> 38.129 +<li>sstrdup 38.130 +: <a class="el" href="string_8h.html#accbfd2b459a028d7af9fb7df6f977d80">string.h</a> 38.131 +</li> 38.132 +<li>sstrdup_a 38.133 +: <a class="el" href="string_8h.html#a8d098baada4ea9ad5d8b6343b5aec007">string.h</a> 38.134 +</li> 38.135 +<li>sstrlower 38.136 +: <a class="el" href="string_8h.html#a89343ea3e719f00ee802b557db57b769">string.h</a> 38.137 +</li> 38.138 +<li>sstrlower_a 38.139 +: <a class="el" href="string_8h.html#a4bb4742fe71115f493991d307cb22b23">string.h</a> 38.140 +</li> 38.141 +<li>sstrnlen 38.142 +: <a class="el" href="string_8h.html#a33fa945acc5ac2ce962e5ef13cf1638c">string.h</a> 38.143 +</li> 38.144 +<li>sstrprefix 38.145 +: <a class="el" href="string_8h.html#a7d73b66256384b26927e787318fdefa2">string.h</a> 38.146 +</li> 38.147 +<li>sstrscstr 38.148 +: <a class="el" href="string_8h.html#aa696932213265e10f864678686f4ccde">string.h</a> 38.149 +</li> 38.150 +<li>sstrsplit 38.151 +: <a class="el" href="string_8h.html#aa929984004c3576bfafb95031aca8eb7">string.h</a> 38.152 +</li> 38.153 +<li>sstrsplit_a 38.154 +: <a class="el" href="string_8h.html#ac9f69fa3a17e26a3a5f9d985b5844601">string.h</a> 38.155 +</li> 38.156 +<li>sstrstr 38.157 +: <a class="el" href="string_8h.html#a9d03be026afa9447c52bb34b9e3b895a">string.h</a> 38.158 +</li> 38.159 +<li>sstrsuffix 38.160 +: <a class="el" href="string_8h.html#ac6a5246f26be2e8a5f34d8995b7ec14e">string.h</a> 38.161 +</li> 38.162 +<li>sstrupper 38.163 +: <a class="el" href="string_8h.html#a084fe5a3a90d6fb6b15ecda03bb30824">string.h</a> 38.164 +</li> 38.165 +<li>sstrupper_a 38.166 +: <a class="el" href="string_8h.html#a5f0dd83c0176b812fb428004b2877a34">string.h</a> 38.167 +</li> 38.168 +<li>ST 38.169 +: <a class="el" href="string_8h.html#a9037956cca97a4e84b642f17f3d10378">string.h</a> 38.170 +</li> 38.171 +</ul> 38.172 + 38.173 + 38.174 +<h3><a id="index_u"></a>- u -</h3><ul> 38.175 +<li>UCX_ALLOCATOR_DEFAULT 38.176 +: <a class="el" href="allocator_8h.html#a1283a8f875f90a7af3aba5e031fc2e3f">allocator.h</a> 38.177 +</li> 38.178 +<li>ucx_array_util_set 38.179 +: <a class="el" href="array_8h.html#a1d959c29af3125bdd37cde3a554e729c">array.h</a> 38.180 +</li> 38.181 +<li>ucx_array_util_setptr 38.182 +: <a class="el" href="array_8h.html#a59a5b342965e790945f9c7a3f86b99f9">array.h</a> 38.183 +</li> 38.184 +<li>ucx_avl_default_new 38.185 +: <a class="el" href="avl_8h.html#ac2886d4b79b48c9fabf6408873f84cd2">avl.h</a> 38.186 +</li> 38.187 +<li>UCX_AVL_FIND_CLOSEST 38.188 +: <a class="el" href="avl_8h.html#af16f24d74fd6af0154de041566c6603b">avl.h</a> 38.189 +</li> 38.190 +<li>UCX_AVL_FIND_EXACT 38.191 +: <a class="el" href="avl_8h.html#aaaf4a6f6f661cda7791db239212285d9">avl.h</a> 38.192 +</li> 38.193 +<li>UCX_AVL_FIND_LOWER_BOUNDED 38.194 +: <a class="el" href="avl_8h.html#abd2446d544d5412b6997ee8a17bd368c">avl.h</a> 38.195 +</li> 38.196 +<li>UCX_AVL_FIND_UPPER_BOUNDED 38.197 +: <a class="el" href="avl_8h.html#ac74ee7649c1e206b08b31f37dd68ca5e">avl.h</a> 38.198 +</li> 38.199 +<li>ucx_bprintf 38.200 +: <a class="el" href="utils_8h.html#a9d7d65a420f026fcb6982803d5120519">utils.h</a> 38.201 +</li> 38.202 +<li>UCX_BUFFER_AUTOEXTEND 38.203 +: <a class="el" href="buffer_8h.html#a05f9565f2d04399168c3b1c152a632be">buffer.h</a> 38.204 +</li> 38.205 +<li>UCX_BUFFER_AUTOFREE 38.206 +: <a class="el" href="buffer_8h.html#a8bab11ad8a76719228b9ee91e2e45535">buffer.h</a> 38.207 +</li> 38.208 +<li>ucx_buffer_clear 38.209 +: <a class="el" href="buffer_8h.html#a374abd5aabfcc3ee0777a79d5fe651ab">buffer.h</a> 38.210 +</li> 38.211 +<li>ucx_buffer_clone 38.212 +: <a class="el" href="buffer_8h.html#a828353846428c2c2f695f9938f059e52">buffer.h</a> 38.213 +</li> 38.214 +<li>UCX_BUFFER_DEFAULT 38.215 +: <a class="el" href="buffer_8h.html#acc77c8ed7b26854f555d4a5d11e49ea2">buffer.h</a> 38.216 +</li> 38.217 +<li>ucx_buffer_to_sstr 38.218 +: <a class="el" href="buffer_8h.html#a0f4b64f1b3a74c4f6c5d9409d6b6086a">buffer.h</a> 38.219 +</li> 38.220 +<li>UCX_FOREACH 38.221 +: <a class="el" href="list_8h.html#a4b143b6526a410aa4d22cb3bb9365d70">list.h</a> 38.222 +</li> 38.223 +<li>ucx_logger_debug 38.224 +: <a class="el" href="logging_8h.html#a2936402799892db5138e5f1f8c25db0c">logging.h</a> 38.225 +</li> 38.226 +<li>UCX_LOGGER_DEBUG 38.227 +: <a class="el" href="logging_8h.html#acff01d1ef919ea997cfce755fc1b83d8">logging.h</a> 38.228 +</li> 38.229 +<li>ucx_logger_error 38.230 +: <a class="el" href="logging_8h.html#a6a9e472e14d6768e59d96d245e065397">logging.h</a> 38.231 +</li> 38.232 +<li>UCX_LOGGER_ERROR 38.233 +: <a class="el" href="logging_8h.html#aa254c07fe3a907613e2256a318d5c9a8">logging.h</a> 38.234 +</li> 38.235 +<li>UCX_LOGGER_INFO 38.236 +: <a class="el" href="logging_8h.html#a4b0178bf60a6129373ffc59114ca4c9b">logging.h</a> 38.237 +</li> 38.238 +<li>ucx_logger_info 38.239 +: <a class="el" href="logging_8h.html#a98464d8d51376ce2716dcc4eca00d5da">logging.h</a> 38.240 +</li> 38.241 +<li>UCX_LOGGER_LEVEL 38.242 +: <a class="el" href="logging_8h.html#aee18bc20e58ffb69910121512c350839">logging.h</a> 38.243 +</li> 38.244 +<li>ucx_logger_log 38.245 +: <a class="el" href="logging_8h.html#aa0245325031d95799b28def177fd14ec">logging.h</a> 38.246 +</li> 38.247 +<li>ucx_logger_register_level 38.248 +: <a class="el" href="logging_8h.html#a5cffc19502c4c90bfb3bd3bbcd18170a">logging.h</a> 38.249 +</li> 38.250 +<li>UCX_LOGGER_SOURCE 38.251 +: <a class="el" href="logging_8h.html#a0e0d72b12616c1e49ff8834eaf4cb8a2">logging.h</a> 38.252 +</li> 38.253 +<li>UCX_LOGGER_TIMESTAMP 38.254 +: <a class="el" href="logging_8h.html#a38607008268b4f776ee500fb95d2e823">logging.h</a> 38.255 +</li> 38.256 +<li>UCX_LOGGER_TRACE 38.257 +: <a class="el" href="logging_8h.html#a55b88d1fec7036d841b3ddd6195c5586">logging.h</a> 38.258 +</li> 38.259 +<li>ucx_logger_trace 38.260 +: <a class="el" href="logging_8h.html#a3031b7ff13f4cfae9c2916543be2877c">logging.h</a> 38.261 +</li> 38.262 +<li>UCX_LOGGER_WARN 38.263 +: <a class="el" href="logging_8h.html#abd01ca11486226ba34e8f7028d9fffba">logging.h</a> 38.264 +</li> 38.265 +<li>ucx_logger_warn 38.266 +: <a class="el" href="logging_8h.html#aca7bd861b646892813fd7310c0aa69af">logging.h</a> 38.267 +</li> 38.268 +<li>ucx_map_cstr_get 38.269 +: <a class="el" href="map_8h.html#a64e1fb55498fa502dd2ed8ed69062cdd">map.h</a> 38.270 +</li> 38.271 +<li>ucx_map_cstr_put 38.272 +: <a class="el" href="map_8h.html#ad9356b01425b934ab237b52339ac0cc3">map.h</a> 38.273 +</li> 38.274 +<li>ucx_map_cstr_remove 38.275 +: <a class="el" href="map_8h.html#a9c4405a5a75ecf64e2ef3d0c6501a9fe">map.h</a> 38.276 +</li> 38.277 +<li>UCX_MAP_FOREACH 38.278 +: <a class="el" href="map_8h.html#a940896c4aa1b13e54c55c04c3efc186b">map.h</a> 38.279 +</li> 38.280 +<li>ucx_map_int_get 38.281 +: <a class="el" href="map_8h.html#aa1681bd2178553cd092fd24c4d681d3c">map.h</a> 38.282 +</li> 38.283 +<li>ucx_map_int_put 38.284 +: <a class="el" href="map_8h.html#aaa30af79b4068c923895619e83f44367">map.h</a> 38.285 +</li> 38.286 +<li>ucx_map_int_remove 38.287 +: <a class="el" href="map_8h.html#aa767958b5468737755c09f7185b1770c">map.h</a> 38.288 +</li> 38.289 +<li>ucx_map_sstr_get 38.290 +: <a class="el" href="map_8h.html#a14d385f6b7f371f0507861cabd2eab4e">map.h</a> 38.291 +</li> 38.292 +<li>ucx_map_sstr_put 38.293 +: <a class="el" href="map_8h.html#ac26a8615bfc8f47ee9eaceb47645f98e">map.h</a> 38.294 +</li> 38.295 +<li>ucx_map_sstr_remove 38.296 +: <a class="el" href="map_8h.html#a48700ea86fadb9ea54d13010f9124df2">map.h</a> 38.297 +</li> 38.298 +<li>ucx_mempool_new_default 38.299 +: <a class="el" href="mempool_8h.html#a49f7bd1da5ac201d0cf54dc0f0d82dd2">mempool.h</a> 38.300 +</li> 38.301 +<li>ucx_sprintf 38.302 +: <a class="el" href="utils_8h.html#af9f333b66ecd639c347c7235f4992e2e">utils.h</a> 38.303 +</li> 38.304 +<li>ucx_stack_dim 38.305 +: <a class="el" href="stack_8h.html#a3b761343c6491222604341ebfa443226">stack.h</a> 38.306 +</li> 38.307 +<li>ucx_stack_empty 38.308 +: <a class="el" href="stack_8h.html#a4f7239dbd6c032c56812e370b71c1985">stack.h</a> 38.309 +</li> 38.310 +<li>ucx_stack_pop 38.311 +: <a class="el" href="stack_8h.html#a506b82374734ec476d086ddfb561174d">stack.h</a> 38.312 +</li> 38.313 +<li>ucx_stack_topsize 38.314 +: <a class="el" href="stack_8h.html#a030197051a803e87d5eeac5adb80b15a">stack.h</a> 38.315 +</li> 38.316 +<li>ucx_stream_bcopy 38.317 +: <a class="el" href="utils_8h.html#a6003a1750a66234169bd1f8cc84b297b">utils.h</a> 38.318 +</li> 38.319 +<li>ucx_stream_copy 38.320 +: <a class="el" href="utils_8h.html#a41ca1344f781c0d3bf7a414a6e811392">utils.h</a> 38.321 +</li> 38.322 +<li>UCX_STREAM_COPY_BUFSIZE 38.323 +: <a class="el" href="utils_8h.html#a23efd74fa5f701d4cf26ccbfd138a439">utils.h</a> 38.324 +</li> 38.325 +<li>ucx_stream_ncopy 38.326 +: <a class="el" href="utils_8h.html#add13f39a8af440b4f7e6f74339eaada2">utils.h</a> 38.327 +</li> 38.328 +<li>ucx_szmul 38.329 +: <a class="el" href="ucx_8h.html#a0b5ed6c1a0b15356f4f948acfd32a4cc">ucx.h</a> 38.330 +</li> 38.331 +<li>UCX_TEST 38.332 +: <a class="el" href="test_8h.html#a66cfb29c329fc9eaef071f2449836659">test.h</a> 38.333 +</li> 38.334 +<li>UCX_TEST_ASSERT 38.335 +: <a class="el" href="test_8h.html#a08f477cd12fc3fe741a92493e5df58a9">test.h</a> 38.336 +</li> 38.337 +<li>UCX_TEST_BEGIN 38.338 +: <a class="el" href="test_8h.html#a0547b8d4f3bcdb0633fdd8925e8aa5d4">test.h</a> 38.339 +</li> 38.340 +<li>UCX_TEST_CALL_SUBROUTINE 38.341 +: <a class="el" href="test_8h.html#a0efbab91c54f5237a2ab207f48cf0e51">test.h</a> 38.342 +</li> 38.343 +<li>UCX_TEST_END 38.344 +: <a class="el" href="test_8h.html#a86e64857c04f0447f8b16fb9c2b3b639">test.h</a> 38.345 +</li> 38.346 +<li>UCX_TEST_SUBROUTINE 38.347 +: <a class="el" href="test_8h.html#ae073cf5ead22cb27d662da048e16f44a">test.h</a> 38.348 +</li> 38.349 +<li>UCX_VERSION 38.350 +: <a class="el" href="ucx_8h.html#af12001920ca2fc1405615684e4dea284">ucx.h</a> 38.351 +</li> 38.352 +<li>UCX_VERSION_MAJOR 38.353 +: <a class="el" href="ucx_8h.html#aa57e5dd22d42387d748cc16777df1383">ucx.h</a> 38.354 +</li> 38.355 +<li>UCX_VERSION_MINOR 38.356 +: <a class="el" href="ucx_8h.html#a9ac10d6353e23d4615a87fc737c65eb0">ucx.h</a> 38.357 +</li> 38.358 +</ul> 38.359 +</div><!-- contents --> 38.360 +<!-- start footer part --> 38.361 +<hr class="footer"/><address class="footer"><small> 38.362 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 38.363 +<img class="footer" src="doxygen.png" alt="doxygen"/> 38.364 +</a> 1.8.13 38.365 +</small></address> 38.366 +</body> 38.367 +</html>
39.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 39.2 +++ b/docs/api-2.1/globals_func.html Sat Feb 06 19:11:44 2021 +0100 39.3 @@ -0,0 +1,174 @@ 39.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 39.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 39.6 +<head> 39.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 39.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 39.9 +<meta name="generator" content="Doxygen 1.8.13"/> 39.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 39.11 +<title>ucx: Globals</title> 39.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 39.13 +<script type="text/javascript" src="jquery.js"></script> 39.14 +<script type="text/javascript" src="dynsections.js"></script> 39.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 39.16 +<script type="text/javascript" src="search/searchdata.js"></script> 39.17 +<script type="text/javascript" src="search/search.js"></script> 39.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 39.19 +</head> 39.20 +<body> 39.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 39.22 +<div id="titlearea"> 39.23 +<table cellspacing="0" cellpadding="0"> 39.24 + <tbody> 39.25 + <tr style="height: 56px;"> 39.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 39.27 + <td id="projectalign" style="padding-left: 0.5em;"> 39.28 + <div id="projectname">ucx 39.29 + </div> 39.30 + <div id="projectbrief">UAP Common Extensions</div> 39.31 + </td> 39.32 + </tr> 39.33 + </tbody> 39.34 +</table> 39.35 +</div> 39.36 +<!-- end header part --> 39.37 +<!-- Generated by Doxygen 1.8.13 --> 39.38 +<script type="text/javascript"> 39.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 39.40 +</script> 39.41 +<script type="text/javascript" src="menudata.js"></script> 39.42 +<script type="text/javascript" src="menu.js"></script> 39.43 +<script type="text/javascript"> 39.44 +$(function() { 39.45 + initMenu('',true,false,'search.php','Search'); 39.46 + $(document).ready(function() { init_search(); }); 39.47 +}); 39.48 +</script> 39.49 +<div id="main-nav"></div> 39.50 +</div><!-- top --> 39.51 +<!-- window showing the filter options --> 39.52 +<div id="MSearchSelectWindow" 39.53 + onmouseover="return searchBox.OnSearchSelectShow()" 39.54 + onmouseout="return searchBox.OnSearchSelectHide()" 39.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 39.56 +</div> 39.57 + 39.58 +<!-- iframe showing the search results (closed by default) --> 39.59 +<div id="MSearchResultsWindow"> 39.60 +<iframe src="javascript:void(0)" frameborder="0" 39.61 + name="MSearchResults" id="MSearchResults"> 39.62 +</iframe> 39.63 +</div> 39.64 + 39.65 +<div class="contents"> 39.66 +  39.67 + 39.68 +<h3><a id="index_s"></a>- s -</h3><ul> 39.69 +<li>scstr() 39.70 +: <a class="el" href="string_8h.html#a2b1d6f1eca1c1549f37107b9c026c5a6">string.h</a> 39.71 +</li> 39.72 +<li>scstrcasecmp() 39.73 +: <a class="el" href="string_8h.html#aca8142fb823d253054e17c17cfca05e0">string.h</a> 39.74 +</li> 39.75 +<li>scstrcaseprefix() 39.76 +: <a class="el" href="string_8h.html#a3718ef4aa1e86cdb26bda2f07fb585df">string.h</a> 39.77 +</li> 39.78 +<li>scstrcasesuffix() 39.79 +: <a class="el" href="string_8h.html#a6edb4b85f2b9efe79db7ffe6eccd7bc3">string.h</a> 39.80 +</li> 39.81 +<li>scstrcat() 39.82 +: <a class="el" href="string_8h.html#a7376842c19e954b49215da81ef76ac0c">string.h</a> 39.83 +</li> 39.84 +<li>scstrcat_a() 39.85 +: <a class="el" href="string_8h.html#abacce4cbd6f70fcb6453904ef08b02e9">string.h</a> 39.86 +</li> 39.87 +<li>scstrchr() 39.88 +: <a class="el" href="string_8h.html#a5836d6a7a744791c35e5c17bdc394a87">string.h</a> 39.89 +</li> 39.90 +<li>scstrcmp() 39.91 +: <a class="el" href="string_8h.html#af35272a8e5408c88ed3e25a3a98f0a82">string.h</a> 39.92 +</li> 39.93 +<li>scstrdup() 39.94 +: <a class="el" href="string_8h.html#a97dccce03af419596dbdd592ca46a164">string.h</a> 39.95 +</li> 39.96 +<li>scstrdup_a() 39.97 +: <a class="el" href="string_8h.html#a8fe58921f51eb1fde038472377e63014">string.h</a> 39.98 +</li> 39.99 +<li>scstrlower() 39.100 +: <a class="el" href="string_8h.html#abccf198bea3186ff2abb080cc88dcae6">string.h</a> 39.101 +</li> 39.102 +<li>scstrlower_a() 39.103 +: <a class="el" href="string_8h.html#a3cf1e557df7ab58d03c78832c4060276">string.h</a> 39.104 +</li> 39.105 +<li>scstrn() 39.106 +: <a class="el" href="string_8h.html#ae594f6e222ea394cef6a26c0dfad000d">string.h</a> 39.107 +</li> 39.108 +<li>scstrnlen() 39.109 +: <a class="el" href="string_8h.html#ac1b000030d6d197eec48c15a182055d5">string.h</a> 39.110 +</li> 39.111 +<li>scstrprefix() 39.112 +: <a class="el" href="string_8h.html#a599ddc2f88dd1df68b72eefd91347393">string.h</a> 39.113 +</li> 39.114 +<li>scstrrchr() 39.115 +: <a class="el" href="string_8h.html#ae389835b97cd9382e7d6a6a075323376">string.h</a> 39.116 +</li> 39.117 +<li>scstrscstr() 39.118 +: <a class="el" href="string_8h.html#a54f256c3abe811c52d58b4ff1b23f051">string.h</a> 39.119 +</li> 39.120 +<li>scstrsplit() 39.121 +: <a class="el" href="string_8h.html#ae71cac352b00230848bde358f0fb05ea">string.h</a> 39.122 +</li> 39.123 +<li>scstrsplit_a() 39.124 +: <a class="el" href="string_8h.html#a52906455ae530c9cdc6812c8e6d9bdef">string.h</a> 39.125 +</li> 39.126 +<li>scstrsstr() 39.127 +: <a class="el" href="string_8h.html#aa4362cb36c6629f9d8484739fd827748">string.h</a> 39.128 +</li> 39.129 +<li>scstrsubs() 39.130 +: <a class="el" href="string_8h.html#a9a6c8d8db0dda0037c3c852cce1a5060">string.h</a> 39.131 +</li> 39.132 +<li>scstrsubsl() 39.133 +: <a class="el" href="string_8h.html#ad50f0f67b906fad0744f46bcb51e144b">string.h</a> 39.134 +</li> 39.135 +<li>scstrsuffix() 39.136 +: <a class="el" href="string_8h.html#a1f0ae316a2afe85d5b4655e6ece6721a">string.h</a> 39.137 +</li> 39.138 +<li>scstrtrim() 39.139 +: <a class="el" href="string_8h.html#ad374b16eb1be8b48019debad9b9f268c">string.h</a> 39.140 +</li> 39.141 +<li>scstrupper() 39.142 +: <a class="el" href="string_8h.html#af3dd09ec9d11162fe0075f4e60f41240">string.h</a> 39.143 +</li> 39.144 +<li>scstrupper_a() 39.145 +: <a class="el" href="string_8h.html#aea94613eb74668cc05d365803d32bfad">string.h</a> 39.146 +</li> 39.147 +<li>sstr() 39.148 +: <a class="el" href="string_8h.html#a539eb7059251a051ee5d179526a23e9a">string.h</a> 39.149 +</li> 39.150 +<li>sstrchr() 39.151 +: <a class="el" href="string_8h.html#af80898a0b75955eb2579298c3ae2c481">string.h</a> 39.152 +</li> 39.153 +<li>sstrn() 39.154 +: <a class="el" href="string_8h.html#a2744c38ac44abf3e01fa059056dcf36c">string.h</a> 39.155 +</li> 39.156 +<li>sstrrchr() 39.157 +: <a class="el" href="string_8h.html#adae3f59957ca328e1da5285cb8b02a72">string.h</a> 39.158 +</li> 39.159 +<li>sstrsubs() 39.160 +: <a class="el" href="string_8h.html#a5eb9e0e1f26cf7fbecc038cd90e8b258">string.h</a> 39.161 +</li> 39.162 +<li>sstrsubsl() 39.163 +: <a class="el" href="string_8h.html#a78925c91af54f23cebd20ff99ef4331a">string.h</a> 39.164 +</li> 39.165 +<li>sstrtrim() 39.166 +: <a class="el" href="string_8h.html#ae2d6da564d3fce51f2e0cac580fdbc56">string.h</a> 39.167 +</li> 39.168 +</ul> 39.169 +</div><!-- contents --> 39.170 +<!-- start footer part --> 39.171 +<hr class="footer"/><address class="footer"><small> 39.172 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 39.173 +<img class="footer" src="doxygen.png" alt="doxygen"/> 39.174 +</a> 1.8.13 39.175 +</small></address> 39.176 +</body> 39.177 +</html>
40.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 40.2 +++ b/docs/api-2.1/globals_func_u.html Sat Feb 06 19:11:44 2021 +0100 40.3 @@ -0,0 +1,621 @@ 40.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 40.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 40.6 +<head> 40.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 40.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 40.9 +<meta name="generator" content="Doxygen 1.8.13"/> 40.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 40.11 +<title>ucx: Globals</title> 40.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 40.13 +<script type="text/javascript" src="jquery.js"></script> 40.14 +<script type="text/javascript" src="dynsections.js"></script> 40.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 40.16 +<script type="text/javascript" src="search/searchdata.js"></script> 40.17 +<script type="text/javascript" src="search/search.js"></script> 40.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 40.19 +</head> 40.20 +<body> 40.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 40.22 +<div id="titlearea"> 40.23 +<table cellspacing="0" cellpadding="0"> 40.24 + <tbody> 40.25 + <tr style="height: 56px;"> 40.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 40.27 + <td id="projectalign" style="padding-left: 0.5em;"> 40.28 + <div id="projectname">ucx 40.29 + </div> 40.30 + <div id="projectbrief">UAP Common Extensions</div> 40.31 + </td> 40.32 + </tr> 40.33 + </tbody> 40.34 +</table> 40.35 +</div> 40.36 +<!-- end header part --> 40.37 +<!-- Generated by Doxygen 1.8.13 --> 40.38 +<script type="text/javascript"> 40.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 40.40 +</script> 40.41 +<script type="text/javascript" src="menudata.js"></script> 40.42 +<script type="text/javascript" src="menu.js"></script> 40.43 +<script type="text/javascript"> 40.44 +$(function() { 40.45 + initMenu('',true,false,'search.php','Search'); 40.46 + $(document).ready(function() { init_search(); }); 40.47 +}); 40.48 +</script> 40.49 +<div id="main-nav"></div> 40.50 +</div><!-- top --> 40.51 +<!-- window showing the filter options --> 40.52 +<div id="MSearchSelectWindow" 40.53 + onmouseover="return searchBox.OnSearchSelectShow()" 40.54 + onmouseout="return searchBox.OnSearchSelectHide()" 40.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 40.56 +</div> 40.57 + 40.58 +<!-- iframe showing the search results (closed by default) --> 40.59 +<div id="MSearchResultsWindow"> 40.60 +<iframe src="javascript:void(0)" frameborder="0" 40.61 + name="MSearchResults" id="MSearchResults"> 40.62 +</iframe> 40.63 +</div> 40.64 + 40.65 +<div class="contents"> 40.66 +  40.67 + 40.68 +<h3><a id="index_u"></a>- u -</h3><ul> 40.69 +<li>ucx_array_append_from() 40.70 +: <a class="el" href="array_8h.html#aea01731ad94ea73c0c8fb1d1b7a35fcf">array.h</a> 40.71 +</li> 40.72 +<li>ucx_array_at() 40.73 +: <a class="el" href="array_8h.html#aa698085fd1a8b70d6b709999c51b49e8">array.h</a> 40.74 +</li> 40.75 +<li>ucx_array_clone() 40.76 +: <a class="el" href="array_8h.html#a4a8c273370e4a3a3e2624e364f5ab410">array.h</a> 40.77 +</li> 40.78 +<li>ucx_array_concat() 40.79 +: <a class="el" href="array_8h.html#aa5a0bf3d3f0df6406beb0e569021cc28">array.h</a> 40.80 +</li> 40.81 +<li>ucx_array_contains() 40.82 +: <a class="el" href="array_8h.html#a5241058cd2329147bc5b1593ae7e51dc">array.h</a> 40.83 +</li> 40.84 +<li>ucx_array_destroy() 40.85 +: <a class="el" href="array_8h.html#a8e83681d8d5d8cddbf10f63ce5be4c10">array.h</a> 40.86 +</li> 40.87 +<li>ucx_array_equals() 40.88 +: <a class="el" href="array_8h.html#a43292b448adb1741677aa8c578bcc201">array.h</a> 40.89 +</li> 40.90 +<li>ucx_array_find() 40.91 +: <a class="el" href="array_8h.html#ae7bdbed94afee9b20b38b95e3ab470f0">array.h</a> 40.92 +</li> 40.93 +<li>ucx_array_free() 40.94 +: <a class="el" href="array_8h.html#ac01ee914468a16f470bf3071fffbe438">array.h</a> 40.95 +</li> 40.96 +<li>ucx_array_grow() 40.97 +: <a class="el" href="array_8h.html#ab0cbf243824aaebee48277315e03afce">array.h</a> 40.98 +</li> 40.99 +<li>ucx_array_init() 40.100 +: <a class="el" href="array_8h.html#ad921e85c28ffae32230777a53c5037e5">array.h</a> 40.101 +</li> 40.102 +<li>ucx_array_init_a() 40.103 +: <a class="el" href="array_8h.html#a2451e61ebb15a7ba1c1319267ba75b8c">array.h</a> 40.104 +</li> 40.105 +<li>ucx_array_new() 40.106 +: <a class="el" href="array_8h.html#a994a2fbf1c33a3833e2a70cd9a4352b7">array.h</a> 40.107 +</li> 40.108 +<li>ucx_array_new_a() 40.109 +: <a class="el" href="array_8h.html#a177170258c215eb2e4f5a32e59f0cb1b">array.h</a> 40.110 +</li> 40.111 +<li>ucx_array_prepend_from() 40.112 +: <a class="el" href="array_8h.html#a95b52acc2193b5c33cf0eaa4f2082477">array.h</a> 40.113 +</li> 40.114 +<li>ucx_array_remove() 40.115 +: <a class="el" href="array_8h.html#aa45eac6b697f83adac81c0860cf306b8">array.h</a> 40.116 +</li> 40.117 +<li>ucx_array_remove_fast() 40.118 +: <a class="el" href="array_8h.html#a548d81b07612bae3ba8c4c4b49104b8e">array.h</a> 40.119 +</li> 40.120 +<li>ucx_array_reserve() 40.121 +: <a class="el" href="array_8h.html#a1c3bf8433c1de3c933f3854ab297fe1d">array.h</a> 40.122 +</li> 40.123 +<li>ucx_array_resize() 40.124 +: <a class="el" href="array_8h.html#a27762e7c06a6c781015e3c8ceeee0ce3">array.h</a> 40.125 +</li> 40.126 +<li>ucx_array_set_from() 40.127 +: <a class="el" href="array_8h.html#a1bb545d065358d265d80d815ba382a28">array.h</a> 40.128 +</li> 40.129 +<li>ucx_array_shrink() 40.130 +: <a class="el" href="array_8h.html#a2daf50e80aee9bccebee876a7efd2dfc">array.h</a> 40.131 +</li> 40.132 +<li>ucx_array_sort() 40.133 +: <a class="el" href="array_8h.html#add773514569b872a6624381b4b6af52c">array.h</a> 40.134 +</li> 40.135 +<li>ucx_array_util_set_a() 40.136 +: <a class="el" href="array_8h.html#ad0a8d76980cf1c1910e64a245803fb9a">array.h</a> 40.137 +</li> 40.138 +<li>ucx_array_util_setptr_a() 40.139 +: <a class="el" href="array_8h.html#ad708b333c0c1b02c998309a58ea65e31">array.h</a> 40.140 +</li> 40.141 +<li>ucx_asprintf() 40.142 +: <a class="el" href="utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5">utils.h</a> 40.143 +</li> 40.144 +<li>ucx_avl_count() 40.145 +: <a class="el" href="avl_8h.html#a92c1d41c2b22fe4a029a486ab2153e35">avl.h</a> 40.146 +</li> 40.147 +<li>ucx_avl_find() 40.148 +: <a class="el" href="avl_8h.html#a51770e1614b28d7d22dea096c3704f83">avl.h</a> 40.149 +</li> 40.150 +<li>ucx_avl_find_node() 40.151 +: <a class="el" href="avl_8h.html#a664986f64d6865605199fbff06e19cd5">avl.h</a> 40.152 +</li> 40.153 +<li>ucx_avl_free() 40.154 +: <a class="el" href="avl_8h.html#a2f92db538f25fce908d2cb3e5590944c">avl.h</a> 40.155 +</li> 40.156 +<li>ucx_avl_free_content() 40.157 +: <a class="el" href="avl_8h.html#a31ad7fb196ca211f1fc39f4e15f72279">avl.h</a> 40.158 +</li> 40.159 +<li>ucx_avl_get() 40.160 +: <a class="el" href="avl_8h.html#adbcf7ceb3f014a30c7214f7304519efe">avl.h</a> 40.161 +</li> 40.162 +<li>ucx_avl_get_node() 40.163 +: <a class="el" href="avl_8h.html#acf42da9a4168e47dc10b4ba0d27ceb4e">avl.h</a> 40.164 +</li> 40.165 +<li>ucx_avl_new() 40.166 +: <a class="el" href="avl_8h.html#a11b043d65a11b7092d5d98b298e5ede3">avl.h</a> 40.167 +</li> 40.168 +<li>ucx_avl_new_a() 40.169 +: <a class="el" href="avl_8h.html#af0f868d67e9dc08b4867c02a06c23ee2">avl.h</a> 40.170 +</li> 40.171 +<li>ucx_avl_pred() 40.172 +: <a class="el" href="avl_8h.html#a0e739aeb66dda6a6a3f6eb51b50cf346">avl.h</a> 40.173 +</li> 40.174 +<li>ucx_avl_put() 40.175 +: <a class="el" href="avl_8h.html#aec401fab4a24a7edffa734f9baf88577">avl.h</a> 40.176 +</li> 40.177 +<li>ucx_avl_put_s() 40.178 +: <a class="el" href="avl_8h.html#a32cf8955cc0226a82bacfc7b76d6474c">avl.h</a> 40.179 +</li> 40.180 +<li>ucx_avl_remove() 40.181 +: <a class="el" href="avl_8h.html#a1d821119c805d7fbb7e424bc3effeba9">avl.h</a> 40.182 +</li> 40.183 +<li>ucx_avl_remove_node() 40.184 +: <a class="el" href="avl_8h.html#a9a792b7d9e58073deef74a341f8bc720">avl.h</a> 40.185 +</li> 40.186 +<li>ucx_avl_remove_s() 40.187 +: <a class="el" href="avl_8h.html#a01aeeecd6415f0cc2b623486eb28f254">avl.h</a> 40.188 +</li> 40.189 +<li>ucx_avl_succ() 40.190 +: <a class="el" href="avl_8h.html#aab1ad9b027ff5e50671aa0ee84e2d541">avl.h</a> 40.191 +</li> 40.192 +<li>ucx_buffer_eof() 40.193 +: <a class="el" href="buffer_8h.html#abad7fd9ad5061224c780b8d1d4c55f09">buffer.h</a> 40.194 +</li> 40.195 +<li>ucx_buffer_extend() 40.196 +: <a class="el" href="buffer_8h.html#afaf97d2cd7e9faad79a9d35fe33e30c6">buffer.h</a> 40.197 +</li> 40.198 +<li>ucx_buffer_extract() 40.199 +: <a class="el" href="buffer_8h.html#a33fa7bb35fe08bbb3542f227514332ef">buffer.h</a> 40.200 +</li> 40.201 +<li>ucx_buffer_free() 40.202 +: <a class="el" href="buffer_8h.html#a2af8646d8905c22c7322e7540b0440af">buffer.h</a> 40.203 +</li> 40.204 +<li>ucx_buffer_getc() 40.205 +: <a class="el" href="buffer_8h.html#a396339022159ce4ca6d069de9f9209b0">buffer.h</a> 40.206 +</li> 40.207 +<li>ucx_buffer_new() 40.208 +: <a class="el" href="buffer_8h.html#aacea876d692193ec6f859ce98da7351c">buffer.h</a> 40.209 +</li> 40.210 +<li>ucx_buffer_putc() 40.211 +: <a class="el" href="buffer_8h.html#a7d6f01b9d631b0123475dfb98fb849ac">buffer.h</a> 40.212 +</li> 40.213 +<li>ucx_buffer_puts() 40.214 +: <a class="el" href="buffer_8h.html#af1d4b478e04b3ae0bf30e7c2ea964ea2">buffer.h</a> 40.215 +</li> 40.216 +<li>ucx_buffer_read() 40.217 +: <a class="el" href="buffer_8h.html#ae5c3430759f0059547b35d5a254d4da5">buffer.h</a> 40.218 +</li> 40.219 +<li>ucx_buffer_seek() 40.220 +: <a class="el" href="buffer_8h.html#a47d98482662073c74f35deb0957d15d1">buffer.h</a> 40.221 +</li> 40.222 +<li>ucx_buffer_shift() 40.223 +: <a class="el" href="buffer_8h.html#a12a0c6a2379ef080043e6286bb8bad69">buffer.h</a> 40.224 +</li> 40.225 +<li>ucx_buffer_shift_left() 40.226 +: <a class="el" href="buffer_8h.html#a20431dd0ed6a6fe9f15333bd72afe4db">buffer.h</a> 40.227 +</li> 40.228 +<li>ucx_buffer_shift_right() 40.229 +: <a class="el" href="buffer_8h.html#a4fa10b6471495547eb981248fd4f1bc2">buffer.h</a> 40.230 +</li> 40.231 +<li>ucx_buffer_write() 40.232 +: <a class="el" href="buffer_8h.html#af8aacc7401814392b58c1b7b81bffc05">buffer.h</a> 40.233 +</li> 40.234 +<li>ucx_cmp_double() 40.235 +: <a class="el" href="utils_8h.html#ab804b7c27d0bfcd7bf3a3583140825b6">utils.h</a> 40.236 +</li> 40.237 +<li>ucx_cmp_float() 40.238 +: <a class="el" href="utils_8h.html#ad1196b561bcdad76c393885819769a97">utils.h</a> 40.239 +</li> 40.240 +<li>ucx_cmp_int() 40.241 +: <a class="el" href="utils_8h.html#a8ce7e11e6b3deafe89a32a091fde7f16">utils.h</a> 40.242 +</li> 40.243 +<li>ucx_cmp_int16() 40.244 +: <a class="el" href="utils_8h.html#aa29e6e559946375e34113e34e0b0bd0d">utils.h</a> 40.245 +</li> 40.246 +<li>ucx_cmp_int32() 40.247 +: <a class="el" href="utils_8h.html#a858b2ac443fb202643b71f6a7e9218dd">utils.h</a> 40.248 +</li> 40.249 +<li>ucx_cmp_int64() 40.250 +: <a class="el" href="utils_8h.html#a54701aea6a89fed1402dfb0bf56bc7f6">utils.h</a> 40.251 +</li> 40.252 +<li>ucx_cmp_longint() 40.253 +: <a class="el" href="utils_8h.html#aeb57a2b9a6aaa0460c7a6bec29accf2c">utils.h</a> 40.254 +</li> 40.255 +<li>ucx_cmp_longlong() 40.256 +: <a class="el" href="utils_8h.html#a366b57def20f86a41eaedf575eea5375">utils.h</a> 40.257 +</li> 40.258 +<li>ucx_cmp_mem() 40.259 +: <a class="el" href="utils_8h.html#aff7d2bcded71196831a8c0664333f8e7">utils.h</a> 40.260 +</li> 40.261 +<li>ucx_cmp_ptr() 40.262 +: <a class="el" href="utils_8h.html#aa174d539de3ea59be4f9640f17ce53d8">utils.h</a> 40.263 +</li> 40.264 +<li>ucx_cmp_sstr() 40.265 +: <a class="el" href="utils_8h.html#adee0739589166d272f8cb7c23aabf8ba">utils.h</a> 40.266 +</li> 40.267 +<li>ucx_cmp_str() 40.268 +: <a class="el" href="utils_8h.html#aa6a37b9d172b6a5b2803d152f9e1b258">utils.h</a> 40.269 +</li> 40.270 +<li>ucx_cmp_strn() 40.271 +: <a class="el" href="utils_8h.html#ac6b354a878f551a3a5b20a167db3f308">utils.h</a> 40.272 +</li> 40.273 +<li>ucx_cmp_uint() 40.274 +: <a class="el" href="utils_8h.html#abd83a5da91c3dd026a6931bd80c12f1e">utils.h</a> 40.275 +</li> 40.276 +<li>ucx_cmp_uint16() 40.277 +: <a class="el" href="utils_8h.html#acde5366437e886a459b7468f7a9e11f0">utils.h</a> 40.278 +</li> 40.279 +<li>ucx_cmp_uint32() 40.280 +: <a class="el" href="utils_8h.html#a5879d1722330355914d8c9146fa549d3">utils.h</a> 40.281 +</li> 40.282 +<li>ucx_cmp_uint64() 40.283 +: <a class="el" href="utils_8h.html#a1572a78b5b42f7151a5b2a5a7283d62d">utils.h</a> 40.284 +</li> 40.285 +<li>ucx_cmp_ulongint() 40.286 +: <a class="el" href="utils_8h.html#a3f3cbae2594d6f722bae29acb0408a24">utils.h</a> 40.287 +</li> 40.288 +<li>ucx_cmp_ulonglong() 40.289 +: <a class="el" href="utils_8h.html#a6acfc359421f21f9a042a654ff7faac5">utils.h</a> 40.290 +</li> 40.291 +<li>ucx_default_allocator() 40.292 +: <a class="el" href="allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf">allocator.h</a> 40.293 +</li> 40.294 +<li>ucx_default_calloc() 40.295 +: <a class="el" href="allocator_8h.html#a3a0bfdd13d887012309c459b339f338f">allocator.h</a> 40.296 +</li> 40.297 +<li>ucx_default_free() 40.298 +: <a class="el" href="allocator_8h.html#a646d83aaaadfe33ae414c0fad8bfc52a">allocator.h</a> 40.299 +</li> 40.300 +<li>ucx_default_malloc() 40.301 +: <a class="el" href="allocator_8h.html#a96403ebf3d2312d95f2fe7627a1cdbc0">allocator.h</a> 40.302 +</li> 40.303 +<li>ucx_default_realloc() 40.304 +: <a class="el" href="allocator_8h.html#a47cfc8af626a86fcb93a2b14b90498ed">allocator.h</a> 40.305 +</li> 40.306 +<li>ucx_dist_int() 40.307 +: <a class="el" href="utils_8h.html#a4ab6753739d56c09cdf6079fdcabf7c6">utils.h</a> 40.308 +</li> 40.309 +<li>ucx_dist_int16() 40.310 +: <a class="el" href="utils_8h.html#a81fb8434b70ca11bf2c14abfa21d16a9">utils.h</a> 40.311 +</li> 40.312 +<li>ucx_dist_int32() 40.313 +: <a class="el" href="utils_8h.html#ab4a659cc46096f0490c1dafa57726476">utils.h</a> 40.314 +</li> 40.315 +<li>ucx_dist_int64() 40.316 +: <a class="el" href="utils_8h.html#a54e7d06585bad3a899befc4e9c13853f">utils.h</a> 40.317 +</li> 40.318 +<li>ucx_dist_longint() 40.319 +: <a class="el" href="utils_8h.html#a43e73d288b1553a0078bf4c98dd341f5">utils.h</a> 40.320 +</li> 40.321 +<li>ucx_dist_longlong() 40.322 +: <a class="el" href="utils_8h.html#a306778414a2427951ea263be92368627">utils.h</a> 40.323 +</li> 40.324 +<li>ucx_dist_uint() 40.325 +: <a class="el" href="utils_8h.html#a37b7d471ca1679992afc11a0deda45f4">utils.h</a> 40.326 +</li> 40.327 +<li>ucx_dist_uint16() 40.328 +: <a class="el" href="utils_8h.html#a66e00a0703cbcde050ec922578e2f080">utils.h</a> 40.329 +</li> 40.330 +<li>ucx_dist_uint32() 40.331 +: <a class="el" href="utils_8h.html#add2b5c5507caba59d894b84e056b079b">utils.h</a> 40.332 +</li> 40.333 +<li>ucx_dist_uint64() 40.334 +: <a class="el" href="utils_8h.html#a3ba75e2e0b2479eef2b22fb219b42da7">utils.h</a> 40.335 +</li> 40.336 +<li>ucx_dist_ulongint() 40.337 +: <a class="el" href="utils_8h.html#abb13476228d0c16bfaba08469adbae2d">utils.h</a> 40.338 +</li> 40.339 +<li>ucx_dist_ulonglong() 40.340 +: <a class="el" href="utils_8h.html#a59a5859272cb4b43cbdd58208c41e32b">utils.h</a> 40.341 +</li> 40.342 +<li>ucx_fprintf() 40.343 +: <a class="el" href="utils_8h.html#aa0bec80e1c67f769ff5e112a7d4ce72a">utils.h</a> 40.344 +</li> 40.345 +<li>ucx_hash() 40.346 +: <a class="el" href="map_8h.html#aea3be97254c05595d986ef6a9faae87b">map.h</a> 40.347 +</li> 40.348 +<li>ucx_key() 40.349 +: <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">map.h</a> 40.350 +</li> 40.351 +<li>ucx_list_append() 40.352 +: <a class="el" href="list_8h.html#a00c122c8a26d35b60676939df4161621">list.h</a> 40.353 +</li> 40.354 +<li>ucx_list_append_a() 40.355 +: <a class="el" href="list_8h.html#adf3b3e2e0ff977d8928671d6bd82fc60">list.h</a> 40.356 +</li> 40.357 +<li>ucx_list_clone() 40.358 +: <a class="el" href="list_8h.html#ae7054a41c289b24e6caf5cb07ac850ed">list.h</a> 40.359 +</li> 40.360 +<li>ucx_list_clone_a() 40.361 +: <a class="el" href="list_8h.html#a08ca1ba0d2e82258b0408714c1f4c425">list.h</a> 40.362 +</li> 40.363 +<li>ucx_list_concat() 40.364 +: <a class="el" href="list_8h.html#a77163a0cc82fae52bec26c8c0c3674d9">list.h</a> 40.365 +</li> 40.366 +<li>ucx_list_contains() 40.367 +: <a class="el" href="list_8h.html#a8b0fa051fcfe12e1a82cca1087973852">list.h</a> 40.368 +</li> 40.369 +<li>ucx_list_difference() 40.370 +: <a class="el" href="list_8h.html#a6c5db5d1d11ad28b6fe1a80ee1c1e449">list.h</a> 40.371 +</li> 40.372 +<li>ucx_list_difference_a() 40.373 +: <a class="el" href="list_8h.html#a4a2a2fc5cc41073c516db6235bbc51d5">list.h</a> 40.374 +</li> 40.375 +<li>ucx_list_equals() 40.376 +: <a class="el" href="list_8h.html#adc435447cecf885bc63d232191085bbe">list.h</a> 40.377 +</li> 40.378 +<li>ucx_list_find() 40.379 +: <a class="el" href="list_8h.html#a9b3b6842d3be572e06a7f519e198cb83">list.h</a> 40.380 +</li> 40.381 +<li>ucx_list_first() 40.382 +: <a class="el" href="list_8h.html#a6aa0e34ebc5f0dca6f52d0f7626b4bd5">list.h</a> 40.383 +</li> 40.384 +<li>ucx_list_free() 40.385 +: <a class="el" href="list_8h.html#a1a0fa2c5b1e478a96da19b0c3f013668">list.h</a> 40.386 +</li> 40.387 +<li>ucx_list_free_a() 40.388 +: <a class="el" href="list_8h.html#a944e11f76c38767cd1100d72a4e3b25b">list.h</a> 40.389 +</li> 40.390 +<li>ucx_list_free_content() 40.391 +: <a class="el" href="list_8h.html#a4ba6c96642f72ea046cc22627c72979c">list.h</a> 40.392 +</li> 40.393 +<li>ucx_list_get() 40.394 +: <a class="el" href="list_8h.html#a2509ffe19bce6a8708c77f89480c75fb">list.h</a> 40.395 +</li> 40.396 +<li>ucx_list_indexof() 40.397 +: <a class="el" href="list_8h.html#ae2ff2974812ca185870f80bc4ed9337e">list.h</a> 40.398 +</li> 40.399 +<li>ucx_list_intersection() 40.400 +: <a class="el" href="list_8h.html#a259f9b754978aeca23dfabba16e20f39">list.h</a> 40.401 +</li> 40.402 +<li>ucx_list_intersection_a() 40.403 +: <a class="el" href="list_8h.html#a1d0b00514dbb81ba6270b58da0c5b9a8">list.h</a> 40.404 +</li> 40.405 +<li>ucx_list_last() 40.406 +: <a class="el" href="list_8h.html#add5ec40c5006e29c629d23c2eb5a6553">list.h</a> 40.407 +</li> 40.408 +<li>ucx_list_prepend() 40.409 +: <a class="el" href="list_8h.html#a8fcb68e4556395b15180eec2d0b77aa4">list.h</a> 40.410 +</li> 40.411 +<li>ucx_list_prepend_a() 40.412 +: <a class="el" href="list_8h.html#a54654e6dc60e1c3de9e886c150e404ec">list.h</a> 40.413 +</li> 40.414 +<li>ucx_list_remove() 40.415 +: <a class="el" href="list_8h.html#a410cb3e8260037ba56c72d14b899b468">list.h</a> 40.416 +</li> 40.417 +<li>ucx_list_remove_a() 40.418 +: <a class="el" href="list_8h.html#aca687b7c4e7170175f447e549125aa52">list.h</a> 40.419 +</li> 40.420 +<li>ucx_list_size() 40.421 +: <a class="el" href="list_8h.html#ae88001cc8ae40b946560f31434abed8f">list.h</a> 40.422 +</li> 40.423 +<li>ucx_list_sort() 40.424 +: <a class="el" href="list_8h.html#ac74962d9bd7cfc9d3e2e09651469377b">list.h</a> 40.425 +</li> 40.426 +<li>ucx_list_union() 40.427 +: <a class="el" href="list_8h.html#a94ecdb0cea1633ad7074f027fa8485fa">list.h</a> 40.428 +</li> 40.429 +<li>ucx_list_union_a() 40.430 +: <a class="el" href="list_8h.html#a65b4355536f4ebc4130211b46469f4c1">list.h</a> 40.431 +</li> 40.432 +<li>ucx_logger_free() 40.433 +: <a class="el" href="logging_8h.html#ac4697b784e01ec990d2acea192e21658">logging.h</a> 40.434 +</li> 40.435 +<li>ucx_logger_logf() 40.436 +: <a class="el" href="logging_8h.html#ac337e5d02ebea565012d4c11bd643801">logging.h</a> 40.437 +</li> 40.438 +<li>ucx_logger_new() 40.439 +: <a class="el" href="logging_8h.html#ac560f8517d2172794c9d2691735ec48c">logging.h</a> 40.440 +</li> 40.441 +<li>ucx_map_clear() 40.442 +: <a class="el" href="map_8h.html#a285e90e40681c6d9631c935dda0967f2">map.h</a> 40.443 +</li> 40.444 +<li>ucx_map_clone() 40.445 +: <a class="el" href="map_8h.html#a62c6c30cbb0d824ba710f5030ff9a4e4">map.h</a> 40.446 +</li> 40.447 +<li>ucx_map_clone_a() 40.448 +: <a class="el" href="map_8h.html#a9aea9103703d5c168420bb6bf85549ea">map.h</a> 40.449 +</li> 40.450 +<li>ucx_map_copy() 40.451 +: <a class="el" href="map_8h.html#adfeb2d61003fd2896bcfdc9a57f36425">map.h</a> 40.452 +</li> 40.453 +<li>ucx_map_difference() 40.454 +: <a class="el" href="map_8h.html#a774fcff87d1e58b6c5af77dd19a8c3dc">map.h</a> 40.455 +</li> 40.456 +<li>ucx_map_difference_a() 40.457 +: <a class="el" href="map_8h.html#ad0ba103494247d798ac3037c50fc8831">map.h</a> 40.458 +</li> 40.459 +<li>ucx_map_free() 40.460 +: <a class="el" href="map_8h.html#abe3d9688e4224bf7bb962abf25ff8c2e">map.h</a> 40.461 +</li> 40.462 +<li>ucx_map_free_content() 40.463 +: <a class="el" href="map_8h.html#a750f3d9d83e2f3788a14c17a9d160618">map.h</a> 40.464 +</li> 40.465 +<li>ucx_map_get() 40.466 +: <a class="el" href="map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6">map.h</a> 40.467 +</li> 40.468 +<li>ucx_map_intersection() 40.469 +: <a class="el" href="map_8h.html#aa594d7a5afebc3bed6bb265348cf6b0d">map.h</a> 40.470 +</li> 40.471 +<li>ucx_map_intersection_a() 40.472 +: <a class="el" href="map_8h.html#a169e0470a20484dd76425fdf77e3651e">map.h</a> 40.473 +</li> 40.474 +<li>ucx_map_iter_next() 40.475 +: <a class="el" href="map_8h.html#aceb8675abf44860b4bbc301bbada5b91">map.h</a> 40.476 +</li> 40.477 +<li>ucx_map_iterator() 40.478 +: <a class="el" href="map_8h.html#a9150e9c64fdf4dfcc2cad106b91aa110">map.h</a> 40.479 +</li> 40.480 +<li>ucx_map_new() 40.481 +: <a class="el" href="map_8h.html#a79f31de8b93814493759dbc8b940cf0c">map.h</a> 40.482 +</li> 40.483 +<li>ucx_map_new_a() 40.484 +: <a class="el" href="map_8h.html#aed508a94c66cc15372503c64b70eb03e">map.h</a> 40.485 +</li> 40.486 +<li>ucx_map_put() 40.487 +: <a class="el" href="map_8h.html#ac04a08b604217070254d4c58f0e82498">map.h</a> 40.488 +</li> 40.489 +<li>ucx_map_rehash() 40.490 +: <a class="el" href="map_8h.html#a174bce9fad554dd92b8da354e0d32512">map.h</a> 40.491 +</li> 40.492 +<li>ucx_map_remove() 40.493 +: <a class="el" href="map_8h.html#a17248a4888eb8f9ae18be522d64632aa">map.h</a> 40.494 +</li> 40.495 +<li>ucx_map_union() 40.496 +: <a class="el" href="map_8h.html#a3f65978c481af7f637cad021d93522d5">map.h</a> 40.497 +</li> 40.498 +<li>ucx_map_union_a() 40.499 +: <a class="el" href="map_8h.html#ab6370c3fa8113fdad593ce4b0460c9c6">map.h</a> 40.500 +</li> 40.501 +<li>ucx_memcpy() 40.502 +: <a class="el" href="utils_8h.html#ab2e184e6a744941aab6b8058116baf30">utils.h</a> 40.503 +</li> 40.504 +<li>ucx_mempool_calloc() 40.505 +: <a class="el" href="mempool_8h.html#a4b9142011824ae24f00fabe128417d69">mempool.h</a> 40.506 +</li> 40.507 +<li>ucx_mempool_chcap() 40.508 +: <a class="el" href="mempool_8h.html#aaf75b5016098723a9280531ccc3a6d77">mempool.h</a> 40.509 +</li> 40.510 +<li>ucx_mempool_destroy() 40.511 +: <a class="el" href="mempool_8h.html#af096378da7e9bfbed3088497cf4c15bf">mempool.h</a> 40.512 +</li> 40.513 +<li>ucx_mempool_free() 40.514 +: <a class="el" href="mempool_8h.html#aefa26e3015f5aefadbfc74221bd246ac">mempool.h</a> 40.515 +</li> 40.516 +<li>ucx_mempool_malloc() 40.517 +: <a class="el" href="mempool_8h.html#a2ae492b8f2878ccc9837ac213dced11e">mempool.h</a> 40.518 +</li> 40.519 +<li>ucx_mempool_new() 40.520 +: <a class="el" href="mempool_8h.html#ad71cb8c3b6fdb30360376a8b372ef22a">mempool.h</a> 40.521 +</li> 40.522 +<li>ucx_mempool_realloc() 40.523 +: <a class="el" href="mempool_8h.html#a660ef42520ed6737c2e77aae18e3a7a4">mempool.h</a> 40.524 +</li> 40.525 +<li>ucx_mempool_reg_destr() 40.526 +: <a class="el" href="mempool_8h.html#af47b6b7c40f8f263dc28cc9a4e77b27c">mempool.h</a> 40.527 +</li> 40.528 +<li>ucx_mempool_set_destr() 40.529 +: <a class="el" href="mempool_8h.html#adb788e7ec24cd7dbdea6381539c549f2">mempool.h</a> 40.530 +</li> 40.531 +<li>ucx_properties2map() 40.532 +: <a class="el" href="properties_8h.html#a5c7ff8bc3139960a3f3dc92072b742f3">properties.h</a> 40.533 +</li> 40.534 +<li>ucx_properties_fill() 40.535 +: <a class="el" href="properties_8h.html#aaf8de121764a4d22c763ff2ab41f3a4d">properties.h</a> 40.536 +</li> 40.537 +<li>ucx_properties_free() 40.538 +: <a class="el" href="properties_8h.html#a38a2fe7bb2986bd87c7e69356ab05c05">properties.h</a> 40.539 +</li> 40.540 +<li>ucx_properties_load() 40.541 +: <a class="el" href="properties_8h.html#ae1b600f839a6b2278b68fc314981a8a3">properties.h</a> 40.542 +</li> 40.543 +<li>ucx_properties_new() 40.544 +: <a class="el" href="properties_8h.html#a44d9dd12cab3aaa0084f1c8b89405796">properties.h</a> 40.545 +</li> 40.546 +<li>ucx_properties_next() 40.547 +: <a class="el" href="properties_8h.html#a7e03bc573d45d48c538cd721e810d33c">properties.h</a> 40.548 +</li> 40.549 +<li>ucx_properties_store() 40.550 +: <a class="el" href="properties_8h.html#a63c0c1b7648e675b21a1788917ff36fb">properties.h</a> 40.551 +</li> 40.552 +<li>ucx_sc2sc() 40.553 +: <a class="el" href="string_8h.html#a69d5e3eeec783cc43314df71248768f5">string.h</a> 40.554 +</li> 40.555 +<li>ucx_ss2c_s() 40.556 +: <a class="el" href="string_8h.html#aedeb5d7bddda54116101a8d68af8c56d">string.h</a> 40.557 +</li> 40.558 +<li>ucx_ss2sc() 40.559 +: <a class="el" href="string_8h.html#a9ce5ad1b2aa2dbeba204d452c2e64359">string.h</a> 40.560 +</li> 40.561 +<li>ucx_stack_avail() 40.562 +: <a class="el" href="stack_8h.html#a53cd2c7743dc8ad9cbd35ade0b4873e7">stack.h</a> 40.563 +</li> 40.564 +<li>ucx_stack_calloc() 40.565 +: <a class="el" href="stack_8h.html#afdc467524b5e19a9a777c6bc03e17174">stack.h</a> 40.566 +</li> 40.567 +<li>ucx_stack_free() 40.568 +: <a class="el" href="stack_8h.html#aabd55c14a3866b3782ba324f4d8b4c41">stack.h</a> 40.569 +</li> 40.570 +<li>ucx_stack_init() 40.571 +: <a class="el" href="stack_8h.html#abaef685df4e7ef95cd7218984a0618fe">stack.h</a> 40.572 +</li> 40.573 +<li>ucx_stack_malloc() 40.574 +: <a class="el" href="stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac">stack.h</a> 40.575 +</li> 40.576 +<li>ucx_stack_popn() 40.577 +: <a class="el" href="stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81">stack.h</a> 40.578 +</li> 40.579 +<li>ucx_stack_push() 40.580 +: <a class="el" href="stack_8h.html#af85e6f77a8341beb6188f9ae1a8e9f92">stack.h</a> 40.581 +</li> 40.582 +<li>ucx_stack_pusharr() 40.583 +: <a class="el" href="stack_8h.html#a7bb138979191bba138e76ea37488fae2">stack.h</a> 40.584 +</li> 40.585 +<li>ucx_stack_realloc() 40.586 +: <a class="el" href="stack_8h.html#a0c678f96f6fabab49b2b034a1fe91c3a">stack.h</a> 40.587 +</li> 40.588 +<li>ucx_strcpy() 40.589 +: <a class="el" href="utils_8h.html#adeb6e8d0a53a829207cfa0a979d01fff">utils.h</a> 40.590 +</li> 40.591 +<li>ucx_stream_bncopy() 40.592 +: <a class="el" href="utils_8h.html#a114ee7f7da62656ffd35e2dc23394201">utils.h</a> 40.593 +</li> 40.594 +<li>ucx_szmul_impl() 40.595 +: <a class="el" href="ucx_8h.html#a6637171cc0ec097b297f731a3036dd3b">ucx.h</a> 40.596 +</li> 40.597 +<li>ucx_test_register() 40.598 +: <a class="el" href="test_8h.html#a8dfabc42f183d3a4d79379a5d17bf67d">test.h</a> 40.599 +</li> 40.600 +<li>ucx_test_run() 40.601 +: <a class="el" href="test_8h.html#a3721458deeecb43aa322428f007714c3">test.h</a> 40.602 +</li> 40.603 +<li>ucx_test_suite_free() 40.604 +: <a class="el" href="test_8h.html#a4a6ac61a6f72722273f8eaa7a343edde">test.h</a> 40.605 +</li> 40.606 +<li>ucx_test_suite_new() 40.607 +: <a class="el" href="test_8h.html#a531f0df90363e0befbe900878f65f09e">test.h</a> 40.608 +</li> 40.609 +<li>ucx_vasprintf() 40.610 +: <a class="el" href="utils_8h.html#a3ea1dfb856c741f3e8ec6bfdc9ad427e">utils.h</a> 40.611 +</li> 40.612 +<li>ucx_vfprintf() 40.613 +: <a class="el" href="utils_8h.html#a4907967beb92c3ae351dd239abbb6927">utils.h</a> 40.614 +</li> 40.615 +</ul> 40.616 +</div><!-- contents --> 40.617 +<!-- start footer part --> 40.618 +<hr class="footer"/><address class="footer"><small> 40.619 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 40.620 +<img class="footer" src="doxygen.png" alt="doxygen"/> 40.621 +</a> 1.8.13 40.622 +</small></address> 40.623 +</body> 40.624 +</html>
41.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 41.2 +++ b/docs/api-2.1/globals_p.html Sat Feb 06 19:11:44 2021 +0100 41.3 @@ -0,0 +1,78 @@ 41.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 41.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 41.6 +<head> 41.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 41.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 41.9 +<meta name="generator" content="Doxygen 1.8.13"/> 41.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 41.11 +<title>ucx: Globals</title> 41.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 41.13 +<script type="text/javascript" src="jquery.js"></script> 41.14 +<script type="text/javascript" src="dynsections.js"></script> 41.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 41.16 +<script type="text/javascript" src="search/searchdata.js"></script> 41.17 +<script type="text/javascript" src="search/search.js"></script> 41.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 41.19 +</head> 41.20 +<body> 41.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 41.22 +<div id="titlearea"> 41.23 +<table cellspacing="0" cellpadding="0"> 41.24 + <tbody> 41.25 + <tr style="height: 56px;"> 41.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 41.27 + <td id="projectalign" style="padding-left: 0.5em;"> 41.28 + <div id="projectname">ucx 41.29 + </div> 41.30 + <div id="projectbrief">UAP Common Extensions</div> 41.31 + </td> 41.32 + </tr> 41.33 + </tbody> 41.34 +</table> 41.35 +</div> 41.36 +<!-- end header part --> 41.37 +<!-- Generated by Doxygen 1.8.13 --> 41.38 +<script type="text/javascript"> 41.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 41.40 +</script> 41.41 +<script type="text/javascript" src="menudata.js"></script> 41.42 +<script type="text/javascript" src="menu.js"></script> 41.43 +<script type="text/javascript"> 41.44 +$(function() { 41.45 + initMenu('',true,false,'search.php','Search'); 41.46 + $(document).ready(function() { init_search(); }); 41.47 +}); 41.48 +</script> 41.49 +<div id="main-nav"></div> 41.50 +</div><!-- top --> 41.51 +<!-- window showing the filter options --> 41.52 +<div id="MSearchSelectWindow" 41.53 + onmouseover="return searchBox.OnSearchSelectShow()" 41.54 + onmouseout="return searchBox.OnSearchSelectHide()" 41.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 41.56 +</div> 41.57 + 41.58 +<!-- iframe showing the search results (closed by default) --> 41.59 +<div id="MSearchResultsWindow"> 41.60 +<iframe src="javascript:void(0)" frameborder="0" 41.61 + name="MSearchResults" id="MSearchResults"> 41.62 +</iframe> 41.63 +</div> 41.64 + 41.65 +<div class="contents"> 41.66 +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> 41.67 + 41.68 +<h3><a id="index_p"></a>- p -</h3><ul> 41.69 +<li>PRIsstr 41.70 +: <a class="el" href="string_8h.html#a7d5bc48708405a28b23667e32dfcecae">string.h</a> 41.71 +</li> 41.72 +</ul> 41.73 +</div><!-- contents --> 41.74 +<!-- start footer part --> 41.75 +<hr class="footer"/><address class="footer"><small> 41.76 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 41.77 +<img class="footer" src="doxygen.png" alt="doxygen"/> 41.78 +</a> 1.8.13 41.79 +</small></address> 41.80 +</body> 41.81 +</html>
42.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 42.2 +++ b/docs/api-2.1/globals_r.html Sat Feb 06 19:11:44 2021 +0100 42.3 @@ -0,0 +1,78 @@ 42.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 42.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 42.6 +<head> 42.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 42.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 42.9 +<meta name="generator" content="Doxygen 1.8.13"/> 42.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 42.11 +<title>ucx: Globals</title> 42.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 42.13 +<script type="text/javascript" src="jquery.js"></script> 42.14 +<script type="text/javascript" src="dynsections.js"></script> 42.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 42.16 +<script type="text/javascript" src="search/searchdata.js"></script> 42.17 +<script type="text/javascript" src="search/search.js"></script> 42.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 42.19 +</head> 42.20 +<body> 42.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 42.22 +<div id="titlearea"> 42.23 +<table cellspacing="0" cellpadding="0"> 42.24 + <tbody> 42.25 + <tr style="height: 56px;"> 42.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 42.27 + <td id="projectalign" style="padding-left: 0.5em;"> 42.28 + <div id="projectname">ucx 42.29 + </div> 42.30 + <div id="projectbrief">UAP Common Extensions</div> 42.31 + </td> 42.32 + </tr> 42.33 + </tbody> 42.34 +</table> 42.35 +</div> 42.36 +<!-- end header part --> 42.37 +<!-- Generated by Doxygen 1.8.13 --> 42.38 +<script type="text/javascript"> 42.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 42.40 +</script> 42.41 +<script type="text/javascript" src="menudata.js"></script> 42.42 +<script type="text/javascript" src="menu.js"></script> 42.43 +<script type="text/javascript"> 42.44 +$(function() { 42.45 + initMenu('',true,false,'search.php','Search'); 42.46 + $(document).ready(function() { init_search(); }); 42.47 +}); 42.48 +</script> 42.49 +<div id="main-nav"></div> 42.50 +</div><!-- top --> 42.51 +<!-- window showing the filter options --> 42.52 +<div id="MSearchSelectWindow" 42.53 + onmouseover="return searchBox.OnSearchSelectShow()" 42.54 + onmouseout="return searchBox.OnSearchSelectHide()" 42.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 42.56 +</div> 42.57 + 42.58 +<!-- iframe showing the search results (closed by default) --> 42.59 +<div id="MSearchResultsWindow"> 42.60 +<iframe src="javascript:void(0)" frameborder="0" 42.61 + name="MSearchResults" id="MSearchResults"> 42.62 +</iframe> 42.63 +</div> 42.64 + 42.65 +<div class="contents"> 42.66 +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> 42.67 + 42.68 +<h3><a id="index_r"></a>- r -</h3><ul> 42.69 +<li>read_func 42.70 +: <a class="el" href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">ucx.h</a> 42.71 +</li> 42.72 +</ul> 42.73 +</div><!-- contents --> 42.74 +<!-- start footer part --> 42.75 +<hr class="footer"/><address class="footer"><small> 42.76 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 42.77 +<img class="footer" src="doxygen.png" alt="doxygen"/> 42.78 +</a> 1.8.13 42.79 +</small></address> 42.80 +</body> 42.81 +</html>
43.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 43.2 +++ b/docs/api-2.1/globals_s.html Sat Feb 06 19:11:44 2021 +0100 43.3 @@ -0,0 +1,246 @@ 43.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 43.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 43.6 +<head> 43.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 43.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 43.9 +<meta name="generator" content="Doxygen 1.8.13"/> 43.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 43.11 +<title>ucx: Globals</title> 43.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 43.13 +<script type="text/javascript" src="jquery.js"></script> 43.14 +<script type="text/javascript" src="dynsections.js"></script> 43.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 43.16 +<script type="text/javascript" src="search/searchdata.js"></script> 43.17 +<script type="text/javascript" src="search/search.js"></script> 43.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 43.19 +</head> 43.20 +<body> 43.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 43.22 +<div id="titlearea"> 43.23 +<table cellspacing="0" cellpadding="0"> 43.24 + <tbody> 43.25 + <tr style="height: 56px;"> 43.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 43.27 + <td id="projectalign" style="padding-left: 0.5em;"> 43.28 + <div id="projectname">ucx 43.29 + </div> 43.30 + <div id="projectbrief">UAP Common Extensions</div> 43.31 + </td> 43.32 + </tr> 43.33 + </tbody> 43.34 +</table> 43.35 +</div> 43.36 +<!-- end header part --> 43.37 +<!-- Generated by Doxygen 1.8.13 --> 43.38 +<script type="text/javascript"> 43.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 43.40 +</script> 43.41 +<script type="text/javascript" src="menudata.js"></script> 43.42 +<script type="text/javascript" src="menu.js"></script> 43.43 +<script type="text/javascript"> 43.44 +$(function() { 43.45 + initMenu('',true,false,'search.php','Search'); 43.46 + $(document).ready(function() { init_search(); }); 43.47 +}); 43.48 +</script> 43.49 +<div id="main-nav"></div> 43.50 +</div><!-- top --> 43.51 +<!-- window showing the filter options --> 43.52 +<div id="MSearchSelectWindow" 43.53 + onmouseover="return searchBox.OnSearchSelectShow()" 43.54 + onmouseout="return searchBox.OnSearchSelectHide()" 43.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 43.56 +</div> 43.57 + 43.58 +<!-- iframe showing the search results (closed by default) --> 43.59 +<div id="MSearchResultsWindow"> 43.60 +<iframe src="javascript:void(0)" frameborder="0" 43.61 + name="MSearchResults" id="MSearchResults"> 43.62 +</iframe> 43.63 +</div> 43.64 + 43.65 +<div class="contents"> 43.66 +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> 43.67 + 43.68 +<h3><a id="index_s"></a>- s -</h3><ul> 43.69 +<li>S 43.70 +: <a class="el" href="string_8h.html#a8fa17c8cf4c36df48f4108c36da8573e">string.h</a> 43.71 +</li> 43.72 +<li>SC 43.73 +: <a class="el" href="string_8h.html#a7d261dd0bc358c957a368bc058c1ce53">string.h</a> 43.74 +</li> 43.75 +<li>scstr() 43.76 +: <a class="el" href="string_8h.html#a2b1d6f1eca1c1549f37107b9c026c5a6">string.h</a> 43.77 +</li> 43.78 +<li>SCSTR 43.79 +: <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">string.h</a> 43.80 +</li> 43.81 +<li>scstrcasecmp() 43.82 +: <a class="el" href="string_8h.html#aca8142fb823d253054e17c17cfca05e0">string.h</a> 43.83 +</li> 43.84 +<li>scstrcaseprefix() 43.85 +: <a class="el" href="string_8h.html#a3718ef4aa1e86cdb26bda2f07fb585df">string.h</a> 43.86 +</li> 43.87 +<li>scstrcasesuffix() 43.88 +: <a class="el" href="string_8h.html#a6edb4b85f2b9efe79db7ffe6eccd7bc3">string.h</a> 43.89 +</li> 43.90 +<li>scstrcat() 43.91 +: <a class="el" href="string_8h.html#a7376842c19e954b49215da81ef76ac0c">string.h</a> 43.92 +</li> 43.93 +<li>scstrcat_a() 43.94 +: <a class="el" href="string_8h.html#abacce4cbd6f70fcb6453904ef08b02e9">string.h</a> 43.95 +</li> 43.96 +<li>scstrchr() 43.97 +: <a class="el" href="string_8h.html#a5836d6a7a744791c35e5c17bdc394a87">string.h</a> 43.98 +</li> 43.99 +<li>scstrcmp() 43.100 +: <a class="el" href="string_8h.html#af35272a8e5408c88ed3e25a3a98f0a82">string.h</a> 43.101 +</li> 43.102 +<li>scstrdup() 43.103 +: <a class="el" href="string_8h.html#a97dccce03af419596dbdd592ca46a164">string.h</a> 43.104 +</li> 43.105 +<li>scstrdup_a() 43.106 +: <a class="el" href="string_8h.html#a8fe58921f51eb1fde038472377e63014">string.h</a> 43.107 +</li> 43.108 +<li>scstrlower() 43.109 +: <a class="el" href="string_8h.html#abccf198bea3186ff2abb080cc88dcae6">string.h</a> 43.110 +</li> 43.111 +<li>scstrlower_a() 43.112 +: <a class="el" href="string_8h.html#a3cf1e557df7ab58d03c78832c4060276">string.h</a> 43.113 +</li> 43.114 +<li>scstrn() 43.115 +: <a class="el" href="string_8h.html#ae594f6e222ea394cef6a26c0dfad000d">string.h</a> 43.116 +</li> 43.117 +<li>scstrnlen() 43.118 +: <a class="el" href="string_8h.html#ac1b000030d6d197eec48c15a182055d5">string.h</a> 43.119 +</li> 43.120 +<li>scstrprefix() 43.121 +: <a class="el" href="string_8h.html#a599ddc2f88dd1df68b72eefd91347393">string.h</a> 43.122 +</li> 43.123 +<li>scstrrchr() 43.124 +: <a class="el" href="string_8h.html#ae389835b97cd9382e7d6a6a075323376">string.h</a> 43.125 +</li> 43.126 +<li>scstrscstr() 43.127 +: <a class="el" href="string_8h.html#a54f256c3abe811c52d58b4ff1b23f051">string.h</a> 43.128 +</li> 43.129 +<li>scstrsplit() 43.130 +: <a class="el" href="string_8h.html#ae71cac352b00230848bde358f0fb05ea">string.h</a> 43.131 +</li> 43.132 +<li>scstrsplit_a() 43.133 +: <a class="el" href="string_8h.html#a52906455ae530c9cdc6812c8e6d9bdef">string.h</a> 43.134 +</li> 43.135 +<li>scstrsstr() 43.136 +: <a class="el" href="string_8h.html#aa4362cb36c6629f9d8484739fd827748">string.h</a> 43.137 +</li> 43.138 +<li>scstrsubs() 43.139 +: <a class="el" href="string_8h.html#a9a6c8d8db0dda0037c3c852cce1a5060">string.h</a> 43.140 +</li> 43.141 +<li>scstrsubsl() 43.142 +: <a class="el" href="string_8h.html#ad50f0f67b906fad0744f46bcb51e144b">string.h</a> 43.143 +</li> 43.144 +<li>scstrsuffix() 43.145 +: <a class="el" href="string_8h.html#a1f0ae316a2afe85d5b4655e6ece6721a">string.h</a> 43.146 +</li> 43.147 +<li>scstrtrim() 43.148 +: <a class="el" href="string_8h.html#ad374b16eb1be8b48019debad9b9f268c">string.h</a> 43.149 +</li> 43.150 +<li>scstrupper() 43.151 +: <a class="el" href="string_8h.html#af3dd09ec9d11162fe0075f4e60f41240">string.h</a> 43.152 +</li> 43.153 +<li>scstrupper_a() 43.154 +: <a class="el" href="string_8h.html#aea94613eb74668cc05d365803d32bfad">string.h</a> 43.155 +</li> 43.156 +<li>SFMT 43.157 +: <a class="el" href="string_8h.html#a23ed51e87385886bb65e8cd19c839362">string.h</a> 43.158 +</li> 43.159 +<li>sstr() 43.160 +: <a class="el" href="string_8h.html#a539eb7059251a051ee5d179526a23e9a">string.h</a> 43.161 +</li> 43.162 +<li>sstrcasecmp 43.163 +: <a class="el" href="string_8h.html#a81b0f6df794152c2038703d4e9d0ad59">string.h</a> 43.164 +</li> 43.165 +<li>sstrcaseprefix 43.166 +: <a class="el" href="string_8h.html#acd3dc64e90db9b4046e14f115a815ff4">string.h</a> 43.167 +</li> 43.168 +<li>sstrcasesuffix 43.169 +: <a class="el" href="string_8h.html#a57eabd4862d531dd685bbf2feb8468bf">string.h</a> 43.170 +</li> 43.171 +<li>sstrcat 43.172 +: <a class="el" href="string_8h.html#a6af8a4c347c7fdb5980d4c4803be2759">string.h</a> 43.173 +</li> 43.174 +<li>sstrcat_a 43.175 +: <a class="el" href="string_8h.html#a6068d460f9bc05962666a917d26568b3">string.h</a> 43.176 +</li> 43.177 +<li>sstrchr() 43.178 +: <a class="el" href="string_8h.html#af80898a0b75955eb2579298c3ae2c481">string.h</a> 43.179 +</li> 43.180 +<li>sstrcmp 43.181 +: <a class="el" href="string_8h.html#a7ae7156c8de57454ca38d306100b8160">string.h</a> 43.182 +</li> 43.183 +<li>sstrdup 43.184 +: <a class="el" href="string_8h.html#accbfd2b459a028d7af9fb7df6f977d80">string.h</a> 43.185 +</li> 43.186 +<li>sstrdup_a 43.187 +: <a class="el" href="string_8h.html#a8d098baada4ea9ad5d8b6343b5aec007">string.h</a> 43.188 +</li> 43.189 +<li>sstrlower 43.190 +: <a class="el" href="string_8h.html#a89343ea3e719f00ee802b557db57b769">string.h</a> 43.191 +</li> 43.192 +<li>sstrlower_a 43.193 +: <a class="el" href="string_8h.html#a4bb4742fe71115f493991d307cb22b23">string.h</a> 43.194 +</li> 43.195 +<li>sstrn() 43.196 +: <a class="el" href="string_8h.html#a2744c38ac44abf3e01fa059056dcf36c">string.h</a> 43.197 +</li> 43.198 +<li>sstrnlen 43.199 +: <a class="el" href="string_8h.html#a33fa945acc5ac2ce962e5ef13cf1638c">string.h</a> 43.200 +</li> 43.201 +<li>sstrprefix 43.202 +: <a class="el" href="string_8h.html#a7d73b66256384b26927e787318fdefa2">string.h</a> 43.203 +</li> 43.204 +<li>sstrrchr() 43.205 +: <a class="el" href="string_8h.html#adae3f59957ca328e1da5285cb8b02a72">string.h</a> 43.206 +</li> 43.207 +<li>sstrscstr 43.208 +: <a class="el" href="string_8h.html#aa696932213265e10f864678686f4ccde">string.h</a> 43.209 +</li> 43.210 +<li>sstrsplit 43.211 +: <a class="el" href="string_8h.html#aa929984004c3576bfafb95031aca8eb7">string.h</a> 43.212 +</li> 43.213 +<li>sstrsplit_a 43.214 +: <a class="el" href="string_8h.html#ac9f69fa3a17e26a3a5f9d985b5844601">string.h</a> 43.215 +</li> 43.216 +<li>sstrstr 43.217 +: <a class="el" href="string_8h.html#a9d03be026afa9447c52bb34b9e3b895a">string.h</a> 43.218 +</li> 43.219 +<li>sstrsubs() 43.220 +: <a class="el" href="string_8h.html#a5eb9e0e1f26cf7fbecc038cd90e8b258">string.h</a> 43.221 +</li> 43.222 +<li>sstrsubsl() 43.223 +: <a class="el" href="string_8h.html#a78925c91af54f23cebd20ff99ef4331a">string.h</a> 43.224 +</li> 43.225 +<li>sstrsuffix 43.226 +: <a class="el" href="string_8h.html#ac6a5246f26be2e8a5f34d8995b7ec14e">string.h</a> 43.227 +</li> 43.228 +<li>sstrtrim() 43.229 +: <a class="el" href="string_8h.html#ae2d6da564d3fce51f2e0cac580fdbc56">string.h</a> 43.230 +</li> 43.231 +<li>sstrupper 43.232 +: <a class="el" href="string_8h.html#a084fe5a3a90d6fb6b15ecda03bb30824">string.h</a> 43.233 +</li> 43.234 +<li>sstrupper_a 43.235 +: <a class="el" href="string_8h.html#a5f0dd83c0176b812fb428004b2877a34">string.h</a> 43.236 +</li> 43.237 +<li>ST 43.238 +: <a class="el" href="string_8h.html#a9037956cca97a4e84b642f17f3d10378">string.h</a> 43.239 +</li> 43.240 +</ul> 43.241 +</div><!-- contents --> 43.242 +<!-- start footer part --> 43.243 +<hr class="footer"/><address class="footer"><small> 43.244 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 43.245 +<img class="footer" src="doxygen.png" alt="doxygen"/> 43.246 +</a> 1.8.13 43.247 +</small></address> 43.248 +</body> 43.249 +</html>
44.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 44.2 +++ b/docs/api-2.1/globals_type.html Sat Feb 06 19:11:44 2021 +0100 44.3 @@ -0,0 +1,130 @@ 44.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 44.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 44.6 +<head> 44.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 44.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 44.9 +<meta name="generator" content="Doxygen 1.8.13"/> 44.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 44.11 +<title>ucx: Globals</title> 44.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 44.13 +<script type="text/javascript" src="jquery.js"></script> 44.14 +<script type="text/javascript" src="dynsections.js"></script> 44.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 44.16 +<script type="text/javascript" src="search/searchdata.js"></script> 44.17 +<script type="text/javascript" src="search/search.js"></script> 44.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 44.19 +</head> 44.20 +<body> 44.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 44.22 +<div id="titlearea"> 44.23 +<table cellspacing="0" cellpadding="0"> 44.24 + <tbody> 44.25 + <tr style="height: 56px;"> 44.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 44.27 + <td id="projectalign" style="padding-left: 0.5em;"> 44.28 + <div id="projectname">ucx 44.29 + </div> 44.30 + <div id="projectbrief">UAP Common Extensions</div> 44.31 + </td> 44.32 + </tr> 44.33 + </tbody> 44.34 +</table> 44.35 +</div> 44.36 +<!-- end header part --> 44.37 +<!-- Generated by Doxygen 1.8.13 --> 44.38 +<script type="text/javascript"> 44.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 44.40 +</script> 44.41 +<script type="text/javascript" src="menudata.js"></script> 44.42 +<script type="text/javascript" src="menu.js"></script> 44.43 +<script type="text/javascript"> 44.44 +$(function() { 44.45 + initMenu('',true,false,'search.php','Search'); 44.46 + $(document).ready(function() { init_search(); }); 44.47 +}); 44.48 +</script> 44.49 +<div id="main-nav"></div> 44.50 +</div><!-- top --> 44.51 +<!-- window showing the filter options --> 44.52 +<div id="MSearchSelectWindow" 44.53 + onmouseover="return searchBox.OnSearchSelectShow()" 44.54 + onmouseout="return searchBox.OnSearchSelectHide()" 44.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 44.56 +</div> 44.57 + 44.58 +<!-- iframe showing the search results (closed by default) --> 44.59 +<div id="MSearchResultsWindow"> 44.60 +<iframe src="javascript:void(0)" frameborder="0" 44.61 + name="MSearchResults" id="MSearchResults"> 44.62 +</iframe> 44.63 +</div> 44.64 + 44.65 +<div class="contents"> 44.66 + <ul> 44.67 +<li>cmp_func 44.68 +: <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">ucx.h</a> 44.69 +</li> 44.70 +<li>copy_func 44.71 +: <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">ucx.h</a> 44.72 +</li> 44.73 +<li>distance_func 44.74 +: <a class="el" href="ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9">ucx.h</a> 44.75 +</li> 44.76 +<li>read_func 44.77 +: <a class="el" href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">ucx.h</a> 44.78 +</li> 44.79 +<li>ucx_allocator_calloc 44.80 +: <a class="el" href="allocator_8h.html#a2c0aba4221c1ac6801f03ed799f15b12">allocator.h</a> 44.81 +</li> 44.82 +<li>ucx_allocator_free 44.83 +: <a class="el" href="allocator_8h.html#aaf2387ddaddd8ab4b267e6b00e5d6f7e">allocator.h</a> 44.84 +</li> 44.85 +<li>ucx_allocator_malloc 44.86 +: <a class="el" href="allocator_8h.html#a29f0f6a23a70db3b60635cd6dc384473">allocator.h</a> 44.87 +</li> 44.88 +<li>ucx_allocator_realloc 44.89 +: <a class="el" href="allocator_8h.html#a6d7cf038a806e327c5da37321d04e426">allocator.h</a> 44.90 +</li> 44.91 +<li>ucx_destructor 44.92 +: <a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx.h</a> 44.93 +</li> 44.94 +<li>UcxAVLNode 44.95 +: <a class="el" href="avl_8h.html#a08ba2496c2316df58548c3cc29712add">avl.h</a> 44.96 +</li> 44.97 +<li>UcxKey 44.98 +: <a class="el" href="map_8h.html#ad63828bb23123fc01a5315a2bac3b142">map.h</a> 44.99 +</li> 44.100 +<li>UcxList 44.101 +: <a class="el" href="list_8h.html#aa6f89f91c1081c9a7c6866c298f497a2">list.h</a> 44.102 +</li> 44.103 +<li>UcxMap 44.104 +: <a class="el" href="map_8h.html#a18e21948725b2da68c35da587a722033">map.h</a> 44.105 +</li> 44.106 +<li>UcxMapElement 44.107 +: <a class="el" href="map_8h.html#ad7d7a910a32113eb93eae11c3dc97b4b">map.h</a> 44.108 +</li> 44.109 +<li>UcxMapIterator 44.110 +: <a class="el" href="map_8h.html#ae36aff5f645948c54f51578b11fd87fb">map.h</a> 44.111 +</li> 44.112 +<li>UcxTest 44.113 +: <a class="el" href="test_8h.html#ae906817354c010b83c2784260cce7a1c">test.h</a> 44.114 +</li> 44.115 +<li>UcxTestList 44.116 +: <a class="el" href="test_8h.html#a8048c50ae73ea690b776edfd63bd6a5d">test.h</a> 44.117 +</li> 44.118 +<li>UcxTestSuite 44.119 +: <a class="el" href="test_8h.html#a52115d1d0f1c4a565ed6ef7c1bfd0363">test.h</a> 44.120 +</li> 44.121 +<li>write_func 44.122 +: <a class="el" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">ucx.h</a> 44.123 +</li> 44.124 +</ul> 44.125 +</div><!-- contents --> 44.126 +<!-- start footer part --> 44.127 +<hr class="footer"/><address class="footer"><small> 44.128 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 44.129 +<img class="footer" src="doxygen.png" alt="doxygen"/> 44.130 +</a> 1.8.13 44.131 +</small></address> 44.132 +</body> 44.133 +</html>
45.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 45.2 +++ b/docs/api-2.1/globals_u.html Sat Feb 06 19:11:44 2021 +0100 45.3 @@ -0,0 +1,846 @@ 45.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 45.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 45.6 +<head> 45.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 45.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 45.9 +<meta name="generator" content="Doxygen 1.8.13"/> 45.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 45.11 +<title>ucx: Globals</title> 45.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 45.13 +<script type="text/javascript" src="jquery.js"></script> 45.14 +<script type="text/javascript" src="dynsections.js"></script> 45.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 45.16 +<script type="text/javascript" src="search/searchdata.js"></script> 45.17 +<script type="text/javascript" src="search/search.js"></script> 45.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 45.19 +</head> 45.20 +<body> 45.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 45.22 +<div id="titlearea"> 45.23 +<table cellspacing="0" cellpadding="0"> 45.24 + <tbody> 45.25 + <tr style="height: 56px;"> 45.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 45.27 + <td id="projectalign" style="padding-left: 0.5em;"> 45.28 + <div id="projectname">ucx 45.29 + </div> 45.30 + <div id="projectbrief">UAP Common Extensions</div> 45.31 + </td> 45.32 + </tr> 45.33 + </tbody> 45.34 +</table> 45.35 +</div> 45.36 +<!-- end header part --> 45.37 +<!-- Generated by Doxygen 1.8.13 --> 45.38 +<script type="text/javascript"> 45.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 45.40 +</script> 45.41 +<script type="text/javascript" src="menudata.js"></script> 45.42 +<script type="text/javascript" src="menu.js"></script> 45.43 +<script type="text/javascript"> 45.44 +$(function() { 45.45 + initMenu('',true,false,'search.php','Search'); 45.46 + $(document).ready(function() { init_search(); }); 45.47 +}); 45.48 +</script> 45.49 +<div id="main-nav"></div> 45.50 +</div><!-- top --> 45.51 +<!-- window showing the filter options --> 45.52 +<div id="MSearchSelectWindow" 45.53 + onmouseover="return searchBox.OnSearchSelectShow()" 45.54 + onmouseout="return searchBox.OnSearchSelectHide()" 45.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 45.56 +</div> 45.57 + 45.58 +<!-- iframe showing the search results (closed by default) --> 45.59 +<div id="MSearchResultsWindow"> 45.60 +<iframe src="javascript:void(0)" frameborder="0" 45.61 + name="MSearchResults" id="MSearchResults"> 45.62 +</iframe> 45.63 +</div> 45.64 + 45.65 +<div class="contents"> 45.66 +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> 45.67 + 45.68 +<h3><a id="index_u"></a>- u -</h3><ul> 45.69 +<li>ucx_allocator_calloc 45.70 +: <a class="el" href="allocator_8h.html#a2c0aba4221c1ac6801f03ed799f15b12">allocator.h</a> 45.71 +</li> 45.72 +<li>UCX_ALLOCATOR_DEFAULT 45.73 +: <a class="el" href="allocator_8h.html#a1283a8f875f90a7af3aba5e031fc2e3f">allocator.h</a> 45.74 +</li> 45.75 +<li>ucx_allocator_free 45.76 +: <a class="el" href="allocator_8h.html#aaf2387ddaddd8ab4b267e6b00e5d6f7e">allocator.h</a> 45.77 +</li> 45.78 +<li>ucx_allocator_malloc 45.79 +: <a class="el" href="allocator_8h.html#a29f0f6a23a70db3b60635cd6dc384473">allocator.h</a> 45.80 +</li> 45.81 +<li>ucx_allocator_realloc 45.82 +: <a class="el" href="allocator_8h.html#a6d7cf038a806e327c5da37321d04e426">allocator.h</a> 45.83 +</li> 45.84 +<li>ucx_array_append_from() 45.85 +: <a class="el" href="array_8h.html#aea01731ad94ea73c0c8fb1d1b7a35fcf">array.h</a> 45.86 +</li> 45.87 +<li>ucx_array_at() 45.88 +: <a class="el" href="array_8h.html#aa698085fd1a8b70d6b709999c51b49e8">array.h</a> 45.89 +</li> 45.90 +<li>ucx_array_clone() 45.91 +: <a class="el" href="array_8h.html#a4a8c273370e4a3a3e2624e364f5ab410">array.h</a> 45.92 +</li> 45.93 +<li>ucx_array_concat() 45.94 +: <a class="el" href="array_8h.html#aa5a0bf3d3f0df6406beb0e569021cc28">array.h</a> 45.95 +</li> 45.96 +<li>ucx_array_contains() 45.97 +: <a class="el" href="array_8h.html#a5241058cd2329147bc5b1593ae7e51dc">array.h</a> 45.98 +</li> 45.99 +<li>ucx_array_destroy() 45.100 +: <a class="el" href="array_8h.html#a8e83681d8d5d8cddbf10f63ce5be4c10">array.h</a> 45.101 +</li> 45.102 +<li>ucx_array_equals() 45.103 +: <a class="el" href="array_8h.html#a43292b448adb1741677aa8c578bcc201">array.h</a> 45.104 +</li> 45.105 +<li>ucx_array_find() 45.106 +: <a class="el" href="array_8h.html#ae7bdbed94afee9b20b38b95e3ab470f0">array.h</a> 45.107 +</li> 45.108 +<li>ucx_array_free() 45.109 +: <a class="el" href="array_8h.html#ac01ee914468a16f470bf3071fffbe438">array.h</a> 45.110 +</li> 45.111 +<li>ucx_array_grow() 45.112 +: <a class="el" href="array_8h.html#ab0cbf243824aaebee48277315e03afce">array.h</a> 45.113 +</li> 45.114 +<li>ucx_array_init() 45.115 +: <a class="el" href="array_8h.html#ad921e85c28ffae32230777a53c5037e5">array.h</a> 45.116 +</li> 45.117 +<li>ucx_array_init_a() 45.118 +: <a class="el" href="array_8h.html#a2451e61ebb15a7ba1c1319267ba75b8c">array.h</a> 45.119 +</li> 45.120 +<li>ucx_array_new() 45.121 +: <a class="el" href="array_8h.html#a994a2fbf1c33a3833e2a70cd9a4352b7">array.h</a> 45.122 +</li> 45.123 +<li>ucx_array_new_a() 45.124 +: <a class="el" href="array_8h.html#a177170258c215eb2e4f5a32e59f0cb1b">array.h</a> 45.125 +</li> 45.126 +<li>ucx_array_prepend_from() 45.127 +: <a class="el" href="array_8h.html#a95b52acc2193b5c33cf0eaa4f2082477">array.h</a> 45.128 +</li> 45.129 +<li>ucx_array_remove() 45.130 +: <a class="el" href="array_8h.html#aa45eac6b697f83adac81c0860cf306b8">array.h</a> 45.131 +</li> 45.132 +<li>ucx_array_remove_fast() 45.133 +: <a class="el" href="array_8h.html#a548d81b07612bae3ba8c4c4b49104b8e">array.h</a> 45.134 +</li> 45.135 +<li>ucx_array_reserve() 45.136 +: <a class="el" href="array_8h.html#a1c3bf8433c1de3c933f3854ab297fe1d">array.h</a> 45.137 +</li> 45.138 +<li>ucx_array_resize() 45.139 +: <a class="el" href="array_8h.html#a27762e7c06a6c781015e3c8ceeee0ce3">array.h</a> 45.140 +</li> 45.141 +<li>ucx_array_set_from() 45.142 +: <a class="el" href="array_8h.html#a1bb545d065358d265d80d815ba382a28">array.h</a> 45.143 +</li> 45.144 +<li>ucx_array_shrink() 45.145 +: <a class="el" href="array_8h.html#a2daf50e80aee9bccebee876a7efd2dfc">array.h</a> 45.146 +</li> 45.147 +<li>ucx_array_sort() 45.148 +: <a class="el" href="array_8h.html#add773514569b872a6624381b4b6af52c">array.h</a> 45.149 +</li> 45.150 +<li>ucx_array_util_set 45.151 +: <a class="el" href="array_8h.html#a1d959c29af3125bdd37cde3a554e729c">array.h</a> 45.152 +</li> 45.153 +<li>ucx_array_util_set_a() 45.154 +: <a class="el" href="array_8h.html#ad0a8d76980cf1c1910e64a245803fb9a">array.h</a> 45.155 +</li> 45.156 +<li>ucx_array_util_setptr 45.157 +: <a class="el" href="array_8h.html#a59a5b342965e790945f9c7a3f86b99f9">array.h</a> 45.158 +</li> 45.159 +<li>ucx_array_util_setptr_a() 45.160 +: <a class="el" href="array_8h.html#ad708b333c0c1b02c998309a58ea65e31">array.h</a> 45.161 +</li> 45.162 +<li>ucx_asprintf() 45.163 +: <a class="el" href="utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5">utils.h</a> 45.164 +</li> 45.165 +<li>ucx_avl_count() 45.166 +: <a class="el" href="avl_8h.html#a92c1d41c2b22fe4a029a486ab2153e35">avl.h</a> 45.167 +</li> 45.168 +<li>ucx_avl_default_new 45.169 +: <a class="el" href="avl_8h.html#ac2886d4b79b48c9fabf6408873f84cd2">avl.h</a> 45.170 +</li> 45.171 +<li>ucx_avl_find() 45.172 +: <a class="el" href="avl_8h.html#a51770e1614b28d7d22dea096c3704f83">avl.h</a> 45.173 +</li> 45.174 +<li>UCX_AVL_FIND_CLOSEST 45.175 +: <a class="el" href="avl_8h.html#af16f24d74fd6af0154de041566c6603b">avl.h</a> 45.176 +</li> 45.177 +<li>UCX_AVL_FIND_EXACT 45.178 +: <a class="el" href="avl_8h.html#aaaf4a6f6f661cda7791db239212285d9">avl.h</a> 45.179 +</li> 45.180 +<li>UCX_AVL_FIND_LOWER_BOUNDED 45.181 +: <a class="el" href="avl_8h.html#abd2446d544d5412b6997ee8a17bd368c">avl.h</a> 45.182 +</li> 45.183 +<li>ucx_avl_find_node() 45.184 +: <a class="el" href="avl_8h.html#a664986f64d6865605199fbff06e19cd5">avl.h</a> 45.185 +</li> 45.186 +<li>UCX_AVL_FIND_UPPER_BOUNDED 45.187 +: <a class="el" href="avl_8h.html#ac74ee7649c1e206b08b31f37dd68ca5e">avl.h</a> 45.188 +</li> 45.189 +<li>ucx_avl_free() 45.190 +: <a class="el" href="avl_8h.html#a2f92db538f25fce908d2cb3e5590944c">avl.h</a> 45.191 +</li> 45.192 +<li>ucx_avl_free_content() 45.193 +: <a class="el" href="avl_8h.html#a31ad7fb196ca211f1fc39f4e15f72279">avl.h</a> 45.194 +</li> 45.195 +<li>ucx_avl_get() 45.196 +: <a class="el" href="avl_8h.html#adbcf7ceb3f014a30c7214f7304519efe">avl.h</a> 45.197 +</li> 45.198 +<li>ucx_avl_get_node() 45.199 +: <a class="el" href="avl_8h.html#acf42da9a4168e47dc10b4ba0d27ceb4e">avl.h</a> 45.200 +</li> 45.201 +<li>ucx_avl_new() 45.202 +: <a class="el" href="avl_8h.html#a11b043d65a11b7092d5d98b298e5ede3">avl.h</a> 45.203 +</li> 45.204 +<li>ucx_avl_new_a() 45.205 +: <a class="el" href="avl_8h.html#af0f868d67e9dc08b4867c02a06c23ee2">avl.h</a> 45.206 +</li> 45.207 +<li>ucx_avl_pred() 45.208 +: <a class="el" href="avl_8h.html#a0e739aeb66dda6a6a3f6eb51b50cf346">avl.h</a> 45.209 +</li> 45.210 +<li>ucx_avl_put() 45.211 +: <a class="el" href="avl_8h.html#aec401fab4a24a7edffa734f9baf88577">avl.h</a> 45.212 +</li> 45.213 +<li>ucx_avl_put_s() 45.214 +: <a class="el" href="avl_8h.html#a32cf8955cc0226a82bacfc7b76d6474c">avl.h</a> 45.215 +</li> 45.216 +<li>ucx_avl_remove() 45.217 +: <a class="el" href="avl_8h.html#a1d821119c805d7fbb7e424bc3effeba9">avl.h</a> 45.218 +</li> 45.219 +<li>ucx_avl_remove_node() 45.220 +: <a class="el" href="avl_8h.html#a9a792b7d9e58073deef74a341f8bc720">avl.h</a> 45.221 +</li> 45.222 +<li>ucx_avl_remove_s() 45.223 +: <a class="el" href="avl_8h.html#a01aeeecd6415f0cc2b623486eb28f254">avl.h</a> 45.224 +</li> 45.225 +<li>ucx_avl_succ() 45.226 +: <a class="el" href="avl_8h.html#aab1ad9b027ff5e50671aa0ee84e2d541">avl.h</a> 45.227 +</li> 45.228 +<li>ucx_bprintf 45.229 +: <a class="el" href="utils_8h.html#a9d7d65a420f026fcb6982803d5120519">utils.h</a> 45.230 +</li> 45.231 +<li>UCX_BUFFER_AUTOEXTEND 45.232 +: <a class="el" href="buffer_8h.html#a05f9565f2d04399168c3b1c152a632be">buffer.h</a> 45.233 +</li> 45.234 +<li>UCX_BUFFER_AUTOFREE 45.235 +: <a class="el" href="buffer_8h.html#a8bab11ad8a76719228b9ee91e2e45535">buffer.h</a> 45.236 +</li> 45.237 +<li>ucx_buffer_clear 45.238 +: <a class="el" href="buffer_8h.html#a374abd5aabfcc3ee0777a79d5fe651ab">buffer.h</a> 45.239 +</li> 45.240 +<li>ucx_buffer_clone 45.241 +: <a class="el" href="buffer_8h.html#a828353846428c2c2f695f9938f059e52">buffer.h</a> 45.242 +</li> 45.243 +<li>UCX_BUFFER_DEFAULT 45.244 +: <a class="el" href="buffer_8h.html#acc77c8ed7b26854f555d4a5d11e49ea2">buffer.h</a> 45.245 +</li> 45.246 +<li>ucx_buffer_eof() 45.247 +: <a class="el" href="buffer_8h.html#abad7fd9ad5061224c780b8d1d4c55f09">buffer.h</a> 45.248 +</li> 45.249 +<li>ucx_buffer_extend() 45.250 +: <a class="el" href="buffer_8h.html#afaf97d2cd7e9faad79a9d35fe33e30c6">buffer.h</a> 45.251 +</li> 45.252 +<li>ucx_buffer_extract() 45.253 +: <a class="el" href="buffer_8h.html#a33fa7bb35fe08bbb3542f227514332ef">buffer.h</a> 45.254 +</li> 45.255 +<li>ucx_buffer_free() 45.256 +: <a class="el" href="buffer_8h.html#a2af8646d8905c22c7322e7540b0440af">buffer.h</a> 45.257 +</li> 45.258 +<li>ucx_buffer_getc() 45.259 +: <a class="el" href="buffer_8h.html#a396339022159ce4ca6d069de9f9209b0">buffer.h</a> 45.260 +</li> 45.261 +<li>ucx_buffer_new() 45.262 +: <a class="el" href="buffer_8h.html#aacea876d692193ec6f859ce98da7351c">buffer.h</a> 45.263 +</li> 45.264 +<li>ucx_buffer_putc() 45.265 +: <a class="el" href="buffer_8h.html#a7d6f01b9d631b0123475dfb98fb849ac">buffer.h</a> 45.266 +</li> 45.267 +<li>ucx_buffer_puts() 45.268 +: <a class="el" href="buffer_8h.html#af1d4b478e04b3ae0bf30e7c2ea964ea2">buffer.h</a> 45.269 +</li> 45.270 +<li>ucx_buffer_read() 45.271 +: <a class="el" href="buffer_8h.html#ae5c3430759f0059547b35d5a254d4da5">buffer.h</a> 45.272 +</li> 45.273 +<li>ucx_buffer_seek() 45.274 +: <a class="el" href="buffer_8h.html#a47d98482662073c74f35deb0957d15d1">buffer.h</a> 45.275 +</li> 45.276 +<li>ucx_buffer_shift() 45.277 +: <a class="el" href="buffer_8h.html#a12a0c6a2379ef080043e6286bb8bad69">buffer.h</a> 45.278 +</li> 45.279 +<li>ucx_buffer_shift_left() 45.280 +: <a class="el" href="buffer_8h.html#a20431dd0ed6a6fe9f15333bd72afe4db">buffer.h</a> 45.281 +</li> 45.282 +<li>ucx_buffer_shift_right() 45.283 +: <a class="el" href="buffer_8h.html#a4fa10b6471495547eb981248fd4f1bc2">buffer.h</a> 45.284 +</li> 45.285 +<li>ucx_buffer_to_sstr 45.286 +: <a class="el" href="buffer_8h.html#a0f4b64f1b3a74c4f6c5d9409d6b6086a">buffer.h</a> 45.287 +</li> 45.288 +<li>ucx_buffer_write() 45.289 +: <a class="el" href="buffer_8h.html#af8aacc7401814392b58c1b7b81bffc05">buffer.h</a> 45.290 +</li> 45.291 +<li>ucx_cmp_double() 45.292 +: <a class="el" href="utils_8h.html#ab804b7c27d0bfcd7bf3a3583140825b6">utils.h</a> 45.293 +</li> 45.294 +<li>ucx_cmp_float() 45.295 +: <a class="el" href="utils_8h.html#ad1196b561bcdad76c393885819769a97">utils.h</a> 45.296 +</li> 45.297 +<li>ucx_cmp_int() 45.298 +: <a class="el" href="utils_8h.html#a8ce7e11e6b3deafe89a32a091fde7f16">utils.h</a> 45.299 +</li> 45.300 +<li>ucx_cmp_int16() 45.301 +: <a class="el" href="utils_8h.html#aa29e6e559946375e34113e34e0b0bd0d">utils.h</a> 45.302 +</li> 45.303 +<li>ucx_cmp_int32() 45.304 +: <a class="el" href="utils_8h.html#a858b2ac443fb202643b71f6a7e9218dd">utils.h</a> 45.305 +</li> 45.306 +<li>ucx_cmp_int64() 45.307 +: <a class="el" href="utils_8h.html#a54701aea6a89fed1402dfb0bf56bc7f6">utils.h</a> 45.308 +</li> 45.309 +<li>ucx_cmp_longint() 45.310 +: <a class="el" href="utils_8h.html#aeb57a2b9a6aaa0460c7a6bec29accf2c">utils.h</a> 45.311 +</li> 45.312 +<li>ucx_cmp_longlong() 45.313 +: <a class="el" href="utils_8h.html#a366b57def20f86a41eaedf575eea5375">utils.h</a> 45.314 +</li> 45.315 +<li>ucx_cmp_mem() 45.316 +: <a class="el" href="utils_8h.html#aff7d2bcded71196831a8c0664333f8e7">utils.h</a> 45.317 +</li> 45.318 +<li>ucx_cmp_ptr() 45.319 +: <a class="el" href="utils_8h.html#aa174d539de3ea59be4f9640f17ce53d8">utils.h</a> 45.320 +</li> 45.321 +<li>ucx_cmp_sstr() 45.322 +: <a class="el" href="utils_8h.html#adee0739589166d272f8cb7c23aabf8ba">utils.h</a> 45.323 +</li> 45.324 +<li>ucx_cmp_str() 45.325 +: <a class="el" href="utils_8h.html#aa6a37b9d172b6a5b2803d152f9e1b258">utils.h</a> 45.326 +</li> 45.327 +<li>ucx_cmp_strn() 45.328 +: <a class="el" href="utils_8h.html#ac6b354a878f551a3a5b20a167db3f308">utils.h</a> 45.329 +</li> 45.330 +<li>ucx_cmp_uint() 45.331 +: <a class="el" href="utils_8h.html#abd83a5da91c3dd026a6931bd80c12f1e">utils.h</a> 45.332 +</li> 45.333 +<li>ucx_cmp_uint16() 45.334 +: <a class="el" href="utils_8h.html#acde5366437e886a459b7468f7a9e11f0">utils.h</a> 45.335 +</li> 45.336 +<li>ucx_cmp_uint32() 45.337 +: <a class="el" href="utils_8h.html#a5879d1722330355914d8c9146fa549d3">utils.h</a> 45.338 +</li> 45.339 +<li>ucx_cmp_uint64() 45.340 +: <a class="el" href="utils_8h.html#a1572a78b5b42f7151a5b2a5a7283d62d">utils.h</a> 45.341 +</li> 45.342 +<li>ucx_cmp_ulongint() 45.343 +: <a class="el" href="utils_8h.html#a3f3cbae2594d6f722bae29acb0408a24">utils.h</a> 45.344 +</li> 45.345 +<li>ucx_cmp_ulonglong() 45.346 +: <a class="el" href="utils_8h.html#a6acfc359421f21f9a042a654ff7faac5">utils.h</a> 45.347 +</li> 45.348 +<li>ucx_default_allocator() 45.349 +: <a class="el" href="allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf">allocator.h</a> 45.350 +</li> 45.351 +<li>ucx_default_calloc() 45.352 +: <a class="el" href="allocator_8h.html#a3a0bfdd13d887012309c459b339f338f">allocator.h</a> 45.353 +</li> 45.354 +<li>ucx_default_free() 45.355 +: <a class="el" href="allocator_8h.html#a646d83aaaadfe33ae414c0fad8bfc52a">allocator.h</a> 45.356 +</li> 45.357 +<li>ucx_default_malloc() 45.358 +: <a class="el" href="allocator_8h.html#a96403ebf3d2312d95f2fe7627a1cdbc0">allocator.h</a> 45.359 +</li> 45.360 +<li>ucx_default_realloc() 45.361 +: <a class="el" href="allocator_8h.html#a47cfc8af626a86fcb93a2b14b90498ed">allocator.h</a> 45.362 +</li> 45.363 +<li>ucx_destructor 45.364 +: <a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx.h</a> 45.365 +</li> 45.366 +<li>ucx_dist_int() 45.367 +: <a class="el" href="utils_8h.html#a4ab6753739d56c09cdf6079fdcabf7c6">utils.h</a> 45.368 +</li> 45.369 +<li>ucx_dist_int16() 45.370 +: <a class="el" href="utils_8h.html#a81fb8434b70ca11bf2c14abfa21d16a9">utils.h</a> 45.371 +</li> 45.372 +<li>ucx_dist_int32() 45.373 +: <a class="el" href="utils_8h.html#ab4a659cc46096f0490c1dafa57726476">utils.h</a> 45.374 +</li> 45.375 +<li>ucx_dist_int64() 45.376 +: <a class="el" href="utils_8h.html#a54e7d06585bad3a899befc4e9c13853f">utils.h</a> 45.377 +</li> 45.378 +<li>ucx_dist_longint() 45.379 +: <a class="el" href="utils_8h.html#a43e73d288b1553a0078bf4c98dd341f5">utils.h</a> 45.380 +</li> 45.381 +<li>ucx_dist_longlong() 45.382 +: <a class="el" href="utils_8h.html#a306778414a2427951ea263be92368627">utils.h</a> 45.383 +</li> 45.384 +<li>ucx_dist_uint() 45.385 +: <a class="el" href="utils_8h.html#a37b7d471ca1679992afc11a0deda45f4">utils.h</a> 45.386 +</li> 45.387 +<li>ucx_dist_uint16() 45.388 +: <a class="el" href="utils_8h.html#a66e00a0703cbcde050ec922578e2f080">utils.h</a> 45.389 +</li> 45.390 +<li>ucx_dist_uint32() 45.391 +: <a class="el" href="utils_8h.html#add2b5c5507caba59d894b84e056b079b">utils.h</a> 45.392 +</li> 45.393 +<li>ucx_dist_uint64() 45.394 +: <a class="el" href="utils_8h.html#a3ba75e2e0b2479eef2b22fb219b42da7">utils.h</a> 45.395 +</li> 45.396 +<li>ucx_dist_ulongint() 45.397 +: <a class="el" href="utils_8h.html#abb13476228d0c16bfaba08469adbae2d">utils.h</a> 45.398 +</li> 45.399 +<li>ucx_dist_ulonglong() 45.400 +: <a class="el" href="utils_8h.html#a59a5859272cb4b43cbdd58208c41e32b">utils.h</a> 45.401 +</li> 45.402 +<li>UCX_FOREACH 45.403 +: <a class="el" href="list_8h.html#a4b143b6526a410aa4d22cb3bb9365d70">list.h</a> 45.404 +</li> 45.405 +<li>ucx_fprintf() 45.406 +: <a class="el" href="utils_8h.html#aa0bec80e1c67f769ff5e112a7d4ce72a">utils.h</a> 45.407 +</li> 45.408 +<li>ucx_hash() 45.409 +: <a class="el" href="map_8h.html#aea3be97254c05595d986ef6a9faae87b">map.h</a> 45.410 +</li> 45.411 +<li>ucx_key() 45.412 +: <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">map.h</a> 45.413 +</li> 45.414 +<li>ucx_list_append() 45.415 +: <a class="el" href="list_8h.html#a00c122c8a26d35b60676939df4161621">list.h</a> 45.416 +</li> 45.417 +<li>ucx_list_append_a() 45.418 +: <a class="el" href="list_8h.html#adf3b3e2e0ff977d8928671d6bd82fc60">list.h</a> 45.419 +</li> 45.420 +<li>ucx_list_clone() 45.421 +: <a class="el" href="list_8h.html#ae7054a41c289b24e6caf5cb07ac850ed">list.h</a> 45.422 +</li> 45.423 +<li>ucx_list_clone_a() 45.424 +: <a class="el" href="list_8h.html#a08ca1ba0d2e82258b0408714c1f4c425">list.h</a> 45.425 +</li> 45.426 +<li>ucx_list_concat() 45.427 +: <a class="el" href="list_8h.html#a77163a0cc82fae52bec26c8c0c3674d9">list.h</a> 45.428 +</li> 45.429 +<li>ucx_list_contains() 45.430 +: <a class="el" href="list_8h.html#a8b0fa051fcfe12e1a82cca1087973852">list.h</a> 45.431 +</li> 45.432 +<li>ucx_list_difference() 45.433 +: <a class="el" href="list_8h.html#a6c5db5d1d11ad28b6fe1a80ee1c1e449">list.h</a> 45.434 +</li> 45.435 +<li>ucx_list_difference_a() 45.436 +: <a class="el" href="list_8h.html#a4a2a2fc5cc41073c516db6235bbc51d5">list.h</a> 45.437 +</li> 45.438 +<li>ucx_list_equals() 45.439 +: <a class="el" href="list_8h.html#adc435447cecf885bc63d232191085bbe">list.h</a> 45.440 +</li> 45.441 +<li>ucx_list_find() 45.442 +: <a class="el" href="list_8h.html#a9b3b6842d3be572e06a7f519e198cb83">list.h</a> 45.443 +</li> 45.444 +<li>ucx_list_first() 45.445 +: <a class="el" href="list_8h.html#a6aa0e34ebc5f0dca6f52d0f7626b4bd5">list.h</a> 45.446 +</li> 45.447 +<li>ucx_list_free() 45.448 +: <a class="el" href="list_8h.html#a1a0fa2c5b1e478a96da19b0c3f013668">list.h</a> 45.449 +</li> 45.450 +<li>ucx_list_free_a() 45.451 +: <a class="el" href="list_8h.html#a944e11f76c38767cd1100d72a4e3b25b">list.h</a> 45.452 +</li> 45.453 +<li>ucx_list_free_content() 45.454 +: <a class="el" href="list_8h.html#a4ba6c96642f72ea046cc22627c72979c">list.h</a> 45.455 +</li> 45.456 +<li>ucx_list_get() 45.457 +: <a class="el" href="list_8h.html#a2509ffe19bce6a8708c77f89480c75fb">list.h</a> 45.458 +</li> 45.459 +<li>ucx_list_indexof() 45.460 +: <a class="el" href="list_8h.html#ae2ff2974812ca185870f80bc4ed9337e">list.h</a> 45.461 +</li> 45.462 +<li>ucx_list_intersection() 45.463 +: <a class="el" href="list_8h.html#a259f9b754978aeca23dfabba16e20f39">list.h</a> 45.464 +</li> 45.465 +<li>ucx_list_intersection_a() 45.466 +: <a class="el" href="list_8h.html#a1d0b00514dbb81ba6270b58da0c5b9a8">list.h</a> 45.467 +</li> 45.468 +<li>ucx_list_last() 45.469 +: <a class="el" href="list_8h.html#add5ec40c5006e29c629d23c2eb5a6553">list.h</a> 45.470 +</li> 45.471 +<li>ucx_list_prepend() 45.472 +: <a class="el" href="list_8h.html#a8fcb68e4556395b15180eec2d0b77aa4">list.h</a> 45.473 +</li> 45.474 +<li>ucx_list_prepend_a() 45.475 +: <a class="el" href="list_8h.html#a54654e6dc60e1c3de9e886c150e404ec">list.h</a> 45.476 +</li> 45.477 +<li>ucx_list_remove() 45.478 +: <a class="el" href="list_8h.html#a410cb3e8260037ba56c72d14b899b468">list.h</a> 45.479 +</li> 45.480 +<li>ucx_list_remove_a() 45.481 +: <a class="el" href="list_8h.html#aca687b7c4e7170175f447e549125aa52">list.h</a> 45.482 +</li> 45.483 +<li>ucx_list_size() 45.484 +: <a class="el" href="list_8h.html#ae88001cc8ae40b946560f31434abed8f">list.h</a> 45.485 +</li> 45.486 +<li>ucx_list_sort() 45.487 +: <a class="el" href="list_8h.html#ac74962d9bd7cfc9d3e2e09651469377b">list.h</a> 45.488 +</li> 45.489 +<li>ucx_list_union() 45.490 +: <a class="el" href="list_8h.html#a94ecdb0cea1633ad7074f027fa8485fa">list.h</a> 45.491 +</li> 45.492 +<li>ucx_list_union_a() 45.493 +: <a class="el" href="list_8h.html#a65b4355536f4ebc4130211b46469f4c1">list.h</a> 45.494 +</li> 45.495 +<li>UCX_LOGGER_DEBUG 45.496 +: <a class="el" href="logging_8h.html#acff01d1ef919ea997cfce755fc1b83d8">logging.h</a> 45.497 +</li> 45.498 +<li>ucx_logger_debug 45.499 +: <a class="el" href="logging_8h.html#a2936402799892db5138e5f1f8c25db0c">logging.h</a> 45.500 +</li> 45.501 +<li>ucx_logger_error 45.502 +: <a class="el" href="logging_8h.html#a6a9e472e14d6768e59d96d245e065397">logging.h</a> 45.503 +</li> 45.504 +<li>UCX_LOGGER_ERROR 45.505 +: <a class="el" href="logging_8h.html#aa254c07fe3a907613e2256a318d5c9a8">logging.h</a> 45.506 +</li> 45.507 +<li>ucx_logger_free() 45.508 +: <a class="el" href="logging_8h.html#ac4697b784e01ec990d2acea192e21658">logging.h</a> 45.509 +</li> 45.510 +<li>UCX_LOGGER_INFO 45.511 +: <a class="el" href="logging_8h.html#a4b0178bf60a6129373ffc59114ca4c9b">logging.h</a> 45.512 +</li> 45.513 +<li>ucx_logger_info 45.514 +: <a class="el" href="logging_8h.html#a98464d8d51376ce2716dcc4eca00d5da">logging.h</a> 45.515 +</li> 45.516 +<li>UCX_LOGGER_LEVEL 45.517 +: <a class="el" href="logging_8h.html#aee18bc20e58ffb69910121512c350839">logging.h</a> 45.518 +</li> 45.519 +<li>ucx_logger_log 45.520 +: <a class="el" href="logging_8h.html#aa0245325031d95799b28def177fd14ec">logging.h</a> 45.521 +</li> 45.522 +<li>ucx_logger_logf() 45.523 +: <a class="el" href="logging_8h.html#ac337e5d02ebea565012d4c11bd643801">logging.h</a> 45.524 +</li> 45.525 +<li>ucx_logger_new() 45.526 +: <a class="el" href="logging_8h.html#ac560f8517d2172794c9d2691735ec48c">logging.h</a> 45.527 +</li> 45.528 +<li>ucx_logger_register_level 45.529 +: <a class="el" href="logging_8h.html#a5cffc19502c4c90bfb3bd3bbcd18170a">logging.h</a> 45.530 +</li> 45.531 +<li>UCX_LOGGER_SOURCE 45.532 +: <a class="el" href="logging_8h.html#a0e0d72b12616c1e49ff8834eaf4cb8a2">logging.h</a> 45.533 +</li> 45.534 +<li>UCX_LOGGER_TIMESTAMP 45.535 +: <a class="el" href="logging_8h.html#a38607008268b4f776ee500fb95d2e823">logging.h</a> 45.536 +</li> 45.537 +<li>UCX_LOGGER_TRACE 45.538 +: <a class="el" href="logging_8h.html#a55b88d1fec7036d841b3ddd6195c5586">logging.h</a> 45.539 +</li> 45.540 +<li>ucx_logger_trace 45.541 +: <a class="el" href="logging_8h.html#a3031b7ff13f4cfae9c2916543be2877c">logging.h</a> 45.542 +</li> 45.543 +<li>ucx_logger_warn 45.544 +: <a class="el" href="logging_8h.html#aca7bd861b646892813fd7310c0aa69af">logging.h</a> 45.545 +</li> 45.546 +<li>UCX_LOGGER_WARN 45.547 +: <a class="el" href="logging_8h.html#abd01ca11486226ba34e8f7028d9fffba">logging.h</a> 45.548 +</li> 45.549 +<li>ucx_map_clear() 45.550 +: <a class="el" href="map_8h.html#a285e90e40681c6d9631c935dda0967f2">map.h</a> 45.551 +</li> 45.552 +<li>ucx_map_clone() 45.553 +: <a class="el" href="map_8h.html#a62c6c30cbb0d824ba710f5030ff9a4e4">map.h</a> 45.554 +</li> 45.555 +<li>ucx_map_clone_a() 45.556 +: <a class="el" href="map_8h.html#a9aea9103703d5c168420bb6bf85549ea">map.h</a> 45.557 +</li> 45.558 +<li>ucx_map_copy() 45.559 +: <a class="el" href="map_8h.html#adfeb2d61003fd2896bcfdc9a57f36425">map.h</a> 45.560 +</li> 45.561 +<li>ucx_map_cstr_get 45.562 +: <a class="el" href="map_8h.html#a64e1fb55498fa502dd2ed8ed69062cdd">map.h</a> 45.563 +</li> 45.564 +<li>ucx_map_cstr_put 45.565 +: <a class="el" href="map_8h.html#ad9356b01425b934ab237b52339ac0cc3">map.h</a> 45.566 +</li> 45.567 +<li>ucx_map_cstr_remove 45.568 +: <a class="el" href="map_8h.html#a9c4405a5a75ecf64e2ef3d0c6501a9fe">map.h</a> 45.569 +</li> 45.570 +<li>ucx_map_difference() 45.571 +: <a class="el" href="map_8h.html#a774fcff87d1e58b6c5af77dd19a8c3dc">map.h</a> 45.572 +</li> 45.573 +<li>ucx_map_difference_a() 45.574 +: <a class="el" href="map_8h.html#ad0ba103494247d798ac3037c50fc8831">map.h</a> 45.575 +</li> 45.576 +<li>UCX_MAP_FOREACH 45.577 +: <a class="el" href="map_8h.html#a940896c4aa1b13e54c55c04c3efc186b">map.h</a> 45.578 +</li> 45.579 +<li>ucx_map_free() 45.580 +: <a class="el" href="map_8h.html#abe3d9688e4224bf7bb962abf25ff8c2e">map.h</a> 45.581 +</li> 45.582 +<li>ucx_map_free_content() 45.583 +: <a class="el" href="map_8h.html#a750f3d9d83e2f3788a14c17a9d160618">map.h</a> 45.584 +</li> 45.585 +<li>ucx_map_get() 45.586 +: <a class="el" href="map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6">map.h</a> 45.587 +</li> 45.588 +<li>ucx_map_int_get 45.589 +: <a class="el" href="map_8h.html#aa1681bd2178553cd092fd24c4d681d3c">map.h</a> 45.590 +</li> 45.591 +<li>ucx_map_int_put 45.592 +: <a class="el" href="map_8h.html#aaa30af79b4068c923895619e83f44367">map.h</a> 45.593 +</li> 45.594 +<li>ucx_map_int_remove 45.595 +: <a class="el" href="map_8h.html#aa767958b5468737755c09f7185b1770c">map.h</a> 45.596 +</li> 45.597 +<li>ucx_map_intersection() 45.598 +: <a class="el" href="map_8h.html#aa594d7a5afebc3bed6bb265348cf6b0d">map.h</a> 45.599 +</li> 45.600 +<li>ucx_map_intersection_a() 45.601 +: <a class="el" href="map_8h.html#a169e0470a20484dd76425fdf77e3651e">map.h</a> 45.602 +</li> 45.603 +<li>ucx_map_iter_next() 45.604 +: <a class="el" href="map_8h.html#aceb8675abf44860b4bbc301bbada5b91">map.h</a> 45.605 +</li> 45.606 +<li>ucx_map_iterator() 45.607 +: <a class="el" href="map_8h.html#a9150e9c64fdf4dfcc2cad106b91aa110">map.h</a> 45.608 +</li> 45.609 +<li>ucx_map_new() 45.610 +: <a class="el" href="map_8h.html#a79f31de8b93814493759dbc8b940cf0c">map.h</a> 45.611 +</li> 45.612 +<li>ucx_map_new_a() 45.613 +: <a class="el" href="map_8h.html#aed508a94c66cc15372503c64b70eb03e">map.h</a> 45.614 +</li> 45.615 +<li>ucx_map_put() 45.616 +: <a class="el" href="map_8h.html#ac04a08b604217070254d4c58f0e82498">map.h</a> 45.617 +</li> 45.618 +<li>ucx_map_rehash() 45.619 +: <a class="el" href="map_8h.html#a174bce9fad554dd92b8da354e0d32512">map.h</a> 45.620 +</li> 45.621 +<li>ucx_map_remove() 45.622 +: <a class="el" href="map_8h.html#a17248a4888eb8f9ae18be522d64632aa">map.h</a> 45.623 +</li> 45.624 +<li>ucx_map_sstr_get 45.625 +: <a class="el" href="map_8h.html#a14d385f6b7f371f0507861cabd2eab4e">map.h</a> 45.626 +</li> 45.627 +<li>ucx_map_sstr_put 45.628 +: <a class="el" href="map_8h.html#ac26a8615bfc8f47ee9eaceb47645f98e">map.h</a> 45.629 +</li> 45.630 +<li>ucx_map_sstr_remove 45.631 +: <a class="el" href="map_8h.html#a48700ea86fadb9ea54d13010f9124df2">map.h</a> 45.632 +</li> 45.633 +<li>ucx_map_union() 45.634 +: <a class="el" href="map_8h.html#a3f65978c481af7f637cad021d93522d5">map.h</a> 45.635 +</li> 45.636 +<li>ucx_map_union_a() 45.637 +: <a class="el" href="map_8h.html#ab6370c3fa8113fdad593ce4b0460c9c6">map.h</a> 45.638 +</li> 45.639 +<li>ucx_memcpy() 45.640 +: <a class="el" href="utils_8h.html#ab2e184e6a744941aab6b8058116baf30">utils.h</a> 45.641 +</li> 45.642 +<li>ucx_mempool_calloc() 45.643 +: <a class="el" href="mempool_8h.html#a4b9142011824ae24f00fabe128417d69">mempool.h</a> 45.644 +</li> 45.645 +<li>ucx_mempool_chcap() 45.646 +: <a class="el" href="mempool_8h.html#aaf75b5016098723a9280531ccc3a6d77">mempool.h</a> 45.647 +</li> 45.648 +<li>ucx_mempool_destroy() 45.649 +: <a class="el" href="mempool_8h.html#af096378da7e9bfbed3088497cf4c15bf">mempool.h</a> 45.650 +</li> 45.651 +<li>ucx_mempool_free() 45.652 +: <a class="el" href="mempool_8h.html#aefa26e3015f5aefadbfc74221bd246ac">mempool.h</a> 45.653 +</li> 45.654 +<li>ucx_mempool_malloc() 45.655 +: <a class="el" href="mempool_8h.html#a2ae492b8f2878ccc9837ac213dced11e">mempool.h</a> 45.656 +</li> 45.657 +<li>ucx_mempool_new() 45.658 +: <a class="el" href="mempool_8h.html#ad71cb8c3b6fdb30360376a8b372ef22a">mempool.h</a> 45.659 +</li> 45.660 +<li>ucx_mempool_new_default 45.661 +: <a class="el" href="mempool_8h.html#a49f7bd1da5ac201d0cf54dc0f0d82dd2">mempool.h</a> 45.662 +</li> 45.663 +<li>ucx_mempool_realloc() 45.664 +: <a class="el" href="mempool_8h.html#a660ef42520ed6737c2e77aae18e3a7a4">mempool.h</a> 45.665 +</li> 45.666 +<li>ucx_mempool_reg_destr() 45.667 +: <a class="el" href="mempool_8h.html#af47b6b7c40f8f263dc28cc9a4e77b27c">mempool.h</a> 45.668 +</li> 45.669 +<li>ucx_mempool_set_destr() 45.670 +: <a class="el" href="mempool_8h.html#adb788e7ec24cd7dbdea6381539c549f2">mempool.h</a> 45.671 +</li> 45.672 +<li>ucx_properties2map() 45.673 +: <a class="el" href="properties_8h.html#a5c7ff8bc3139960a3f3dc92072b742f3">properties.h</a> 45.674 +</li> 45.675 +<li>ucx_properties_fill() 45.676 +: <a class="el" href="properties_8h.html#aaf8de121764a4d22c763ff2ab41f3a4d">properties.h</a> 45.677 +</li> 45.678 +<li>ucx_properties_free() 45.679 +: <a class="el" href="properties_8h.html#a38a2fe7bb2986bd87c7e69356ab05c05">properties.h</a> 45.680 +</li> 45.681 +<li>ucx_properties_load() 45.682 +: <a class="el" href="properties_8h.html#ae1b600f839a6b2278b68fc314981a8a3">properties.h</a> 45.683 +</li> 45.684 +<li>ucx_properties_new() 45.685 +: <a class="el" href="properties_8h.html#a44d9dd12cab3aaa0084f1c8b89405796">properties.h</a> 45.686 +</li> 45.687 +<li>ucx_properties_next() 45.688 +: <a class="el" href="properties_8h.html#a7e03bc573d45d48c538cd721e810d33c">properties.h</a> 45.689 +</li> 45.690 +<li>ucx_properties_store() 45.691 +: <a class="el" href="properties_8h.html#a63c0c1b7648e675b21a1788917ff36fb">properties.h</a> 45.692 +</li> 45.693 +<li>ucx_sc2sc() 45.694 +: <a class="el" href="string_8h.html#a69d5e3eeec783cc43314df71248768f5">string.h</a> 45.695 +</li> 45.696 +<li>ucx_sprintf 45.697 +: <a class="el" href="utils_8h.html#af9f333b66ecd639c347c7235f4992e2e">utils.h</a> 45.698 +</li> 45.699 +<li>ucx_ss2c_s() 45.700 +: <a class="el" href="string_8h.html#aedeb5d7bddda54116101a8d68af8c56d">string.h</a> 45.701 +</li> 45.702 +<li>ucx_ss2sc() 45.703 +: <a class="el" href="string_8h.html#a9ce5ad1b2aa2dbeba204d452c2e64359">string.h</a> 45.704 +</li> 45.705 +<li>ucx_stack_avail() 45.706 +: <a class="el" href="stack_8h.html#a53cd2c7743dc8ad9cbd35ade0b4873e7">stack.h</a> 45.707 +</li> 45.708 +<li>ucx_stack_calloc() 45.709 +: <a class="el" href="stack_8h.html#afdc467524b5e19a9a777c6bc03e17174">stack.h</a> 45.710 +</li> 45.711 +<li>ucx_stack_dim 45.712 +: <a class="el" href="stack_8h.html#a3b761343c6491222604341ebfa443226">stack.h</a> 45.713 +</li> 45.714 +<li>ucx_stack_empty 45.715 +: <a class="el" href="stack_8h.html#a4f7239dbd6c032c56812e370b71c1985">stack.h</a> 45.716 +</li> 45.717 +<li>ucx_stack_free() 45.718 +: <a class="el" href="stack_8h.html#aabd55c14a3866b3782ba324f4d8b4c41">stack.h</a> 45.719 +</li> 45.720 +<li>ucx_stack_init() 45.721 +: <a class="el" href="stack_8h.html#abaef685df4e7ef95cd7218984a0618fe">stack.h</a> 45.722 +</li> 45.723 +<li>ucx_stack_malloc() 45.724 +: <a class="el" href="stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac">stack.h</a> 45.725 +</li> 45.726 +<li>ucx_stack_pop 45.727 +: <a class="el" href="stack_8h.html#a506b82374734ec476d086ddfb561174d">stack.h</a> 45.728 +</li> 45.729 +<li>ucx_stack_popn() 45.730 +: <a class="el" href="stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81">stack.h</a> 45.731 +</li> 45.732 +<li>ucx_stack_push() 45.733 +: <a class="el" href="stack_8h.html#af85e6f77a8341beb6188f9ae1a8e9f92">stack.h</a> 45.734 +</li> 45.735 +<li>ucx_stack_pusharr() 45.736 +: <a class="el" href="stack_8h.html#a7bb138979191bba138e76ea37488fae2">stack.h</a> 45.737 +</li> 45.738 +<li>ucx_stack_realloc() 45.739 +: <a class="el" href="stack_8h.html#a0c678f96f6fabab49b2b034a1fe91c3a">stack.h</a> 45.740 +</li> 45.741 +<li>ucx_stack_topsize 45.742 +: <a class="el" href="stack_8h.html#a030197051a803e87d5eeac5adb80b15a">stack.h</a> 45.743 +</li> 45.744 +<li>ucx_strcpy() 45.745 +: <a class="el" href="utils_8h.html#adeb6e8d0a53a829207cfa0a979d01fff">utils.h</a> 45.746 +</li> 45.747 +<li>ucx_stream_bcopy 45.748 +: <a class="el" href="utils_8h.html#a6003a1750a66234169bd1f8cc84b297b">utils.h</a> 45.749 +</li> 45.750 +<li>ucx_stream_bncopy() 45.751 +: <a class="el" href="utils_8h.html#a114ee7f7da62656ffd35e2dc23394201">utils.h</a> 45.752 +</li> 45.753 +<li>ucx_stream_copy 45.754 +: <a class="el" href="utils_8h.html#a41ca1344f781c0d3bf7a414a6e811392">utils.h</a> 45.755 +</li> 45.756 +<li>UCX_STREAM_COPY_BUFSIZE 45.757 +: <a class="el" href="utils_8h.html#a23efd74fa5f701d4cf26ccbfd138a439">utils.h</a> 45.758 +</li> 45.759 +<li>ucx_stream_ncopy 45.760 +: <a class="el" href="utils_8h.html#add13f39a8af440b4f7e6f74339eaada2">utils.h</a> 45.761 +</li> 45.762 +<li>ucx_szmul 45.763 +: <a class="el" href="ucx_8h.html#a0b5ed6c1a0b15356f4f948acfd32a4cc">ucx.h</a> 45.764 +</li> 45.765 +<li>ucx_szmul_impl() 45.766 +: <a class="el" href="ucx_8h.html#a6637171cc0ec097b297f731a3036dd3b">ucx.h</a> 45.767 +</li> 45.768 +<li>UCX_TEST 45.769 +: <a class="el" href="test_8h.html#a66cfb29c329fc9eaef071f2449836659">test.h</a> 45.770 +</li> 45.771 +<li>UCX_TEST_ASSERT 45.772 +: <a class="el" href="test_8h.html#a08f477cd12fc3fe741a92493e5df58a9">test.h</a> 45.773 +</li> 45.774 +<li>UCX_TEST_BEGIN 45.775 +: <a class="el" href="test_8h.html#a0547b8d4f3bcdb0633fdd8925e8aa5d4">test.h</a> 45.776 +</li> 45.777 +<li>UCX_TEST_CALL_SUBROUTINE 45.778 +: <a class="el" href="test_8h.html#a0efbab91c54f5237a2ab207f48cf0e51">test.h</a> 45.779 +</li> 45.780 +<li>UCX_TEST_END 45.781 +: <a class="el" href="test_8h.html#a86e64857c04f0447f8b16fb9c2b3b639">test.h</a> 45.782 +</li> 45.783 +<li>ucx_test_register() 45.784 +: <a class="el" href="test_8h.html#a8dfabc42f183d3a4d79379a5d17bf67d">test.h</a> 45.785 +</li> 45.786 +<li>ucx_test_run() 45.787 +: <a class="el" href="test_8h.html#a3721458deeecb43aa322428f007714c3">test.h</a> 45.788 +</li> 45.789 +<li>UCX_TEST_SUBROUTINE 45.790 +: <a class="el" href="test_8h.html#ae073cf5ead22cb27d662da048e16f44a">test.h</a> 45.791 +</li> 45.792 +<li>ucx_test_suite_free() 45.793 +: <a class="el" href="test_8h.html#a4a6ac61a6f72722273f8eaa7a343edde">test.h</a> 45.794 +</li> 45.795 +<li>ucx_test_suite_new() 45.796 +: <a class="el" href="test_8h.html#a531f0df90363e0befbe900878f65f09e">test.h</a> 45.797 +</li> 45.798 +<li>ucx_vasprintf() 45.799 +: <a class="el" href="utils_8h.html#a3ea1dfb856c741f3e8ec6bfdc9ad427e">utils.h</a> 45.800 +</li> 45.801 +<li>UCX_VERSION 45.802 +: <a class="el" href="ucx_8h.html#af12001920ca2fc1405615684e4dea284">ucx.h</a> 45.803 +</li> 45.804 +<li>UCX_VERSION_MAJOR 45.805 +: <a class="el" href="ucx_8h.html#aa57e5dd22d42387d748cc16777df1383">ucx.h</a> 45.806 +</li> 45.807 +<li>UCX_VERSION_MINOR 45.808 +: <a class="el" href="ucx_8h.html#a9ac10d6353e23d4615a87fc737c65eb0">ucx.h</a> 45.809 +</li> 45.810 +<li>ucx_vfprintf() 45.811 +: <a class="el" href="utils_8h.html#a4907967beb92c3ae351dd239abbb6927">utils.h</a> 45.812 +</li> 45.813 +<li>UcxAVLNode 45.814 +: <a class="el" href="avl_8h.html#a08ba2496c2316df58548c3cc29712add">avl.h</a> 45.815 +</li> 45.816 +<li>UcxKey 45.817 +: <a class="el" href="map_8h.html#ad63828bb23123fc01a5315a2bac3b142">map.h</a> 45.818 +</li> 45.819 +<li>UcxList 45.820 +: <a class="el" href="list_8h.html#aa6f89f91c1081c9a7c6866c298f497a2">list.h</a> 45.821 +</li> 45.822 +<li>UcxMap 45.823 +: <a class="el" href="map_8h.html#a18e21948725b2da68c35da587a722033">map.h</a> 45.824 +</li> 45.825 +<li>UcxMapElement 45.826 +: <a class="el" href="map_8h.html#ad7d7a910a32113eb93eae11c3dc97b4b">map.h</a> 45.827 +</li> 45.828 +<li>UcxMapIterator 45.829 +: <a class="el" href="map_8h.html#ae36aff5f645948c54f51578b11fd87fb">map.h</a> 45.830 +</li> 45.831 +<li>UcxTest 45.832 +: <a class="el" href="test_8h.html#ae906817354c010b83c2784260cce7a1c">test.h</a> 45.833 +</li> 45.834 +<li>UcxTestList 45.835 +: <a class="el" href="test_8h.html#a8048c50ae73ea690b776edfd63bd6a5d">test.h</a> 45.836 +</li> 45.837 +<li>UcxTestSuite 45.838 +: <a class="el" href="test_8h.html#a52115d1d0f1c4a565ed6ef7c1bfd0363">test.h</a> 45.839 +</li> 45.840 +</ul> 45.841 +</div><!-- contents --> 45.842 +<!-- start footer part --> 45.843 +<hr class="footer"/><address class="footer"><small> 45.844 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 45.845 +<img class="footer" src="doxygen.png" alt="doxygen"/> 45.846 +</a> 1.8.13 45.847 +</small></address> 45.848 +</body> 45.849 +</html>
46.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 46.2 +++ b/docs/api-2.1/globals_w.html Sat Feb 06 19:11:44 2021 +0100 46.3 @@ -0,0 +1,78 @@ 46.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 46.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 46.6 +<head> 46.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 46.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 46.9 +<meta name="generator" content="Doxygen 1.8.13"/> 46.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 46.11 +<title>ucx: Globals</title> 46.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 46.13 +<script type="text/javascript" src="jquery.js"></script> 46.14 +<script type="text/javascript" src="dynsections.js"></script> 46.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 46.16 +<script type="text/javascript" src="search/searchdata.js"></script> 46.17 +<script type="text/javascript" src="search/search.js"></script> 46.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 46.19 +</head> 46.20 +<body> 46.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 46.22 +<div id="titlearea"> 46.23 +<table cellspacing="0" cellpadding="0"> 46.24 + <tbody> 46.25 + <tr style="height: 56px;"> 46.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 46.27 + <td id="projectalign" style="padding-left: 0.5em;"> 46.28 + <div id="projectname">ucx 46.29 + </div> 46.30 + <div id="projectbrief">UAP Common Extensions</div> 46.31 + </td> 46.32 + </tr> 46.33 + </tbody> 46.34 +</table> 46.35 +</div> 46.36 +<!-- end header part --> 46.37 +<!-- Generated by Doxygen 1.8.13 --> 46.38 +<script type="text/javascript"> 46.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 46.40 +</script> 46.41 +<script type="text/javascript" src="menudata.js"></script> 46.42 +<script type="text/javascript" src="menu.js"></script> 46.43 +<script type="text/javascript"> 46.44 +$(function() { 46.45 + initMenu('',true,false,'search.php','Search'); 46.46 + $(document).ready(function() { init_search(); }); 46.47 +}); 46.48 +</script> 46.49 +<div id="main-nav"></div> 46.50 +</div><!-- top --> 46.51 +<!-- window showing the filter options --> 46.52 +<div id="MSearchSelectWindow" 46.53 + onmouseover="return searchBox.OnSearchSelectShow()" 46.54 + onmouseout="return searchBox.OnSearchSelectHide()" 46.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 46.56 +</div> 46.57 + 46.58 +<!-- iframe showing the search results (closed by default) --> 46.59 +<div id="MSearchResultsWindow"> 46.60 +<iframe src="javascript:void(0)" frameborder="0" 46.61 + name="MSearchResults" id="MSearchResults"> 46.62 +</iframe> 46.63 +</div> 46.64 + 46.65 +<div class="contents"> 46.66 +<div class="textblock">Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:</div> 46.67 + 46.68 +<h3><a id="index_w"></a>- w -</h3><ul> 46.69 +<li>write_func 46.70 +: <a class="el" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">ucx.h</a> 46.71 +</li> 46.72 +</ul> 46.73 +</div><!-- contents --> 46.74 +<!-- start footer part --> 46.75 +<hr class="footer"/><address class="footer"><small> 46.76 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 46.77 +<img class="footer" src="doxygen.png" alt="doxygen"/> 46.78 +</a> 1.8.13 46.79 +</small></address> 46.80 +</body> 46.81 +</html>
47.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 47.2 +++ b/docs/api-2.1/index.html Sat Feb 06 19:11:44 2021 +0100 47.3 @@ -0,0 +1,88 @@ 47.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 47.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 47.6 +<head> 47.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 47.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 47.9 +<meta name="generator" content="Doxygen 1.8.13"/> 47.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 47.11 +<title>ucx: UAP Common Extensions</title> 47.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 47.13 +<script type="text/javascript" src="jquery.js"></script> 47.14 +<script type="text/javascript" src="dynsections.js"></script> 47.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 47.16 +<script type="text/javascript" src="search/searchdata.js"></script> 47.17 +<script type="text/javascript" src="search/search.js"></script> 47.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 47.19 +</head> 47.20 +<body> 47.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 47.22 +<div id="titlearea"> 47.23 +<table cellspacing="0" cellpadding="0"> 47.24 + <tbody> 47.25 + <tr style="height: 56px;"> 47.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 47.27 + <td id="projectalign" style="padding-left: 0.5em;"> 47.28 + <div id="projectname">ucx 47.29 + </div> 47.30 + <div id="projectbrief">UAP Common Extensions</div> 47.31 + </td> 47.32 + </tr> 47.33 + </tbody> 47.34 +</table> 47.35 +</div> 47.36 +<!-- end header part --> 47.37 +<!-- Generated by Doxygen 1.8.13 --> 47.38 +<script type="text/javascript"> 47.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 47.40 +</script> 47.41 +<script type="text/javascript" src="menudata.js"></script> 47.42 +<script type="text/javascript" src="menu.js"></script> 47.43 +<script type="text/javascript"> 47.44 +$(function() { 47.45 + initMenu('',true,false,'search.php','Search'); 47.46 + $(document).ready(function() { init_search(); }); 47.47 +}); 47.48 +</script> 47.49 +<div id="main-nav"></div> 47.50 +</div><!-- top --> 47.51 +<!-- window showing the filter options --> 47.52 +<div id="MSearchSelectWindow" 47.53 + onmouseover="return searchBox.OnSearchSelectShow()" 47.54 + onmouseout="return searchBox.OnSearchSelectHide()" 47.55 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 47.56 +</div> 47.57 + 47.58 +<!-- iframe showing the search results (closed by default) --> 47.59 +<div id="MSearchResultsWindow"> 47.60 +<iframe src="javascript:void(0)" frameborder="0" 47.61 + name="MSearchResults" id="MSearchResults"> 47.62 +</iframe> 47.63 +</div> 47.64 + 47.65 +<div class="header"> 47.66 + <div class="headertitle"> 47.67 +<div class="title">UAP Common Extensions </div> </div> 47.68 +</div><!--header--> 47.69 +<div class="contents"> 47.70 +<div class="textblock"><p>Library with common and useful functions, macros and data structures.</p> 47.71 +<p>Latest available source:<br /> 47.72 + <a href="https://sourceforge.net/projects/ucx/files/">https://sourceforge.net/projects/ucx/files/</a> </p> 47.73 +<p>Repositories:<br /> 47.74 + <a href="https://sourceforge.net/p/ucx/code">https://sourceforge.net/p/ucx/code</a> - or - <a href="https://develop.uap-core.de/hg/ucx">https://develop.uap-core.de/hg/ucx</a> </p> 47.75 +<h2>LICENCE</h2> 47.76 +<p>Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.</p> 47.77 +<p>Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:</p> 47.78 +<ol type="1"> 47.79 +<li>Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.</li> 47.80 +<li>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.</li> 47.81 +</ol> 47.82 +<p>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. </p> 47.83 +</div></div><!-- contents --> 47.84 +<!-- start footer part --> 47.85 +<hr class="footer"/><address class="footer"><small> 47.86 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 47.87 +<img class="footer" src="doxygen.png" alt="doxygen"/> 47.88 +</a> 1.8.13 47.89 +</small></address> 47.90 +</body> 47.91 +</html>
48.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 48.2 +++ b/docs/api-2.1/jquery.js Sat Feb 06 19:11:44 2021 +0100 48.3 @@ -0,0 +1,87 @@ 48.4 +/*! 48.5 + * jQuery JavaScript Library v1.7.1 48.6 + * http://jquery.com/ 48.7 + * 48.8 + * Copyright 2011, John Resig 48.9 + * Dual licensed under the MIT or GPL Version 2 licenses. 48.10 + * http://jquery.org/license 48.11 + * 48.12 + * Includes Sizzle.js 48.13 + * http://sizzlejs.com/ 48.14 + * Copyright 2011, The Dojo Foundation 48.15 + * Released under the MIT, BSD, and GPL Licenses. 48.16 + * 48.17 + * Date: Mon Nov 21 21:11:03 2011 -0500 48.18 + */ 48.19 +(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(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){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(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?"":bO.call(b0)}:function(b0){return b0==null?"":b0.toString().replace(bI,"").replace(bE,"")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2==="string"||b2==="function"||b2==="regexp"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length==="number"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1==="number"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3==="string"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8==="object"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf("compatible")<0&&bS.exec(b1)||[];return{browser:b0[1]||"",version:b0[2]||"0"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(b1,b0){bx["[object "+b0+"]"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test("\xA0")){bI=/^[\s\xA0]+/;bE=/[\s\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener("DOMContentLoaded",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState==="complete"){av.detachEvent("onreadystatechange",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll("left")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH==="array"){bE(bI)}else{if(bH==="function"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks("once memory"),bw=b.Callbacks("once memory"),bv=b.Callbacks("memory"),e="pending",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,"resolve"],fail:[bE,"reject"],progress:[bD,"notify"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+"With"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+"With"]=bA[bz].fireWith}bB.done(function(){e="resolved"},bw.disable,bv.lock).fail(function(){e="rejected"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?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<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement("div"),bH=av.documentElement;bv.setAttribute("className","t");bv.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";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></: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="<div "+e+"><div></div></div><table "+e+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";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="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";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="<div style='width:4px;'></div>";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<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute("classid")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by==="undefined"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf("data-")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],"parsedAttrs",true)}}return bz}else{if(typeof by==="object"){return this.each(function(){b.data(this,by)})}}bB=by.split(".");bB[1]=bB[1]?"."+bB[1]:"";if(bA===L){bz=this.triggerHandler("getData"+bB[1]+"!",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler("setData"+bB[1]+"!",bD);b.data(this,by,bA);bC.triggerHandler("changeData"+bB[1]+"!",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv="data-"+bw.replace(aA,"-$1").toLowerCase();by=bx.getAttribute(bv);if(typeof by==="string"){try{by=by==="true"?true:by==="false"?false:by==="null"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e==="data"&&b.isEmptyObject(bv[e])){continue}if(e!=="toJSON"){return false}}return true}function bi(by,bx,bA){var bw=bx+"defer",bv=bx+"queue",e=bx+"mark",bz=b._data(by,bw);if(bz&&(bA==="queue"||!b._data(by,bv))&&(bA==="mark"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||"fx")+"mark";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||"fx";var e=bv+"mark",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,"mark")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||"fx")+"queue";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||"fx";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw==="inprogress"){bw=bv.shift()}if(bw){if(bx==="fx"){bv.unshift("inprogress")}b._data(by,bx+".run",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+"queue "+bx+".run",true);bi(by,bx,"queue")}}});b.fn.extend({queue:function(e,bv){if(typeof e!=="string"){bv=e;e="fx"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e==="fx"&&bw[0]!=="inprogress"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||"fx";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(bD,bw){if(typeof bD!=="string"){bw=bD;bD=L}bD=bD||"fx";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+"defer",bA=bD+"queue",bC=bD+"mark",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks("once memory"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\n\t\r]/g,af=/\s+/,aU=/\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by==="string"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=" "+bx.className+" ";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(" "+bA[bB]+" ")){bz+=bA[bB]+" "}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz==="string")||bz===L){bA=(bz||"").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(" "+by.className+" ").replace(aP," ");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(" "+bA[bB]+" "," ")}by.className=b.trim(bx)}else{by.className=""}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv==="boolean";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw==="string"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?"addClass":"removeClass"](bA)}}else{if(bw==="undefined"||bw==="boolean"){if(this.className){b._data(this,"__className__",this.className)}this.className=this.className||bx===false?"":b._data(this,"__className__")||""}}})},hasClass:function(e){var bx=" "+e+" ",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(" "+this[bw].className+" ").replace(aP," ").indexOf(bx)>-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<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute("disabled")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,"optgroup"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find("option").each(function(){this.selected=b.inArray(b(this).val(),e)>=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<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,"");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error("type property can't be changed")}else{if(!b.support.radioValue&&bv==="radio"&&b.nodeName(e,"input")){var bw=e.value;e.setAttribute("type",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,"button")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,"button")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&"set" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&"get" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode("tabindex");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!=="boolean"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!=="":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+"")}};b.attrHooks.tabindex.set=be.set;b.each(["width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===""){bw.setAttribute(e,"auto");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===""){bw="false"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each(["href","src","width","height"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=""+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype="encoding"}if(!b.support.checkOn){b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return e.getAttribute("value")===null?"on":e.value}}})}b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=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<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||"").split(".").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(".")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent("on"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||"")).split(" ");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp("(^|\\.)"+bC.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH==="**"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,["events","handle"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf("!")>=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;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,"events")||{})[bv.type]&&b._data(bH,"handle");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG==="click"&&b.nodeName(bA,"a"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!=="focus"&&bG!=="blur")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,"events")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type==="click")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent("on"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,"form")){return false}b.event.add(this,"click._submit keypress._submit",function(bx){var bw=bx.target,bv=b.nodeName(bw,"input")||b.nodeName(bw,"button")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,"submit._submit",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate("submit",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,"form")){return false}b.event.remove(this,"._submit")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){b.event.add(this,"propertychange._change",function(e){if(e.originalEvent.propertyName==="checked"){this._just_changed=true}});b.event.add(this,"click._change",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate("change",this,e,true)}})}return false}b.event.add(this,"beforeactivate._change",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,"change._change",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate("change",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!=="radio"&&e.type!=="checkbox")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,"._change");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:"focusin",blur:"focusout"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw==="object"){if(typeof e!=="string"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e==="string"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+"."+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw==="object"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e==="function"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||"**",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,"**"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,"lastToggle"+bx.guid)||0)%bw;b._data(this,"lastToggle"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each(("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu").split(" "),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?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}}); 48.20 +/*! 48.21 + * Sizzle CSS Selector Engine 48.22 + * Copyright 2011, The Dojo Foundation 48.23 + * Released under the MIT, BSD, and GPL Licenses. 48.24 + * More information: http://sizzlejs.com/ 48.25 + */ 48.26 +(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;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!=="\\"){bT[1]=(bT[1]||"").replace(bK,"");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],"");break}}}}if(!bW){bW=typeof e.getElementsByTagName!=="undefined"?e.getElementsByTagName("*"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)==="\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],"");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR="";if(e){if(e===1||e===9){if(typeof bU.textContent==="string"){return bU.textContent}else{if(typeof bU.innerText==="string"){return bU.innerText.replace(bO,"")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(e){return e.getAttribute("href")},type:function(e){return e.getAttribute("type")}},relative:{"+":function(bW,bR){var bT=typeof bR==="string",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},">":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},"":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("parentNode",bR,bS,bT,bU,bV)},"~":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR==="string"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e("previousSibling",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!=="undefined"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!=="undefined"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute("name")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!=="undefined"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=" "+bT[1].replace(bK,"")+" ";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(" "+bV.className+" ").replace(/[\t\n\r]/g," ").indexOf(bT)>=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 bR<e[3]-0},gt:function(bS,bR,e){return bR>e[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<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case"only":case"first":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX==="first"){return true}bR=bS;case"last":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case"nth":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=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;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement("div"),bS="script"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML="<a name='"+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="<a href='#'></a>";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="<p class='TEST'></p>";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="<div class='test e'></div><div class='test'></div>";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;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!=="string"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){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;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[":"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!=="string"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack("","find",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),"not",e)},filter:function(e){return this.pushStack(aG(this,e,true),"filter",e)},is:function(e){return !!e&&(typeof e==="string"?H.test(e)?b(e,this.context).index(this[0])>=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<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!=="string"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-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=/<tbody/i,W=/<|&#?\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp("<(?:"+aR+")","i"),o=/checked\s*(?:[^=]|=\s*.checked.)/i,bm=/\/(java|ecma)script/i,aN=/^\s*<!(?:\[CDATA\[|\-\-)/,ax={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_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<div>","</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></$2>");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName("*"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!=="string"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),"replaceWith",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC==="string"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,"tr");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,"table")?(e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?".":"")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw==="object"){e.outerHTML=bv.outerHTML}else{if(bw==="input"&&(bv.type==="checkbox"||bv.type==="radio")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw==="option"){e.selected=bv.defaultSelected}else{if(bw==="input"||bw==="textarea"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB==="string"&&bB.length<512&&bA===av&&bB.charAt(0)==="<"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?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></$2>");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]==="<table>"&&!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<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],"script")&&(!bI[bE].type||bI[bE].type.toLowerCase()==="text/javascript")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName("script"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:"script"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||"").replace(aN,"/*$0*/"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\([^)]*\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\d+(?:px)?$/i,bn=/^-?\d/,I=/^([\-+])=([\-+.\de]+)/,a7={position:"absolute",visibility:"hidden",display:"block"},an=["Left","Right"],a1=["Top","Bottom"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,"opacity","opacity");return e===""?"1":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC==="string"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC="number"}if(bD==null||bC==="number"&&isNaN(bD)){return}if(bC==="number"&&!b.cssNumber[bz]){bD+="px"}if(!bE||!("set" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&"get" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx==="cssFloat"){bx="float"}if(e&&"get" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each(["height","width"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=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<e;bx++){if(!bv){bA-=parseFloat(b.css(by,"padding"+bz[bx]))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}}}return bA+"px"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,"padding"+bz[bx]))||0;if(bv!=="padding"){bA+=parseFloat(b.css(by,"border"+bz[bx]+"Width"))||0}if(bv==="margin"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+"px"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,"display"))==="none")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\[\]$/,bs=/\r?\n/g,bq=/#.*$/,aD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\/\//,M=/\?/,a6=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/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<bz;bw++){bv=bx[bw];bC=/^\+/.test(bv);if(bC){bv=bv.substr(1)||"*"}bB=e[bv]=e[bv]||[];bB[bC?"unshift":"push"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC==="string"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx["*"]){bC=aW(bv,bE,bz,bD,"*",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!=="string"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(" ");if(by>=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("<div>").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;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE==="string"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC==="*"){bC=bx}else{if(bx!=="*"&&bx!==bC){by=bx+" "+bC;bF=bG[by]||bG["* "+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(" ");if(bB[0]===bx||bB[0]==="*"){e=bG[bB[1]+" "+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error("No conversion from "+by.replace(" "," to "))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\=)\?(&|$)|\?\?/i;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return b.expando+"_"+(aC++)}});b.ajaxPrefilter("json jsonp",function(bD,bA,bC){var bx=bD.contentType==="application/x-www-form-urlencoded"&&(typeof bD.data==="string");if(bD.dataTypes[0]==="jsonp"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv="$1"+bw+"$2";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\?/.test(e)?"&":"?")+bD.jsonp+"="+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters["script json"]=function(){if(!bB){b.error(bw+" was not called")}return bB[0]};bD.dataTypes[0]="json";return"script"}});b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter("script",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type="GET";e.global=false}});b.ajaxTransport("script",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName("head")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement("script");e.async="async";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,"success")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject("Microsoft.XMLHTTP")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&("withCredentials" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB["X-Requested-With"]){bB["X-Requested-With"]="XMLHttpRequest"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=""}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,a3,aH=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0("show",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,"olddisplay")&&by==="none"){by=bw.style.display=""}if(by===""&&b.css(bw,"display")==="none"){b._data(bw,"olddisplay",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===""||by==="none"){bw.style.display=b._data(bw,"olddisplay")||""}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0("hide",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,"display");if(by!=="none"&&!b._data(bw,"olddisplay")){b._data(bw,"olddisplay",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display="none"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw==="boolean";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(":hidden");b(this)[by?"show":"hide"]()})}else{this.animate(a0("toggle",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(":hidden"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||"swing"}if(bF==="hide"&&bI||bF==="show"&&!bI){return bE.complete.call(this)}if(bK&&(bB==="height"||bB==="width")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,"display")==="inline"&&b.css(this,"float")==="none"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)==="inline"){this.style.display="inline-block"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow="hidden"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,"toggle"+bD)||(bF==="toggle"?bI?"show":"hide":0);if(bA){b._data(this,"toggle"+bD,bA==="show"?"hide":"show");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?"":"px");if(bL!=="px"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]==="-="?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,"")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!=="string"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||"fx",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(".run")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+".run"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0("show",1),slideUp:a0("hide",1),slideToggle:a0("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw==="object"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue="fx"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv==="auto"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?"":"px");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,"fxshow"+e.prop)===L){b._data(e.elem,"fxshow"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,"fxshow"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=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<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,"opacity",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each(["width","height"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b("<"+bx+">").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"?"<!doctype html>":"")+"<html><body>");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);/*! 48.27 + * jQuery UI 1.8.18 48.28 + * 48.29 + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 48.30 + * Dual licensed under the MIT or GPL Version 2 licenses. 48.31 + * http://jquery.org/license 48.32 + * 48.33 + * http://docs.jquery.com/UI 48.34 + */ 48.35 +(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;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css("overflow")==="hidden"){return false}var e=(f&&f==="left")?"scrollLeft":"scrollTop",g=false;if(h[e]>0){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);/*! 48.36 + * jQuery UI Widget 1.8.18 48.37 + * 48.38 + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 48.39 + * Dual licensed under the MIT or GPL Version 2 licenses. 48.40 + * http://jquery.org/license 48.41 + * 48.42 + * http://docs.jquery.com/UI/Widget 48.43 + */ 48.44 +(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);/*! 48.45 + * jQuery UI Mouse 1.8.18 48.46 + * 48.47 + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) 48.48 + * Dual licensed under the MIT or GPL Version 2 licenses. 48.49 + * http://jquery.org/license 48.50 + * 48.51 + * http://docs.jquery.com/UI/Mouse 48.52 + * 48.53 + * Depends: 48.54 + * jquery.ui.widget.js 48.55 + */ 48.56 +(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('<div class="ui-wrapper" style="overflow: hidden;"></div>').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<l.length;g++){var j=c.trim(l[g]),e="ui-resizable-"+j;var h=c('<div class="ui-resizable-handle '+e+'"></div>');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(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e=="sw"){h.left=j.left+(f.width-h.width);h.top=null}if(e=="nw"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.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<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css("borderTopWidth"),h.css("borderRightWidth"),h.css("borderBottomWidth"),h.css("borderLeftWidth")],j=[h.css("paddingTop"),h.css("paddingRight"),h.css("paddingBottom"),h.css("paddingLeft")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(":hidden")||c(g).parents(":hidden").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');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);/*! 48.57 + * jQuery hashchange event - v1.3 - 7/21/2010 48.58 + * http://benalman.com/projects/jquery-hashchange-plugin/ 48.59 + * 48.60 + * Copyright (c) 2010 "Cowboy" Ben Alman 48.61 + * Dual licensed under the MIT and GPL licenses. 48.62 + * http://benalman.com/about/license/ 48.63 + */ 48.64 +(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=$('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){r||l(a());n()}).attr("src",r||"javascript:0").insertAfter("body")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName==="title"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain="'+t+'"<\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery);/*! 48.65 + PowerTip - v1.2.0 - 2013-04-03 48.66 + http://stevenbenner.github.com/jquery-powertip/ 48.67 + Copyright (c) 2013 Steven Benner (http://stevenbenner.com/). 48.68 + Released under MIT license. 48.69 + https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt 48.70 +*/ 48.71 +(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k("body");var n="displayController",e="hasActiveHover",d="forcedOpen",u="hasMouseMove",f="mouseOnToPopup",g="originalTitle",y="powertip",o="powertipjq",l="powertiptarget",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)==="string"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr("title");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr("title")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({"mouseenter.powertip":function J(P){k.powerTip.show(this,P)},"mouseleave.powertip":function L(){k.powerTip.hide(this)},"focus.powertip":function K(){k.powerTip.show(this)},"blur.powertip":function H(){k.powerTip.hide(this,true)},"keydown.powertip":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(".powertip").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr("title",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top="auto";F.left="auto";F.right="auto";F.bottom="auto";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split("-")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case"n":N.set("left",I.left-(J/2));N.set("bottom",c.windowHeight-I.top+P);break;case"e":N.set("left",I.left+P);N.set("top",I.top-(O/2));break;case"s":N.set("left",I.left-(J/2));N.set("top",I.top+P);break;case"w":N.set("top",I.top-(O/2));N.set("right",c.windowWidth-I.left+P);break;case"nw":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"nw-alt":N.set("left",I.left);N.set("bottom",c.windowHeight-I.top+P);break;case"ne":N.set("left",I.left-20);N.set("bottom",c.windowHeight-I.top+P);break;case"ne-alt":N.set("bottom",c.windowHeight-I.top+P);N.set("right",c.windowWidth-I.left);break;case"sw":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left-20);break;case"sw-alt":N.set("left",I.left);N.set("top",I.top+P);break;case"se":N.set("left",I.left-20);N.set("top",I.top+P);break;case"se-alt":N.set("top",I.top+P);N.set("right",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case"n":M=O.left+N/2;L=O.top;break;case"e":M=O.left+N;L=O.top+I/2;break;case"s":M=O.left+N/2;L=O.top+I;break;case"w":M=O.left;L=O.top+I/2;break;case"nw":M=O.left;L=O.top;break;case"ne":M=O.left+N;L=O.top;break;case"sw":M=O.left;L=O.top+I;break;case"se":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest("svg")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=["nw","n","ne","e","se","s","sw","w"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k("#"+Q.popupId);if(O.length===0){O=k("<div/>",{id:Q.popupId});if(w.length===0){w=k("body")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on("mousemove",M);s.on("scroll",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger("powerTipPreRender");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger("powerTipRender");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger("powerTipOpen")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set("top",c.currentY+Q.offset);T.set("left",c.currentX+Q.offset);O.css(T);R.trigger("powerTipClose")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set("top",c.currentY+Q.offset);U.set("left",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set("left",c.windowWidth-R)}else{if(S===p.bottom){U.set("top",c.scrollTop+c.windowHeight-V)}}}else{U.set("left",c.currentX-R-Q.offset);U.set("top",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set("top",0);V.set("left",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(":disabled")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(":focus")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on("mousemove",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k("#"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));/*! 48.72 + * jQuery UI Touch Punch 0.2.3 48.73 + * 48.74 + * Copyright 2011–2014, Dave Furfero 48.75 + * Dual licensed under the MIT or GPL Version 2 licenses. 48.76 + * 48.77 + * Depends: 48.78 + * jquery.ui.widget.js 48.79 + * jquery.ui.mouse.js 48.80 + */ 48.81 +(function(b){b.support.touch="ontouchend" in document;if(!b.support.touch){return}var d=b.ui.mouse.prototype,f=d._mouseInit,c=d._mouseDestroy,a;function e(h,i){if(h.originalEvent.touches.length>1){return}h.preventDefault();var j=h.originalEvent.changedTouches[0],g=document.createEvent("MouseEvents");g.initMouseEvent(i,true,true,window,1,j.screenX,j.screenY,j.clientX,j.clientY,false,false,false,false,0,null);h.target.dispatchEvent(g)}d._touchStart=function(h){var g=this;if(a||!g._mouseCapture(h.originalEvent.changedTouches[0])){return}a=true;g._touchMoved=false;e(h,"mouseover");e(h,"mousemove");e(h,"mousedown")};d._touchMove=function(g){if(!a){return}this._touchMoved=true;e(g,"mousemove")};d._touchEnd=function(g){if(!a){return}e(g,"mouseup");e(g,"mouseout");if(!this._touchMoved){e(g,"click")}a=false};d._mouseInit=function(){var g=this;g.element.bind({touchstart:b.proxy(g,"_touchStart"),touchmove:b.proxy(g,"_touchMove"),touchend:b.proxy(g,"_touchEnd")});f.call(g)};d._mouseDestroy=function(){var g=this;g.element.unbind({touchstart:b.proxy(g,"_touchStart"),touchmove:b.proxy(g,"_touchMove"),touchend:b.proxy(g,"_touchEnd")});c.call(g)}})(jQuery);/*! 48.82 + * SmartMenus jQuery Plugin - v1.0.0 - January 27, 2016 48.83 + * http://www.smartmenus.org/ 48.84 + * 48.85 + * Copyright Vasil Dinkov, Vadikom Web Ltd. 48.86 + * http://vadikom.com 48.87 + * 48.88 + * Licensed MIT 48.89 + */ 48.90 +(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{if(typeof module==="object"&&typeof module.exports==="object"){module.exports=a(require("jquery"))}else{a(jQuery)}}}(function(a){var b=[],e=!!window.createPopup,f=false,d="ontouchstart" in window,h=false,g=window.requestAnimationFrame||function(l){return setTimeout(l,1000/60)},c=window.cancelAnimationFrame||function(l){clearTimeout(l)};function k(m){var n=".smartmenus_mouse";if(!h&&!m){var o=true,l=null;a(document).bind(i([["mousemove",function(s){var t={x:s.pageX,y:s.pageY,timeStamp:new Date().getTime()};if(l){var q=Math.abs(l.x-t.x),p=Math.abs(l.y-t.y);if((q>0||p>0)&&q<=2&&p<=2&&t.timeStamp-l.timeStamp<=300){f=true;if(o){var r=a(s.target).closest("a");if(r.is("a")){a.each(b,function(){if(a.contains(this.$root[0],r[0])){this.itemEnter({currentTarget:r[0]});return false}})}o=false}}}l=t}],[d?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut",function(p){if(j(p.originalEvent)){f=false}}]],n));h=true}else{if(h&&m){a(document).unbind(n);h=false}}}function j(l){return !/^(4|mouse)$/.test(l.pointerType)}function i(l,n){if(!n){n=""}var m={};a.each(l,function(o,p){m[p[0].split(" ").join(n+" ")+n]=p[1]});return m}a.SmartMenus=function(m,l){this.$root=a(m);this.opts=l;this.rootId="";this.accessIdPrefix="";this.$subArrow=null;this.activatedItems=[];this.visibleSubMenus=[];this.showTimeout=0;this.hideTimeout=0;this.scrollTimeout=0;this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.idInc=0;this.$firstLink=null;this.$firstSub=null;this.disabled=false;this.$disableOverlay=null;this.$touchScrollingSub=null;this.cssTransforms3d="perspective" in m.style||"webkitPerspective" in m.style;this.wasCollapsible=false;this.init()};a.extend(a.SmartMenus,{hideAll:function(){a.each(b,function(){this.menuHideAll()})},destroy:function(){while(b.length){b[0].destroy()}k(true)},prototype:{init:function(n){var l=this;if(!n){b.push(this);this.rootId=(new Date().getTime()+Math.random()+"").replace(/\D/g,"");this.accessIdPrefix="sm-"+this.rootId+"-";if(this.$root.hasClass("sm-rtl")){this.opts.rightToLeftSubMenus=true}var r=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).bind(i([["mouseover focusin",a.proxy(this.rootOver,this)],["mouseout focusout",a.proxy(this.rootOut,this)],["keydown",a.proxy(this.rootKeyDown,this)]],r)).delegate("a",i([["mouseenter",a.proxy(this.itemEnter,this)],["mouseleave",a.proxy(this.itemLeave,this)],["mousedown",a.proxy(this.itemDown,this)],["focus",a.proxy(this.itemFocus,this)],["blur",a.proxy(this.itemBlur,this)],["click",a.proxy(this.itemClick,this)]],r));r+=this.rootId;if(this.opts.hideOnClick){a(document).bind(i([["touchstart",a.proxy(this.docTouchStart,this)],["touchmove",a.proxy(this.docTouchMove,this)],["touchend",a.proxy(this.docTouchEnd,this)],["click",a.proxy(this.docClick,this)]],r))}a(window).bind(i([["resize orientationchange",a.proxy(this.winResize,this)]],r));if(this.opts.subIndicators){this.$subArrow=a("<span/>").addClass("sub-arrow");if(this.opts.subIndicatorsText){this.$subArrow.html(this.opts.subIndicatorsText)}}k()}this.$firstSub=this.$root.find("ul").each(function(){l.menuInit(a(this))}).eq(0);this.$firstLink=this.$root.find("a").eq(0);if(this.opts.markCurrentItem){var p=/(index|default)\.[^#\?\/]*/i,m=/#.*/,q=window.location.href.replace(p,""),o=q.replace(m,"");this.$root.find("a").each(function(){var s=this.href.replace(p,""),t=a(this);if(s==q||s==o){t.addClass("current");if(l.opts.markCurrentTree){t.parentsUntil("[data-smartmenus-id]","ul").each(function(){a(this).dataSM("parent-a").addClass("current")})}}})}this.wasCollapsible=this.isCollapsible()},destroy:function(m){if(!m){var n=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").unbind(n).undelegate(n);n+=this.rootId;a(document).unbind(n);a(window).unbind(n);if(this.opts.subIndicators){this.$subArrow=null}}this.menuHideAll();var l=this;this.$root.find("ul").each(function(){var o=a(this);if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}if(o.dataSM("shown-before")){if(l.opts.subMenusMinWidth||l.opts.subMenusMaxWidth){o.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap")}if(o.dataSM("scroll-arrows")){o.dataSM("scroll-arrows").remove()}o.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})}if((o.attr("id")||"").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("ie-shim").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded");this.$root.find("a.has-submenu").each(function(){var o=a(this);if(o.attr("id").indexOf(l.accessIdPrefix)==0){o.removeAttr("id")}}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub");if(this.opts.subIndicators){this.$root.find("span.sub-arrow").remove()}if(this.opts.markCurrentItem){this.$root.find("a.current").removeClass("current")}if(!m){this.$root=null;this.$firstLink=null;this.$firstSub=null;if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}b.splice(a.inArray(this,b),1)}},disable:function(l){if(!this.disabled){this.menuHideAll();if(!l&&!this.opts.isPopup&&this.$root.is(":visible")){var m=this.$root.offset();this.$disableOverlay=a('<div class="sm-jquery-disable-overlay"/>').css({position:"absolute",top:m.top,left:m.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(true),opacity:0}).appendTo(document.body)}this.disabled=true}},docClick:function(l){if(this.$touchScrollingSub){this.$touchScrollingSub=null;return}if(this.visibleSubMenus.length&&!a.contains(this.$root[0],l.target)||a(l.target).is("a")){this.menuHideAll()}},docTouchEnd:function(m){if(!this.lastTouch){return}if(this.visibleSubMenus.length&&(this.lastTouch.x2===undefined||this.lastTouch.x1==this.lastTouch.x2)&&(this.lastTouch.y2===undefined||this.lastTouch.y1==this.lastTouch.y2)&&(!this.lastTouch.target||!a.contains(this.$root[0],this.lastTouch.target))){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},350)}this.lastTouch=null},docTouchMove:function(m){if(!this.lastTouch){return}var l=m.originalEvent.touches[0];this.lastTouch.x2=l.pageX;this.lastTouch.y2=l.pageY},docTouchStart:function(m){var l=m.originalEvent.touches[0];this.lastTouch={x1:l.pageX,y1:l.pageY,target:l.target}},enable:function(){if(this.disabled){if(this.$disableOverlay){this.$disableOverlay.remove();this.$disableOverlay=null}this.disabled=false}},getClosestMenu:function(m){var l=a(m).closest("ul");while(l.dataSM("in-mega")){l=l.parent().closest("ul")}return l[0]||null},getHeight:function(l){return this.getOffset(l,true)},getOffset:function(n,l){var m;if(n.css("display")=="none"){m={position:n[0].style.position,visibility:n[0].style.visibility};n.css({position:"absolute",visibility:"hidden"}).show()}var o=n[0].getBoundingClientRect&&n[0].getBoundingClientRect(),p=o&&(l?o.height||o.bottom-o.top:o.width||o.right-o.left);if(!p&&p!==0){p=l?n[0].offsetHeight:n[0].offsetWidth}if(m){n.hide().css(m)}return p},getStartZIndex:function(l){var m=parseInt(this[l?"$root":"$firstSub"].css("z-index"));if(!l&&isNaN(m)){m=parseInt(this.$root.css("z-index"))}return !isNaN(m)?m:1},getTouchPoint:function(l){return l.touches&&l.touches[0]||l.changedTouches&&l.changedTouches[0]||l},getViewport:function(l){var m=l?"Height":"Width",o=document.documentElement["client"+m],n=window["inner"+m];if(n){o=Math.min(o,n)}return o},getViewportHeight:function(){return this.getViewport(true)},getViewportWidth:function(){return this.getViewport()},getWidth:function(l){return this.getOffset(l)},handleEvents:function(){return !this.disabled&&this.isCSSOn()},handleItemEvents:function(l){return this.handleEvents()&&!this.isLinkInMegaMenu(l)},isCollapsible:function(){return this.$firstSub.css("position")=="static"},isCSSOn:function(){return this.$firstLink.css("display")=="block"},isFixed:function(){var l=this.$root.css("position")=="fixed";if(!l){this.$root.parentsUntil("body").each(function(){if(a(this).css("position")=="fixed"){l=true;return false}})}return l},isLinkInMegaMenu:function(l){return a(this.getClosestMenu(l[0])).hasClass("mega-menu")},isTouchMode:function(){return !f||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(p,l){var n=p.closest("ul"),q=n.dataSM("level");if(q>1&&(!this.activatedItems[q-2]||this.activatedItems[q-2][0]!=n.dataSM("parent-a")[0])){var m=this;a(n.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(n).each(function(){m.itemActivate(a(this).dataSM("parent-a"))})}if(!this.isCollapsible()||l){this.menuHideSubMenus(!this.activatedItems[q-1]||this.activatedItems[q-1][0]!=p[0]?q-1:q)}this.activatedItems[q-1]=p;if(this.$root.triggerHandler("activate.smapi",p[0])===false){return}var o=p.dataSM("sub");if(o&&(this.isTouchMode()||(!this.opts.showOnClick||this.clickActivated))){this.menuShow(o)}},itemBlur:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}this.$root.triggerHandler("blur.smapi",l[0])},itemClick:function(o){var n=a(o.currentTarget);if(!this.handleItemEvents(n)){return}if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==n.closest("ul")[0]){this.$touchScrollingSub=null;o.stopPropagation();return false}if(this.$root.triggerHandler("click.smapi",n[0])===false){return false}var p=a(o.target).is("span.sub-arrow"),m=n.dataSM("sub"),l=m?m.dataSM("level")==2:false;if(m&&!m.is(":visible")){if(this.opts.showOnClick&&l){this.clickActivated=true}this.itemActivate(n);if(m.is(":visible")){this.focusActivated=true;return false}}else{if(this.isCollapsible()&&p){this.itemActivate(n);this.menuHide(m);return false}}if(this.opts.showOnClick&&l||n.hasClass("disabled")||this.$root.triggerHandler("select.smapi",n[0])===false){return false}},itemDown:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}l.dataSM("mousedown",true)},itemEnter:function(n){var m=a(n.currentTarget);if(!this.handleItemEvents(m)){return}if(!this.isTouchMode()){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var l=this;this.showTimeout=setTimeout(function(){l.itemActivate(m)},this.opts.showOnClick&&m.closest("ul").dataSM("level")==1?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",m[0])},itemFocus:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(this.focusActivated&&(!this.isTouchMode()||!l.dataSM("mousedown"))&&(!this.activatedItems.length||this.activatedItems[this.activatedItems.length-1][0]!=l[0])){this.itemActivate(l,true)}this.$root.triggerHandler("focus.smapi",l[0])},itemLeave:function(m){var l=a(m.currentTarget);if(!this.handleItemEvents(l)){return}if(!this.isTouchMode()){l[0].blur();if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}}l.removeDataSM("mousedown");this.$root.triggerHandler("mouseleave.smapi",l[0])},menuHide:function(m){if(this.$root.triggerHandler("beforehide.smapi",m[0])===false){return}m.stop(true,true);if(m.css("display")!="none"){var l=function(){m.css("z-index","")};if(this.isCollapsible()){if(this.opts.collapsibleHideFunction){this.opts.collapsibleHideFunction.call(this,m,l)}else{m.hide(this.opts.collapsibleHideDuration,l)}}else{if(this.opts.hideFunction){this.opts.hideFunction.call(this,m,l)}else{m.hide(this.opts.hideDuration,l)}}if(m.dataSM("ie-shim")){m.dataSM("ie-shim").remove().css({"-webkit-transform":"",transform:""})}if(m.dataSM("scroll")){this.menuScrollStop(m);m.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).unbind(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()}m.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false");m.attr({"aria-expanded":"false","aria-hidden":"true"});var n=m.dataSM("level");this.activatedItems.splice(n-1,1);this.visibleSubMenus.splice(a.inArray(m,this.visibleSubMenus),1);this.$root.triggerHandler("hide.smapi",m[0])}},menuHideAll:function(){if(this.showTimeout){clearTimeout(this.showTimeout);this.showTimeout=0}var m=this.opts.isPopup?1:0;for(var l=this.visibleSubMenus.length-1;l>=m;l--){this.menuHide(this.visibleSubMenus[l])}if(this.opts.isPopup){this.$root.stop(true,true);if(this.$root.is(":visible")){if(this.opts.hideFunction){this.opts.hideFunction.call(this,this.$root)}else{this.$root.hide(this.opts.hideDuration)}if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").remove()}}}this.activatedItems=[];this.visibleSubMenus=[];this.clickActivated=false;this.focusActivated=false;this.zIndexInc=0;this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(n){for(var l=this.activatedItems.length-1;l>=n;l--){var m=this.activatedItems[l].dataSM("sub");if(m){this.menuHide(m)}}},menuIframeShim:function(l){if(e&&this.opts.overlapControlsInIE&&!l.dataSM("ie-shim")){l.dataSM("ie-shim",a("<iframe/>").attr({src:"javascript:0",tabindex:-9}).css({position:"absolute",top:"auto",left:"0",opacity:0,border:"0"}))}},menuInit:function(l){if(!l.dataSM("in-mega")){if(l.hasClass("mega-menu")){l.find("ul").dataSM("in-mega",true)}var q=2,m=l[0];while((m=m.parentNode.parentNode)!=this.$root[0]){q++}var n=l.prevAll("a").eq(-1);if(!n.length){n=l.prevAll().find("a").eq(-1)}n.addClass("has-submenu").dataSM("sub",l);l.dataSM("parent-a",n).dataSM("level",q).parent().dataSM("sub",l);var o=n.attr("id")||this.accessIdPrefix+(++this.idInc),p=l.attr("id")||this.accessIdPrefix+(++this.idInc);n.attr({id:o,"aria-haspopup":"true","aria-controls":p,"aria-expanded":"false"});l.attr({id:p,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"});if(this.opts.subIndicators){n[this.opts.subIndicatorsPos](this.$subArrow.clone())}}},menuPosition:function(K){var r=K.dataSM("parent-a"),D=r.closest("li"),E=D.parent(),l=K.dataSM("level"),t=this.getWidth(K),J=this.getHeight(K),u=r.offset(),o=u.left,m=u.top,q=this.getWidth(r),F=this.getHeight(r),H=a(window),v=H.scrollLeft(),s=H.scrollTop(),z=this.getViewportWidth(),L=this.getViewportHeight(),w=E.parent().is("[data-sm-horizontal-sub]")||l==2&&!E.hasClass("sm-vertical"),B=this.opts.rightToLeftSubMenus&&!D.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&D.is("[data-sm-reverse]"),p=l==2?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,n=l==2?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY,C,A;if(w){C=B?q-t-p:p;A=this.opts.bottomToTopSubMenus?-J-n:F+n}else{C=B?p-t:q-p;A=this.opts.bottomToTopSubMenus?F-n-J:n}if(this.opts.keepInViewport){var N=o+C,M=m+A;if(B&&N<v){C=w?v-N+C:q-p}else{if(!B&&N+t>v+z){C=w?v+z-t-N+C:p-t}}if(!w){if(J<L&&M+J>s+L){A+=s+L-J-M}else{if(J>=L||M<s){A+=s-M}}}if(w&&(M+J>s+L+0.49||M<s)||!w&&J>L+0.49){var G=this;if(!K.dataSM("scroll-arrows")){K.dataSM("scroll-arrows",a([a('<span class="scroll-up"><span class="scroll-up-arrow"></span></span>')[0],a('<span class="scroll-down"><span class="scroll-down-arrow"></span></span>')[0]]).bind({mouseenter:function(){K.dataSM("scroll").up=a(this).hasClass("scroll-up");G.menuScroll(K)},mouseleave:function(x){G.menuScrollStop(K);G.menuScrollOut(K,x)},"mousewheel DOMMouseScroll":function(x){x.preventDefault()}}).insertAfter(K))}var I=".smartmenus_scroll";K.dataSM("scroll",{y:this.cssTransforms3d?0:A-F,step:1,itemH:F,subH:J,arrowDownH:this.getHeight(K.dataSM("scroll-arrows").eq(1))}).bind(i([["mouseover",function(x){G.menuScrollOver(K,x)}],["mouseout",function(x){G.menuScrollOut(K,x)}],["mousewheel DOMMouseScroll",function(x){G.menuScrollMousewheel(K,x)}]],I)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:C+(parseInt(K.css("border-left-width"))||0),width:t-(parseInt(K.css("border-left-width"))||0)-(parseInt(K.css("border-right-width"))||0),zIndex:K.css("z-index")}).eq(w&&this.opts.bottomToTopSubMenus?0:1).show();if(this.isFixed()){K.css({"touch-action":"none","-ms-touch-action":"none"}).bind(i([[d?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp",function(x){G.menuScrollTouch(K,x)}]],I))}}}K.css({top:"auto",left:"0",marginLeft:C,marginTop:A-F});this.menuIframeShim(K);if(K.dataSM("ie-shim")){K.dataSM("ie-shim").css({zIndex:K.css("z-index"),width:t,height:J,marginLeft:C,marginTop:A-F})}},menuScroll:function(r,m,n){var p=r.dataSM("scroll"),q=r.dataSM("scroll-arrows"),o=p.up?p.upEnd:p.downEnd,s;if(!m&&p.momentum){p.momentum*=0.92;s=p.momentum;if(s<0.5){this.menuScrollStop(r);return}}else{s=n||(m||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(p.step))}var l=r.dataSM("level");if(this.activatedItems[l-1]&&this.activatedItems[l-1].dataSM("sub")&&this.activatedItems[l-1].dataSM("sub").is(":visible")){this.menuHideSubMenus(l-1)}p.y=p.up&&o<=p.y||!p.up&&o>=p.y?p.y:(Math.abs(o-p.y)>s?p.y+(p.up?s:-s):o);r.add(r.dataSM("ie-shim")).css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+p.y+"px, 0)",transform:"translate3d(0, "+p.y+"px, 0)"}:{marginTop:p.y});if(f&&(p.up&&p.y>p.downEnd||!p.up&&p.y<p.upEnd)){q.eq(p.up?1:0).show()}if(p.y==o){if(f){q.eq(p.up?0:1).hide()}this.menuScrollStop(r)}else{if(!m){if(this.opts.scrollAccelerate&&p.step<this.opts.scrollStep){p.step+=0.2}var t=this;this.scrollTimeout=g(function(){t.menuScroll(r)})}}},menuScrollMousewheel:function(m,n){if(this.getClosestMenu(n.target)==m[0]){n=n.originalEvent;var l=(n.wheelDelta||-n.detail)>0;if(m.dataSM("scroll-arrows").eq(l?0:1).is(":visible")){m.dataSM("scroll").up=l;this.menuScroll(m,true)}}n.preventDefault()},menuScrollOut:function(l,m){if(f){if(!/^scroll-(up|down)/.test((m.relatedTarget||"").className)&&(l[0]!=m.relatedTarget&&!a.contains(l[0],m.relatedTarget)||this.getClosestMenu(m.relatedTarget)!=l[0])){l.dataSM("scroll-arrows").css("visibility","hidden")}}},menuScrollOver:function(n,o){if(f){if(!/^scroll-(up|down)/.test(o.target.className)&&this.getClosestMenu(o.target)==n[0]){this.menuScrollRefreshData(n);var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;n.dataSM("scroll-arrows").eq(0).css("margin-top",l).end().eq(1).css("margin-top",l+this.getViewportHeight()-m.arrowDownH).end().css("visibility","visible")}}},menuScrollRefreshData:function(n){var m=n.dataSM("scroll"),l=a(window).scrollTop()-n.dataSM("parent-a").offset().top-m.itemH;if(this.cssTransforms3d){l=-(parseFloat(n.css("margin-top"))-l)}a.extend(m,{upEnd:l,downEnd:l+this.getViewportHeight()-m.subH})},menuScrollStop:function(l){if(this.scrollTimeout){c(this.scrollTimeout);this.scrollTimeout=0;l.dataSM("scroll").step=1;return true}},menuScrollTouch:function(p,q){q=q.originalEvent;if(j(q)){var m=this.getTouchPoint(q);if(this.getClosestMenu(m.target)==p[0]){var o=p.dataSM("scroll");if(/(start|down)$/i.test(q.type)){if(this.menuScrollStop(p)){q.preventDefault();this.$touchScrollingSub=p}else{this.$touchScrollingSub=null}this.menuScrollRefreshData(p);a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}else{if(/move$/i.test(q.type)){var n=o.touchY!==undefined?o.touchY:o.touchStartY;if(n!==undefined&&n!=m.pageY){this.$touchScrollingSub=p;var l=n<m.pageY;if(o.up!==undefined&&o.up!=l){a.extend(o,{touchStartY:m.pageY,touchStartTime:q.timeStamp})}a.extend(o,{up:l,touchY:m.pageY});this.menuScroll(p,true,Math.abs(m.pageY-n))}q.preventDefault()}else{if(o.touchY!==undefined){if(o.momentum=Math.pow(Math.abs(m.pageY-o.touchStartY)/(q.timeStamp-o.touchStartTime),2)*15){this.menuScrollStop(p);this.menuScroll(p);q.preventDefault()}delete o.touchY}}}}}},menuShow:function(n){if(!n.dataSM("beforefirstshowfired")){n.dataSM("beforefirstshowfired",true);if(this.$root.triggerHandler("beforefirstshow.smapi",n[0])===false){return}}if(this.$root.triggerHandler("beforeshow.smapi",n[0])===false){return}n.dataSM("shown-before",true).stop(true,true);if(!n.is(":visible")){var m=n.dataSM("parent-a");if(this.opts.keepHighlighted||this.isCollapsible()){m.addClass("highlighted")}if(this.isCollapsible()){n.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""})}else{n.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1);if(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth){n.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap");if(this.opts.subMenusMinWidth){n.css("min-width",this.opts.subMenusMinWidth)}if(this.opts.subMenusMaxWidth){var o=this.getWidth(n);n.css("max-width",this.opts.subMenusMaxWidth);if(o>this.getWidth(n)){n.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}}}this.menuPosition(n);if(n.dataSM("ie-shim")){n.dataSM("ie-shim").insertBefore(n)}}var l=function(){n.css("overflow","")};if(this.isCollapsible()){if(this.opts.collapsibleShowFunction){this.opts.collapsibleShowFunction.call(this,n,l)}else{n.show(this.opts.collapsibleShowDuration,l)}}else{if(this.opts.showFunction){this.opts.showFunction.call(this,n,l)}else{n.show(this.opts.showDuration,l)}}m.attr("aria-expanded","true");n.attr({"aria-expanded":"true","aria-hidden":"false"});this.visibleSubMenus.push(n);this.$root.triggerHandler("show.smapi",n[0])}},popupHide:function(l){if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}var m=this;this.hideTimeout=setTimeout(function(){m.menuHideAll()},l?1:this.opts.hideTimeout)},popupShow:function(o,n){if(!this.opts.isPopup){alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.');return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}this.$root.dataSM("shown-before",true).stop(true,true);if(!this.$root.is(":visible")){this.$root.css({left:o,top:n});this.menuIframeShim(this.$root);if(this.$root.dataSM("ie-shim")){this.$root.dataSM("ie-shim").css({zIndex:this.$root.css("z-index"),width:this.getWidth(this.$root),height:this.getHeight(this.$root),left:o,top:n}).insertBefore(this.$root)}var m=this,l=function(){m.$root.css("overflow","")};if(this.opts.showFunction){this.opts.showFunction.call(this,this.$root,l)}else{this.$root.show(this.opts.showDuration,l)}this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(true);this.init(true)},rootKeyDown:function(o){if(!this.handleEvents()){return}switch(o.keyCode){case 27:var m=this.activatedItems[0];if(m){this.menuHideAll();m[0].focus();var n=m.dataSM("sub");if(n){this.menuHide(n)}}break;case 32:var l=a(o.target);if(l.is("a")&&this.handleItemEvents(l)){var n=l.dataSM("sub");if(n&&!n.is(":visible")){this.itemClick({currentTarget:o.target});o.preventDefault()}}break}},rootOut:function(m){if(!this.handleEvents()||this.isTouchMode()||m.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}if(!this.opts.showOnClick||!this.opts.hideOnClick){var l=this;this.hideTimeout=setTimeout(function(){l.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(l){if(!this.handleEvents()||this.isTouchMode()||l.target==this.$root[0]){return}if(this.hideTimeout){clearTimeout(this.hideTimeout);this.hideTimeout=0}},winResize:function(m){if(!this.handleEvents()){if(this.$disableOverlay){var n=this.$root.offset();this.$disableOverlay.css({top:n.top,left:n.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}return}if(!("onorientationchange" in window)||m.type=="orientationchange"){var l=this.isCollapsible();if(!(this.wasCollapsible&&l)){if(this.activatedItems.length){this.activatedItems[this.activatedItems.length-1][0].blur()}this.menuHideAll()}this.wasCollapsible=l}}}});a.fn.dataSM=function(l,m){if(m){return this.data(l+"_smartmenus",m)}return this.data(l+"_smartmenus")};a.fn.removeDataSM=function(l){return this.removeData(l+"_smartmenus")};a.fn.smartmenus=function(m){if(typeof m=="string"){var l=arguments,o=m;Array.prototype.shift.call(l);return this.each(function(){var p=a(this).data("smartmenus");if(p&&p[o]){p[o].apply(p,l)}})}var n=a.extend({},a.fn.smartmenus.defaults,m);return this.each(function(){new a.SmartMenus(this,n)})};a.fn.smartmenus.defaults={isPopup:false,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:true,subIndicatorsPos:"prepend",subIndicatorsText:"+",scrollStep:30,scrollAccelerate:true,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(m,l){m.fadeOut(200,l)},collapsibleShowDuration:0,collapsibleShowFunction:function(m,l){m.slideDown(200,l)},collapsibleHideDuration:0,collapsibleHideFunction:function(m,l){m.slideUp(200,l)},showOnClick:false,hideOnClick:true,noMouseOver:false,keepInViewport:true,keepHighlighted:true,markCurrentItem:false,markCurrentTree:true,rightToLeftSubMenus:false,bottomToTopSubMenus:false,overlapControlsInIE:true};return a})); 48.91 \ No newline at end of file
49.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 49.2 +++ b/docs/api-2.1/list_8h.html Sat Feb 06 19:11:44 2021 +0100 49.3 @@ -0,0 +1,1556 @@ 49.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 49.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 49.6 +<head> 49.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 49.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 49.9 +<meta name="generator" content="Doxygen 1.8.13"/> 49.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 49.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/list.h File Reference</title> 49.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 49.13 +<script type="text/javascript" src="jquery.js"></script> 49.14 +<script type="text/javascript" src="dynsections.js"></script> 49.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 49.16 +<script type="text/javascript" src="search/searchdata.js"></script> 49.17 +<script type="text/javascript" src="search/search.js"></script> 49.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 49.19 +</head> 49.20 +<body> 49.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 49.22 +<div id="titlearea"> 49.23 +<table cellspacing="0" cellpadding="0"> 49.24 + <tbody> 49.25 + <tr style="height: 56px;"> 49.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 49.27 + <td id="projectalign" style="padding-left: 0.5em;"> 49.28 + <div id="projectname">ucx 49.29 + </div> 49.30 + <div id="projectbrief">UAP Common Extensions</div> 49.31 + </td> 49.32 + </tr> 49.33 + </tbody> 49.34 +</table> 49.35 +</div> 49.36 +<!-- end header part --> 49.37 +<!-- Generated by Doxygen 1.8.13 --> 49.38 +<script type="text/javascript"> 49.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 49.40 +</script> 49.41 +<script type="text/javascript" src="menudata.js"></script> 49.42 +<script type="text/javascript" src="menu.js"></script> 49.43 +<script type="text/javascript"> 49.44 +$(function() { 49.45 + initMenu('',true,false,'search.php','Search'); 49.46 + $(document).ready(function() { init_search(); }); 49.47 +}); 49.48 +</script> 49.49 +<div id="main-nav"></div> 49.50 +<!-- window showing the filter options --> 49.51 +<div id="MSearchSelectWindow" 49.52 + onmouseover="return searchBox.OnSearchSelectShow()" 49.53 + onmouseout="return searchBox.OnSearchSelectHide()" 49.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 49.55 +</div> 49.56 + 49.57 +<!-- iframe showing the search results (closed by default) --> 49.58 +<div id="MSearchResultsWindow"> 49.59 +<iframe src="javascript:void(0)" frameborder="0" 49.60 + name="MSearchResults" id="MSearchResults"> 49.61 +</iframe> 49.62 +</div> 49.63 + 49.64 +<div id="nav-path" class="navpath"> 49.65 + <ul> 49.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 49.67 +</div> 49.68 +</div><!-- top --> 49.69 +<div class="header"> 49.70 + <div class="summary"> 49.71 +<a href="#nested-classes">Data Structures</a> | 49.72 +<a href="#define-members">Macros</a> | 49.73 +<a href="#typedef-members">Typedefs</a> | 49.74 +<a href="#func-members">Functions</a> </div> 49.75 + <div class="headertitle"> 49.76 +<div class="title">list.h File Reference</div> </div> 49.77 +</div><!--header--> 49.78 +<div class="contents"> 49.79 + 49.80 +<p>Doubly linked list implementation. 49.81 +<a href="#details">More...</a></p> 49.82 +<div class="textblock"><code>#include "<a class="el" href="ucx_8h_source.html">ucx.h</a>"</code><br /> 49.83 +<code>#include "<a class="el" href="allocator_8h_source.html">allocator.h</a>"</code><br /> 49.84 +</div> 49.85 +<p><a href="list_8h_source.html">Go to the source code of this file.</a></p> 49.86 +<table class="memberdecls"> 49.87 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> 49.88 +Data Structures</h2></td></tr> 49.89 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxList.html">UcxList</a></td></tr> 49.90 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">UCX list structure. <a href="structUcxList.html#details">More...</a><br /></td></tr> 49.91 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 49.92 +</table><table class="memberdecls"> 49.93 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> 49.94 +Macros</h2></td></tr> 49.95 +<tr class="memitem:a4b143b6526a410aa4d22cb3bb9365d70"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a4b143b6526a410aa4d22cb3bb9365d70">UCX_FOREACH</a>(elem, list)   for (<a class="el" href="structUcxList.html">UcxList</a>* elem = (<a class="el" href="structUcxList.html">UcxList</a>*) list ; elem != NULL ; elem = elem->next)</td></tr> 49.96 +<tr class="memdesc:a4b143b6526a410aa4d22cb3bb9365d70"><td class="mdescLeft"> </td><td class="mdescRight">Loop statement for UCX lists. <a href="#a4b143b6526a410aa4d22cb3bb9365d70">More...</a><br /></td></tr> 49.97 +<tr class="separator:a4b143b6526a410aa4d22cb3bb9365d70"><td class="memSeparator" colspan="2"> </td></tr> 49.98 +</table><table class="memberdecls"> 49.99 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> 49.100 +Typedefs</h2></td></tr> 49.101 +<tr class="memitem:aa6f89f91c1081c9a7c6866c298f497a2"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structUcxList.html">UcxList</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#aa6f89f91c1081c9a7c6866c298f497a2">UcxList</a></td></tr> 49.102 +<tr class="memdesc:aa6f89f91c1081c9a7c6866c298f497a2"><td class="mdescLeft"> </td><td class="mdescRight">UCX list type. <a href="#aa6f89f91c1081c9a7c6866c298f497a2">More...</a><br /></td></tr> 49.103 +<tr class="separator:aa6f89f91c1081c9a7c6866c298f497a2"><td class="memSeparator" colspan="2"> </td></tr> 49.104 +</table><table class="memberdecls"> 49.105 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 49.106 +Functions</h2></td></tr> 49.107 +<tr class="memitem:ae7054a41c289b24e6caf5cb07ac850ed"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#ae7054a41c289b24e6caf5cb07ac850ed">ucx_list_clone</a> (const <a class="el" href="structUcxList.html">UcxList</a> *list, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpyfnc, void *data)</td></tr> 49.108 +<tr class="memdesc:ae7054a41c289b24e6caf5cb07ac850ed"><td class="mdescLeft"> </td><td class="mdescRight">Creates an element-wise copy of a list. <a href="#ae7054a41c289b24e6caf5cb07ac850ed">More...</a><br /></td></tr> 49.109 +<tr class="separator:ae7054a41c289b24e6caf5cb07ac850ed"><td class="memSeparator" colspan="2"> </td></tr> 49.110 +<tr class="memitem:a08ca1ba0d2e82258b0408714c1f4c425"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a08ca1ba0d2e82258b0408714c1f4c425">ucx_list_clone_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, const <a class="el" href="structUcxList.html">UcxList</a> *list, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpyfnc, void *data)</td></tr> 49.111 +<tr class="memdesc:a08ca1ba0d2e82258b0408714c1f4c425"><td class="mdescLeft"> </td><td class="mdescRight">Creates an element-wise copy of a list using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. <a href="#a08ca1ba0d2e82258b0408714c1f4c425">More...</a><br /></td></tr> 49.112 +<tr class="separator:a08ca1ba0d2e82258b0408714c1f4c425"><td class="memSeparator" colspan="2"> </td></tr> 49.113 +<tr class="memitem:adc435447cecf885bc63d232191085bbe"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#adc435447cecf885bc63d232191085bbe">ucx_list_equals</a> (const <a class="el" href="structUcxList.html">UcxList</a> *list1, const <a class="el" href="structUcxList.html">UcxList</a> *list2, <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, void *data)</td></tr> 49.114 +<tr class="memdesc:adc435447cecf885bc63d232191085bbe"><td class="mdescLeft"> </td><td class="mdescRight">Compares two UCX lists element-wise by using a compare function. <a href="#adc435447cecf885bc63d232191085bbe">More...</a><br /></td></tr> 49.115 +<tr class="separator:adc435447cecf885bc63d232191085bbe"><td class="memSeparator" colspan="2"> </td></tr> 49.116 +<tr class="memitem:a1a0fa2c5b1e478a96da19b0c3f013668"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a1a0fa2c5b1e478a96da19b0c3f013668">ucx_list_free</a> (<a class="el" href="structUcxList.html">UcxList</a> *list)</td></tr> 49.117 +<tr class="memdesc:a1a0fa2c5b1e478a96da19b0c3f013668"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the entire list. <a href="#a1a0fa2c5b1e478a96da19b0c3f013668">More...</a><br /></td></tr> 49.118 +<tr class="separator:a1a0fa2c5b1e478a96da19b0c3f013668"><td class="memSeparator" colspan="2"> </td></tr> 49.119 +<tr class="memitem:a944e11f76c38767cd1100d72a4e3b25b"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a944e11f76c38767cd1100d72a4e3b25b">ucx_list_free_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="el" href="structUcxList.html">UcxList</a> *list)</td></tr> 49.120 +<tr class="memdesc:a944e11f76c38767cd1100d72a4e3b25b"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the entire list using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. <a href="#a944e11f76c38767cd1100d72a4e3b25b">More...</a><br /></td></tr> 49.121 +<tr class="separator:a944e11f76c38767cd1100d72a4e3b25b"><td class="memSeparator" colspan="2"> </td></tr> 49.122 +<tr class="memitem:a4ba6c96642f72ea046cc22627c72979c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a4ba6c96642f72ea046cc22627c72979c">ucx_list_free_content</a> (<a class="el" href="structUcxList.html">UcxList</a> *list, <a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> destr)</td></tr> 49.123 +<tr class="memdesc:a4ba6c96642f72ea046cc22627c72979c"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the contents of the specified list by calling the specified destructor on each of them. <a href="#a4ba6c96642f72ea046cc22627c72979c">More...</a><br /></td></tr> 49.124 +<tr class="separator:a4ba6c96642f72ea046cc22627c72979c"><td class="memSeparator" colspan="2"> </td></tr> 49.125 +<tr class="memitem:a00c122c8a26d35b60676939df4161621"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a00c122c8a26d35b60676939df4161621">ucx_list_append</a> (<a class="el" href="structUcxList.html">UcxList</a> *list, void *data)</td></tr> 49.126 +<tr class="memdesc:a00c122c8a26d35b60676939df4161621"><td class="mdescLeft"> </td><td class="mdescRight">Inserts an element at the end of the list. <a href="#a00c122c8a26d35b60676939df4161621">More...</a><br /></td></tr> 49.127 +<tr class="separator:a00c122c8a26d35b60676939df4161621"><td class="memSeparator" colspan="2"> </td></tr> 49.128 +<tr class="memitem:adf3b3e2e0ff977d8928671d6bd82fc60"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#adf3b3e2e0ff977d8928671d6bd82fc60">ucx_list_append_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="el" href="structUcxList.html">UcxList</a> *list, void *data)</td></tr> 49.129 +<tr class="memdesc:adf3b3e2e0ff977d8928671d6bd82fc60"><td class="mdescLeft"> </td><td class="mdescRight">Inserts an element at the end of the list using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. <a href="#adf3b3e2e0ff977d8928671d6bd82fc60">More...</a><br /></td></tr> 49.130 +<tr class="separator:adf3b3e2e0ff977d8928671d6bd82fc60"><td class="memSeparator" colspan="2"> </td></tr> 49.131 +<tr class="memitem:a8fcb68e4556395b15180eec2d0b77aa4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a8fcb68e4556395b15180eec2d0b77aa4">ucx_list_prepend</a> (<a class="el" href="structUcxList.html">UcxList</a> *list, void *data)</td></tr> 49.132 +<tr class="memdesc:a8fcb68e4556395b15180eec2d0b77aa4"><td class="mdescLeft"> </td><td class="mdescRight">Inserts an element at the beginning of the list. <a href="#a8fcb68e4556395b15180eec2d0b77aa4">More...</a><br /></td></tr> 49.133 +<tr class="separator:a8fcb68e4556395b15180eec2d0b77aa4"><td class="memSeparator" colspan="2"> </td></tr> 49.134 +<tr class="memitem:a54654e6dc60e1c3de9e886c150e404ec"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a54654e6dc60e1c3de9e886c150e404ec">ucx_list_prepend_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="el" href="structUcxList.html">UcxList</a> *list, void *data)</td></tr> 49.135 +<tr class="memdesc:a54654e6dc60e1c3de9e886c150e404ec"><td class="mdescLeft"> </td><td class="mdescRight">Inserts an element at the beginning of the list using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. <a href="#a54654e6dc60e1c3de9e886c150e404ec">More...</a><br /></td></tr> 49.136 +<tr class="separator:a54654e6dc60e1c3de9e886c150e404ec"><td class="memSeparator" colspan="2"> </td></tr> 49.137 +<tr class="memitem:a77163a0cc82fae52bec26c8c0c3674d9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a77163a0cc82fae52bec26c8c0c3674d9">ucx_list_concat</a> (<a class="el" href="structUcxList.html">UcxList</a> *list1, <a class="el" href="structUcxList.html">UcxList</a> *list2)</td></tr> 49.138 +<tr class="memdesc:a77163a0cc82fae52bec26c8c0c3674d9"><td class="mdescLeft"> </td><td class="mdescRight">Concatenates two lists. <a href="#a77163a0cc82fae52bec26c8c0c3674d9">More...</a><br /></td></tr> 49.139 +<tr class="separator:a77163a0cc82fae52bec26c8c0c3674d9"><td class="memSeparator" colspan="2"> </td></tr> 49.140 +<tr class="memitem:a6aa0e34ebc5f0dca6f52d0f7626b4bd5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a6aa0e34ebc5f0dca6f52d0f7626b4bd5">ucx_list_first</a> (const <a class="el" href="structUcxList.html">UcxList</a> *elem)</td></tr> 49.141 +<tr class="memdesc:a6aa0e34ebc5f0dca6f52d0f7626b4bd5"><td class="mdescLeft"> </td><td class="mdescRight">Returns the first element of a list. <a href="#a6aa0e34ebc5f0dca6f52d0f7626b4bd5">More...</a><br /></td></tr> 49.142 +<tr class="separator:a6aa0e34ebc5f0dca6f52d0f7626b4bd5"><td class="memSeparator" colspan="2"> </td></tr> 49.143 +<tr class="memitem:add5ec40c5006e29c629d23c2eb5a6553"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#add5ec40c5006e29c629d23c2eb5a6553">ucx_list_last</a> (const <a class="el" href="structUcxList.html">UcxList</a> *elem)</td></tr> 49.144 +<tr class="memdesc:add5ec40c5006e29c629d23c2eb5a6553"><td class="mdescLeft"> </td><td class="mdescRight">Returns the last element of a list. <a href="#add5ec40c5006e29c629d23c2eb5a6553">More...</a><br /></td></tr> 49.145 +<tr class="separator:add5ec40c5006e29c629d23c2eb5a6553"><td class="memSeparator" colspan="2"> </td></tr> 49.146 +<tr class="memitem:a2509ffe19bce6a8708c77f89480c75fb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a2509ffe19bce6a8708c77f89480c75fb">ucx_list_get</a> (const <a class="el" href="structUcxList.html">UcxList</a> *list, size_t index)</td></tr> 49.147 +<tr class="memdesc:a2509ffe19bce6a8708c77f89480c75fb"><td class="mdescLeft"> </td><td class="mdescRight">Returns the list element at the specified index. <a href="#a2509ffe19bce6a8708c77f89480c75fb">More...</a><br /></td></tr> 49.148 +<tr class="separator:a2509ffe19bce6a8708c77f89480c75fb"><td class="memSeparator" colspan="2"> </td></tr> 49.149 +<tr class="memitem:ae2ff2974812ca185870f80bc4ed9337e"><td class="memItemLeft" align="right" valign="top">ssize_t </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#ae2ff2974812ca185870f80bc4ed9337e">ucx_list_indexof</a> (const <a class="el" href="structUcxList.html">UcxList</a> *list, const <a class="el" href="structUcxList.html">UcxList</a> *elem)</td></tr> 49.150 +<tr class="memdesc:ae2ff2974812ca185870f80bc4ed9337e"><td class="mdescLeft"> </td><td class="mdescRight">Returns the index of an element. <a href="#ae2ff2974812ca185870f80bc4ed9337e">More...</a><br /></td></tr> 49.151 +<tr class="separator:ae2ff2974812ca185870f80bc4ed9337e"><td class="memSeparator" colspan="2"> </td></tr> 49.152 +<tr class="memitem:ae88001cc8ae40b946560f31434abed8f"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#ae88001cc8ae40b946560f31434abed8f">ucx_list_size</a> (const <a class="el" href="structUcxList.html">UcxList</a> *list)</td></tr> 49.153 +<tr class="memdesc:ae88001cc8ae40b946560f31434abed8f"><td class="mdescLeft"> </td><td class="mdescRight">Returns the element count of the list. <a href="#ae88001cc8ae40b946560f31434abed8f">More...</a><br /></td></tr> 49.154 +<tr class="separator:ae88001cc8ae40b946560f31434abed8f"><td class="memSeparator" colspan="2"> </td></tr> 49.155 +<tr class="memitem:a9b3b6842d3be572e06a7f519e198cb83"><td class="memItemLeft" align="right" valign="top">ssize_t </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a9b3b6842d3be572e06a7f519e198cb83">ucx_list_find</a> (const <a class="el" href="structUcxList.html">UcxList</a> *list, void *elem, <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, void *data)</td></tr> 49.156 +<tr class="memdesc:a9b3b6842d3be572e06a7f519e198cb83"><td class="mdescLeft"> </td><td class="mdescRight">Returns the index of an element containing the specified data. <a href="#a9b3b6842d3be572e06a7f519e198cb83">More...</a><br /></td></tr> 49.157 +<tr class="separator:a9b3b6842d3be572e06a7f519e198cb83"><td class="memSeparator" colspan="2"> </td></tr> 49.158 +<tr class="memitem:a8b0fa051fcfe12e1a82cca1087973852"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a8b0fa051fcfe12e1a82cca1087973852">ucx_list_contains</a> (const <a class="el" href="structUcxList.html">UcxList</a> *list, void *elem, <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, void *data)</td></tr> 49.159 +<tr class="memdesc:a8b0fa051fcfe12e1a82cca1087973852"><td class="mdescLeft"> </td><td class="mdescRight">Checks, if a list contains a specific element. <a href="#a8b0fa051fcfe12e1a82cca1087973852">More...</a><br /></td></tr> 49.160 +<tr class="separator:a8b0fa051fcfe12e1a82cca1087973852"><td class="memSeparator" colspan="2"> </td></tr> 49.161 +<tr class="memitem:ac74962d9bd7cfc9d3e2e09651469377b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#ac74962d9bd7cfc9d3e2e09651469377b">ucx_list_sort</a> (<a class="el" href="structUcxList.html">UcxList</a> *list, <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, void *data)</td></tr> 49.162 +<tr class="memdesc:ac74962d9bd7cfc9d3e2e09651469377b"><td class="mdescLeft"> </td><td class="mdescRight">Sorts a <a class="el" href="structUcxList.html" title="UCX list structure. ">UcxList</a> with natural merge sort. <a href="#ac74962d9bd7cfc9d3e2e09651469377b">More...</a><br /></td></tr> 49.163 +<tr class="separator:ac74962d9bd7cfc9d3e2e09651469377b"><td class="memSeparator" colspan="2"> </td></tr> 49.164 +<tr class="memitem:a410cb3e8260037ba56c72d14b899b468"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a410cb3e8260037ba56c72d14b899b468">ucx_list_remove</a> (<a class="el" href="structUcxList.html">UcxList</a> *list, <a class="el" href="structUcxList.html">UcxList</a> *element)</td></tr> 49.165 +<tr class="memdesc:a410cb3e8260037ba56c72d14b899b468"><td class="mdescLeft"> </td><td class="mdescRight">Removes an element from the list. <a href="#a410cb3e8260037ba56c72d14b899b468">More...</a><br /></td></tr> 49.166 +<tr class="separator:a410cb3e8260037ba56c72d14b899b468"><td class="memSeparator" colspan="2"> </td></tr> 49.167 +<tr class="memitem:aca687b7c4e7170175f447e549125aa52"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#aca687b7c4e7170175f447e549125aa52">ucx_list_remove_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="el" href="structUcxList.html">UcxList</a> *list, <a class="el" href="structUcxList.html">UcxList</a> *element)</td></tr> 49.168 +<tr class="memdesc:aca687b7c4e7170175f447e549125aa52"><td class="mdescLeft"> </td><td class="mdescRight">Removes an element from the list using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. <a href="#aca687b7c4e7170175f447e549125aa52">More...</a><br /></td></tr> 49.169 +<tr class="separator:aca687b7c4e7170175f447e549125aa52"><td class="memSeparator" colspan="2"> </td></tr> 49.170 +<tr class="memitem:a94ecdb0cea1633ad7074f027fa8485fa"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a94ecdb0cea1633ad7074f027fa8485fa">ucx_list_union</a> (const <a class="el" href="structUcxList.html">UcxList</a> *left, const <a class="el" href="structUcxList.html">UcxList</a> *right, <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, void *cmpdata, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, void *cpdata)</td></tr> 49.171 +<tr class="memdesc:a94ecdb0cea1633ad7074f027fa8485fa"><td class="mdescLeft"> </td><td class="mdescRight">Returns the union of two lists. <a href="#a94ecdb0cea1633ad7074f027fa8485fa">More...</a><br /></td></tr> 49.172 +<tr class="separator:a94ecdb0cea1633ad7074f027fa8485fa"><td class="memSeparator" colspan="2"> </td></tr> 49.173 +<tr class="memitem:a65b4355536f4ebc4130211b46469f4c1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a65b4355536f4ebc4130211b46469f4c1">ucx_list_union_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, const <a class="el" href="structUcxList.html">UcxList</a> *left, const <a class="el" href="structUcxList.html">UcxList</a> *right, <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, void *cmpdata, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, void *cpdata)</td></tr> 49.174 +<tr class="memdesc:a65b4355536f4ebc4130211b46469f4c1"><td class="mdescLeft"> </td><td class="mdescRight">Returns the union of two lists. <a href="#a65b4355536f4ebc4130211b46469f4c1">More...</a><br /></td></tr> 49.175 +<tr class="separator:a65b4355536f4ebc4130211b46469f4c1"><td class="memSeparator" colspan="2"> </td></tr> 49.176 +<tr class="memitem:a259f9b754978aeca23dfabba16e20f39"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a259f9b754978aeca23dfabba16e20f39">ucx_list_intersection</a> (const <a class="el" href="structUcxList.html">UcxList</a> *left, const <a class="el" href="structUcxList.html">UcxList</a> *right, <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, void *cmpdata, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, void *cpdata)</td></tr> 49.177 +<tr class="memdesc:a259f9b754978aeca23dfabba16e20f39"><td class="mdescLeft"> </td><td class="mdescRight">Returns the intersection of two lists. <a href="#a259f9b754978aeca23dfabba16e20f39">More...</a><br /></td></tr> 49.178 +<tr class="separator:a259f9b754978aeca23dfabba16e20f39"><td class="memSeparator" colspan="2"> </td></tr> 49.179 +<tr class="memitem:a1d0b00514dbb81ba6270b58da0c5b9a8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a1d0b00514dbb81ba6270b58da0c5b9a8">ucx_list_intersection_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, const <a class="el" href="structUcxList.html">UcxList</a> *left, const <a class="el" href="structUcxList.html">UcxList</a> *right, <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, void *cmpdata, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, void *cpdata)</td></tr> 49.180 +<tr class="memdesc:a1d0b00514dbb81ba6270b58da0c5b9a8"><td class="mdescLeft"> </td><td class="mdescRight">Returns the intersection of two lists. <a href="#a1d0b00514dbb81ba6270b58da0c5b9a8">More...</a><br /></td></tr> 49.181 +<tr class="separator:a1d0b00514dbb81ba6270b58da0c5b9a8"><td class="memSeparator" colspan="2"> </td></tr> 49.182 +<tr class="memitem:a6c5db5d1d11ad28b6fe1a80ee1c1e449"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a6c5db5d1d11ad28b6fe1a80ee1c1e449">ucx_list_difference</a> (const <a class="el" href="structUcxList.html">UcxList</a> *left, const <a class="el" href="structUcxList.html">UcxList</a> *right, <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, void *cmpdata, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, void *cpdata)</td></tr> 49.183 +<tr class="memdesc:a6c5db5d1d11ad28b6fe1a80ee1c1e449"><td class="mdescLeft"> </td><td class="mdescRight">Returns the difference of two lists. <a href="#a6c5db5d1d11ad28b6fe1a80ee1c1e449">More...</a><br /></td></tr> 49.184 +<tr class="separator:a6c5db5d1d11ad28b6fe1a80ee1c1e449"><td class="memSeparator" colspan="2"> </td></tr> 49.185 +<tr class="memitem:a4a2a2fc5cc41073c516db6235bbc51d5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="list_8h.html#a4a2a2fc5cc41073c516db6235bbc51d5">ucx_list_difference_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, const <a class="el" href="structUcxList.html">UcxList</a> *left, const <a class="el" href="structUcxList.html">UcxList</a> *right, <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, void *cmpdata, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, void *cpdata)</td></tr> 49.186 +<tr class="memdesc:a4a2a2fc5cc41073c516db6235bbc51d5"><td class="mdescLeft"> </td><td class="mdescRight">Returns the difference of two lists. <a href="#a4a2a2fc5cc41073c516db6235bbc51d5">More...</a><br /></td></tr> 49.187 +<tr class="separator:a4a2a2fc5cc41073c516db6235bbc51d5"><td class="memSeparator" colspan="2"> </td></tr> 49.188 +</table> 49.189 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 49.190 +<div class="textblock"><p>Doubly linked list implementation. </p> 49.191 +<dl class="section author"><dt>Author</dt><dd>Mike Becker </dd> 49.192 +<dd> 49.193 +Olaf Wintermann </dd></dl> 49.194 +</div><h2 class="groupheader">Macro Definition Documentation</h2> 49.195 +<a id="a4b143b6526a410aa4d22cb3bb9365d70"></a> 49.196 +<h2 class="memtitle"><span class="permalink"><a href="#a4b143b6526a410aa4d22cb3bb9365d70">◆ </a></span>UCX_FOREACH</h2> 49.197 + 49.198 +<div class="memitem"> 49.199 +<div class="memproto"> 49.200 + <table class="memname"> 49.201 + <tr> 49.202 + <td class="memname">#define UCX_FOREACH</td> 49.203 + <td>(</td> 49.204 + <td class="paramtype"> </td> 49.205 + <td class="paramname">elem, </td> 49.206 + </tr> 49.207 + <tr> 49.208 + <td class="paramkey"></td> 49.209 + <td></td> 49.210 + <td class="paramtype"> </td> 49.211 + <td class="paramname">list </td> 49.212 + </tr> 49.213 + <tr> 49.214 + <td></td> 49.215 + <td>)</td> 49.216 + <td></td><td>   for (<a class="el" href="structUcxList.html">UcxList</a>* elem = (<a class="el" href="structUcxList.html">UcxList</a>*) list ; elem != NULL ; elem = elem->next)</td> 49.217 + </tr> 49.218 + </table> 49.219 +</div><div class="memdoc"> 49.220 + 49.221 +<p>Loop statement for UCX lists. </p> 49.222 +<p>The first argument is the name of the iteration variable. The scope of this variable is limited to the <code>UCX_FOREACH</code> statement.</p> 49.223 +<p>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.</p> 49.224 +<dl class="params"><dt>Parameters</dt><dd> 49.225 + <table class="params"> 49.226 + <tr><td class="paramname">list</td><td>The first element of the list </td></tr> 49.227 + <tr><td class="paramname">elem</td><td>The variable name of the element </td></tr> 49.228 + </table> 49.229 + </dd> 49.230 +</dl> 49.231 + 49.232 +</div> 49.233 +</div> 49.234 +<h2 class="groupheader">Typedef Documentation</h2> 49.235 +<a id="aa6f89f91c1081c9a7c6866c298f497a2"></a> 49.236 +<h2 class="memtitle"><span class="permalink"><a href="#aa6f89f91c1081c9a7c6866c298f497a2">◆ </a></span>UcxList</h2> 49.237 + 49.238 +<div class="memitem"> 49.239 +<div class="memproto"> 49.240 + <table class="memname"> 49.241 + <tr> 49.242 + <td class="memname">typedef struct <a class="el" href="structUcxList.html">UcxList</a> <a class="el" href="structUcxList.html">UcxList</a></td> 49.243 + </tr> 49.244 + </table> 49.245 +</div><div class="memdoc"> 49.246 + 49.247 +<p>UCX list type. </p> 49.248 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="structUcxList.html" title="UCX list structure. ">UcxList</a> </dd></dl> 49.249 + 49.250 +</div> 49.251 +</div> 49.252 +<h2 class="groupheader">Function Documentation</h2> 49.253 +<a id="a00c122c8a26d35b60676939df4161621"></a> 49.254 +<h2 class="memtitle"><span class="permalink"><a href="#a00c122c8a26d35b60676939df4161621">◆ </a></span>ucx_list_append()</h2> 49.255 + 49.256 +<div class="memitem"> 49.257 +<div class="memproto"> 49.258 + <table class="memname"> 49.259 + <tr> 49.260 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_append </td> 49.261 + <td>(</td> 49.262 + <td class="paramtype"><a class="el" href="structUcxList.html">UcxList</a> * </td> 49.263 + <td class="paramname"><em>list</em>, </td> 49.264 + </tr> 49.265 + <tr> 49.266 + <td class="paramkey"></td> 49.267 + <td></td> 49.268 + <td class="paramtype">void * </td> 49.269 + <td class="paramname"><em>data</em> </td> 49.270 + </tr> 49.271 + <tr> 49.272 + <td></td> 49.273 + <td>)</td> 49.274 + <td></td><td></td> 49.275 + </tr> 49.276 + </table> 49.277 +</div><div class="memdoc"> 49.278 + 49.279 +<p>Inserts an element at the end of the list. </p> 49.280 +<p>This is generally an O(n) operation, as the end of the list is retrieved with <a class="el" href="list_8h.html#add5ec40c5006e29c629d23c2eb5a6553" title="Returns the last element of a list. ">ucx_list_last()</a>.</p> 49.281 +<dl class="params"><dt>Parameters</dt><dd> 49.282 + <table class="params"> 49.283 + <tr><td class="paramname">list</td><td>the list where to append the data, or <code>NULL</code> to create a new list </td></tr> 49.284 + <tr><td class="paramname">data</td><td>the data to insert </td></tr> 49.285 + </table> 49.286 + </dd> 49.287 +</dl> 49.288 +<dl class="section return"><dt>Returns</dt><dd><code>list</code>, if it is not <code>NULL</code> or a pointer to the newly created list otherwise </dd></dl> 49.289 + 49.290 +</div> 49.291 +</div> 49.292 +<a id="adf3b3e2e0ff977d8928671d6bd82fc60"></a> 49.293 +<h2 class="memtitle"><span class="permalink"><a href="#adf3b3e2e0ff977d8928671d6bd82fc60">◆ </a></span>ucx_list_append_a()</h2> 49.294 + 49.295 +<div class="memitem"> 49.296 +<div class="memproto"> 49.297 + <table class="memname"> 49.298 + <tr> 49.299 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_append_a </td> 49.300 + <td>(</td> 49.301 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 49.302 + <td class="paramname"><em>allocator</em>, </td> 49.303 + </tr> 49.304 + <tr> 49.305 + <td class="paramkey"></td> 49.306 + <td></td> 49.307 + <td class="paramtype"><a class="el" href="structUcxList.html">UcxList</a> * </td> 49.308 + <td class="paramname"><em>list</em>, </td> 49.309 + </tr> 49.310 + <tr> 49.311 + <td class="paramkey"></td> 49.312 + <td></td> 49.313 + <td class="paramtype">void * </td> 49.314 + <td class="paramname"><em>data</em> </td> 49.315 + </tr> 49.316 + <tr> 49.317 + <td></td> 49.318 + <td>)</td> 49.319 + <td></td><td></td> 49.320 + </tr> 49.321 + </table> 49.322 +</div><div class="memdoc"> 49.323 + 49.324 +<p>Inserts an element at the end of the list using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. </p> 49.325 +<p>See <a class="el" href="list_8h.html#a00c122c8a26d35b60676939df4161621" title="Inserts an element at the end of the list. ">ucx_list_append()</a> for details.</p> 49.326 +<dl class="params"><dt>Parameters</dt><dd> 49.327 + <table class="params"> 49.328 + <tr><td class="paramname">allocator</td><td>the allocator to use </td></tr> 49.329 + <tr><td class="paramname">list</td><td>the list where to append the data, or <code>NULL</code> to create a new list </td></tr> 49.330 + <tr><td class="paramname">data</td><td>the data to insert </td></tr> 49.331 + </table> 49.332 + </dd> 49.333 +</dl> 49.334 +<dl class="section return"><dt>Returns</dt><dd><code>list</code>, if it is not <code>NULL</code> or a pointer to the newly created list otherwise </dd></dl> 49.335 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="list_8h.html#a00c122c8a26d35b60676939df4161621" title="Inserts an element at the end of the list. ">ucx_list_append()</a> </dd></dl> 49.336 + 49.337 +</div> 49.338 +</div> 49.339 +<a id="ae7054a41c289b24e6caf5cb07ac850ed"></a> 49.340 +<h2 class="memtitle"><span class="permalink"><a href="#ae7054a41c289b24e6caf5cb07ac850ed">◆ </a></span>ucx_list_clone()</h2> 49.341 + 49.342 +<div class="memitem"> 49.343 +<div class="memproto"> 49.344 + <table class="memname"> 49.345 + <tr> 49.346 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_clone </td> 49.347 + <td>(</td> 49.348 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.349 + <td class="paramname"><em>list</em>, </td> 49.350 + </tr> 49.351 + <tr> 49.352 + <td class="paramkey"></td> 49.353 + <td></td> 49.354 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 49.355 + <td class="paramname"><em>cpyfnc</em>, </td> 49.356 + </tr> 49.357 + <tr> 49.358 + <td class="paramkey"></td> 49.359 + <td></td> 49.360 + <td class="paramtype">void * </td> 49.361 + <td class="paramname"><em>data</em> </td> 49.362 + </tr> 49.363 + <tr> 49.364 + <td></td> 49.365 + <td>)</td> 49.366 + <td></td><td></td> 49.367 + </tr> 49.368 + </table> 49.369 +</div><div class="memdoc"> 49.370 + 49.371 +<p>Creates an element-wise copy of a list. </p> 49.372 +<p>This function clones the specified list by creating new list elements and copying the data with the specified <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967" title="Function pointer to a copy function. ">copy_func()</a>. If no <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967" title="Function pointer to a copy function. ">copy_func()</a> is specified, a shallow copy is created and the new list will reference the same data as the source list.</p> 49.373 +<dl class="params"><dt>Parameters</dt><dd> 49.374 + <table class="params"> 49.375 + <tr><td class="paramname">list</td><td>the list to copy </td></tr> 49.376 + <tr><td class="paramname">cpyfnc</td><td>a pointer to the function that shall copy an element (may be <code>NULL</code>) </td></tr> 49.377 + <tr><td class="paramname">data</td><td>additional data for the <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967" title="Function pointer to a copy function. ">copy_func()</a> </td></tr> 49.378 + </table> 49.379 + </dd> 49.380 +</dl> 49.381 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the copy </dd></dl> 49.382 + 49.383 +</div> 49.384 +</div> 49.385 +<a id="a08ca1ba0d2e82258b0408714c1f4c425"></a> 49.386 +<h2 class="memtitle"><span class="permalink"><a href="#a08ca1ba0d2e82258b0408714c1f4c425">◆ </a></span>ucx_list_clone_a()</h2> 49.387 + 49.388 +<div class="memitem"> 49.389 +<div class="memproto"> 49.390 + <table class="memname"> 49.391 + <tr> 49.392 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_clone_a </td> 49.393 + <td>(</td> 49.394 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 49.395 + <td class="paramname"><em>allocator</em>, </td> 49.396 + </tr> 49.397 + <tr> 49.398 + <td class="paramkey"></td> 49.399 + <td></td> 49.400 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.401 + <td class="paramname"><em>list</em>, </td> 49.402 + </tr> 49.403 + <tr> 49.404 + <td class="paramkey"></td> 49.405 + <td></td> 49.406 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 49.407 + <td class="paramname"><em>cpyfnc</em>, </td> 49.408 + </tr> 49.409 + <tr> 49.410 + <td class="paramkey"></td> 49.411 + <td></td> 49.412 + <td class="paramtype">void * </td> 49.413 + <td class="paramname"><em>data</em> </td> 49.414 + </tr> 49.415 + <tr> 49.416 + <td></td> 49.417 + <td>)</td> 49.418 + <td></td><td></td> 49.419 + </tr> 49.420 + </table> 49.421 +</div><div class="memdoc"> 49.422 + 49.423 +<p>Creates an element-wise copy of a list using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. </p> 49.424 +<p>See <a class="el" href="list_8h.html#ae7054a41c289b24e6caf5cb07ac850ed" title="Creates an element-wise copy of a list. ">ucx_list_clone()</a> for details.</p> 49.425 +<p>You might want to pass the allocator via the <code>data</code> parameter, to access it within the copy function for making deep copies.</p> 49.426 +<dl class="params"><dt>Parameters</dt><dd> 49.427 + <table class="params"> 49.428 + <tr><td class="paramname">allocator</td><td>the allocator to use </td></tr> 49.429 + <tr><td class="paramname">list</td><td>the list to copy </td></tr> 49.430 + <tr><td class="paramname">cpyfnc</td><td>a pointer to the function that shall copy an element (may be <code>NULL</code>) </td></tr> 49.431 + <tr><td class="paramname">data</td><td>additional data for the <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967" title="Function pointer to a copy function. ">copy_func()</a> </td></tr> 49.432 + </table> 49.433 + </dd> 49.434 +</dl> 49.435 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the copy </dd></dl> 49.436 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="list_8h.html#ae7054a41c289b24e6caf5cb07ac850ed" title="Creates an element-wise copy of a list. ">ucx_list_clone()</a> </dd></dl> 49.437 + 49.438 +</div> 49.439 +</div> 49.440 +<a id="a77163a0cc82fae52bec26c8c0c3674d9"></a> 49.441 +<h2 class="memtitle"><span class="permalink"><a href="#a77163a0cc82fae52bec26c8c0c3674d9">◆ </a></span>ucx_list_concat()</h2> 49.442 + 49.443 +<div class="memitem"> 49.444 +<div class="memproto"> 49.445 + <table class="memname"> 49.446 + <tr> 49.447 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_concat </td> 49.448 + <td>(</td> 49.449 + <td class="paramtype"><a class="el" href="structUcxList.html">UcxList</a> * </td> 49.450 + <td class="paramname"><em>list1</em>, </td> 49.451 + </tr> 49.452 + <tr> 49.453 + <td class="paramkey"></td> 49.454 + <td></td> 49.455 + <td class="paramtype"><a class="el" href="structUcxList.html">UcxList</a> * </td> 49.456 + <td class="paramname"><em>list2</em> </td> 49.457 + </tr> 49.458 + <tr> 49.459 + <td></td> 49.460 + <td>)</td> 49.461 + <td></td><td></td> 49.462 + </tr> 49.463 + </table> 49.464 +</div><div class="memdoc"> 49.465 + 49.466 +<p>Concatenates two lists. </p> 49.467 +<p>Either of the two arguments may be <code>NULL</code>.</p> 49.468 +<p>This function modifies the references to the next/previous element of the last/first element of <code>list1</code>/<code> list2</code>.</p> 49.469 +<dl class="params"><dt>Parameters</dt><dd> 49.470 + <table class="params"> 49.471 + <tr><td class="paramname">list1</td><td>first list </td></tr> 49.472 + <tr><td class="paramname">list2</td><td>second list </td></tr> 49.473 + </table> 49.474 + </dd> 49.475 +</dl> 49.476 +<dl class="section return"><dt>Returns</dt><dd>if <code>list1</code> is <code>NULL</code>, <code>list2</code> is returned, otherwise <code>list1</code> is returned </dd></dl> 49.477 + 49.478 +</div> 49.479 +</div> 49.480 +<a id="a8b0fa051fcfe12e1a82cca1087973852"></a> 49.481 +<h2 class="memtitle"><span class="permalink"><a href="#a8b0fa051fcfe12e1a82cca1087973852">◆ </a></span>ucx_list_contains()</h2> 49.482 + 49.483 +<div class="memitem"> 49.484 +<div class="memproto"> 49.485 + <table class="memname"> 49.486 + <tr> 49.487 + <td class="memname">int ucx_list_contains </td> 49.488 + <td>(</td> 49.489 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.490 + <td class="paramname"><em>list</em>, </td> 49.491 + </tr> 49.492 + <tr> 49.493 + <td class="paramkey"></td> 49.494 + <td></td> 49.495 + <td class="paramtype">void * </td> 49.496 + <td class="paramname"><em>elem</em>, </td> 49.497 + </tr> 49.498 + <tr> 49.499 + <td class="paramkey"></td> 49.500 + <td></td> 49.501 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 49.502 + <td class="paramname"><em>cmpfnc</em>, </td> 49.503 + </tr> 49.504 + <tr> 49.505 + <td class="paramkey"></td> 49.506 + <td></td> 49.507 + <td class="paramtype">void * </td> 49.508 + <td class="paramname"><em>data</em> </td> 49.509 + </tr> 49.510 + <tr> 49.511 + <td></td> 49.512 + <td>)</td> 49.513 + <td></td><td></td> 49.514 + </tr> 49.515 + </table> 49.516 +</div><div class="memdoc"> 49.517 + 49.518 +<p>Checks, if a list contains a specific element. </p> 49.519 +<p>An element is found, if <a class="el" href="list_8h.html#a9b3b6842d3be572e06a7f519e198cb83" title="Returns the index of an element containing the specified data. ">ucx_list_find()</a> returns a value greater than -1.</p> 49.520 +<dl class="params"><dt>Parameters</dt><dd> 49.521 + <table class="params"> 49.522 + <tr><td class="paramname">list</td><td>the list where to search for the data </td></tr> 49.523 + <tr><td class="paramname">elem</td><td>the element data </td></tr> 49.524 + <tr><td class="paramname">cmpfnc</td><td>the compare function </td></tr> 49.525 + <tr><td class="paramname">data</td><td>additional data for the compare function </td></tr> 49.526 + </table> 49.527 + </dd> 49.528 +</dl> 49.529 +<dl class="section return"><dt>Returns</dt><dd>1, if and only if the list contains the specified element data </dd></dl> 49.530 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="list_8h.html#a9b3b6842d3be572e06a7f519e198cb83" title="Returns the index of an element containing the specified data. ">ucx_list_find()</a> </dd></dl> 49.531 + 49.532 +</div> 49.533 +</div> 49.534 +<a id="a6c5db5d1d11ad28b6fe1a80ee1c1e449"></a> 49.535 +<h2 class="memtitle"><span class="permalink"><a href="#a6c5db5d1d11ad28b6fe1a80ee1c1e449">◆ </a></span>ucx_list_difference()</h2> 49.536 + 49.537 +<div class="memitem"> 49.538 +<div class="memproto"> 49.539 + <table class="memname"> 49.540 + <tr> 49.541 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_difference </td> 49.542 + <td>(</td> 49.543 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.544 + <td class="paramname"><em>left</em>, </td> 49.545 + </tr> 49.546 + <tr> 49.547 + <td class="paramkey"></td> 49.548 + <td></td> 49.549 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.550 + <td class="paramname"><em>right</em>, </td> 49.551 + </tr> 49.552 + <tr> 49.553 + <td class="paramkey"></td> 49.554 + <td></td> 49.555 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 49.556 + <td class="paramname"><em>cmpfnc</em>, </td> 49.557 + </tr> 49.558 + <tr> 49.559 + <td class="paramkey"></td> 49.560 + <td></td> 49.561 + <td class="paramtype">void * </td> 49.562 + <td class="paramname"><em>cmpdata</em>, </td> 49.563 + </tr> 49.564 + <tr> 49.565 + <td class="paramkey"></td> 49.566 + <td></td> 49.567 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 49.568 + <td class="paramname"><em>cpfnc</em>, </td> 49.569 + </tr> 49.570 + <tr> 49.571 + <td class="paramkey"></td> 49.572 + <td></td> 49.573 + <td class="paramtype">void * </td> 49.574 + <td class="paramname"><em>cpdata</em> </td> 49.575 + </tr> 49.576 + <tr> 49.577 + <td></td> 49.578 + <td>)</td> 49.579 + <td></td><td></td> 49.580 + </tr> 49.581 + </table> 49.582 +</div><div class="memdoc"> 49.583 + 49.584 +<p>Returns the difference of two lists. </p> 49.585 +<p>The difference contains all elements of the left list (including duplicates) that are not equal to any element of the right list.</p> 49.586 +<dl class="params"><dt>Parameters</dt><dd> 49.587 + <table class="params"> 49.588 + <tr><td class="paramname">left</td><td>the left source list </td></tr> 49.589 + <tr><td class="paramname">right</td><td>the right source list </td></tr> 49.590 + <tr><td class="paramname">cmpfnc</td><td>a function to compare elements </td></tr> 49.591 + <tr><td class="paramname">cmpdata</td><td>additional data for the compare function </td></tr> 49.592 + <tr><td class="paramname">cpfnc</td><td>a function to copy the elements </td></tr> 49.593 + <tr><td class="paramname">cpdata</td><td>additional data for the copy function </td></tr> 49.594 + </table> 49.595 + </dd> 49.596 +</dl> 49.597 +<dl class="section return"><dt>Returns</dt><dd>a new list containing the difference </dd></dl> 49.598 + 49.599 +</div> 49.600 +</div> 49.601 +<a id="a4a2a2fc5cc41073c516db6235bbc51d5"></a> 49.602 +<h2 class="memtitle"><span class="permalink"><a href="#a4a2a2fc5cc41073c516db6235bbc51d5">◆ </a></span>ucx_list_difference_a()</h2> 49.603 + 49.604 +<div class="memitem"> 49.605 +<div class="memproto"> 49.606 + <table class="memname"> 49.607 + <tr> 49.608 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_difference_a </td> 49.609 + <td>(</td> 49.610 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 49.611 + <td class="paramname"><em>allocator</em>, </td> 49.612 + </tr> 49.613 + <tr> 49.614 + <td class="paramkey"></td> 49.615 + <td></td> 49.616 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.617 + <td class="paramname"><em>left</em>, </td> 49.618 + </tr> 49.619 + <tr> 49.620 + <td class="paramkey"></td> 49.621 + <td></td> 49.622 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.623 + <td class="paramname"><em>right</em>, </td> 49.624 + </tr> 49.625 + <tr> 49.626 + <td class="paramkey"></td> 49.627 + <td></td> 49.628 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 49.629 + <td class="paramname"><em>cmpfnc</em>, </td> 49.630 + </tr> 49.631 + <tr> 49.632 + <td class="paramkey"></td> 49.633 + <td></td> 49.634 + <td class="paramtype">void * </td> 49.635 + <td class="paramname"><em>cmpdata</em>, </td> 49.636 + </tr> 49.637 + <tr> 49.638 + <td class="paramkey"></td> 49.639 + <td></td> 49.640 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 49.641 + <td class="paramname"><em>cpfnc</em>, </td> 49.642 + </tr> 49.643 + <tr> 49.644 + <td class="paramkey"></td> 49.645 + <td></td> 49.646 + <td class="paramtype">void * </td> 49.647 + <td class="paramname"><em>cpdata</em> </td> 49.648 + </tr> 49.649 + <tr> 49.650 + <td></td> 49.651 + <td>)</td> 49.652 + <td></td><td></td> 49.653 + </tr> 49.654 + </table> 49.655 +</div><div class="memdoc"> 49.656 + 49.657 +<p>Returns the difference of two lists. </p> 49.658 +<p>The difference contains all elements of the left list (including duplicates) that are not equal to any element of the right list.</p> 49.659 +<dl class="params"><dt>Parameters</dt><dd> 49.660 + <table class="params"> 49.661 + <tr><td class="paramname">allocator</td><td>allocates the new list elements </td></tr> 49.662 + <tr><td class="paramname">left</td><td>the left source list </td></tr> 49.663 + <tr><td class="paramname">right</td><td>the right source list </td></tr> 49.664 + <tr><td class="paramname">cmpfnc</td><td>a function to compare elements </td></tr> 49.665 + <tr><td class="paramname">cmpdata</td><td>additional data for the compare function </td></tr> 49.666 + <tr><td class="paramname">cpfnc</td><td>a function to copy the elements </td></tr> 49.667 + <tr><td class="paramname">cpdata</td><td>additional data for the copy function </td></tr> 49.668 + </table> 49.669 + </dd> 49.670 +</dl> 49.671 +<dl class="section return"><dt>Returns</dt><dd>a new list containing the difference </dd></dl> 49.672 + 49.673 +</div> 49.674 +</div> 49.675 +<a id="adc435447cecf885bc63d232191085bbe"></a> 49.676 +<h2 class="memtitle"><span class="permalink"><a href="#adc435447cecf885bc63d232191085bbe">◆ </a></span>ucx_list_equals()</h2> 49.677 + 49.678 +<div class="memitem"> 49.679 +<div class="memproto"> 49.680 + <table class="memname"> 49.681 + <tr> 49.682 + <td class="memname">int ucx_list_equals </td> 49.683 + <td>(</td> 49.684 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.685 + <td class="paramname"><em>list1</em>, </td> 49.686 + </tr> 49.687 + <tr> 49.688 + <td class="paramkey"></td> 49.689 + <td></td> 49.690 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.691 + <td class="paramname"><em>list2</em>, </td> 49.692 + </tr> 49.693 + <tr> 49.694 + <td class="paramkey"></td> 49.695 + <td></td> 49.696 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 49.697 + <td class="paramname"><em>cmpfnc</em>, </td> 49.698 + </tr> 49.699 + <tr> 49.700 + <td class="paramkey"></td> 49.701 + <td></td> 49.702 + <td class="paramtype">void * </td> 49.703 + <td class="paramname"><em>data</em> </td> 49.704 + </tr> 49.705 + <tr> 49.706 + <td></td> 49.707 + <td>)</td> 49.708 + <td></td><td></td> 49.709 + </tr> 49.710 + </table> 49.711 +</div><div class="memdoc"> 49.712 + 49.713 +<p>Compares two UCX lists element-wise by using a compare function. </p> 49.714 +<p>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 <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791" title="Function pointer to a compare function. ">cmp_func()</a> used.</p> 49.715 +<p>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.</p> 49.716 +<dl class="params"><dt>Parameters</dt><dd> 49.717 + <table class="params"> 49.718 + <tr><td class="paramname">list1</td><td>the first list </td></tr> 49.719 + <tr><td class="paramname">list2</td><td>the second list </td></tr> 49.720 + <tr><td class="paramname">cmpfnc</td><td>the compare function </td></tr> 49.721 + <tr><td class="paramname">data</td><td>additional data for the compare function </td></tr> 49.722 + </table> 49.723 + </dd> 49.724 +</dl> 49.725 +<dl class="section return"><dt>Returns</dt><dd>1, if and only if the two lists equal element-wise, 0 otherwise </dd></dl> 49.726 + 49.727 +</div> 49.728 +</div> 49.729 +<a id="a9b3b6842d3be572e06a7f519e198cb83"></a> 49.730 +<h2 class="memtitle"><span class="permalink"><a href="#a9b3b6842d3be572e06a7f519e198cb83">◆ </a></span>ucx_list_find()</h2> 49.731 + 49.732 +<div class="memitem"> 49.733 +<div class="memproto"> 49.734 + <table class="memname"> 49.735 + <tr> 49.736 + <td class="memname">ssize_t ucx_list_find </td> 49.737 + <td>(</td> 49.738 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.739 + <td class="paramname"><em>list</em>, </td> 49.740 + </tr> 49.741 + <tr> 49.742 + <td class="paramkey"></td> 49.743 + <td></td> 49.744 + <td class="paramtype">void * </td> 49.745 + <td class="paramname"><em>elem</em>, </td> 49.746 + </tr> 49.747 + <tr> 49.748 + <td class="paramkey"></td> 49.749 + <td></td> 49.750 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 49.751 + <td class="paramname"><em>cmpfnc</em>, </td> 49.752 + </tr> 49.753 + <tr> 49.754 + <td class="paramkey"></td> 49.755 + <td></td> 49.756 + <td class="paramtype">void * </td> 49.757 + <td class="paramname"><em>data</em> </td> 49.758 + </tr> 49.759 + <tr> 49.760 + <td></td> 49.761 + <td>)</td> 49.762 + <td></td><td></td> 49.763 + </tr> 49.764 + </table> 49.765 +</div><div class="memdoc"> 49.766 + 49.767 +<p>Returns the index of an element containing the specified data. </p> 49.768 +<p>This function uses a <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791" title="Function pointer to a compare function. ">cmp_func()</a> to compare the data of each list element with the specified data. If no cmp_func is provided, the pointers are compared.</p> 49.769 +<p>If the list contains the data more than once, the index of the first occurrence is returned.</p> 49.770 +<dl class="params"><dt>Parameters</dt><dd> 49.771 + <table class="params"> 49.772 + <tr><td class="paramname">list</td><td>the list where to search for the data </td></tr> 49.773 + <tr><td class="paramname">elem</td><td>the element data </td></tr> 49.774 + <tr><td class="paramname">cmpfnc</td><td>the compare function </td></tr> 49.775 + <tr><td class="paramname">data</td><td>additional data for the compare function </td></tr> 49.776 + </table> 49.777 + </dd> 49.778 +</dl> 49.779 +<dl class="section return"><dt>Returns</dt><dd>the index of the element containing the specified data or -1 if the data is not found in this list </dd></dl> 49.780 + 49.781 +</div> 49.782 +</div> 49.783 +<a id="a6aa0e34ebc5f0dca6f52d0f7626b4bd5"></a> 49.784 +<h2 class="memtitle"><span class="permalink"><a href="#a6aa0e34ebc5f0dca6f52d0f7626b4bd5">◆ </a></span>ucx_list_first()</h2> 49.785 + 49.786 +<div class="memitem"> 49.787 +<div class="memproto"> 49.788 + <table class="memname"> 49.789 + <tr> 49.790 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_first </td> 49.791 + <td>(</td> 49.792 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.793 + <td class="paramname"><em>elem</em></td><td>)</td> 49.794 + <td></td> 49.795 + </tr> 49.796 + </table> 49.797 +</div><div class="memdoc"> 49.798 + 49.799 +<p>Returns the first element of a list. </p> 49.800 +<p>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.</p> 49.801 +<dl class="params"><dt>Parameters</dt><dd> 49.802 + <table class="params"> 49.803 + <tr><td class="paramname">elem</td><td>one element of the list </td></tr> 49.804 + </table> 49.805 + </dd> 49.806 +</dl> 49.807 +<dl class="section return"><dt>Returns</dt><dd>the first element of the list, the specified element is a member of </dd></dl> 49.808 + 49.809 +</div> 49.810 +</div> 49.811 +<a id="a1a0fa2c5b1e478a96da19b0c3f013668"></a> 49.812 +<h2 class="memtitle"><span class="permalink"><a href="#a1a0fa2c5b1e478a96da19b0c3f013668">◆ </a></span>ucx_list_free()</h2> 49.813 + 49.814 +<div class="memitem"> 49.815 +<div class="memproto"> 49.816 + <table class="memname"> 49.817 + <tr> 49.818 + <td class="memname">void ucx_list_free </td> 49.819 + <td>(</td> 49.820 + <td class="paramtype"><a class="el" href="structUcxList.html">UcxList</a> * </td> 49.821 + <td class="paramname"><em>list</em></td><td>)</td> 49.822 + <td></td> 49.823 + </tr> 49.824 + </table> 49.825 +</div><div class="memdoc"> 49.826 + 49.827 +<p>Destroys the entire list. </p> 49.828 +<p>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.</p> 49.829 +<p><b>Caution:</b> the argument <b>MUST</b> denote an entire list (i.e. a call to <a class="el" href="list_8h.html#a6aa0e34ebc5f0dca6f52d0f7626b4bd5" title="Returns the first element of a list. ">ucx_list_first()</a> on the argument must return the argument itself)</p> 49.830 +<dl class="params"><dt>Parameters</dt><dd> 49.831 + <table class="params"> 49.832 + <tr><td class="paramname">list</td><td>the list to free </td></tr> 49.833 + </table> 49.834 + </dd> 49.835 +</dl> 49.836 +<dl class="section see"><dt>See also</dt><dd>ucx_list_free_contents() </dd></dl> 49.837 + 49.838 +</div> 49.839 +</div> 49.840 +<a id="a944e11f76c38767cd1100d72a4e3b25b"></a> 49.841 +<h2 class="memtitle"><span class="permalink"><a href="#a944e11f76c38767cd1100d72a4e3b25b">◆ </a></span>ucx_list_free_a()</h2> 49.842 + 49.843 +<div class="memitem"> 49.844 +<div class="memproto"> 49.845 + <table class="memname"> 49.846 + <tr> 49.847 + <td class="memname">void ucx_list_free_a </td> 49.848 + <td>(</td> 49.849 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 49.850 + <td class="paramname"><em>allocator</em>, </td> 49.851 + </tr> 49.852 + <tr> 49.853 + <td class="paramkey"></td> 49.854 + <td></td> 49.855 + <td class="paramtype"><a class="el" href="structUcxList.html">UcxList</a> * </td> 49.856 + <td class="paramname"><em>list</em> </td> 49.857 + </tr> 49.858 + <tr> 49.859 + <td></td> 49.860 + <td>)</td> 49.861 + <td></td><td></td> 49.862 + </tr> 49.863 + </table> 49.864 +</div><div class="memdoc"> 49.865 + 49.866 +<p>Destroys the entire list using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. </p> 49.867 +<p>See <a class="el" href="list_8h.html#a1a0fa2c5b1e478a96da19b0c3f013668" title="Destroys the entire list. ">ucx_list_free()</a> for details.</p> 49.868 +<dl class="params"><dt>Parameters</dt><dd> 49.869 + <table class="params"> 49.870 + <tr><td class="paramname">allocator</td><td>the allocator to use </td></tr> 49.871 + <tr><td class="paramname">list</td><td>the list to free </td></tr> 49.872 + </table> 49.873 + </dd> 49.874 +</dl> 49.875 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="list_8h.html#a1a0fa2c5b1e478a96da19b0c3f013668" title="Destroys the entire list. ">ucx_list_free()</a> </dd></dl> 49.876 + 49.877 +</div> 49.878 +</div> 49.879 +<a id="a4ba6c96642f72ea046cc22627c72979c"></a> 49.880 +<h2 class="memtitle"><span class="permalink"><a href="#a4ba6c96642f72ea046cc22627c72979c">◆ </a></span>ucx_list_free_content()</h2> 49.881 + 49.882 +<div class="memitem"> 49.883 +<div class="memproto"> 49.884 + <table class="memname"> 49.885 + <tr> 49.886 + <td class="memname">void ucx_list_free_content </td> 49.887 + <td>(</td> 49.888 + <td class="paramtype"><a class="el" href="structUcxList.html">UcxList</a> * </td> 49.889 + <td class="paramname"><em>list</em>, </td> 49.890 + </tr> 49.891 + <tr> 49.892 + <td class="paramkey"></td> 49.893 + <td></td> 49.894 + <td class="paramtype"><a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> </td> 49.895 + <td class="paramname"><em>destr</em> </td> 49.896 + </tr> 49.897 + <tr> 49.898 + <td></td> 49.899 + <td>)</td> 49.900 + <td></td><td></td> 49.901 + </tr> 49.902 + </table> 49.903 +</div><div class="memdoc"> 49.904 + 49.905 +<p>Destroys the contents of the specified list by calling the specified destructor on each of them. </p> 49.906 +<p>Note, that the contents are not usable afterwards and the list should be destroyed with <a class="el" href="list_8h.html#a1a0fa2c5b1e478a96da19b0c3f013668" title="Destroys the entire list. ">ucx_list_free()</a>.</p> 49.907 +<p>If no destructor is specified (<code>NULL</code>), stdlib's free() is used.</p> 49.908 +<dl class="params"><dt>Parameters</dt><dd> 49.909 + <table class="params"> 49.910 + <tr><td class="paramname">list</td><td>the list for which the contents shall be freed </td></tr> 49.911 + <tr><td class="paramname">destr</td><td>optional destructor function </td></tr> 49.912 + </table> 49.913 + </dd> 49.914 +</dl> 49.915 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="list_8h.html#a1a0fa2c5b1e478a96da19b0c3f013668" title="Destroys the entire list. ">ucx_list_free()</a> </dd></dl> 49.916 + 49.917 +</div> 49.918 +</div> 49.919 +<a id="a2509ffe19bce6a8708c77f89480c75fb"></a> 49.920 +<h2 class="memtitle"><span class="permalink"><a href="#a2509ffe19bce6a8708c77f89480c75fb">◆ </a></span>ucx_list_get()</h2> 49.921 + 49.922 +<div class="memitem"> 49.923 +<div class="memproto"> 49.924 + <table class="memname"> 49.925 + <tr> 49.926 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_get </td> 49.927 + <td>(</td> 49.928 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.929 + <td class="paramname"><em>list</em>, </td> 49.930 + </tr> 49.931 + <tr> 49.932 + <td class="paramkey"></td> 49.933 + <td></td> 49.934 + <td class="paramtype">size_t </td> 49.935 + <td class="paramname"><em>index</em> </td> 49.936 + </tr> 49.937 + <tr> 49.938 + <td></td> 49.939 + <td>)</td> 49.940 + <td></td><td></td> 49.941 + </tr> 49.942 + </table> 49.943 +</div><div class="memdoc"> 49.944 + 49.945 +<p>Returns the list element at the specified index. </p> 49.946 +<dl class="params"><dt>Parameters</dt><dd> 49.947 + <table class="params"> 49.948 + <tr><td class="paramname">list</td><td>the list to retrieve the element from </td></tr> 49.949 + <tr><td class="paramname">index</td><td>index of the element to return </td></tr> 49.950 + </table> 49.951 + </dd> 49.952 +</dl> 49.953 +<dl class="section return"><dt>Returns</dt><dd>the element at the specified index or <code>NULL</code>, if the index is greater than the list size </dd></dl> 49.954 + 49.955 +</div> 49.956 +</div> 49.957 +<a id="ae2ff2974812ca185870f80bc4ed9337e"></a> 49.958 +<h2 class="memtitle"><span class="permalink"><a href="#ae2ff2974812ca185870f80bc4ed9337e">◆ </a></span>ucx_list_indexof()</h2> 49.959 + 49.960 +<div class="memitem"> 49.961 +<div class="memproto"> 49.962 + <table class="memname"> 49.963 + <tr> 49.964 + <td class="memname">ssize_t ucx_list_indexof </td> 49.965 + <td>(</td> 49.966 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.967 + <td class="paramname"><em>list</em>, </td> 49.968 + </tr> 49.969 + <tr> 49.970 + <td class="paramkey"></td> 49.971 + <td></td> 49.972 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.973 + <td class="paramname"><em>elem</em> </td> 49.974 + </tr> 49.975 + <tr> 49.976 + <td></td> 49.977 + <td>)</td> 49.978 + <td></td><td></td> 49.979 + </tr> 49.980 + </table> 49.981 +</div><div class="memdoc"> 49.982 + 49.983 +<p>Returns the index of an element. </p> 49.984 +<dl class="params"><dt>Parameters</dt><dd> 49.985 + <table class="params"> 49.986 + <tr><td class="paramname">list</td><td>the list where to search for the element </td></tr> 49.987 + <tr><td class="paramname">elem</td><td>the element to find </td></tr> 49.988 + </table> 49.989 + </dd> 49.990 +</dl> 49.991 +<dl class="section return"><dt>Returns</dt><dd>the index of the element or -1 if the list does not contain the element </dd></dl> 49.992 + 49.993 +</div> 49.994 +</div> 49.995 +<a id="a259f9b754978aeca23dfabba16e20f39"></a> 49.996 +<h2 class="memtitle"><span class="permalink"><a href="#a259f9b754978aeca23dfabba16e20f39">◆ </a></span>ucx_list_intersection()</h2> 49.997 + 49.998 +<div class="memitem"> 49.999 +<div class="memproto"> 49.1000 + <table class="memname"> 49.1001 + <tr> 49.1002 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_intersection </td> 49.1003 + <td>(</td> 49.1004 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1005 + <td class="paramname"><em>left</em>, </td> 49.1006 + </tr> 49.1007 + <tr> 49.1008 + <td class="paramkey"></td> 49.1009 + <td></td> 49.1010 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1011 + <td class="paramname"><em>right</em>, </td> 49.1012 + </tr> 49.1013 + <tr> 49.1014 + <td class="paramkey"></td> 49.1015 + <td></td> 49.1016 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 49.1017 + <td class="paramname"><em>cmpfnc</em>, </td> 49.1018 + </tr> 49.1019 + <tr> 49.1020 + <td class="paramkey"></td> 49.1021 + <td></td> 49.1022 + <td class="paramtype">void * </td> 49.1023 + <td class="paramname"><em>cmpdata</em>, </td> 49.1024 + </tr> 49.1025 + <tr> 49.1026 + <td class="paramkey"></td> 49.1027 + <td></td> 49.1028 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 49.1029 + <td class="paramname"><em>cpfnc</em>, </td> 49.1030 + </tr> 49.1031 + <tr> 49.1032 + <td class="paramkey"></td> 49.1033 + <td></td> 49.1034 + <td class="paramtype">void * </td> 49.1035 + <td class="paramname"><em>cpdata</em> </td> 49.1036 + </tr> 49.1037 + <tr> 49.1038 + <td></td> 49.1039 + <td>)</td> 49.1040 + <td></td><td></td> 49.1041 + </tr> 49.1042 + </table> 49.1043 +</div><div class="memdoc"> 49.1044 + 49.1045 +<p>Returns the intersection of two lists. </p> 49.1046 +<p>The intersection contains all elements of the left list (including duplicates) that can be found in the right list.</p> 49.1047 +<dl class="params"><dt>Parameters</dt><dd> 49.1048 + <table class="params"> 49.1049 + <tr><td class="paramname">left</td><td>the left source list </td></tr> 49.1050 + <tr><td class="paramname">right</td><td>the right source list </td></tr> 49.1051 + <tr><td class="paramname">cmpfnc</td><td>a function to compare elements </td></tr> 49.1052 + <tr><td class="paramname">cmpdata</td><td>additional data for the compare function </td></tr> 49.1053 + <tr><td class="paramname">cpfnc</td><td>a function to copy the elements </td></tr> 49.1054 + <tr><td class="paramname">cpdata</td><td>additional data for the copy function </td></tr> 49.1055 + </table> 49.1056 + </dd> 49.1057 +</dl> 49.1058 +<dl class="section return"><dt>Returns</dt><dd>a new list containing the intersection </dd></dl> 49.1059 + 49.1060 +</div> 49.1061 +</div> 49.1062 +<a id="a1d0b00514dbb81ba6270b58da0c5b9a8"></a> 49.1063 +<h2 class="memtitle"><span class="permalink"><a href="#a1d0b00514dbb81ba6270b58da0c5b9a8">◆ </a></span>ucx_list_intersection_a()</h2> 49.1064 + 49.1065 +<div class="memitem"> 49.1066 +<div class="memproto"> 49.1067 + <table class="memname"> 49.1068 + <tr> 49.1069 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_intersection_a </td> 49.1070 + <td>(</td> 49.1071 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 49.1072 + <td class="paramname"><em>allocator</em>, </td> 49.1073 + </tr> 49.1074 + <tr> 49.1075 + <td class="paramkey"></td> 49.1076 + <td></td> 49.1077 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1078 + <td class="paramname"><em>left</em>, </td> 49.1079 + </tr> 49.1080 + <tr> 49.1081 + <td class="paramkey"></td> 49.1082 + <td></td> 49.1083 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1084 + <td class="paramname"><em>right</em>, </td> 49.1085 + </tr> 49.1086 + <tr> 49.1087 + <td class="paramkey"></td> 49.1088 + <td></td> 49.1089 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 49.1090 + <td class="paramname"><em>cmpfnc</em>, </td> 49.1091 + </tr> 49.1092 + <tr> 49.1093 + <td class="paramkey"></td> 49.1094 + <td></td> 49.1095 + <td class="paramtype">void * </td> 49.1096 + <td class="paramname"><em>cmpdata</em>, </td> 49.1097 + </tr> 49.1098 + <tr> 49.1099 + <td class="paramkey"></td> 49.1100 + <td></td> 49.1101 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 49.1102 + <td class="paramname"><em>cpfnc</em>, </td> 49.1103 + </tr> 49.1104 + <tr> 49.1105 + <td class="paramkey"></td> 49.1106 + <td></td> 49.1107 + <td class="paramtype">void * </td> 49.1108 + <td class="paramname"><em>cpdata</em> </td> 49.1109 + </tr> 49.1110 + <tr> 49.1111 + <td></td> 49.1112 + <td>)</td> 49.1113 + <td></td><td></td> 49.1114 + </tr> 49.1115 + </table> 49.1116 +</div><div class="memdoc"> 49.1117 + 49.1118 +<p>Returns the intersection of two lists. </p> 49.1119 +<p>The intersection contains all elements of the left list (including duplicates) that can be found in the right list.</p> 49.1120 +<dl class="params"><dt>Parameters</dt><dd> 49.1121 + <table class="params"> 49.1122 + <tr><td class="paramname">allocator</td><td>allocates the new list elements </td></tr> 49.1123 + <tr><td class="paramname">left</td><td>the left source list </td></tr> 49.1124 + <tr><td class="paramname">right</td><td>the right source list </td></tr> 49.1125 + <tr><td class="paramname">cmpfnc</td><td>a function to compare elements </td></tr> 49.1126 + <tr><td class="paramname">cmpdata</td><td>additional data for the compare function </td></tr> 49.1127 + <tr><td class="paramname">cpfnc</td><td>a function to copy the elements </td></tr> 49.1128 + <tr><td class="paramname">cpdata</td><td>additional data for the copy function </td></tr> 49.1129 + </table> 49.1130 + </dd> 49.1131 +</dl> 49.1132 +<dl class="section return"><dt>Returns</dt><dd>a new list containing the intersection </dd></dl> 49.1133 + 49.1134 +</div> 49.1135 +</div> 49.1136 +<a id="add5ec40c5006e29c629d23c2eb5a6553"></a> 49.1137 +<h2 class="memtitle"><span class="permalink"><a href="#add5ec40c5006e29c629d23c2eb5a6553">◆ </a></span>ucx_list_last()</h2> 49.1138 + 49.1139 +<div class="memitem"> 49.1140 +<div class="memproto"> 49.1141 + <table class="memname"> 49.1142 + <tr> 49.1143 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_last </td> 49.1144 + <td>(</td> 49.1145 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1146 + <td class="paramname"><em>elem</em></td><td>)</td> 49.1147 + <td></td> 49.1148 + </tr> 49.1149 + </table> 49.1150 +</div><div class="memdoc"> 49.1151 + 49.1152 +<p>Returns the last element of a list. </p> 49.1153 +<p>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.</p> 49.1154 +<dl class="params"><dt>Parameters</dt><dd> 49.1155 + <table class="params"> 49.1156 + <tr><td class="paramname">elem</td><td>one element of the list </td></tr> 49.1157 + </table> 49.1158 + </dd> 49.1159 +</dl> 49.1160 +<dl class="section return"><dt>Returns</dt><dd>the last element of the list, the specified element is a member of </dd></dl> 49.1161 + 49.1162 +</div> 49.1163 +</div> 49.1164 +<a id="a8fcb68e4556395b15180eec2d0b77aa4"></a> 49.1165 +<h2 class="memtitle"><span class="permalink"><a href="#a8fcb68e4556395b15180eec2d0b77aa4">◆ </a></span>ucx_list_prepend()</h2> 49.1166 + 49.1167 +<div class="memitem"> 49.1168 +<div class="memproto"> 49.1169 + <table class="memname"> 49.1170 + <tr> 49.1171 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_prepend </td> 49.1172 + <td>(</td> 49.1173 + <td class="paramtype"><a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1174 + <td class="paramname"><em>list</em>, </td> 49.1175 + </tr> 49.1176 + <tr> 49.1177 + <td class="paramkey"></td> 49.1178 + <td></td> 49.1179 + <td class="paramtype">void * </td> 49.1180 + <td class="paramname"><em>data</em> </td> 49.1181 + </tr> 49.1182 + <tr> 49.1183 + <td></td> 49.1184 + <td>)</td> 49.1185 + <td></td><td></td> 49.1186 + </tr> 49.1187 + </table> 49.1188 +</div><div class="memdoc"> 49.1189 + 49.1190 +<p>Inserts an element at the beginning of the list. </p> 49.1191 +<p>You <em>should</em> overwrite the old list pointer by calling <code>mylist = ucx_list_prepend(mylist, mydata);</code>. However, you may also perform successive calls of <a class="el" href="list_8h.html#a8fcb68e4556395b15180eec2d0b77aa4" title="Inserts an element at the beginning of the list. ">ucx_list_prepend()</a> on the same list pointer, as this function always searchs for the head of the list with <a class="el" href="list_8h.html#a6aa0e34ebc5f0dca6f52d0f7626b4bd5" title="Returns the first element of a list. ">ucx_list_first()</a>.</p> 49.1192 +<dl class="params"><dt>Parameters</dt><dd> 49.1193 + <table class="params"> 49.1194 + <tr><td class="paramname">list</td><td>the list where to insert the data or <code>NULL</code> to create a new list </td></tr> 49.1195 + <tr><td class="paramname">data</td><td>the data to insert </td></tr> 49.1196 + </table> 49.1197 + </dd> 49.1198 +</dl> 49.1199 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the new list head </dd></dl> 49.1200 + 49.1201 +</div> 49.1202 +</div> 49.1203 +<a id="a54654e6dc60e1c3de9e886c150e404ec"></a> 49.1204 +<h2 class="memtitle"><span class="permalink"><a href="#a54654e6dc60e1c3de9e886c150e404ec">◆ </a></span>ucx_list_prepend_a()</h2> 49.1205 + 49.1206 +<div class="memitem"> 49.1207 +<div class="memproto"> 49.1208 + <table class="memname"> 49.1209 + <tr> 49.1210 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_prepend_a </td> 49.1211 + <td>(</td> 49.1212 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 49.1213 + <td class="paramname"><em>allocator</em>, </td> 49.1214 + </tr> 49.1215 + <tr> 49.1216 + <td class="paramkey"></td> 49.1217 + <td></td> 49.1218 + <td class="paramtype"><a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1219 + <td class="paramname"><em>list</em>, </td> 49.1220 + </tr> 49.1221 + <tr> 49.1222 + <td class="paramkey"></td> 49.1223 + <td></td> 49.1224 + <td class="paramtype">void * </td> 49.1225 + <td class="paramname"><em>data</em> </td> 49.1226 + </tr> 49.1227 + <tr> 49.1228 + <td></td> 49.1229 + <td>)</td> 49.1230 + <td></td><td></td> 49.1231 + </tr> 49.1232 + </table> 49.1233 +</div><div class="memdoc"> 49.1234 + 49.1235 +<p>Inserts an element at the beginning of the list using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. </p> 49.1236 +<p>See <a class="el" href="list_8h.html#a8fcb68e4556395b15180eec2d0b77aa4" title="Inserts an element at the beginning of the list. ">ucx_list_prepend()</a> for details.</p> 49.1237 +<dl class="params"><dt>Parameters</dt><dd> 49.1238 + <table class="params"> 49.1239 + <tr><td class="paramname">allocator</td><td>the allocator to use </td></tr> 49.1240 + <tr><td class="paramname">list</td><td>the list where to insert the data or <code>NULL</code> to create a new list </td></tr> 49.1241 + <tr><td class="paramname">data</td><td>the data to insert </td></tr> 49.1242 + </table> 49.1243 + </dd> 49.1244 +</dl> 49.1245 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the new list head </dd></dl> 49.1246 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="list_8h.html#a8fcb68e4556395b15180eec2d0b77aa4" title="Inserts an element at the beginning of the list. ">ucx_list_prepend()</a> </dd></dl> 49.1247 + 49.1248 +</div> 49.1249 +</div> 49.1250 +<a id="a410cb3e8260037ba56c72d14b899b468"></a> 49.1251 +<h2 class="memtitle"><span class="permalink"><a href="#a410cb3e8260037ba56c72d14b899b468">◆ </a></span>ucx_list_remove()</h2> 49.1252 + 49.1253 +<div class="memitem"> 49.1254 +<div class="memproto"> 49.1255 + <table class="memname"> 49.1256 + <tr> 49.1257 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_remove </td> 49.1258 + <td>(</td> 49.1259 + <td class="paramtype"><a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1260 + <td class="paramname"><em>list</em>, </td> 49.1261 + </tr> 49.1262 + <tr> 49.1263 + <td class="paramkey"></td> 49.1264 + <td></td> 49.1265 + <td class="paramtype"><a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1266 + <td class="paramname"><em>element</em> </td> 49.1267 + </tr> 49.1268 + <tr> 49.1269 + <td></td> 49.1270 + <td>)</td> 49.1271 + <td></td><td></td> 49.1272 + </tr> 49.1273 + </table> 49.1274 +</div><div class="memdoc"> 49.1275 + 49.1276 +<p>Removes an element from the list. </p> 49.1277 +<p>If the first element is removed, the list pointer changes. So it is <em>highly recommended</em> to <em>always</em> update the pointer by calling <code>mylist = ucx_list_remove(mylist, myelem);</code>.</p> 49.1278 +<dl class="params"><dt>Parameters</dt><dd> 49.1279 + <table class="params"> 49.1280 + <tr><td class="paramname">list</td><td>the list from which the element shall be removed </td></tr> 49.1281 + <tr><td class="paramname">element</td><td>the element to remove </td></tr> 49.1282 + </table> 49.1283 + </dd> 49.1284 +</dl> 49.1285 +<dl class="section return"><dt>Returns</dt><dd>returns the updated list pointer or <code>NULL</code>, if the list is now empty </dd></dl> 49.1286 + 49.1287 +</div> 49.1288 +</div> 49.1289 +<a id="aca687b7c4e7170175f447e549125aa52"></a> 49.1290 +<h2 class="memtitle"><span class="permalink"><a href="#aca687b7c4e7170175f447e549125aa52">◆ </a></span>ucx_list_remove_a()</h2> 49.1291 + 49.1292 +<div class="memitem"> 49.1293 +<div class="memproto"> 49.1294 + <table class="memname"> 49.1295 + <tr> 49.1296 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_remove_a </td> 49.1297 + <td>(</td> 49.1298 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 49.1299 + <td class="paramname"><em>allocator</em>, </td> 49.1300 + </tr> 49.1301 + <tr> 49.1302 + <td class="paramkey"></td> 49.1303 + <td></td> 49.1304 + <td class="paramtype"><a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1305 + <td class="paramname"><em>list</em>, </td> 49.1306 + </tr> 49.1307 + <tr> 49.1308 + <td class="paramkey"></td> 49.1309 + <td></td> 49.1310 + <td class="paramtype"><a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1311 + <td class="paramname"><em>element</em> </td> 49.1312 + </tr> 49.1313 + <tr> 49.1314 + <td></td> 49.1315 + <td>)</td> 49.1316 + <td></td><td></td> 49.1317 + </tr> 49.1318 + </table> 49.1319 +</div><div class="memdoc"> 49.1320 + 49.1321 +<p>Removes an element from the list using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. </p> 49.1322 +<p>See <a class="el" href="list_8h.html#a410cb3e8260037ba56c72d14b899b468" title="Removes an element from the list. ">ucx_list_remove()</a> for details.</p> 49.1323 +<dl class="params"><dt>Parameters</dt><dd> 49.1324 + <table class="params"> 49.1325 + <tr><td class="paramname">allocator</td><td>the allocator to use </td></tr> 49.1326 + <tr><td class="paramname">list</td><td>the list from which the element shall be removed </td></tr> 49.1327 + <tr><td class="paramname">element</td><td>the element to remove </td></tr> 49.1328 + </table> 49.1329 + </dd> 49.1330 +</dl> 49.1331 +<dl class="section return"><dt>Returns</dt><dd>returns the updated list pointer or <code>NULL</code>, if the list </dd></dl> 49.1332 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="list_8h.html#a410cb3e8260037ba56c72d14b899b468" title="Removes an element from the list. ">ucx_list_remove()</a> </dd></dl> 49.1333 + 49.1334 +</div> 49.1335 +</div> 49.1336 +<a id="ae88001cc8ae40b946560f31434abed8f"></a> 49.1337 +<h2 class="memtitle"><span class="permalink"><a href="#ae88001cc8ae40b946560f31434abed8f">◆ </a></span>ucx_list_size()</h2> 49.1338 + 49.1339 +<div class="memitem"> 49.1340 +<div class="memproto"> 49.1341 + <table class="memname"> 49.1342 + <tr> 49.1343 + <td class="memname">size_t ucx_list_size </td> 49.1344 + <td>(</td> 49.1345 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1346 + <td class="paramname"><em>list</em></td><td>)</td> 49.1347 + <td></td> 49.1348 + </tr> 49.1349 + </table> 49.1350 +</div><div class="memdoc"> 49.1351 + 49.1352 +<p>Returns the element count of the list. </p> 49.1353 +<dl class="params"><dt>Parameters</dt><dd> 49.1354 + <table class="params"> 49.1355 + <tr><td class="paramname">list</td><td>the list whose elements are counted </td></tr> 49.1356 + </table> 49.1357 + </dd> 49.1358 +</dl> 49.1359 +<dl class="section return"><dt>Returns</dt><dd>the element count </dd></dl> 49.1360 + 49.1361 +</div> 49.1362 +</div> 49.1363 +<a id="ac74962d9bd7cfc9d3e2e09651469377b"></a> 49.1364 +<h2 class="memtitle"><span class="permalink"><a href="#ac74962d9bd7cfc9d3e2e09651469377b">◆ </a></span>ucx_list_sort()</h2> 49.1365 + 49.1366 +<div class="memitem"> 49.1367 +<div class="memproto"> 49.1368 + <table class="memname"> 49.1369 + <tr> 49.1370 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_sort </td> 49.1371 + <td>(</td> 49.1372 + <td class="paramtype"><a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1373 + <td class="paramname"><em>list</em>, </td> 49.1374 + </tr> 49.1375 + <tr> 49.1376 + <td class="paramkey"></td> 49.1377 + <td></td> 49.1378 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 49.1379 + <td class="paramname"><em>cmpfnc</em>, </td> 49.1380 + </tr> 49.1381 + <tr> 49.1382 + <td class="paramkey"></td> 49.1383 + <td></td> 49.1384 + <td class="paramtype">void * </td> 49.1385 + <td class="paramname"><em>data</em> </td> 49.1386 + </tr> 49.1387 + <tr> 49.1388 + <td></td> 49.1389 + <td>)</td> 49.1390 + <td></td><td></td> 49.1391 + </tr> 49.1392 + </table> 49.1393 +</div><div class="memdoc"> 49.1394 + 49.1395 +<p>Sorts a <a class="el" href="structUcxList.html" title="UCX list structure. ">UcxList</a> with natural merge sort. </p> 49.1396 +<p>This function uses O(n) additional temporary memory for merge operations that is automatically freed after each merge.</p> 49.1397 +<p>As the head of the list might change, you <b>MUST</b> call this function as follows: <code>mylist = ucx_list_sort(mylist, mycmpfnc, mydata);</code>.</p> 49.1398 +<dl class="params"><dt>Parameters</dt><dd> 49.1399 + <table class="params"> 49.1400 + <tr><td class="paramname">list</td><td>the list to sort </td></tr> 49.1401 + <tr><td class="paramname">cmpfnc</td><td>the function that shall be used to compare the element data </td></tr> 49.1402 + <tr><td class="paramname">data</td><td>additional data for the <a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791" title="Function pointer to a compare function. ">cmp_func()</a> </td></tr> 49.1403 + </table> 49.1404 + </dd> 49.1405 +</dl> 49.1406 +<dl class="section return"><dt>Returns</dt><dd>the sorted list </dd></dl> 49.1407 + 49.1408 +</div> 49.1409 +</div> 49.1410 +<a id="a94ecdb0cea1633ad7074f027fa8485fa"></a> 49.1411 +<h2 class="memtitle"><span class="permalink"><a href="#a94ecdb0cea1633ad7074f027fa8485fa">◆ </a></span>ucx_list_union()</h2> 49.1412 + 49.1413 +<div class="memitem"> 49.1414 +<div class="memproto"> 49.1415 + <table class="memname"> 49.1416 + <tr> 49.1417 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_union </td> 49.1418 + <td>(</td> 49.1419 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1420 + <td class="paramname"><em>left</em>, </td> 49.1421 + </tr> 49.1422 + <tr> 49.1423 + <td class="paramkey"></td> 49.1424 + <td></td> 49.1425 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1426 + <td class="paramname"><em>right</em>, </td> 49.1427 + </tr> 49.1428 + <tr> 49.1429 + <td class="paramkey"></td> 49.1430 + <td></td> 49.1431 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 49.1432 + <td class="paramname"><em>cmpfnc</em>, </td> 49.1433 + </tr> 49.1434 + <tr> 49.1435 + <td class="paramkey"></td> 49.1436 + <td></td> 49.1437 + <td class="paramtype">void * </td> 49.1438 + <td class="paramname"><em>cmpdata</em>, </td> 49.1439 + </tr> 49.1440 + <tr> 49.1441 + <td class="paramkey"></td> 49.1442 + <td></td> 49.1443 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 49.1444 + <td class="paramname"><em>cpfnc</em>, </td> 49.1445 + </tr> 49.1446 + <tr> 49.1447 + <td class="paramkey"></td> 49.1448 + <td></td> 49.1449 + <td class="paramtype">void * </td> 49.1450 + <td class="paramname"><em>cpdata</em> </td> 49.1451 + </tr> 49.1452 + <tr> 49.1453 + <td></td> 49.1454 + <td>)</td> 49.1455 + <td></td><td></td> 49.1456 + </tr> 49.1457 + </table> 49.1458 +</div><div class="memdoc"> 49.1459 + 49.1460 +<p>Returns the union of two lists. </p> 49.1461 +<p>The union is a list of unique elements regarding cmpfnc obtained from both source lists.</p> 49.1462 +<dl class="params"><dt>Parameters</dt><dd> 49.1463 + <table class="params"> 49.1464 + <tr><td class="paramname">left</td><td>the left source list </td></tr> 49.1465 + <tr><td class="paramname">right</td><td>the right source list </td></tr> 49.1466 + <tr><td class="paramname">cmpfnc</td><td>a function to compare elements </td></tr> 49.1467 + <tr><td class="paramname">cmpdata</td><td>additional data for the compare function </td></tr> 49.1468 + <tr><td class="paramname">cpfnc</td><td>a function to copy the elements </td></tr> 49.1469 + <tr><td class="paramname">cpdata</td><td>additional data for the copy function </td></tr> 49.1470 + </table> 49.1471 + </dd> 49.1472 +</dl> 49.1473 +<dl class="section return"><dt>Returns</dt><dd>a new list containing the union </dd></dl> 49.1474 + 49.1475 +</div> 49.1476 +</div> 49.1477 +<a id="a65b4355536f4ebc4130211b46469f4c1"></a> 49.1478 +<h2 class="memtitle"><span class="permalink"><a href="#a65b4355536f4ebc4130211b46469f4c1">◆ </a></span>ucx_list_union_a()</h2> 49.1479 + 49.1480 +<div class="memitem"> 49.1481 +<div class="memproto"> 49.1482 + <table class="memname"> 49.1483 + <tr> 49.1484 + <td class="memname"><a class="el" href="structUcxList.html">UcxList</a>* ucx_list_union_a </td> 49.1485 + <td>(</td> 49.1486 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 49.1487 + <td class="paramname"><em>allocator</em>, </td> 49.1488 + </tr> 49.1489 + <tr> 49.1490 + <td class="paramkey"></td> 49.1491 + <td></td> 49.1492 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1493 + <td class="paramname"><em>left</em>, </td> 49.1494 + </tr> 49.1495 + <tr> 49.1496 + <td class="paramkey"></td> 49.1497 + <td></td> 49.1498 + <td class="paramtype">const <a class="el" href="structUcxList.html">UcxList</a> * </td> 49.1499 + <td class="paramname"><em>right</em>, </td> 49.1500 + </tr> 49.1501 + <tr> 49.1502 + <td class="paramkey"></td> 49.1503 + <td></td> 49.1504 + <td class="paramtype"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td> 49.1505 + <td class="paramname"><em>cmpfnc</em>, </td> 49.1506 + </tr> 49.1507 + <tr> 49.1508 + <td class="paramkey"></td> 49.1509 + <td></td> 49.1510 + <td class="paramtype">void * </td> 49.1511 + <td class="paramname"><em>cmpdata</em>, </td> 49.1512 + </tr> 49.1513 + <tr> 49.1514 + <td class="paramkey"></td> 49.1515 + <td></td> 49.1516 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 49.1517 + <td class="paramname"><em>cpfnc</em>, </td> 49.1518 + </tr> 49.1519 + <tr> 49.1520 + <td class="paramkey"></td> 49.1521 + <td></td> 49.1522 + <td class="paramtype">void * </td> 49.1523 + <td class="paramname"><em>cpdata</em> </td> 49.1524 + </tr> 49.1525 + <tr> 49.1526 + <td></td> 49.1527 + <td>)</td> 49.1528 + <td></td><td></td> 49.1529 + </tr> 49.1530 + </table> 49.1531 +</div><div class="memdoc"> 49.1532 + 49.1533 +<p>Returns the union of two lists. </p> 49.1534 +<p>The union is a list of unique elements regarding cmpfnc obtained from both source lists.</p> 49.1535 +<dl class="params"><dt>Parameters</dt><dd> 49.1536 + <table class="params"> 49.1537 + <tr><td class="paramname">allocator</td><td>allocates the new list elements </td></tr> 49.1538 + <tr><td class="paramname">left</td><td>the left source list </td></tr> 49.1539 + <tr><td class="paramname">right</td><td>the right source list </td></tr> 49.1540 + <tr><td class="paramname">cmpfnc</td><td>a function to compare elements </td></tr> 49.1541 + <tr><td class="paramname">cmpdata</td><td>additional data for the compare function </td></tr> 49.1542 + <tr><td class="paramname">cpfnc</td><td>a function to copy the elements </td></tr> 49.1543 + <tr><td class="paramname">cpdata</td><td>additional data for the copy function </td></tr> 49.1544 + </table> 49.1545 + </dd> 49.1546 +</dl> 49.1547 +<dl class="section return"><dt>Returns</dt><dd>a new list containing the union </dd></dl> 49.1548 + 49.1549 +</div> 49.1550 +</div> 49.1551 +</div><!-- contents --> 49.1552 +<!-- start footer part --> 49.1553 +<hr class="footer"/><address class="footer"><small> 49.1554 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 49.1555 +<img class="footer" src="doxygen.png" alt="doxygen"/> 49.1556 +</a> 1.8.13 49.1557 +</small></address> 49.1558 +</body> 49.1559 +</html>
50.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 50.2 +++ b/docs/api-2.1/list_8h_source.html Sat Feb 06 19:11:44 2021 +0100 50.3 @@ -0,0 +1,116 @@ 50.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 50.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 50.6 +<head> 50.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 50.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 50.9 +<meta name="generator" content="Doxygen 1.8.13"/> 50.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 50.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/list.h Source File</title> 50.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 50.13 +<script type="text/javascript" src="jquery.js"></script> 50.14 +<script type="text/javascript" src="dynsections.js"></script> 50.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 50.16 +<script type="text/javascript" src="search/searchdata.js"></script> 50.17 +<script type="text/javascript" src="search/search.js"></script> 50.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 50.19 +</head> 50.20 +<body> 50.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 50.22 +<div id="titlearea"> 50.23 +<table cellspacing="0" cellpadding="0"> 50.24 + <tbody> 50.25 + <tr style="height: 56px;"> 50.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 50.27 + <td id="projectalign" style="padding-left: 0.5em;"> 50.28 + <div id="projectname">ucx 50.29 + </div> 50.30 + <div id="projectbrief">UAP Common Extensions</div> 50.31 + </td> 50.32 + </tr> 50.33 + </tbody> 50.34 +</table> 50.35 +</div> 50.36 +<!-- end header part --> 50.37 +<!-- Generated by Doxygen 1.8.13 --> 50.38 +<script type="text/javascript"> 50.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 50.40 +</script> 50.41 +<script type="text/javascript" src="menudata.js"></script> 50.42 +<script type="text/javascript" src="menu.js"></script> 50.43 +<script type="text/javascript"> 50.44 +$(function() { 50.45 + initMenu('',true,false,'search.php','Search'); 50.46 + $(document).ready(function() { init_search(); }); 50.47 +}); 50.48 +</script> 50.49 +<div id="main-nav"></div> 50.50 +<!-- window showing the filter options --> 50.51 +<div id="MSearchSelectWindow" 50.52 + onmouseover="return searchBox.OnSearchSelectShow()" 50.53 + onmouseout="return searchBox.OnSearchSelectHide()" 50.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 50.55 +</div> 50.56 + 50.57 +<!-- iframe showing the search results (closed by default) --> 50.58 +<div id="MSearchResultsWindow"> 50.59 +<iframe src="javascript:void(0)" frameborder="0" 50.60 + name="MSearchResults" id="MSearchResults"> 50.61 +</iframe> 50.62 +</div> 50.63 + 50.64 +<div id="nav-path" class="navpath"> 50.65 + <ul> 50.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 50.67 +</div> 50.68 +</div><!-- top --> 50.69 +<div class="header"> 50.70 + <div class="headertitle"> 50.71 +<div class="title">list.h</div> </div> 50.72 +</div><!--header--> 50.73 +<div class="contents"> 50.74 +<a href="list_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are met:</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * documentation and/or other materials provided with the distribution.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#ifndef UCX_LIST_H</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#define UCX_LIST_H</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "<a class="code" href="ucx_8h.html">ucx.h</a>"</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "<a class="code" href="allocator_8h.html">allocator.h</a>"</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="list_8h.html#a4b143b6526a410aa4d22cb3bb9365d70"> 59</a></span> <span class="preprocessor">#define UCX_FOREACH(elem,list) \</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"> for (UcxList* elem = (UcxList*) list ; elem != NULL ; elem = elem->next)</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="list_8h.html#aa6f89f91c1081c9a7c6866c298f497a2"> 66</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structUcxList.html">UcxList</a> <a class="code" href="structUcxList.html">UcxList</a>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="structUcxList.html"> 71</a></span> <span class="keyword">struct </span><a class="code" href="structUcxList.html">UcxList</a> {</div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2"> 75</a></span>  <span class="keywordtype">void</span> *<a class="code" href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2">data</a>;</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="structUcxList.html#a82a1818f1abf765b026fa91478569a8f"> 80</a></span>  <a class="code" href="structUcxList.html">UcxList</a> *<a class="code" href="structUcxList.html#a82a1818f1abf765b026fa91478569a8f">next</a>;</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="structUcxList.html#a0f1fddce9088b9c1414745d0b1b5c08b"> 85</a></span>  <a class="code" href="structUcxList.html">UcxList</a> *<a class="code" href="structUcxList.html#a0f1fddce9088b9c1414745d0b1b5c08b">prev</a>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> };</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <a class="code" href="structUcxList.html">UcxList</a> *<a class="code" href="list_8h.html#ae7054a41c289b24e6caf5cb07ac850ed">ucx_list_clone</a>(<span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *list, <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpyfnc, <span class="keywordtype">void</span>* <a class="code" href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2">data</a>);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <a class="code" href="structUcxList.html">UcxList</a> *<a class="code" href="list_8h.html#a08ca1ba0d2e82258b0408714c1f4c425">ucx_list_clone_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *list,</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpyfnc, <span class="keywordtype">void</span>* <a class="code" href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2">data</a>);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordtype">int</span> <a class="code" href="list_8h.html#adc435447cecf885bc63d232191085bbe">ucx_list_equals</a>(<span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *list1, <span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *list2,</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, <span class="keywordtype">void</span>* <a class="code" href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2">data</a>);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="keywordtype">void</span> <a class="code" href="list_8h.html#a1a0fa2c5b1e478a96da19b0c3f013668">ucx_list_free</a>(<a class="code" href="structUcxList.html">UcxList</a> *list);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <span class="keywordtype">void</span> <a class="code" href="list_8h.html#a944e11f76c38767cd1100d72a4e3b25b">ucx_list_free_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="code" href="structUcxList.html">UcxList</a> *list);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> <span class="keywordtype">void</span> <a class="code" href="list_8h.html#a4ba6c96642f72ea046cc22627c72979c">ucx_list_free_content</a>(<a class="code" href="structUcxList.html">UcxList</a>* list, <a class="code" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> destr);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> </div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <a class="code" href="structUcxList.html">UcxList</a> *<a class="code" href="list_8h.html#a00c122c8a26d35b60676939df4161621">ucx_list_append</a>(<a class="code" href="structUcxList.html">UcxList</a> *list, <span class="keywordtype">void</span> *<a class="code" href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2">data</a>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <a class="code" href="structUcxList.html">UcxList</a> *<a class="code" href="list_8h.html#adf3b3e2e0ff977d8928671d6bd82fc60">ucx_list_append_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="code" href="structUcxList.html">UcxList</a> *list, <span class="keywordtype">void</span> *<a class="code" href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2">data</a>);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <a class="code" href="structUcxList.html">UcxList</a> *<a class="code" href="list_8h.html#a8fcb68e4556395b15180eec2d0b77aa4">ucx_list_prepend</a>(<a class="code" href="structUcxList.html">UcxList</a> *list, <span class="keywordtype">void</span> *<a class="code" href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2">data</a>);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <a class="code" href="structUcxList.html">UcxList</a> *<a class="code" href="list_8h.html#a54654e6dc60e1c3de9e886c150e404ec">ucx_list_prepend_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="code" href="structUcxList.html">UcxList</a> *list, <span class="keywordtype">void</span> *<a class="code" href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2">data</a>);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <a class="code" href="structUcxList.html">UcxList</a> *<a class="code" href="list_8h.html#a77163a0cc82fae52bec26c8c0c3674d9">ucx_list_concat</a>(<a class="code" href="structUcxList.html">UcxList</a> *list1, <a class="code" href="structUcxList.html">UcxList</a> *list2);</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> <a class="code" href="structUcxList.html">UcxList</a> *<a class="code" href="list_8h.html#a6aa0e34ebc5f0dca6f52d0f7626b4bd5">ucx_list_first</a>(<span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *elem);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> </div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> <a class="code" href="structUcxList.html">UcxList</a> *<a class="code" href="list_8h.html#add5ec40c5006e29c629d23c2eb5a6553">ucx_list_last</a>(<span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *elem);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <a class="code" href="structUcxList.html">UcxList</a> *<a class="code" href="list_8h.html#a2509ffe19bce6a8708c77f89480c75fb">ucx_list_get</a>(<span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *list, <span class="keywordtype">size_t</span> index);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> ssize_t <a class="code" href="list_8h.html#ae2ff2974812ca185870f80bc4ed9337e">ucx_list_indexof</a>(<span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *list, <span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *elem);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keywordtype">size_t</span> <a class="code" href="list_8h.html#ae88001cc8ae40b946560f31434abed8f">ucx_list_size</a>(<span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *list);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> ssize_t <a class="code" href="list_8h.html#a9b3b6842d3be572e06a7f519e198cb83">ucx_list_find</a>(<span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *list, <span class="keywordtype">void</span> *elem,</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  <a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, <span class="keywordtype">void</span> *<a class="code" href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2">data</a>);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> </div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="keywordtype">int</span> <a class="code" href="list_8h.html#a8b0fa051fcfe12e1a82cca1087973852">ucx_list_contains</a>(<span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *list, <span class="keywordtype">void</span> *elem,</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, <span class="keywordtype">void</span> *<a class="code" href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2">data</a>);</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <a class="code" href="structUcxList.html">UcxList</a> *<a class="code" href="list_8h.html#ac74962d9bd7cfc9d3e2e09651469377b">ucx_list_sort</a>(<a class="code" href="structUcxList.html">UcxList</a> *list, <a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, <span class="keywordtype">void</span> *<a class="code" href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2">data</a>);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <a class="code" href="structUcxList.html">UcxList</a> *<a class="code" href="list_8h.html#a410cb3e8260037ba56c72d14b899b468">ucx_list_remove</a>(<a class="code" href="structUcxList.html">UcxList</a> *list, <a class="code" href="structUcxList.html">UcxList</a> *element);</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <a class="code" href="structUcxList.html">UcxList</a> *<a class="code" href="list_8h.html#aca687b7c4e7170175f447e549125aa52">ucx_list_remove_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="code" href="structUcxList.html">UcxList</a> *list,</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <a class="code" href="structUcxList.html">UcxList</a> *element);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> </div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> <a class="code" href="structUcxList.html">UcxList</a>* <a class="code" href="list_8h.html#a94ecdb0cea1633ad7074f027fa8485fa">ucx_list_union</a>(<span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *left, <span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *right,</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, <span class="keywordtype">void</span>* cmpdata,</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, <span class="keywordtype">void</span>* cpdata);</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> </div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <a class="code" href="structUcxList.html">UcxList</a>* <a class="code" href="list_8h.html#a65b4355536f4ebc4130211b46469f4c1">ucx_list_union_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *allocator,</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *left, <span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *right,</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, <span class="keywordtype">void</span>* cmpdata,</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, <span class="keywordtype">void</span>* cpdata);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <a class="code" href="structUcxList.html">UcxList</a>* <a class="code" href="list_8h.html#a259f9b754978aeca23dfabba16e20f39">ucx_list_intersection</a>(<span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *left, <span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *right,</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, <span class="keywordtype">void</span>* cmpdata,</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, <span class="keywordtype">void</span>* cpdata);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span> <a class="code" href="structUcxList.html">UcxList</a>* <a class="code" href="list_8h.html#a1d0b00514dbb81ba6270b58da0c5b9a8">ucx_list_intersection_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *allocator,</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *left, <span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *right,</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, <span class="keywordtype">void</span>* cmpdata,</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, <span class="keywordtype">void</span>* cpdata);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span> </div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span> <a class="code" href="structUcxList.html">UcxList</a>* <a class="code" href="list_8h.html#a6c5db5d1d11ad28b6fe1a80ee1c1e449">ucx_list_difference</a>(<span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *left, <span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *right,</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, <span class="keywordtype">void</span>* cmpdata,</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, <span class="keywordtype">void</span>* cpdata);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <a class="code" href="structUcxList.html">UcxList</a>* <a class="code" href="list_8h.html#a4a2a2fc5cc41073c516db6235bbc51d5">ucx_list_difference_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *allocator,</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *left, <span class="keyword">const</span> <a class="code" href="structUcxList.html">UcxList</a> *right,</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> cmpfnc, <span class="keywordtype">void</span>* cmpdata,</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, <span class="keywordtype">void</span>* cpdata);</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span> }</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_LIST_H */</span><span class="preprocessor"></span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> </div><div class="ttc" id="ucx_8h_html_aab917a5fe0965673c73e8ebd0a1fc967"><div class="ttname"><a href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a></div><div class="ttdeci">void *(* copy_func)(const void *, void *)</div><div class="ttdoc">Function pointer to a copy function. </div><div class="ttdef"><b>Definition:</b> ucx.h:106</div></div> 50.75 +<div class="ttc" id="list_8h_html_adf3b3e2e0ff977d8928671d6bd82fc60"><div class="ttname"><a href="list_8h.html#adf3b3e2e0ff977d8928671d6bd82fc60">ucx_list_append_a</a></div><div class="ttdeci">UcxList * ucx_list_append_a(UcxAllocator *allocator, UcxList *list, void *data)</div><div class="ttdoc">Inserts an element at the end of the list using a UcxAllocator. </div><div class="ttdef"><b>Definition:</b> list.c:91</div></div> 50.76 +<div class="ttc" id="list_8h_html_a2509ffe19bce6a8708c77f89480c75fb"><div class="ttname"><a href="list_8h.html#a2509ffe19bce6a8708c77f89480c75fb">ucx_list_get</a></div><div class="ttdeci">UcxList * ucx_list_get(const UcxList *list, size_t index)</div><div class="ttdoc">Returns the list element at the specified index. </div><div class="ttdef"><b>Definition:</b> list.c:163</div></div> 50.77 +<div class="ttc" id="list_8h_html_a00c122c8a26d35b60676939df4161621"><div class="ttname"><a href="list_8h.html#a00c122c8a26d35b60676939df4161621">ucx_list_append</a></div><div class="ttdeci">UcxList * ucx_list_append(UcxList *list, void *data)</div><div class="ttdoc">Inserts an element at the end of the list. </div><div class="ttdef"><b>Definition:</b> list.c:87</div></div> 50.78 +<div class="ttc" id="ucx_8h_html_afe5e2d5dbf34778e0e97852051570791"><div class="ttname"><a href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a></div><div class="ttdeci">int(* cmp_func)(const void *, const void *, void *)</div><div class="ttdoc">Function pointer to a compare function. </div><div class="ttdef"><b>Definition:</b> ucx.h:84</div></div> 50.79 +<div class="ttc" id="list_8h_html_a8fcb68e4556395b15180eec2d0b77aa4"><div class="ttname"><a href="list_8h.html#a8fcb68e4556395b15180eec2d0b77aa4">ucx_list_prepend</a></div><div class="ttdeci">UcxList * ucx_list_prepend(UcxList *list, void *data)</div><div class="ttdoc">Inserts an element at the beginning of the list. </div><div class="ttdef"><b>Definition:</b> list.c:110</div></div> 50.80 +<div class="ttc" id="ucx_8h_html"><div class="ttname"><a href="ucx_8h.html">ucx.h</a></div><div class="ttdoc">Main UCX Header providing most common definitions. </div></div> 50.81 +<div class="ttc" id="list_8h_html_a6aa0e34ebc5f0dca6f52d0f7626b4bd5"><div class="ttname"><a href="list_8h.html#a6aa0e34ebc5f0dca6f52d0f7626b4bd5">ucx_list_first</a></div><div class="ttdeci">UcxList * ucx_list_first(const UcxList *elem)</div><div class="ttdoc">Returns the first element of a list. </div><div class="ttdef"><b>Definition:</b> list.c:307</div></div> 50.82 +<div class="ttc" id="list_8h_html_a944e11f76c38767cd1100d72a4e3b25b"><div class="ttname"><a href="list_8h.html#a944e11f76c38767cd1100d72a4e3b25b">ucx_list_free_a</a></div><div class="ttdeci">void ucx_list_free_a(UcxAllocator *allocator, UcxList *list)</div><div class="ttdoc">Destroys the entire list using a UcxAllocator. </div><div class="ttdef"><b>Definition:</b> list.c:70</div></div> 50.83 +<div class="ttc" id="structUcxList_html"><div class="ttname"><a href="structUcxList.html">UcxList</a></div><div class="ttdoc">UCX list structure. </div><div class="ttdef"><b>Definition:</b> list.h:71</div></div> 50.84 +<div class="ttc" id="list_8h_html_a9b3b6842d3be572e06a7f519e198cb83"><div class="ttname"><a href="list_8h.html#a9b3b6842d3be572e06a7f519e198cb83">ucx_list_find</a></div><div class="ttdeci">ssize_t ucx_list_find(const UcxList *list, void *elem, cmp_func cmpfnc, void *data)</div><div class="ttdoc">Returns the index of an element containing the specified data. </div><div class="ttdef"><b>Definition:</b> list.c:175</div></div> 50.85 +<div class="ttc" id="list_8h_html_a4a2a2fc5cc41073c516db6235bbc51d5"><div class="ttname"><a href="list_8h.html#a4a2a2fc5cc41073c516db6235bbc51d5">ucx_list_difference_a</a></div><div class="ttdeci">UcxList * ucx_list_difference_a(UcxAllocator *allocator, const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)</div><div class="ttdoc">Returns the difference of two lists. </div><div class="ttdef"><b>Definition:</b> list.c:421</div></div> 50.86 +<div class="ttc" id="list_8h_html_a08ca1ba0d2e82258b0408714c1f4c425"><div class="ttname"><a href="list_8h.html#a08ca1ba0d2e82258b0408714c1f4c425">ucx_list_clone_a</a></div><div class="ttdeci">UcxList * ucx_list_clone_a(UcxAllocator *allocator, const UcxList *list, copy_func cpyfnc, void *data)</div><div class="ttdoc">Creates an element-wise copy of a list using a UcxAllocator. </div><div class="ttdef"><b>Definition:</b> list.c:35</div></div> 50.87 +<div class="ttc" id="list_8h_html_a94ecdb0cea1633ad7074f027fa8485fa"><div class="ttname"><a href="list_8h.html#a94ecdb0cea1633ad7074f027fa8485fa">ucx_list_union</a></div><div class="ttdeci">UcxList * ucx_list_union(const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)</div><div class="ttdoc">Returns the union of two lists. </div><div class="ttdef"><b>Definition:</b> list.c:382</div></div> 50.88 +<div class="ttc" id="list_8h_html_a77163a0cc82fae52bec26c8c0c3674d9"><div class="ttname"><a href="list_8h.html#a77163a0cc82fae52bec26c8c0c3674d9">ucx_list_concat</a></div><div class="ttdeci">UcxList * ucx_list_concat(UcxList *list1, UcxList *list2)</div><div class="ttdoc">Concatenates two lists. </div><div class="ttdef"><b>Definition:</b> list.c:128</div></div> 50.89 +<div class="ttc" id="list_8h_html_add5ec40c5006e29c629d23c2eb5a6553"><div class="ttname"><a href="list_8h.html#add5ec40c5006e29c629d23c2eb5a6553">ucx_list_last</a></div><div class="ttdeci">UcxList * ucx_list_last(const UcxList *elem)</div><div class="ttdoc">Returns the last element of a list. </div><div class="ttdef"><b>Definition:</b> list.c:141</div></div> 50.90 +<div class="ttc" id="list_8h_html_a410cb3e8260037ba56c72d14b899b468"><div class="ttname"><a href="list_8h.html#a410cb3e8260037ba56c72d14b899b468">ucx_list_remove</a></div><div class="ttdeci">UcxList * ucx_list_remove(UcxList *list, UcxList *element)</div><div class="ttdoc">Removes an element from the list. </div><div class="ttdef"><b>Definition:</b> list.c:319</div></div> 50.91 +<div class="ttc" id="structUcxList_html_a4a44905121b6fc2a088084ce578a9ea2"><div class="ttname"><a href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2">UcxList::data</a></div><div class="ttdeci">void * data</div><div class="ttdoc">List element payload. </div><div class="ttdef"><b>Definition:</b> list.h:75</div></div> 50.92 +<div class="ttc" id="list_8h_html_ae2ff2974812ca185870f80bc4ed9337e"><div class="ttname"><a href="list_8h.html#ae2ff2974812ca185870f80bc4ed9337e">ucx_list_indexof</a></div><div class="ttdeci">ssize_t ucx_list_indexof(const UcxList *list, const UcxList *elem)</div><div class="ttdoc">Returns the index of an element. </div><div class="ttdef"><b>Definition:</b> list.c:151</div></div> 50.93 +<div class="ttc" id="list_8h_html_aca687b7c4e7170175f447e549125aa52"><div class="ttname"><a href="list_8h.html#aca687b7c4e7170175f447e549125aa52">ucx_list_remove_a</a></div><div class="ttdeci">UcxList * ucx_list_remove_a(UcxAllocator *allocator, UcxList *list, UcxList *element)</div><div class="ttdoc">Removes an element from the list using a UcxAllocator. </div><div class="ttdef"><b>Definition:</b> list.c:323</div></div> 50.94 +<div class="ttc" id="list_8h_html_a6c5db5d1d11ad28b6fe1a80ee1c1e449"><div class="ttname"><a href="list_8h.html#a6c5db5d1d11ad28b6fe1a80ee1c1e449">ucx_list_difference</a></div><div class="ttdeci">UcxList * ucx_list_difference(const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)</div><div class="ttdoc">Returns the difference of two lists. </div><div class="ttdef"><b>Definition:</b> list.c:414</div></div> 50.95 +<div class="ttc" id="structUcxAllocator_html"><div class="ttname"><a href="structUcxAllocator.html">UcxAllocator</a></div><div class="ttdoc">UCX allocator data structure containing memory management functions. </div><div class="ttdef"><b>Definition:</b> allocator.h:88</div></div> 50.96 +<div class="ttc" id="list_8h_html_a4ba6c96642f72ea046cc22627c72979c"><div class="ttname"><a href="list_8h.html#a4ba6c96642f72ea046cc22627c72979c">ucx_list_free_content</a></div><div class="ttdeci">void ucx_list_free_content(UcxList *list, ucx_destructor destr)</div><div class="ttdoc">Destroys the contents of the specified list by calling the specified destructor on each of them...</div><div class="ttdef"><b>Definition:</b> list.c:79</div></div> 50.97 +<div class="ttc" id="structUcxList_html_a82a1818f1abf765b026fa91478569a8f"><div class="ttname"><a href="structUcxList.html#a82a1818f1abf765b026fa91478569a8f">UcxList::next</a></div><div class="ttdeci">UcxList * next</div><div class="ttdoc">Pointer to the next list element or NULL, if this is the last element. </div><div class="ttdef"><b>Definition:</b> list.h:80</div></div> 50.98 +<div class="ttc" id="list_8h_html_a1d0b00514dbb81ba6270b58da0c5b9a8"><div class="ttname"><a href="list_8h.html#a1d0b00514dbb81ba6270b58da0c5b9a8">ucx_list_intersection_a</a></div><div class="ttdeci">UcxList * ucx_list_intersection_a(UcxAllocator *allocator, const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)</div><div class="ttdoc">Returns the intersection of two lists. </div><div class="ttdef"><b>Definition:</b> list.c:405</div></div> 50.99 +<div class="ttc" id="list_8h_html_a259f9b754978aeca23dfabba16e20f39"><div class="ttname"><a href="list_8h.html#a259f9b754978aeca23dfabba16e20f39">ucx_list_intersection</a></div><div class="ttdeci">UcxList * ucx_list_intersection(const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)</div><div class="ttdoc">Returns the intersection of two lists. </div><div class="ttdef"><b>Definition:</b> list.c:398</div></div> 50.100 +<div class="ttc" id="list_8h_html_ac74962d9bd7cfc9d3e2e09651469377b"><div class="ttname"><a href="list_8h.html#ac74962d9bd7cfc9d3e2e09651469377b">ucx_list_sort</a></div><div class="ttdeci">UcxList * ucx_list_sort(UcxList *list, cmp_func cmpfnc, void *data)</div><div class="ttdoc">Sorts a UcxList with natural merge sort. </div><div class="ttdef"><b>Definition:</b> list.c:254</div></div> 50.101 +<div class="ttc" id="list_8h_html_ae7054a41c289b24e6caf5cb07ac850ed"><div class="ttname"><a href="list_8h.html#ae7054a41c289b24e6caf5cb07ac850ed">ucx_list_clone</a></div><div class="ttdeci">UcxList * ucx_list_clone(const UcxList *list, copy_func cpyfnc, void *data)</div><div class="ttdoc">Creates an element-wise copy of a list. </div><div class="ttdef"><b>Definition:</b> list.c:31</div></div> 50.102 +<div class="ttc" id="allocator_8h_html"><div class="ttname"><a href="allocator_8h.html">allocator.h</a></div><div class="ttdoc">Allocator for custom memory management. </div></div> 50.103 +<div class="ttc" id="list_8h_html_a54654e6dc60e1c3de9e886c150e404ec"><div class="ttname"><a href="list_8h.html#a54654e6dc60e1c3de9e886c150e404ec">ucx_list_prepend_a</a></div><div class="ttdeci">UcxList * ucx_list_prepend_a(UcxAllocator *allocator, UcxList *list, void *data)</div><div class="ttdoc">Inserts an element at the beginning of the list using a UcxAllocator. </div><div class="ttdef"><b>Definition:</b> list.c:114</div></div> 50.104 +<div class="ttc" id="list_8h_html_a1a0fa2c5b1e478a96da19b0c3f013668"><div class="ttname"><a href="list_8h.html#a1a0fa2c5b1e478a96da19b0c3f013668">ucx_list_free</a></div><div class="ttdeci">void ucx_list_free(UcxList *list)</div><div class="ttdoc">Destroys the entire list. </div><div class="ttdef"><b>Definition:</b> list.c:66</div></div> 50.105 +<div class="ttc" id="structUcxList_html_a0f1fddce9088b9c1414745d0b1b5c08b"><div class="ttname"><a href="structUcxList.html#a0f1fddce9088b9c1414745d0b1b5c08b">UcxList::prev</a></div><div class="ttdeci">UcxList * prev</div><div class="ttdoc">Pointer to the previous list element or NULL, if this is the first element. </div><div class="ttdef"><b>Definition:</b> list.h:85</div></div> 50.106 +<div class="ttc" id="list_8h_html_a65b4355536f4ebc4130211b46469f4c1"><div class="ttname"><a href="list_8h.html#a65b4355536f4ebc4130211b46469f4c1">ucx_list_union_a</a></div><div class="ttdeci">UcxList * ucx_list_union_a(UcxAllocator *allocator, const UcxList *left, const UcxList *right, cmp_func cmpfnc, void *cmpdata, copy_func cpfnc, void *cpdata)</div><div class="ttdoc">Returns the union of two lists. </div><div class="ttdef"><b>Definition:</b> list.c:389</div></div> 50.107 +<div class="ttc" id="list_8h_html_adc435447cecf885bc63d232191085bbe"><div class="ttname"><a href="list_8h.html#adc435447cecf885bc63d232191085bbe">ucx_list_equals</a></div><div class="ttdeci">int ucx_list_equals(const UcxList *list1, const UcxList *list2, cmp_func cmpfnc, void *data)</div><div class="ttdoc">Compares two UCX lists element-wise by using a compare function. </div><div class="ttdef"><b>Definition:</b> list.c:49</div></div> 50.108 +<div class="ttc" id="list_8h_html_a8b0fa051fcfe12e1a82cca1087973852"><div class="ttname"><a href="list_8h.html#a8b0fa051fcfe12e1a82cca1087973852">ucx_list_contains</a></div><div class="ttdeci">int ucx_list_contains(const UcxList *list, void *elem, cmp_func cmpfnc, void *data)</div><div class="ttdoc">Checks, if a list contains a specific element. </div><div class="ttdef"><b>Definition:</b> list.c:193</div></div> 50.109 +<div class="ttc" id="list_8h_html_ae88001cc8ae40b946560f31434abed8f"><div class="ttname"><a href="list_8h.html#ae88001cc8ae40b946560f31434abed8f">ucx_list_size</a></div><div class="ttdeci">size_t ucx_list_size(const UcxList *list)</div><div class="ttdoc">Returns the element count of the list. </div><div class="ttdef"><b>Definition:</b> list.c:198</div></div> 50.110 +<div class="ttc" id="ucx_8h_html_ad2b370c2809914c8b7fedab163c266b3"><div class="ttname"><a href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a></div><div class="ttdeci">void(* ucx_destructor)(void *)</div><div class="ttdoc">A function pointer to a destructor function. </div><div class="ttdef"><b>Definition:</b> ucx.h:72</div></div> 50.111 +</div><!-- fragment --></div><!-- contents --> 50.112 +<!-- start footer part --> 50.113 +<hr class="footer"/><address class="footer"><small> 50.114 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 50.115 +<img class="footer" src="doxygen.png" alt="doxygen"/> 50.116 +</a> 1.8.13 50.117 +</small></address> 50.118 +</body> 50.119 +</html>
51.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 51.2 +++ b/docs/api-2.1/logging_8h.html Sat Feb 06 19:11:44 2021 +0100 51.3 @@ -0,0 +1,716 @@ 51.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 51.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 51.6 +<head> 51.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 51.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 51.9 +<meta name="generator" content="Doxygen 1.8.13"/> 51.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 51.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/logging.h File Reference</title> 51.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 51.13 +<script type="text/javascript" src="jquery.js"></script> 51.14 +<script type="text/javascript" src="dynsections.js"></script> 51.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 51.16 +<script type="text/javascript" src="search/searchdata.js"></script> 51.17 +<script type="text/javascript" src="search/search.js"></script> 51.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 51.19 +</head> 51.20 +<body> 51.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 51.22 +<div id="titlearea"> 51.23 +<table cellspacing="0" cellpadding="0"> 51.24 + <tbody> 51.25 + <tr style="height: 56px;"> 51.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 51.27 + <td id="projectalign" style="padding-left: 0.5em;"> 51.28 + <div id="projectname">ucx 51.29 + </div> 51.30 + <div id="projectbrief">UAP Common Extensions</div> 51.31 + </td> 51.32 + </tr> 51.33 + </tbody> 51.34 +</table> 51.35 +</div> 51.36 +<!-- end header part --> 51.37 +<!-- Generated by Doxygen 1.8.13 --> 51.38 +<script type="text/javascript"> 51.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 51.40 +</script> 51.41 +<script type="text/javascript" src="menudata.js"></script> 51.42 +<script type="text/javascript" src="menu.js"></script> 51.43 +<script type="text/javascript"> 51.44 +$(function() { 51.45 + initMenu('',true,false,'search.php','Search'); 51.46 + $(document).ready(function() { init_search(); }); 51.47 +}); 51.48 +</script> 51.49 +<div id="main-nav"></div> 51.50 +<!-- window showing the filter options --> 51.51 +<div id="MSearchSelectWindow" 51.52 + onmouseover="return searchBox.OnSearchSelectShow()" 51.53 + onmouseout="return searchBox.OnSearchSelectHide()" 51.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 51.55 +</div> 51.56 + 51.57 +<!-- iframe showing the search results (closed by default) --> 51.58 +<div id="MSearchResultsWindow"> 51.59 +<iframe src="javascript:void(0)" frameborder="0" 51.60 + name="MSearchResults" id="MSearchResults"> 51.61 +</iframe> 51.62 +</div> 51.63 + 51.64 +<div id="nav-path" class="navpath"> 51.65 + <ul> 51.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 51.67 +</div> 51.68 +</div><!-- top --> 51.69 +<div class="header"> 51.70 + <div class="summary"> 51.71 +<a href="#nested-classes">Data Structures</a> | 51.72 +<a href="#define-members">Macros</a> | 51.73 +<a href="#func-members">Functions</a> </div> 51.74 + <div class="headertitle"> 51.75 +<div class="title">logging.h File Reference</div> </div> 51.76 +</div><!--header--> 51.77 +<div class="contents"> 51.78 + 51.79 +<p>Logging API. 51.80 +<a href="#details">More...</a></p> 51.81 +<div class="textblock"><code>#include "<a class="el" href="ucx_8h_source.html">ucx.h</a>"</code><br /> 51.82 +<code>#include "<a class="el" href="map_8h_source.html">map.h</a>"</code><br /> 51.83 +<code>#include "<a class="el" href="string_8h_source.html">string.h</a>"</code><br /> 51.84 +<code>#include <stdio.h></code><br /> 51.85 +</div> 51.86 +<p><a href="logging_8h_source.html">Go to the source code of this file.</a></p> 51.87 +<table class="memberdecls"> 51.88 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> 51.89 +Data Structures</h2></td></tr> 51.90 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxLogger.html">UcxLogger</a></td></tr> 51.91 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The UCX Logger object. <a href="structUcxLogger.html#details">More...</a><br /></td></tr> 51.92 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 51.93 +</table><table class="memberdecls"> 51.94 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> 51.95 +Macros</h2></td></tr> 51.96 +<tr class="memitem:aa254c07fe3a907613e2256a318d5c9a8"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#aa254c07fe3a907613e2256a318d5c9a8">UCX_LOGGER_ERROR</a>   0x00</td></tr> 51.97 +<tr class="memdesc:aa254c07fe3a907613e2256a318d5c9a8"><td class="mdescLeft"> </td><td class="mdescRight">Log level for error messages. <a href="#aa254c07fe3a907613e2256a318d5c9a8">More...</a><br /></td></tr> 51.98 +<tr class="separator:aa254c07fe3a907613e2256a318d5c9a8"><td class="memSeparator" colspan="2"> </td></tr> 51.99 +<tr class="memitem:abd01ca11486226ba34e8f7028d9fffba"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#abd01ca11486226ba34e8f7028d9fffba">UCX_LOGGER_WARN</a>   0x10</td></tr> 51.100 +<tr class="memdesc:abd01ca11486226ba34e8f7028d9fffba"><td class="mdescLeft"> </td><td class="mdescRight">Log level for warning messages. <a href="#abd01ca11486226ba34e8f7028d9fffba">More...</a><br /></td></tr> 51.101 +<tr class="separator:abd01ca11486226ba34e8f7028d9fffba"><td class="memSeparator" colspan="2"> </td></tr> 51.102 +<tr class="memitem:a4b0178bf60a6129373ffc59114ca4c9b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#a4b0178bf60a6129373ffc59114ca4c9b">UCX_LOGGER_INFO</a>   0x20</td></tr> 51.103 +<tr class="memdesc:a4b0178bf60a6129373ffc59114ca4c9b"><td class="mdescLeft"> </td><td class="mdescRight">Log level for information messages. <a href="#a4b0178bf60a6129373ffc59114ca4c9b">More...</a><br /></td></tr> 51.104 +<tr class="separator:a4b0178bf60a6129373ffc59114ca4c9b"><td class="memSeparator" colspan="2"> </td></tr> 51.105 +<tr class="memitem:acff01d1ef919ea997cfce755fc1b83d8"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#acff01d1ef919ea997cfce755fc1b83d8">UCX_LOGGER_DEBUG</a>   0x30</td></tr> 51.106 +<tr class="memdesc:acff01d1ef919ea997cfce755fc1b83d8"><td class="mdescLeft"> </td><td class="mdescRight">Log level for debug messages. <a href="#acff01d1ef919ea997cfce755fc1b83d8">More...</a><br /></td></tr> 51.107 +<tr class="separator:acff01d1ef919ea997cfce755fc1b83d8"><td class="memSeparator" colspan="2"> </td></tr> 51.108 +<tr class="memitem:a55b88d1fec7036d841b3ddd6195c5586"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#a55b88d1fec7036d841b3ddd6195c5586">UCX_LOGGER_TRACE</a>   0x40</td></tr> 51.109 +<tr class="memdesc:a55b88d1fec7036d841b3ddd6195c5586"><td class="mdescLeft"> </td><td class="mdescRight">Log level for trace messages. <a href="#a55b88d1fec7036d841b3ddd6195c5586">More...</a><br /></td></tr> 51.110 +<tr class="separator:a55b88d1fec7036d841b3ddd6195c5586"><td class="memSeparator" colspan="2"> </td></tr> 51.111 +<tr class="memitem:aee18bc20e58ffb69910121512c350839"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#aee18bc20e58ffb69910121512c350839">UCX_LOGGER_LEVEL</a>   0x01</td></tr> 51.112 +<tr class="memdesc:aee18bc20e58ffb69910121512c350839"><td class="mdescLeft"> </td><td class="mdescRight">Output flag for the log level. <a href="#aee18bc20e58ffb69910121512c350839">More...</a><br /></td></tr> 51.113 +<tr class="separator:aee18bc20e58ffb69910121512c350839"><td class="memSeparator" colspan="2"> </td></tr> 51.114 +<tr class="memitem:a38607008268b4f776ee500fb95d2e823"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#a38607008268b4f776ee500fb95d2e823">UCX_LOGGER_TIMESTAMP</a>   0x02</td></tr> 51.115 +<tr class="memdesc:a38607008268b4f776ee500fb95d2e823"><td class="mdescLeft"> </td><td class="mdescRight">Output flag for the timestmap. <a href="#a38607008268b4f776ee500fb95d2e823">More...</a><br /></td></tr> 51.116 +<tr class="separator:a38607008268b4f776ee500fb95d2e823"><td class="memSeparator" colspan="2"> </td></tr> 51.117 +<tr class="memitem:a0e0d72b12616c1e49ff8834eaf4cb8a2"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#a0e0d72b12616c1e49ff8834eaf4cb8a2">UCX_LOGGER_SOURCE</a>   0x04</td></tr> 51.118 +<tr class="memdesc:a0e0d72b12616c1e49ff8834eaf4cb8a2"><td class="mdescLeft"> </td><td class="mdescRight">Output flag for the source. <a href="#a0e0d72b12616c1e49ff8834eaf4cb8a2">More...</a><br /></td></tr> 51.119 +<tr class="separator:a0e0d72b12616c1e49ff8834eaf4cb8a2"><td class="memSeparator" colspan="2"> </td></tr> 51.120 +<tr class="memitem:a5cffc19502c4c90bfb3bd3bbcd18170a"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#a5cffc19502c4c90bfb3bd3bbcd18170a">ucx_logger_register_level</a>(logger, level, name)</td></tr> 51.121 +<tr class="memdesc:a5cffc19502c4c90bfb3bd3bbcd18170a"><td class="mdescLeft"> </td><td class="mdescRight">Registers a custom log level. <a href="#a5cffc19502c4c90bfb3bd3bbcd18170a">More...</a><br /></td></tr> 51.122 +<tr class="separator:a5cffc19502c4c90bfb3bd3bbcd18170a"><td class="memSeparator" colspan="2"> </td></tr> 51.123 +<tr class="memitem:aa0245325031d95799b28def177fd14ec"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#aa0245325031d95799b28def177fd14ec">ucx_logger_log</a>(logger, level, ...)   <a class="el" href="logging_8h.html#ac337e5d02ebea565012d4c11bd643801">ucx_logger_logf</a>(logger, level, __FILE__, __LINE__, __VA_ARGS__)</td></tr> 51.124 +<tr class="memdesc:aa0245325031d95799b28def177fd14ec"><td class="mdescLeft"> </td><td class="mdescRight">Logs a message at the specified level. <a href="#aa0245325031d95799b28def177fd14ec">More...</a><br /></td></tr> 51.125 +<tr class="separator:aa0245325031d95799b28def177fd14ec"><td class="memSeparator" colspan="2"> </td></tr> 51.126 +<tr class="memitem:a6a9e472e14d6768e59d96d245e065397"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#a6a9e472e14d6768e59d96d245e065397">ucx_logger_error</a>(logger, ...)   <a class="el" href="logging_8h.html#aa0245325031d95799b28def177fd14ec">ucx_logger_log</a>(logger, <a class="el" href="logging_8h.html#aa254c07fe3a907613e2256a318d5c9a8">UCX_LOGGER_ERROR</a>, __VA_ARGS__)</td></tr> 51.127 +<tr class="memdesc:a6a9e472e14d6768e59d96d245e065397"><td class="mdescLeft"> </td><td class="mdescRight">Shortcut for logging an error message. <a href="#a6a9e472e14d6768e59d96d245e065397">More...</a><br /></td></tr> 51.128 +<tr class="separator:a6a9e472e14d6768e59d96d245e065397"><td class="memSeparator" colspan="2"> </td></tr> 51.129 +<tr class="memitem:a98464d8d51376ce2716dcc4eca00d5da"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#a98464d8d51376ce2716dcc4eca00d5da">ucx_logger_info</a>(logger, ...)   <a class="el" href="logging_8h.html#aa0245325031d95799b28def177fd14ec">ucx_logger_log</a>(logger, <a class="el" href="logging_8h.html#a4b0178bf60a6129373ffc59114ca4c9b">UCX_LOGGER_INFO</a>, __VA_ARGS__)</td></tr> 51.130 +<tr class="memdesc:a98464d8d51376ce2716dcc4eca00d5da"><td class="mdescLeft"> </td><td class="mdescRight">Shortcut for logging an information message. <a href="#a98464d8d51376ce2716dcc4eca00d5da">More...</a><br /></td></tr> 51.131 +<tr class="separator:a98464d8d51376ce2716dcc4eca00d5da"><td class="memSeparator" colspan="2"> </td></tr> 51.132 +<tr class="memitem:aca7bd861b646892813fd7310c0aa69af"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#aca7bd861b646892813fd7310c0aa69af">ucx_logger_warn</a>(logger, ...)   <a class="el" href="logging_8h.html#aa0245325031d95799b28def177fd14ec">ucx_logger_log</a>(logger, <a class="el" href="logging_8h.html#abd01ca11486226ba34e8f7028d9fffba">UCX_LOGGER_WARN</a>, __VA_ARGS__)</td></tr> 51.133 +<tr class="memdesc:aca7bd861b646892813fd7310c0aa69af"><td class="mdescLeft"> </td><td class="mdescRight">Shortcut for logging a warning message. <a href="#aca7bd861b646892813fd7310c0aa69af">More...</a><br /></td></tr> 51.134 +<tr class="separator:aca7bd861b646892813fd7310c0aa69af"><td class="memSeparator" colspan="2"> </td></tr> 51.135 +<tr class="memitem:a2936402799892db5138e5f1f8c25db0c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#a2936402799892db5138e5f1f8c25db0c">ucx_logger_debug</a>(logger, ...)   <a class="el" href="logging_8h.html#aa0245325031d95799b28def177fd14ec">ucx_logger_log</a>(logger, <a class="el" href="logging_8h.html#acff01d1ef919ea997cfce755fc1b83d8">UCX_LOGGER_DEBUG</a>, __VA_ARGS__)</td></tr> 51.136 +<tr class="memdesc:a2936402799892db5138e5f1f8c25db0c"><td class="mdescLeft"> </td><td class="mdescRight">Shortcut for logging a debug message. <a href="#a2936402799892db5138e5f1f8c25db0c">More...</a><br /></td></tr> 51.137 +<tr class="separator:a2936402799892db5138e5f1f8c25db0c"><td class="memSeparator" colspan="2"> </td></tr> 51.138 +<tr class="memitem:a3031b7ff13f4cfae9c2916543be2877c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#a3031b7ff13f4cfae9c2916543be2877c">ucx_logger_trace</a>(logger, ...)   <a class="el" href="logging_8h.html#aa0245325031d95799b28def177fd14ec">ucx_logger_log</a>(logger, <a class="el" href="logging_8h.html#a55b88d1fec7036d841b3ddd6195c5586">UCX_LOGGER_TRACE</a>, __VA_ARGS__)</td></tr> 51.139 +<tr class="memdesc:a3031b7ff13f4cfae9c2916543be2877c"><td class="mdescLeft"> </td><td class="mdescRight">Shortcut for logging a trace message. <a href="#a3031b7ff13f4cfae9c2916543be2877c">More...</a><br /></td></tr> 51.140 +<tr class="separator:a3031b7ff13f4cfae9c2916543be2877c"><td class="memSeparator" colspan="2"> </td></tr> 51.141 +</table><table class="memberdecls"> 51.142 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 51.143 +Functions</h2></td></tr> 51.144 +<tr class="memitem:ac560f8517d2172794c9d2691735ec48c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxLogger.html">UcxLogger</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#ac560f8517d2172794c9d2691735ec48c">ucx_logger_new</a> (void *stream, unsigned int level, unsigned int mask)</td></tr> 51.145 +<tr class="memdesc:ac560f8517d2172794c9d2691735ec48c"><td class="mdescLeft"> </td><td class="mdescRight">Creates a new logger. <a href="#ac560f8517d2172794c9d2691735ec48c">More...</a><br /></td></tr> 51.146 +<tr class="separator:ac560f8517d2172794c9d2691735ec48c"><td class="memSeparator" colspan="2"> </td></tr> 51.147 +<tr class="memitem:ac4697b784e01ec990d2acea192e21658"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#ac4697b784e01ec990d2acea192e21658">ucx_logger_free</a> (<a class="el" href="structUcxLogger.html">UcxLogger</a> *logger)</td></tr> 51.148 +<tr class="memdesc:ac4697b784e01ec990d2acea192e21658"><td class="mdescLeft"> </td><td class="mdescRight">Destroys the logger. <a href="#ac4697b784e01ec990d2acea192e21658">More...</a><br /></td></tr> 51.149 +<tr class="separator:ac4697b784e01ec990d2acea192e21658"><td class="memSeparator" colspan="2"> </td></tr> 51.150 +<tr class="memitem:ac337e5d02ebea565012d4c11bd643801"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="logging_8h.html#ac337e5d02ebea565012d4c11bd643801">ucx_logger_logf</a> (<a class="el" href="structUcxLogger.html">UcxLogger</a> *logger, unsigned int level, const char *file, const unsigned int line, const char *format,...)</td></tr> 51.151 +<tr class="memdesc:ac337e5d02ebea565012d4c11bd643801"><td class="mdescLeft"> </td><td class="mdescRight">Internal log function - use macros instead. <a href="#ac337e5d02ebea565012d4c11bd643801">More...</a><br /></td></tr> 51.152 +<tr class="separator:ac337e5d02ebea565012d4c11bd643801"><td class="memSeparator" colspan="2"> </td></tr> 51.153 +</table> 51.154 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 51.155 +<div class="textblock"><p>Logging API. </p> 51.156 +<dl class="section author"><dt>Author</dt><dd>Mike Becker, Olaf Wintermann </dd></dl> 51.157 +</div><h2 class="groupheader">Macro Definition Documentation</h2> 51.158 +<a id="acff01d1ef919ea997cfce755fc1b83d8"></a> 51.159 +<h2 class="memtitle"><span class="permalink"><a href="#acff01d1ef919ea997cfce755fc1b83d8">◆ </a></span>UCX_LOGGER_DEBUG</h2> 51.160 + 51.161 +<div class="memitem"> 51.162 +<div class="memproto"> 51.163 + <table class="memname"> 51.164 + <tr> 51.165 + <td class="memname">#define UCX_LOGGER_DEBUG   0x30</td> 51.166 + </tr> 51.167 + </table> 51.168 +</div><div class="memdoc"> 51.169 + 51.170 +<p>Log level for debug messages. </p> 51.171 + 51.172 +</div> 51.173 +</div> 51.174 +<a id="a2936402799892db5138e5f1f8c25db0c"></a> 51.175 +<h2 class="memtitle"><span class="permalink"><a href="#a2936402799892db5138e5f1f8c25db0c">◆ </a></span>ucx_logger_debug</h2> 51.176 + 51.177 +<div class="memitem"> 51.178 +<div class="memproto"> 51.179 + <table class="memname"> 51.180 + <tr> 51.181 + <td class="memname">#define ucx_logger_debug</td> 51.182 + <td>(</td> 51.183 + <td class="paramtype"> </td> 51.184 + <td class="paramname">logger, </td> 51.185 + </tr> 51.186 + <tr> 51.187 + <td class="paramkey"></td> 51.188 + <td></td> 51.189 + <td class="paramtype"> </td> 51.190 + <td class="paramname"><em>...</em> </td> 51.191 + </tr> 51.192 + <tr> 51.193 + <td></td> 51.194 + <td>)</td> 51.195 + <td></td><td>   <a class="el" href="logging_8h.html#aa0245325031d95799b28def177fd14ec">ucx_logger_log</a>(logger, <a class="el" href="logging_8h.html#acff01d1ef919ea997cfce755fc1b83d8">UCX_LOGGER_DEBUG</a>, __VA_ARGS__)</td> 51.196 + </tr> 51.197 + </table> 51.198 +</div><div class="memdoc"> 51.199 + 51.200 +<p>Shortcut for logging a debug message. </p> 51.201 +<dl class="params"><dt>Parameters</dt><dd> 51.202 + <table class="params"> 51.203 + <tr><td class="paramname">logger</td><td>the logger to use </td></tr> 51.204 + <tr><td class="paramname">...</td><td>format string and arguments </td></tr> 51.205 + </table> 51.206 + </dd> 51.207 +</dl> 51.208 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="logging_8h.html#ac337e5d02ebea565012d4c11bd643801" title="Internal log function - use macros instead. ">ucx_logger_logf()</a> </dd></dl> 51.209 + 51.210 +</div> 51.211 +</div> 51.212 +<a id="aa254c07fe3a907613e2256a318d5c9a8"></a> 51.213 +<h2 class="memtitle"><span class="permalink"><a href="#aa254c07fe3a907613e2256a318d5c9a8">◆ </a></span>UCX_LOGGER_ERROR</h2> 51.214 + 51.215 +<div class="memitem"> 51.216 +<div class="memproto"> 51.217 + <table class="memname"> 51.218 + <tr> 51.219 + <td class="memname">#define UCX_LOGGER_ERROR   0x00</td> 51.220 + </tr> 51.221 + </table> 51.222 +</div><div class="memdoc"> 51.223 + 51.224 +<p>Log level for error messages. </p> 51.225 + 51.226 +</div> 51.227 +</div> 51.228 +<a id="a6a9e472e14d6768e59d96d245e065397"></a> 51.229 +<h2 class="memtitle"><span class="permalink"><a href="#a6a9e472e14d6768e59d96d245e065397">◆ </a></span>ucx_logger_error</h2> 51.230 + 51.231 +<div class="memitem"> 51.232 +<div class="memproto"> 51.233 + <table class="memname"> 51.234 + <tr> 51.235 + <td class="memname">#define ucx_logger_error</td> 51.236 + <td>(</td> 51.237 + <td class="paramtype"> </td> 51.238 + <td class="paramname">logger, </td> 51.239 + </tr> 51.240 + <tr> 51.241 + <td class="paramkey"></td> 51.242 + <td></td> 51.243 + <td class="paramtype"> </td> 51.244 + <td class="paramname"><em>...</em> </td> 51.245 + </tr> 51.246 + <tr> 51.247 + <td></td> 51.248 + <td>)</td> 51.249 + <td></td><td>   <a class="el" href="logging_8h.html#aa0245325031d95799b28def177fd14ec">ucx_logger_log</a>(logger, <a class="el" href="logging_8h.html#aa254c07fe3a907613e2256a318d5c9a8">UCX_LOGGER_ERROR</a>, __VA_ARGS__)</td> 51.250 + </tr> 51.251 + </table> 51.252 +</div><div class="memdoc"> 51.253 + 51.254 +<p>Shortcut for logging an error message. </p> 51.255 +<dl class="params"><dt>Parameters</dt><dd> 51.256 + <table class="params"> 51.257 + <tr><td class="paramname">logger</td><td>the logger to use </td></tr> 51.258 + <tr><td class="paramname">...</td><td>format string and arguments </td></tr> 51.259 + </table> 51.260 + </dd> 51.261 +</dl> 51.262 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="logging_8h.html#ac337e5d02ebea565012d4c11bd643801" title="Internal log function - use macros instead. ">ucx_logger_logf()</a> </dd></dl> 51.263 + 51.264 +</div> 51.265 +</div> 51.266 +<a id="a4b0178bf60a6129373ffc59114ca4c9b"></a> 51.267 +<h2 class="memtitle"><span class="permalink"><a href="#a4b0178bf60a6129373ffc59114ca4c9b">◆ </a></span>UCX_LOGGER_INFO</h2> 51.268 + 51.269 +<div class="memitem"> 51.270 +<div class="memproto"> 51.271 + <table class="memname"> 51.272 + <tr> 51.273 + <td class="memname">#define UCX_LOGGER_INFO   0x20</td> 51.274 + </tr> 51.275 + </table> 51.276 +</div><div class="memdoc"> 51.277 + 51.278 +<p>Log level for information messages. </p> 51.279 + 51.280 +</div> 51.281 +</div> 51.282 +<a id="a98464d8d51376ce2716dcc4eca00d5da"></a> 51.283 +<h2 class="memtitle"><span class="permalink"><a href="#a98464d8d51376ce2716dcc4eca00d5da">◆ </a></span>ucx_logger_info</h2> 51.284 + 51.285 +<div class="memitem"> 51.286 +<div class="memproto"> 51.287 + <table class="memname"> 51.288 + <tr> 51.289 + <td class="memname">#define ucx_logger_info</td> 51.290 + <td>(</td> 51.291 + <td class="paramtype"> </td> 51.292 + <td class="paramname">logger, </td> 51.293 + </tr> 51.294 + <tr> 51.295 + <td class="paramkey"></td> 51.296 + <td></td> 51.297 + <td class="paramtype"> </td> 51.298 + <td class="paramname"><em>...</em> </td> 51.299 + </tr> 51.300 + <tr> 51.301 + <td></td> 51.302 + <td>)</td> 51.303 + <td></td><td>   <a class="el" href="logging_8h.html#aa0245325031d95799b28def177fd14ec">ucx_logger_log</a>(logger, <a class="el" href="logging_8h.html#a4b0178bf60a6129373ffc59114ca4c9b">UCX_LOGGER_INFO</a>, __VA_ARGS__)</td> 51.304 + </tr> 51.305 + </table> 51.306 +</div><div class="memdoc"> 51.307 + 51.308 +<p>Shortcut for logging an information message. </p> 51.309 +<dl class="params"><dt>Parameters</dt><dd> 51.310 + <table class="params"> 51.311 + <tr><td class="paramname">logger</td><td>the logger to use </td></tr> 51.312 + <tr><td class="paramname">...</td><td>format string and arguments </td></tr> 51.313 + </table> 51.314 + </dd> 51.315 +</dl> 51.316 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="logging_8h.html#ac337e5d02ebea565012d4c11bd643801" title="Internal log function - use macros instead. ">ucx_logger_logf()</a> </dd></dl> 51.317 + 51.318 +</div> 51.319 +</div> 51.320 +<a id="aee18bc20e58ffb69910121512c350839"></a> 51.321 +<h2 class="memtitle"><span class="permalink"><a href="#aee18bc20e58ffb69910121512c350839">◆ </a></span>UCX_LOGGER_LEVEL</h2> 51.322 + 51.323 +<div class="memitem"> 51.324 +<div class="memproto"> 51.325 + <table class="memname"> 51.326 + <tr> 51.327 + <td class="memname">#define UCX_LOGGER_LEVEL   0x01</td> 51.328 + </tr> 51.329 + </table> 51.330 +</div><div class="memdoc"> 51.331 + 51.332 +<p>Output flag for the log level. </p> 51.333 +<p>If this flag is set, the log message will contain the log level. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="structUcxLogger.html#a1de0db2e02dcf03366268f6943f8b97c" title="A configuration mask for automatic output. ">UcxLogger.mask</a> </dd></dl> 51.334 + 51.335 +</div> 51.336 +</div> 51.337 +<a id="aa0245325031d95799b28def177fd14ec"></a> 51.338 +<h2 class="memtitle"><span class="permalink"><a href="#aa0245325031d95799b28def177fd14ec">◆ </a></span>ucx_logger_log</h2> 51.339 + 51.340 +<div class="memitem"> 51.341 +<div class="memproto"> 51.342 + <table class="memname"> 51.343 + <tr> 51.344 + <td class="memname">#define ucx_logger_log</td> 51.345 + <td>(</td> 51.346 + <td class="paramtype"> </td> 51.347 + <td class="paramname">logger, </td> 51.348 + </tr> 51.349 + <tr> 51.350 + <td class="paramkey"></td> 51.351 + <td></td> 51.352 + <td class="paramtype"> </td> 51.353 + <td class="paramname">level, </td> 51.354 + </tr> 51.355 + <tr> 51.356 + <td class="paramkey"></td> 51.357 + <td></td> 51.358 + <td class="paramtype"> </td> 51.359 + <td class="paramname"><em>...</em> </td> 51.360 + </tr> 51.361 + <tr> 51.362 + <td></td> 51.363 + <td>)</td> 51.364 + <td></td><td>   <a class="el" href="logging_8h.html#ac337e5d02ebea565012d4c11bd643801">ucx_logger_logf</a>(logger, level, __FILE__, __LINE__, __VA_ARGS__)</td> 51.365 + </tr> 51.366 + </table> 51.367 +</div><div class="memdoc"> 51.368 + 51.369 +<p>Logs a message at the specified level. </p> 51.370 +<dl class="params"><dt>Parameters</dt><dd> 51.371 + <table class="params"> 51.372 + <tr><td class="paramname">logger</td><td>the logger to use </td></tr> 51.373 + <tr><td class="paramname">level</td><td>the level to log the message on </td></tr> 51.374 + <tr><td class="paramname">...</td><td>format string and arguments </td></tr> 51.375 + </table> 51.376 + </dd> 51.377 +</dl> 51.378 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="logging_8h.html#ac337e5d02ebea565012d4c11bd643801" title="Internal log function - use macros instead. ">ucx_logger_logf()</a> </dd></dl> 51.379 + 51.380 +</div> 51.381 +</div> 51.382 +<a id="a5cffc19502c4c90bfb3bd3bbcd18170a"></a> 51.383 +<h2 class="memtitle"><span class="permalink"><a href="#a5cffc19502c4c90bfb3bd3bbcd18170a">◆ </a></span>ucx_logger_register_level</h2> 51.384 + 51.385 +<div class="memitem"> 51.386 +<div class="memproto"> 51.387 + <table class="memname"> 51.388 + <tr> 51.389 + <td class="memname">#define ucx_logger_register_level</td> 51.390 + <td>(</td> 51.391 + <td class="paramtype"> </td> 51.392 + <td class="paramname">logger, </td> 51.393 + </tr> 51.394 + <tr> 51.395 + <td class="paramkey"></td> 51.396 + <td></td> 51.397 + <td class="paramtype"> </td> 51.398 + <td class="paramname">level, </td> 51.399 + </tr> 51.400 + <tr> 51.401 + <td class="paramkey"></td> 51.402 + <td></td> 51.403 + <td class="paramtype"> </td> 51.404 + <td class="paramname">name </td> 51.405 + </tr> 51.406 + <tr> 51.407 + <td></td> 51.408 + <td>)</td> 51.409 + <td></td><td></td> 51.410 + </tr> 51.411 + </table> 51.412 +</div><div class="memdoc"> 51.413 +<b>Value:</b><div class="fragment"><div class="line">{\</div><div class="line"> unsigned <span class="keywordtype">int</span> l; \</div><div class="line"> l = level; \</div><div class="line"> ucx_map_int_put(logger->levels, l, (<span class="keywordtype">void</span>*) <span class="stringliteral">"["</span> name <span class="stringliteral">"]"</span>); \</div><div class="line"> } <span class="keywordflow">while</span> (0);</div></div><!-- fragment --> 51.414 +<p>Registers a custom log level. </p> 51.415 +<dl class="params"><dt>Parameters</dt><dd> 51.416 + <table class="params"> 51.417 + <tr><td class="paramname">logger</td><td>the logger </td></tr> 51.418 + <tr><td class="paramname">level</td><td>the log level as unsigned integer </td></tr> 51.419 + <tr><td class="paramname">name</td><td>a string literal describing the level </td></tr> 51.420 + </table> 51.421 + </dd> 51.422 +</dl> 51.423 + 51.424 +</div> 51.425 +</div> 51.426 +<a id="a0e0d72b12616c1e49ff8834eaf4cb8a2"></a> 51.427 +<h2 class="memtitle"><span class="permalink"><a href="#a0e0d72b12616c1e49ff8834eaf4cb8a2">◆ </a></span>UCX_LOGGER_SOURCE</h2> 51.428 + 51.429 +<div class="memitem"> 51.430 +<div class="memproto"> 51.431 + <table class="memname"> 51.432 + <tr> 51.433 + <td class="memname">#define UCX_LOGGER_SOURCE   0x04</td> 51.434 + </tr> 51.435 + </table> 51.436 +</div><div class="memdoc"> 51.437 + 51.438 +<p>Output flag for the source. </p> 51.439 +<p>If this flag is set, the log message will contain the source file and line number. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="structUcxLogger.html#a1de0db2e02dcf03366268f6943f8b97c" title="A configuration mask for automatic output. ">UcxLogger.mask</a> </dd></dl> 51.440 + 51.441 +</div> 51.442 +</div> 51.443 +<a id="a38607008268b4f776ee500fb95d2e823"></a> 51.444 +<h2 class="memtitle"><span class="permalink"><a href="#a38607008268b4f776ee500fb95d2e823">◆ </a></span>UCX_LOGGER_TIMESTAMP</h2> 51.445 + 51.446 +<div class="memitem"> 51.447 +<div class="memproto"> 51.448 + <table class="memname"> 51.449 + <tr> 51.450 + <td class="memname">#define UCX_LOGGER_TIMESTAMP   0x02</td> 51.451 + </tr> 51.452 + </table> 51.453 +</div><div class="memdoc"> 51.454 + 51.455 +<p>Output flag for the timestmap. </p> 51.456 +<p>If this flag is set, the log message will contain the timestmap. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="structUcxLogger.html#a1de0db2e02dcf03366268f6943f8b97c" title="A configuration mask for automatic output. ">UcxLogger.mask</a> </dd></dl> 51.457 + 51.458 +</div> 51.459 +</div> 51.460 +<a id="a55b88d1fec7036d841b3ddd6195c5586"></a> 51.461 +<h2 class="memtitle"><span class="permalink"><a href="#a55b88d1fec7036d841b3ddd6195c5586">◆ </a></span>UCX_LOGGER_TRACE</h2> 51.462 + 51.463 +<div class="memitem"> 51.464 +<div class="memproto"> 51.465 + <table class="memname"> 51.466 + <tr> 51.467 + <td class="memname">#define UCX_LOGGER_TRACE   0x40</td> 51.468 + </tr> 51.469 + </table> 51.470 +</div><div class="memdoc"> 51.471 + 51.472 +<p>Log level for trace messages. </p> 51.473 + 51.474 +</div> 51.475 +</div> 51.476 +<a id="a3031b7ff13f4cfae9c2916543be2877c"></a> 51.477 +<h2 class="memtitle"><span class="permalink"><a href="#a3031b7ff13f4cfae9c2916543be2877c">◆ </a></span>ucx_logger_trace</h2> 51.478 + 51.479 +<div class="memitem"> 51.480 +<div class="memproto"> 51.481 + <table class="memname"> 51.482 + <tr> 51.483 + <td class="memname">#define ucx_logger_trace</td> 51.484 + <td>(</td> 51.485 + <td class="paramtype"> </td> 51.486 + <td class="paramname">logger, </td> 51.487 + </tr> 51.488 + <tr> 51.489 + <td class="paramkey"></td> 51.490 + <td></td> 51.491 + <td class="paramtype"> </td> 51.492 + <td class="paramname"><em>...</em> </td> 51.493 + </tr> 51.494 + <tr> 51.495 + <td></td> 51.496 + <td>)</td> 51.497 + <td></td><td>   <a class="el" href="logging_8h.html#aa0245325031d95799b28def177fd14ec">ucx_logger_log</a>(logger, <a class="el" href="logging_8h.html#a55b88d1fec7036d841b3ddd6195c5586">UCX_LOGGER_TRACE</a>, __VA_ARGS__)</td> 51.498 + </tr> 51.499 + </table> 51.500 +</div><div class="memdoc"> 51.501 + 51.502 +<p>Shortcut for logging a trace message. </p> 51.503 +<dl class="params"><dt>Parameters</dt><dd> 51.504 + <table class="params"> 51.505 + <tr><td class="paramname">logger</td><td>the logger to use </td></tr> 51.506 + <tr><td class="paramname">...</td><td>format string and arguments </td></tr> 51.507 + </table> 51.508 + </dd> 51.509 +</dl> 51.510 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="logging_8h.html#ac337e5d02ebea565012d4c11bd643801" title="Internal log function - use macros instead. ">ucx_logger_logf()</a> </dd></dl> 51.511 + 51.512 +</div> 51.513 +</div> 51.514 +<a id="abd01ca11486226ba34e8f7028d9fffba"></a> 51.515 +<h2 class="memtitle"><span class="permalink"><a href="#abd01ca11486226ba34e8f7028d9fffba">◆ </a></span>UCX_LOGGER_WARN</h2> 51.516 + 51.517 +<div class="memitem"> 51.518 +<div class="memproto"> 51.519 + <table class="memname"> 51.520 + <tr> 51.521 + <td class="memname">#define UCX_LOGGER_WARN   0x10</td> 51.522 + </tr> 51.523 + </table> 51.524 +</div><div class="memdoc"> 51.525 + 51.526 +<p>Log level for warning messages. </p> 51.527 + 51.528 +</div> 51.529 +</div> 51.530 +<a id="aca7bd861b646892813fd7310c0aa69af"></a> 51.531 +<h2 class="memtitle"><span class="permalink"><a href="#aca7bd861b646892813fd7310c0aa69af">◆ </a></span>ucx_logger_warn</h2> 51.532 + 51.533 +<div class="memitem"> 51.534 +<div class="memproto"> 51.535 + <table class="memname"> 51.536 + <tr> 51.537 + <td class="memname">#define ucx_logger_warn</td> 51.538 + <td>(</td> 51.539 + <td class="paramtype"> </td> 51.540 + <td class="paramname">logger, </td> 51.541 + </tr> 51.542 + <tr> 51.543 + <td class="paramkey"></td> 51.544 + <td></td> 51.545 + <td class="paramtype"> </td> 51.546 + <td class="paramname"><em>...</em> </td> 51.547 + </tr> 51.548 + <tr> 51.549 + <td></td> 51.550 + <td>)</td> 51.551 + <td></td><td>   <a class="el" href="logging_8h.html#aa0245325031d95799b28def177fd14ec">ucx_logger_log</a>(logger, <a class="el" href="logging_8h.html#abd01ca11486226ba34e8f7028d9fffba">UCX_LOGGER_WARN</a>, __VA_ARGS__)</td> 51.552 + </tr> 51.553 + </table> 51.554 +</div><div class="memdoc"> 51.555 + 51.556 +<p>Shortcut for logging a warning message. </p> 51.557 +<dl class="params"><dt>Parameters</dt><dd> 51.558 + <table class="params"> 51.559 + <tr><td class="paramname">logger</td><td>the logger to use </td></tr> 51.560 + <tr><td class="paramname">...</td><td>format string and arguments </td></tr> 51.561 + </table> 51.562 + </dd> 51.563 +</dl> 51.564 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="logging_8h.html#ac337e5d02ebea565012d4c11bd643801" title="Internal log function - use macros instead. ">ucx_logger_logf()</a> </dd></dl> 51.565 + 51.566 +</div> 51.567 +</div> 51.568 +<h2 class="groupheader">Function Documentation</h2> 51.569 +<a id="ac4697b784e01ec990d2acea192e21658"></a> 51.570 +<h2 class="memtitle"><span class="permalink"><a href="#ac4697b784e01ec990d2acea192e21658">◆ </a></span>ucx_logger_free()</h2> 51.571 + 51.572 +<div class="memitem"> 51.573 +<div class="memproto"> 51.574 + <table class="memname"> 51.575 + <tr> 51.576 + <td class="memname">void ucx_logger_free </td> 51.577 + <td>(</td> 51.578 + <td class="paramtype"><a class="el" href="structUcxLogger.html">UcxLogger</a> * </td> 51.579 + <td class="paramname"><em>logger</em></td><td>)</td> 51.580 + <td></td> 51.581 + </tr> 51.582 + </table> 51.583 +</div><div class="memdoc"> 51.584 + 51.585 +<p>Destroys the logger. </p> 51.586 +<p>The map containing the valid log levels is also automatically destroyed.</p> 51.587 +<dl class="params"><dt>Parameters</dt><dd> 51.588 + <table class="params"> 51.589 + <tr><td class="paramname">logger</td><td>the logger to destroy </td></tr> 51.590 + </table> 51.591 + </dd> 51.592 +</dl> 51.593 + 51.594 +</div> 51.595 +</div> 51.596 +<a id="ac337e5d02ebea565012d4c11bd643801"></a> 51.597 +<h2 class="memtitle"><span class="permalink"><a href="#ac337e5d02ebea565012d4c11bd643801">◆ </a></span>ucx_logger_logf()</h2> 51.598 + 51.599 +<div class="memitem"> 51.600 +<div class="memproto"> 51.601 + <table class="memname"> 51.602 + <tr> 51.603 + <td class="memname">void ucx_logger_logf </td> 51.604 + <td>(</td> 51.605 + <td class="paramtype"><a class="el" href="structUcxLogger.html">UcxLogger</a> * </td> 51.606 + <td class="paramname"><em>logger</em>, </td> 51.607 + </tr> 51.608 + <tr> 51.609 + <td class="paramkey"></td> 51.610 + <td></td> 51.611 + <td class="paramtype">unsigned int </td> 51.612 + <td class="paramname"><em>level</em>, </td> 51.613 + </tr> 51.614 + <tr> 51.615 + <td class="paramkey"></td> 51.616 + <td></td> 51.617 + <td class="paramtype">const char * </td> 51.618 + <td class="paramname"><em>file</em>, </td> 51.619 + </tr> 51.620 + <tr> 51.621 + <td class="paramkey"></td> 51.622 + <td></td> 51.623 + <td class="paramtype">const unsigned int </td> 51.624 + <td class="paramname"><em>line</em>, </td> 51.625 + </tr> 51.626 + <tr> 51.627 + <td class="paramkey"></td> 51.628 + <td></td> 51.629 + <td class="paramtype">const char * </td> 51.630 + <td class="paramname"><em>format</em>, </td> 51.631 + </tr> 51.632 + <tr> 51.633 + <td class="paramkey"></td> 51.634 + <td></td> 51.635 + <td class="paramtype"> </td> 51.636 + <td class="paramname"><em>...</em> </td> 51.637 + </tr> 51.638 + <tr> 51.639 + <td></td> 51.640 + <td>)</td> 51.641 + <td></td><td></td> 51.642 + </tr> 51.643 + </table> 51.644 +</div><div class="memdoc"> 51.645 + 51.646 +<p>Internal log function - use macros instead. </p> 51.647 +<p>This function uses the <code>format</code> and variadic arguments for a printf()-style output of the log message.</p> 51.648 +<p>Dependent on the <a class="el" href="structUcxLogger.html#a1de0db2e02dcf03366268f6943f8b97c" title="A configuration mask for automatic output. ">UcxLogger.mask</a> some information is prepended. The complete format is:</p> 51.649 +<p><code>[LEVEL] [TIMESTAMP] [SOURCEFILE]:[LINENO] message</code></p> 51.650 +<p><b>Attention:</b> 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.</p> 51.651 +<dl class="params"><dt>Parameters</dt><dd> 51.652 + <table class="params"> 51.653 + <tr><td class="paramname">logger</td><td>the logger to use </td></tr> 51.654 + <tr><td class="paramname">level</td><td>the level to log on </td></tr> 51.655 + <tr><td class="paramname">file</td><td>information about the source file </td></tr> 51.656 + <tr><td class="paramname">line</td><td>information about the source line number </td></tr> 51.657 + <tr><td class="paramname">format</td><td>format string </td></tr> 51.658 + <tr><td class="paramname">...</td><td>arguments </td></tr> 51.659 + </table> 51.660 + </dd> 51.661 +</dl> 51.662 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="logging_8h.html#aa0245325031d95799b28def177fd14ec" title="Logs a message at the specified level. ">ucx_logger_log()</a> </dd></dl> 51.663 + 51.664 +</div> 51.665 +</div> 51.666 +<a id="ac560f8517d2172794c9d2691735ec48c"></a> 51.667 +<h2 class="memtitle"><span class="permalink"><a href="#ac560f8517d2172794c9d2691735ec48c">◆ </a></span>ucx_logger_new()</h2> 51.668 + 51.669 +<div class="memitem"> 51.670 +<div class="memproto"> 51.671 + <table class="memname"> 51.672 + <tr> 51.673 + <td class="memname"><a class="el" href="structUcxLogger.html">UcxLogger</a>* ucx_logger_new </td> 51.674 + <td>(</td> 51.675 + <td class="paramtype">void * </td> 51.676 + <td class="paramname"><em>stream</em>, </td> 51.677 + </tr> 51.678 + <tr> 51.679 + <td class="paramkey"></td> 51.680 + <td></td> 51.681 + <td class="paramtype">unsigned int </td> 51.682 + <td class="paramname"><em>level</em>, </td> 51.683 + </tr> 51.684 + <tr> 51.685 + <td class="paramkey"></td> 51.686 + <td></td> 51.687 + <td class="paramtype">unsigned int </td> 51.688 + <td class="paramname"><em>mask</em> </td> 51.689 + </tr> 51.690 + <tr> 51.691 + <td></td> 51.692 + <td>)</td> 51.693 + <td></td><td></td> 51.694 + </tr> 51.695 + </table> 51.696 +</div><div class="memdoc"> 51.697 + 51.698 +<p>Creates a new logger. </p> 51.699 +<dl class="params"><dt>Parameters</dt><dd> 51.700 + <table class="params"> 51.701 + <tr><td class="paramname">stream</td><td>the stream, which the logger shall write to </td></tr> 51.702 + <tr><td class="paramname">level</td><td>the level on which the logger shall operate </td></tr> 51.703 + <tr><td class="paramname">mask</td><td>configuration mask (cf. <a class="el" href="structUcxLogger.html#a1de0db2e02dcf03366268f6943f8b97c" title="A configuration mask for automatic output. ">UcxLogger.mask</a>) </td></tr> 51.704 + </table> 51.705 + </dd> 51.706 +</dl> 51.707 +<dl class="section return"><dt>Returns</dt><dd>a new logger object </dd></dl> 51.708 + 51.709 +</div> 51.710 +</div> 51.711 +</div><!-- contents --> 51.712 +<!-- start footer part --> 51.713 +<hr class="footer"/><address class="footer"><small> 51.714 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 51.715 +<img class="footer" src="doxygen.png" alt="doxygen"/> 51.716 +</a> 1.8.13 51.717 +</small></address> 51.718 +</body> 51.719 +</html>
52.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 52.2 +++ b/docs/api-2.1/logging_8h_source.html Sat Feb 06 19:11:44 2021 +0100 52.3 @@ -0,0 +1,94 @@ 52.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 52.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 52.6 +<head> 52.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 52.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 52.9 +<meta name="generator" content="Doxygen 1.8.13"/> 52.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 52.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/logging.h Source File</title> 52.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 52.13 +<script type="text/javascript" src="jquery.js"></script> 52.14 +<script type="text/javascript" src="dynsections.js"></script> 52.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 52.16 +<script type="text/javascript" src="search/searchdata.js"></script> 52.17 +<script type="text/javascript" src="search/search.js"></script> 52.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 52.19 +</head> 52.20 +<body> 52.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 52.22 +<div id="titlearea"> 52.23 +<table cellspacing="0" cellpadding="0"> 52.24 + <tbody> 52.25 + <tr style="height: 56px;"> 52.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 52.27 + <td id="projectalign" style="padding-left: 0.5em;"> 52.28 + <div id="projectname">ucx 52.29 + </div> 52.30 + <div id="projectbrief">UAP Common Extensions</div> 52.31 + </td> 52.32 + </tr> 52.33 + </tbody> 52.34 +</table> 52.35 +</div> 52.36 +<!-- end header part --> 52.37 +<!-- Generated by Doxygen 1.8.13 --> 52.38 +<script type="text/javascript"> 52.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 52.40 +</script> 52.41 +<script type="text/javascript" src="menudata.js"></script> 52.42 +<script type="text/javascript" src="menu.js"></script> 52.43 +<script type="text/javascript"> 52.44 +$(function() { 52.45 + initMenu('',true,false,'search.php','Search'); 52.46 + $(document).ready(function() { init_search(); }); 52.47 +}); 52.48 +</script> 52.49 +<div id="main-nav"></div> 52.50 +<!-- window showing the filter options --> 52.51 +<div id="MSearchSelectWindow" 52.52 + onmouseover="return searchBox.OnSearchSelectShow()" 52.53 + onmouseout="return searchBox.OnSearchSelectHide()" 52.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 52.55 +</div> 52.56 + 52.57 +<!-- iframe showing the search results (closed by default) --> 52.58 +<div id="MSearchResultsWindow"> 52.59 +<iframe src="javascript:void(0)" frameborder="0" 52.60 + name="MSearchResults" id="MSearchResults"> 52.61 +</iframe> 52.62 +</div> 52.63 + 52.64 +<div id="nav-path" class="navpath"> 52.65 + <ul> 52.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 52.67 +</div> 52.68 +</div><!-- top --> 52.69 +<div class="header"> 52.70 + <div class="headertitle"> 52.71 +<div class="title">logging.h</div> </div> 52.72 +</div><!--header--> 52.73 +<div class="contents"> 52.74 +<a href="logging_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are met:</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * documentation and/or other materials provided with the distribution.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#ifndef UCX_LOGGING_H</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#define UCX_LOGGING_H</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#include "<a class="code" href="ucx_8h.html">ucx.h</a>"</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#include "<a class="code" href="map_8h.html">map.h</a>"</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#include "<a class="code" href="string_8h.html">string.h</a>"</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include <stdio.h></span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> </div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="comment">/* leave enough space for custom log levels */</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="logging_8h.html#aa254c07fe3a907613e2256a318d5c9a8"> 49</a></span> <span class="preprocessor">#define UCX_LOGGER_ERROR 0x00</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  </div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="logging_8h.html#abd01ca11486226ba34e8f7028d9fffba"> 52</a></span> <span class="preprocessor">#define UCX_LOGGER_WARN 0x10</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="logging_8h.html#a4b0178bf60a6129373ffc59114ca4c9b"> 55</a></span> <span class="preprocessor">#define UCX_LOGGER_INFO 0x20</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="logging_8h.html#acff01d1ef919ea997cfce755fc1b83d8"> 58</a></span> <span class="preprocessor">#define UCX_LOGGER_DEBUG 0x30</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="logging_8h.html#a55b88d1fec7036d841b3ddd6195c5586"> 61</a></span> <span class="preprocessor">#define UCX_LOGGER_TRACE 0x40</span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="logging_8h.html#aee18bc20e58ffb69910121512c350839"> 68</a></span> <span class="preprocessor">#define UCX_LOGGER_LEVEL 0x01</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="logging_8h.html#a38607008268b4f776ee500fb95d2e823"> 75</a></span> <span class="preprocessor">#define UCX_LOGGER_TIMESTAMP 0x02</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="logging_8h.html#a0e0d72b12616c1e49ff8834eaf4cb8a2"> 83</a></span> <span class="preprocessor">#define UCX_LOGGER_SOURCE 0x04</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="structUcxLogger.html"> 88</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="structUcxLogger.html#a33fddf4791e8d49e479ecc78bf5d1b9e"> 90</a></span>  <span class="keywordtype">void</span> *<a class="code" href="structUcxLogger.html#a33fddf4791e8d49e479ecc78bf5d1b9e">stream</a>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="structUcxLogger.html#ada13bba090a9dc4f8d6cd9be73c60930"> 97</a></span>  <a class="code" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a> <a class="code" href="structUcxLogger.html#ada13bba090a9dc4f8d6cd9be73c60930">writer</a>;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="structUcxLogger.html#a086f75df0f6c81ec491f25c0a4d9262b"> 104</a></span>  <span class="keywordtype">char</span> *<a class="code" href="structUcxLogger.html#a086f75df0f6c81ec491f25c0a4d9262b">dateformat</a>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="structUcxLogger.html#a2e0ee94c25b2307096c7970280d189cd"> 111</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structUcxLogger.html#a2e0ee94c25b2307096c7970280d189cd">level</a>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="structUcxLogger.html#a1de0db2e02dcf03366268f6943f8b97c"> 119</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structUcxLogger.html#a1de0db2e02dcf03366268f6943f8b97c">mask</a>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="structUcxLogger.html#a187129f7bc6e5064b3d92a5f1217f396"> 132</a></span>  <a class="code" href="structUcxMap.html">UcxMap</a>* <a class="code" href="structUcxLogger.html#a187129f7bc6e5064b3d92a5f1217f396">levels</a>;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> } <a class="code" href="structUcxLogger.html">UcxLogger</a>;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <a class="code" href="structUcxLogger.html">UcxLogger</a> *<a class="code" href="logging_8h.html#ac560f8517d2172794c9d2691735ec48c">ucx_logger_new</a>(<span class="keywordtype">void</span> *stream, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> level, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mask);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordtype">void</span> <a class="code" href="logging_8h.html#ac4697b784e01ec990d2acea192e21658">ucx_logger_free</a>(<a class="code" href="structUcxLogger.html">UcxLogger</a>* logger);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> <span class="keywordtype">void</span> <a class="code" href="logging_8h.html#ac337e5d02ebea565012d4c11bd643801">ucx_logger_logf</a>(<a class="code" href="structUcxLogger.html">UcxLogger</a> *logger, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> level, <span class="keyword">const</span> <span class="keywordtype">char</span>* file,</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> line, <span class="keyword">const</span> <span class="keywordtype">char</span>* format, ...);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div><div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="logging_8h.html#a5cffc19502c4c90bfb3bd3bbcd18170a"> 185</a></span> <span class="preprocessor">#define ucx_logger_register_level(logger, level, name) {\</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="preprocessor"> unsigned int l; \</span></div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> <span class="preprocessor"> l = level; \</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor"> ucx_map_int_put(logger->levels, l, (void*) "[" name "]"); \</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="preprocessor"> } while (0);</span></div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> </div><div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="logging_8h.html#aa0245325031d95799b28def177fd14ec"> 198</a></span> <span class="preprocessor">#define ucx_logger_log(logger, level, ...) \</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor"> ucx_logger_logf(logger, level, __FILE__, __LINE__, __VA_ARGS__)</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="logging_8h.html#a6a9e472e14d6768e59d96d245e065397"> 207</a></span> <span class="preprocessor">#define ucx_logger_error(logger, ...) \</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor"> ucx_logger_log(logger, UCX_LOGGER_ERROR, __VA_ARGS__)</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="logging_8h.html#a98464d8d51376ce2716dcc4eca00d5da"> 216</a></span> <span class="preprocessor">#define ucx_logger_info(logger, ...) \</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor"> ucx_logger_log(logger, UCX_LOGGER_INFO, __VA_ARGS__)</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="logging_8h.html#aca7bd861b646892813fd7310c0aa69af"> 225</a></span> <span class="preprocessor">#define ucx_logger_warn(logger, ...) \</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <span class="preprocessor"> ucx_logger_log(logger, UCX_LOGGER_WARN, __VA_ARGS__)</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div><div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="logging_8h.html#a2936402799892db5138e5f1f8c25db0c"> 234</a></span> <span class="preprocessor">#define ucx_logger_debug(logger, ...) \</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="preprocessor"> ucx_logger_log(logger, UCX_LOGGER_DEBUG, __VA_ARGS__)</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div><div class="line"><a name="l00243"></a><span class="lineno"><a class="line" href="logging_8h.html#a3031b7ff13f4cfae9c2916543be2877c"> 243</a></span> <span class="preprocessor">#define ucx_logger_trace(logger, ...) \</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> <span class="preprocessor"> ucx_logger_log(logger, UCX_LOGGER_TRACE, __VA_ARGS__)</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_LOGGING_H */</span><span class="preprocessor"></span></div><div class="ttc" id="structUcxLogger_html_ada13bba090a9dc4f8d6cd9be73c60930"><div class="ttname"><a href="structUcxLogger.html#ada13bba090a9dc4f8d6cd9be73c60930">UcxLogger::writer</a></div><div class="ttdeci">write_func writer</div><div class="ttdoc">The write function that shall be used. </div><div class="ttdef"><b>Definition:</b> logging.h:97</div></div> 52.75 +<div class="ttc" id="string_8h_html"><div class="ttname"><a href="string_8h.html">string.h</a></div><div class="ttdoc">Bounded string implementation. </div></div> 52.76 +<div class="ttc" id="ucx_8h_html"><div class="ttname"><a href="ucx_8h.html">ucx.h</a></div><div class="ttdoc">Main UCX Header providing most common definitions. </div></div> 52.77 +<div class="ttc" id="structUcxLogger_html"><div class="ttname"><a href="structUcxLogger.html">UcxLogger</a></div><div class="ttdoc">The UCX Logger object. </div><div class="ttdef"><b>Definition:</b> logging.h:88</div></div> 52.78 +<div class="ttc" id="structUcxLogger_html_a086f75df0f6c81ec491f25c0a4d9262b"><div class="ttname"><a href="structUcxLogger.html#a086f75df0f6c81ec491f25c0a4d9262b">UcxLogger::dateformat</a></div><div class="ttdeci">char * dateformat</div><div class="ttdoc">The date format for timestamp outputs including the delimiter (default: "%F %T %z ")...</div><div class="ttdef"><b>Definition:</b> logging.h:104</div></div> 52.79 +<div class="ttc" id="structUcxLogger_html_a1de0db2e02dcf03366268f6943f8b97c"><div class="ttname"><a href="structUcxLogger.html#a1de0db2e02dcf03366268f6943f8b97c">UcxLogger::mask</a></div><div class="ttdeci">unsigned int mask</div><div class="ttdoc">A configuration mask for automatic output. </div><div class="ttdef"><b>Definition:</b> logging.h:119</div></div> 52.80 +<div class="ttc" id="logging_8h_html_ac560f8517d2172794c9d2691735ec48c"><div class="ttname"><a href="logging_8h.html#ac560f8517d2172794c9d2691735ec48c">ucx_logger_new</a></div><div class="ttdeci">UcxLogger * ucx_logger_new(void *stream, unsigned int level, unsigned int mask)</div><div class="ttdoc">Creates a new logger. </div><div class="ttdef"><b>Definition:</b> logging.c:36</div></div> 52.81 +<div class="ttc" id="structUcxLogger_html_a33fddf4791e8d49e479ecc78bf5d1b9e"><div class="ttname"><a href="structUcxLogger.html#a33fddf4791e8d49e479ecc78bf5d1b9e">UcxLogger::stream</a></div><div class="ttdeci">void * stream</div><div class="ttdoc">The stream this logger writes its messages to. </div><div class="ttdef"><b>Definition:</b> logging.h:90</div></div> 52.82 +<div class="ttc" id="structUcxMap_html"><div class="ttname"><a href="structUcxMap.html">UcxMap</a></div><div class="ttdoc">Structure for the UCX map. </div><div class="ttdef"><b>Definition:</b> map.h:81</div></div> 52.83 +<div class="ttc" id="map_8h_html"><div class="ttname"><a href="map_8h.html">map.h</a></div><div class="ttdoc">Hash map implementation. </div></div> 52.84 +<div class="ttc" id="ucx_8h_html_a989b3f0fa4d307d278378fde435641ed"><div class="ttname"><a href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a></div><div class="ttdeci">size_t(* write_func)(const void *, size_t, size_t, void *)</div><div class="ttdoc">Function pointer to a write function. </div><div class="ttdef"><b>Definition:</b> ucx.h:119</div></div> 52.85 +<div class="ttc" id="structUcxLogger_html_a187129f7bc6e5064b3d92a5f1217f396"><div class="ttname"><a href="structUcxLogger.html#a187129f7bc6e5064b3d92a5f1217f396">UcxLogger::levels</a></div><div class="ttdeci">UcxMap * levels</div><div class="ttdoc">A map of valid log levels for this logger. </div><div class="ttdef"><b>Definition:</b> logging.h:132</div></div> 52.86 +<div class="ttc" id="structUcxLogger_html_a2e0ee94c25b2307096c7970280d189cd"><div class="ttname"><a href="structUcxLogger.html#a2e0ee94c25b2307096c7970280d189cd">UcxLogger::level</a></div><div class="ttdeci">unsigned int level</div><div class="ttdoc">The level, this logger operates on. </div><div class="ttdef"><b>Definition:</b> logging.h:111</div></div> 52.87 +<div class="ttc" id="logging_8h_html_ac337e5d02ebea565012d4c11bd643801"><div class="ttname"><a href="logging_8h.html#ac337e5d02ebea565012d4c11bd643801">ucx_logger_logf</a></div><div class="ttdeci">void ucx_logger_logf(UcxLogger *logger, unsigned int level, const char *file, const unsigned int line, const char *format,...)</div><div class="ttdoc">Internal log function - use macros instead. </div><div class="ttdef"><b>Definition:</b> logging.c:70</div></div> 52.88 +<div class="ttc" id="logging_8h_html_ac4697b784e01ec990d2acea192e21658"><div class="ttname"><a href="logging_8h.html#ac4697b784e01ec990d2acea192e21658">ucx_logger_free</a></div><div class="ttdeci">void ucx_logger_free(UcxLogger *logger)</div><div class="ttdoc">Destroys the logger. </div><div class="ttdef"><b>Definition:</b> logging.c:62</div></div> 52.89 +</div><!-- fragment --></div><!-- contents --> 52.90 +<!-- start footer part --> 52.91 +<hr class="footer"/><address class="footer"><small> 52.92 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 52.93 +<img class="footer" src="doxygen.png" alt="doxygen"/> 52.94 +</a> 1.8.13 52.95 +</small></address> 52.96 +</body> 52.97 +</html>
53.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 53.2 +++ b/docs/api-2.1/map_8h.html Sat Feb 06 19:11:44 2021 +0100 53.3 @@ -0,0 +1,1689 @@ 53.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 53.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 53.6 +<head> 53.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 53.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 53.9 +<meta name="generator" content="Doxygen 1.8.13"/> 53.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 53.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/map.h File Reference</title> 53.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 53.13 +<script type="text/javascript" src="jquery.js"></script> 53.14 +<script type="text/javascript" src="dynsections.js"></script> 53.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 53.16 +<script type="text/javascript" src="search/searchdata.js"></script> 53.17 +<script type="text/javascript" src="search/search.js"></script> 53.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 53.19 +</head> 53.20 +<body> 53.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 53.22 +<div id="titlearea"> 53.23 +<table cellspacing="0" cellpadding="0"> 53.24 + <tbody> 53.25 + <tr style="height: 56px;"> 53.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 53.27 + <td id="projectalign" style="padding-left: 0.5em;"> 53.28 + <div id="projectname">ucx 53.29 + </div> 53.30 + <div id="projectbrief">UAP Common Extensions</div> 53.31 + </td> 53.32 + </tr> 53.33 + </tbody> 53.34 +</table> 53.35 +</div> 53.36 +<!-- end header part --> 53.37 +<!-- Generated by Doxygen 1.8.13 --> 53.38 +<script type="text/javascript"> 53.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 53.40 +</script> 53.41 +<script type="text/javascript" src="menudata.js"></script> 53.42 +<script type="text/javascript" src="menu.js"></script> 53.43 +<script type="text/javascript"> 53.44 +$(function() { 53.45 + initMenu('',true,false,'search.php','Search'); 53.46 + $(document).ready(function() { init_search(); }); 53.47 +}); 53.48 +</script> 53.49 +<div id="main-nav"></div> 53.50 +<!-- window showing the filter options --> 53.51 +<div id="MSearchSelectWindow" 53.52 + onmouseover="return searchBox.OnSearchSelectShow()" 53.53 + onmouseout="return searchBox.OnSearchSelectHide()" 53.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 53.55 +</div> 53.56 + 53.57 +<!-- iframe showing the search results (closed by default) --> 53.58 +<div id="MSearchResultsWindow"> 53.59 +<iframe src="javascript:void(0)" frameborder="0" 53.60 + name="MSearchResults" id="MSearchResults"> 53.61 +</iframe> 53.62 +</div> 53.63 + 53.64 +<div id="nav-path" class="navpath"> 53.65 + <ul> 53.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 53.67 +</div> 53.68 +</div><!-- top --> 53.69 +<div class="header"> 53.70 + <div class="summary"> 53.71 +<a href="#nested-classes">Data Structures</a> | 53.72 +<a href="#define-members">Macros</a> | 53.73 +<a href="#typedef-members">Typedefs</a> | 53.74 +<a href="#func-members">Functions</a> </div> 53.75 + <div class="headertitle"> 53.76 +<div class="title">map.h File Reference</div> </div> 53.77 +</div><!--header--> 53.78 +<div class="contents"> 53.79 + 53.80 +<p>Hash map implementation. 53.81 +<a href="#details">More...</a></p> 53.82 +<div class="textblock"><code>#include "<a class="el" href="ucx_8h_source.html">ucx.h</a>"</code><br /> 53.83 +<code>#include "<a class="el" href="string_8h_source.html">string.h</a>"</code><br /> 53.84 +<code>#include "<a class="el" href="allocator_8h_source.html">allocator.h</a>"</code><br /> 53.85 +<code>#include <stdio.h></code><br /> 53.86 +</div> 53.87 +<p><a href="map_8h_source.html">Go to the source code of this file.</a></p> 53.88 +<table class="memberdecls"> 53.89 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> 53.90 +Data Structures</h2></td></tr> 53.91 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMap.html">UcxMap</a></td></tr> 53.92 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for the UCX map. <a href="structUcxMap.html#details">More...</a><br /></td></tr> 53.93 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 53.94 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxKey.html">UcxKey</a></td></tr> 53.95 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure to publicly denote a key of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. <a href="structUcxKey.html#details">More...</a><br /></td></tr> 53.96 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 53.97 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMapKey.html">UcxMapKey</a></td></tr> 53.98 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Internal structure for a key of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. <a href="structUcxMapKey.html#details">More...</a><br /></td></tr> 53.99 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 53.100 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMapElement.html">UcxMapElement</a></td></tr> 53.101 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for an element of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. <a href="structUcxMapElement.html#details">More...</a><br /></td></tr> 53.102 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 53.103 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMapIterator.html">UcxMapIterator</a></td></tr> 53.104 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for an iterator over a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. <a href="structUcxMapIterator.html#details">More...</a><br /></td></tr> 53.105 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 53.106 +</table><table class="memberdecls"> 53.107 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> 53.108 +Macros</h2></td></tr> 53.109 +<tr class="memitem:a940896c4aa1b13e54c55c04c3efc186b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a940896c4aa1b13e54c55c04c3efc186b">UCX_MAP_FOREACH</a>(key, value, iter)   for(<a class="el" href="structUcxKey.html">UcxKey</a> key;<a class="el" href="map_8h.html#aceb8675abf44860b4bbc301bbada5b91">ucx_map_iter_next</a>(&iter,&key, (void**)&value);)</td></tr> 53.110 +<tr class="memdesc:a940896c4aa1b13e54c55c04c3efc186b"><td class="mdescLeft"> </td><td class="mdescRight">Loop statement for UCX maps. <a href="#a940896c4aa1b13e54c55c04c3efc186b">More...</a><br /></td></tr> 53.111 +<tr class="separator:a940896c4aa1b13e54c55c04c3efc186b"><td class="memSeparator" colspan="2"> </td></tr> 53.112 +<tr class="memitem:ac26a8615bfc8f47ee9eaceb47645f98e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#ac26a8615bfc8f47ee9eaceb47645f98e">ucx_map_sstr_put</a>(map, key, value)   <a class="el" href="map_8h.html#ac04a08b604217070254d4c58f0e82498">ucx_map_put</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(key.ptr, key.length), (void*)value)</td></tr> 53.113 +<tr class="memdesc:ac26a8615bfc8f47ee9eaceb47645f98e"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for putting data with a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> key into the map. <a href="#ac26a8615bfc8f47ee9eaceb47645f98e">More...</a><br /></td></tr> 53.114 +<tr class="separator:ac26a8615bfc8f47ee9eaceb47645f98e"><td class="memSeparator" colspan="2"> </td></tr> 53.115 +<tr class="memitem:ad9356b01425b934ab237b52339ac0cc3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#ad9356b01425b934ab237b52339ac0cc3">ucx_map_cstr_put</a>(map, key, value)   <a class="el" href="map_8h.html#ac04a08b604217070254d4c58f0e82498">ucx_map_put</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(key, strlen(key)), (void*)value)</td></tr> 53.116 +<tr class="memdesc:ad9356b01425b934ab237b52339ac0cc3"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for putting data with a C string key into the map. <a href="#ad9356b01425b934ab237b52339ac0cc3">More...</a><br /></td></tr> 53.117 +<tr class="separator:ad9356b01425b934ab237b52339ac0cc3"><td class="memSeparator" colspan="2"> </td></tr> 53.118 +<tr class="memitem:aaa30af79b4068c923895619e83f44367"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#aaa30af79b4068c923895619e83f44367">ucx_map_int_put</a>(map, key, value)   <a class="el" href="map_8h.html#ac04a08b604217070254d4c58f0e82498">ucx_map_put</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(&key, sizeof(key)), (void*)value)</td></tr> 53.119 +<tr class="memdesc:aaa30af79b4068c923895619e83f44367"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for putting data with an integer key into the map. <a href="#aaa30af79b4068c923895619e83f44367">More...</a><br /></td></tr> 53.120 +<tr class="separator:aaa30af79b4068c923895619e83f44367"><td class="memSeparator" colspan="2"> </td></tr> 53.121 +<tr class="memitem:a14d385f6b7f371f0507861cabd2eab4e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a14d385f6b7f371f0507861cabd2eab4e">ucx_map_sstr_get</a>(map, key)   <a class="el" href="map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6">ucx_map_get</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(key.ptr, key.length))</td></tr> 53.122 +<tr class="memdesc:a14d385f6b7f371f0507861cabd2eab4e"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for getting data from the map with a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> key. <a href="#a14d385f6b7f371f0507861cabd2eab4e">More...</a><br /></td></tr> 53.123 +<tr class="separator:a14d385f6b7f371f0507861cabd2eab4e"><td class="memSeparator" colspan="2"> </td></tr> 53.124 +<tr class="memitem:a64e1fb55498fa502dd2ed8ed69062cdd"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a64e1fb55498fa502dd2ed8ed69062cdd">ucx_map_cstr_get</a>(map, key)   <a class="el" href="map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6">ucx_map_get</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(key, strlen(key)))</td></tr> 53.125 +<tr class="memdesc:a64e1fb55498fa502dd2ed8ed69062cdd"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for getting data from the map with a C string key. <a href="#a64e1fb55498fa502dd2ed8ed69062cdd">More...</a><br /></td></tr> 53.126 +<tr class="separator:a64e1fb55498fa502dd2ed8ed69062cdd"><td class="memSeparator" colspan="2"> </td></tr> 53.127 +<tr class="memitem:aa1681bd2178553cd092fd24c4d681d3c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#aa1681bd2178553cd092fd24c4d681d3c">ucx_map_int_get</a>(map, key)   <a class="el" href="map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6">ucx_map_get</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(&key, sizeof(int)))</td></tr> 53.128 +<tr class="memdesc:aa1681bd2178553cd092fd24c4d681d3c"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for getting data from the map with an integer key. <a href="#aa1681bd2178553cd092fd24c4d681d3c">More...</a><br /></td></tr> 53.129 +<tr class="separator:aa1681bd2178553cd092fd24c4d681d3c"><td class="memSeparator" colspan="2"> </td></tr> 53.130 +<tr class="memitem:a48700ea86fadb9ea54d13010f9124df2"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a48700ea86fadb9ea54d13010f9124df2">ucx_map_sstr_remove</a>(map, key)   <a class="el" href="map_8h.html#a17248a4888eb8f9ae18be522d64632aa">ucx_map_remove</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(key.ptr, key.length))</td></tr> 53.131 +<tr class="memdesc:a48700ea86fadb9ea54d13010f9124df2"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for removing data from the map with a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> key. <a href="#a48700ea86fadb9ea54d13010f9124df2">More...</a><br /></td></tr> 53.132 +<tr class="separator:a48700ea86fadb9ea54d13010f9124df2"><td class="memSeparator" colspan="2"> </td></tr> 53.133 +<tr class="memitem:a9c4405a5a75ecf64e2ef3d0c6501a9fe"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a9c4405a5a75ecf64e2ef3d0c6501a9fe">ucx_map_cstr_remove</a>(map, key)   <a class="el" href="map_8h.html#a17248a4888eb8f9ae18be522d64632aa">ucx_map_remove</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(key, strlen(key)))</td></tr> 53.134 +<tr class="memdesc:a9c4405a5a75ecf64e2ef3d0c6501a9fe"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for removing data from the map with a C string key. <a href="#a9c4405a5a75ecf64e2ef3d0c6501a9fe">More...</a><br /></td></tr> 53.135 +<tr class="separator:a9c4405a5a75ecf64e2ef3d0c6501a9fe"><td class="memSeparator" colspan="2"> </td></tr> 53.136 +<tr class="memitem:aa767958b5468737755c09f7185b1770c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#aa767958b5468737755c09f7185b1770c">ucx_map_int_remove</a>(map, key)   <a class="el" href="map_8h.html#a17248a4888eb8f9ae18be522d64632aa">ucx_map_remove</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(&key, sizeof(key)))</td></tr> 53.137 +<tr class="memdesc:aa767958b5468737755c09f7185b1770c"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for removing data from the map with an integer key. <a href="#aa767958b5468737755c09f7185b1770c">More...</a><br /></td></tr> 53.138 +<tr class="separator:aa767958b5468737755c09f7185b1770c"><td class="memSeparator" colspan="2"> </td></tr> 53.139 +</table><table class="memberdecls"> 53.140 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> 53.141 +Typedefs</h2></td></tr> 53.142 +<tr class="memitem:a18e21948725b2da68c35da587a722033"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structUcxMap.html">UcxMap</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a18e21948725b2da68c35da587a722033">UcxMap</a></td></tr> 53.143 +<tr class="memdesc:a18e21948725b2da68c35da587a722033"><td class="mdescLeft"> </td><td class="mdescRight">Type for the UCX map. <a href="#a18e21948725b2da68c35da587a722033">More...</a><br /></td></tr> 53.144 +<tr class="separator:a18e21948725b2da68c35da587a722033"><td class="memSeparator" colspan="2"> </td></tr> 53.145 +<tr class="memitem:ad63828bb23123fc01a5315a2bac3b142"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structUcxKey.html">UcxKey</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#ad63828bb23123fc01a5315a2bac3b142">UcxKey</a></td></tr> 53.146 +<tr class="memdesc:ad63828bb23123fc01a5315a2bac3b142"><td class="mdescLeft"> </td><td class="mdescRight">Type for a key of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. <a href="#ad63828bb23123fc01a5315a2bac3b142">More...</a><br /></td></tr> 53.147 +<tr class="separator:ad63828bb23123fc01a5315a2bac3b142"><td class="memSeparator" colspan="2"> </td></tr> 53.148 +<tr class="memitem:ad7d7a910a32113eb93eae11c3dc97b4b"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structUcxMapElement.html">UcxMapElement</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#ad7d7a910a32113eb93eae11c3dc97b4b">UcxMapElement</a></td></tr> 53.149 +<tr class="memdesc:ad7d7a910a32113eb93eae11c3dc97b4b"><td class="mdescLeft"> </td><td class="mdescRight">Type for an element of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. <a href="#ad7d7a910a32113eb93eae11c3dc97b4b">More...</a><br /></td></tr> 53.150 +<tr class="separator:ad7d7a910a32113eb93eae11c3dc97b4b"><td class="memSeparator" colspan="2"> </td></tr> 53.151 +<tr class="memitem:ae36aff5f645948c54f51578b11fd87fb"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structUcxMapIterator.html">UcxMapIterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#ae36aff5f645948c54f51578b11fd87fb">UcxMapIterator</a></td></tr> 53.152 +<tr class="memdesc:ae36aff5f645948c54f51578b11fd87fb"><td class="mdescLeft"> </td><td class="mdescRight">Type for an iterator over a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. <a href="#ae36aff5f645948c54f51578b11fd87fb">More...</a><br /></td></tr> 53.153 +<tr class="separator:ae36aff5f645948c54f51578b11fd87fb"><td class="memSeparator" colspan="2"> </td></tr> 53.154 +</table><table class="memberdecls"> 53.155 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 53.156 +Functions</h2></td></tr> 53.157 +<tr class="memitem:a79f31de8b93814493759dbc8b940cf0c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMap.html">UcxMap</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a79f31de8b93814493759dbc8b940cf0c">ucx_map_new</a> (size_t size)</td></tr> 53.158 +<tr class="memdesc:a79f31de8b93814493759dbc8b940cf0c"><td class="mdescLeft"> </td><td class="mdescRight">Creates a new hash map with the specified size. <a href="#a79f31de8b93814493759dbc8b940cf0c">More...</a><br /></td></tr> 53.159 +<tr class="separator:a79f31de8b93814493759dbc8b940cf0c"><td class="memSeparator" colspan="2"> </td></tr> 53.160 +<tr class="memitem:aed508a94c66cc15372503c64b70eb03e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMap.html">UcxMap</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#aed508a94c66cc15372503c64b70eb03e">ucx_map_new_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, size_t size)</td></tr> 53.161 +<tr class="memdesc:aed508a94c66cc15372503c64b70eb03e"><td class="mdescLeft"> </td><td class="mdescRight">Creates a new hash map with the specified size using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. <a href="#aed508a94c66cc15372503c64b70eb03e">More...</a><br /></td></tr> 53.162 +<tr class="separator:aed508a94c66cc15372503c64b70eb03e"><td class="memSeparator" colspan="2"> </td></tr> 53.163 +<tr class="memitem:abe3d9688e4224bf7bb962abf25ff8c2e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#abe3d9688e4224bf7bb962abf25ff8c2e">ucx_map_free</a> (<a class="el" href="structUcxMap.html">UcxMap</a> *map)</td></tr> 53.164 +<tr class="memdesc:abe3d9688e4224bf7bb962abf25ff8c2e"><td class="mdescLeft"> </td><td class="mdescRight">Frees a hash map. <a href="#abe3d9688e4224bf7bb962abf25ff8c2e">More...</a><br /></td></tr> 53.165 +<tr class="separator:abe3d9688e4224bf7bb962abf25ff8c2e"><td class="memSeparator" colspan="2"> </td></tr> 53.166 +<tr class="memitem:a750f3d9d83e2f3788a14c17a9d160618"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a750f3d9d83e2f3788a14c17a9d160618">ucx_map_free_content</a> (<a class="el" href="structUcxMap.html">UcxMap</a> *map, <a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> destr)</td></tr> 53.167 +<tr class="memdesc:a750f3d9d83e2f3788a14c17a9d160618"><td class="mdescLeft"> </td><td class="mdescRight">Frees the contents of a hash map. <a href="#a750f3d9d83e2f3788a14c17a9d160618">More...</a><br /></td></tr> 53.168 +<tr class="separator:a750f3d9d83e2f3788a14c17a9d160618"><td class="memSeparator" colspan="2"> </td></tr> 53.169 +<tr class="memitem:a285e90e40681c6d9631c935dda0967f2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a285e90e40681c6d9631c935dda0967f2">ucx_map_clear</a> (<a class="el" href="structUcxMap.html">UcxMap</a> *map)</td></tr> 53.170 +<tr class="memdesc:a285e90e40681c6d9631c935dda0967f2"><td class="mdescLeft"> </td><td class="mdescRight">Clears a hash map. <a href="#a285e90e40681c6d9631c935dda0967f2">More...</a><br /></td></tr> 53.171 +<tr class="separator:a285e90e40681c6d9631c935dda0967f2"><td class="memSeparator" colspan="2"> </td></tr> 53.172 +<tr class="memitem:adfeb2d61003fd2896bcfdc9a57f36425"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#adfeb2d61003fd2896bcfdc9a57f36425">ucx_map_copy</a> (<a class="el" href="structUcxMap.html">UcxMap</a> const *from, <a class="el" href="structUcxMap.html">UcxMap</a> *to, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> fnc, void *data)</td></tr> 53.173 +<tr class="memdesc:adfeb2d61003fd2896bcfdc9a57f36425"><td class="mdescLeft"> </td><td class="mdescRight">Copies contents from a map to another map using a copy function. <a href="#adfeb2d61003fd2896bcfdc9a57f36425">More...</a><br /></td></tr> 53.174 +<tr class="separator:adfeb2d61003fd2896bcfdc9a57f36425"><td class="memSeparator" colspan="2"> </td></tr> 53.175 +<tr class="memitem:a62c6c30cbb0d824ba710f5030ff9a4e4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMap.html">UcxMap</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a62c6c30cbb0d824ba710f5030ff9a4e4">ucx_map_clone</a> (<a class="el" href="structUcxMap.html">UcxMap</a> const *map, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> fnc, void *data)</td></tr> 53.176 +<tr class="memdesc:a62c6c30cbb0d824ba710f5030ff9a4e4"><td class="mdescLeft"> </td><td class="mdescRight">Clones the map and rehashes if necessary. <a href="#a62c6c30cbb0d824ba710f5030ff9a4e4">More...</a><br /></td></tr> 53.177 +<tr class="separator:a62c6c30cbb0d824ba710f5030ff9a4e4"><td class="memSeparator" colspan="2"> </td></tr> 53.178 +<tr class="memitem:a9aea9103703d5c168420bb6bf85549ea"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMap.html">UcxMap</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a9aea9103703d5c168420bb6bf85549ea">ucx_map_clone_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="el" href="structUcxMap.html">UcxMap</a> const *map, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> fnc, void *data)</td></tr> 53.179 +<tr class="memdesc:a9aea9103703d5c168420bb6bf85549ea"><td class="mdescLeft"> </td><td class="mdescRight">Clones the map and rehashes if necessary. <a href="#a9aea9103703d5c168420bb6bf85549ea">More...</a><br /></td></tr> 53.180 +<tr class="separator:a9aea9103703d5c168420bb6bf85549ea"><td class="memSeparator" colspan="2"> </td></tr> 53.181 +<tr class="memitem:a174bce9fad554dd92b8da354e0d32512"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a174bce9fad554dd92b8da354e0d32512">ucx_map_rehash</a> (<a class="el" href="structUcxMap.html">UcxMap</a> *map)</td></tr> 53.182 +<tr class="memdesc:a174bce9fad554dd92b8da354e0d32512"><td class="mdescLeft"> </td><td class="mdescRight">Increases size of the hash map, if necessary. <a href="#a174bce9fad554dd92b8da354e0d32512">More...</a><br /></td></tr> 53.183 +<tr class="separator:a174bce9fad554dd92b8da354e0d32512"><td class="memSeparator" colspan="2"> </td></tr> 53.184 +<tr class="memitem:ac04a08b604217070254d4c58f0e82498"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#ac04a08b604217070254d4c58f0e82498">ucx_map_put</a> (<a class="el" href="structUcxMap.html">UcxMap</a> *map, <a class="el" href="structUcxKey.html">UcxKey</a> key, void *value)</td></tr> 53.185 +<tr class="memdesc:ac04a08b604217070254d4c58f0e82498"><td class="mdescLeft"> </td><td class="mdescRight">Puts a key/value-pair into the map. <a href="#ac04a08b604217070254d4c58f0e82498">More...</a><br /></td></tr> 53.186 +<tr class="separator:ac04a08b604217070254d4c58f0e82498"><td class="memSeparator" colspan="2"> </td></tr> 53.187 +<tr class="memitem:ab61192c5af2e06ecb9ad73880d1c95a6"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6">ucx_map_get</a> (<a class="el" href="structUcxMap.html">UcxMap</a> const *map, <a class="el" href="structUcxKey.html">UcxKey</a> key)</td></tr> 53.188 +<tr class="memdesc:ab61192c5af2e06ecb9ad73880d1c95a6"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves a value by using a key. <a href="#ab61192c5af2e06ecb9ad73880d1c95a6">More...</a><br /></td></tr> 53.189 +<tr class="separator:ab61192c5af2e06ecb9ad73880d1c95a6"><td class="memSeparator" colspan="2"> </td></tr> 53.190 +<tr class="memitem:a17248a4888eb8f9ae18be522d64632aa"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a17248a4888eb8f9ae18be522d64632aa">ucx_map_remove</a> (<a class="el" href="structUcxMap.html">UcxMap</a> *map, <a class="el" href="structUcxKey.html">UcxKey</a> key)</td></tr> 53.191 +<tr class="memdesc:a17248a4888eb8f9ae18be522d64632aa"><td class="mdescLeft"> </td><td class="mdescRight">Removes a key/value-pair from the map by using the key. <a href="#a17248a4888eb8f9ae18be522d64632aa">More...</a><br /></td></tr> 53.192 +<tr class="separator:a17248a4888eb8f9ae18be522d64632aa"><td class="memSeparator" colspan="2"> </td></tr> 53.193 +<tr class="memitem:a3e540bb46b8ee19789aed63fd8919200"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxKey.html">UcxKey</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a> (const void *data, size_t len)</td></tr> 53.194 +<tr class="memdesc:a3e540bb46b8ee19789aed63fd8919200"><td class="mdescLeft"> </td><td class="mdescRight">Creates a <a class="el" href="structUcxKey.html" title="Structure to publicly denote a key of a UcxMap. ">UcxKey</a> based on the given data. <a href="#a3e540bb46b8ee19789aed63fd8919200">More...</a><br /></td></tr> 53.195 +<tr class="separator:a3e540bb46b8ee19789aed63fd8919200"><td class="memSeparator" colspan="2"> </td></tr> 53.196 +<tr class="memitem:aea3be97254c05595d986ef6a9faae87b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#aea3be97254c05595d986ef6a9faae87b">ucx_hash</a> (const char *data, size_t len)</td></tr> 53.197 +<tr class="memdesc:aea3be97254c05595d986ef6a9faae87b"><td class="mdescLeft"> </td><td class="mdescRight">Computes a murmur hash-2. <a href="#aea3be97254c05595d986ef6a9faae87b">More...</a><br /></td></tr> 53.198 +<tr class="separator:aea3be97254c05595d986ef6a9faae87b"><td class="memSeparator" colspan="2"> </td></tr> 53.199 +<tr class="memitem:a9150e9c64fdf4dfcc2cad106b91aa110"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMapIterator.html">UcxMapIterator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a9150e9c64fdf4dfcc2cad106b91aa110">ucx_map_iterator</a> (<a class="el" href="structUcxMap.html">UcxMap</a> const *map)</td></tr> 53.200 +<tr class="memdesc:a9150e9c64fdf4dfcc2cad106b91aa110"><td class="mdescLeft"> </td><td class="mdescRight">Creates an iterator for a map. <a href="#a9150e9c64fdf4dfcc2cad106b91aa110">More...</a><br /></td></tr> 53.201 +<tr class="separator:a9150e9c64fdf4dfcc2cad106b91aa110"><td class="memSeparator" colspan="2"> </td></tr> 53.202 +<tr class="memitem:aceb8675abf44860b4bbc301bbada5b91"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#aceb8675abf44860b4bbc301bbada5b91">ucx_map_iter_next</a> (<a class="el" href="structUcxMapIterator.html">UcxMapIterator</a> *iterator, <a class="el" href="structUcxKey.html">UcxKey</a> *key, void **value)</td></tr> 53.203 +<tr class="memdesc:aceb8675abf44860b4bbc301bbada5b91"><td class="mdescLeft"> </td><td class="mdescRight">Proceeds to the next element of the map (if any). <a href="#aceb8675abf44860b4bbc301bbada5b91">More...</a><br /></td></tr> 53.204 +<tr class="separator:aceb8675abf44860b4bbc301bbada5b91"><td class="memSeparator" colspan="2"> </td></tr> 53.205 +<tr class="memitem:a3f65978c481af7f637cad021d93522d5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMap.html">UcxMap</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a3f65978c481af7f637cad021d93522d5">ucx_map_union</a> (const <a class="el" href="structUcxMap.html">UcxMap</a> *first, const <a class="el" href="structUcxMap.html">UcxMap</a> *second, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, void *cpdata)</td></tr> 53.206 +<tr class="memdesc:a3f65978c481af7f637cad021d93522d5"><td class="mdescLeft"> </td><td class="mdescRight">Returns the union of two maps. <a href="#a3f65978c481af7f637cad021d93522d5">More...</a><br /></td></tr> 53.207 +<tr class="separator:a3f65978c481af7f637cad021d93522d5"><td class="memSeparator" colspan="2"> </td></tr> 53.208 +<tr class="memitem:ab6370c3fa8113fdad593ce4b0460c9c6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMap.html">UcxMap</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#ab6370c3fa8113fdad593ce4b0460c9c6">ucx_map_union_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, const <a class="el" href="structUcxMap.html">UcxMap</a> *first, const <a class="el" href="structUcxMap.html">UcxMap</a> *second, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, void *cpdata)</td></tr> 53.209 +<tr class="memdesc:ab6370c3fa8113fdad593ce4b0460c9c6"><td class="mdescLeft"> </td><td class="mdescRight">Returns the union of two maps. <a href="#ab6370c3fa8113fdad593ce4b0460c9c6">More...</a><br /></td></tr> 53.210 +<tr class="separator:ab6370c3fa8113fdad593ce4b0460c9c6"><td class="memSeparator" colspan="2"> </td></tr> 53.211 +<tr class="memitem:aa594d7a5afebc3bed6bb265348cf6b0d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMap.html">UcxMap</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#aa594d7a5afebc3bed6bb265348cf6b0d">ucx_map_intersection</a> (const <a class="el" href="structUcxMap.html">UcxMap</a> *first, const <a class="el" href="structUcxMap.html">UcxMap</a> *second, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, void *cpdata)</td></tr> 53.212 +<tr class="memdesc:aa594d7a5afebc3bed6bb265348cf6b0d"><td class="mdescLeft"> </td><td class="mdescRight">Returns the intersection of two maps. <a href="#aa594d7a5afebc3bed6bb265348cf6b0d">More...</a><br /></td></tr> 53.213 +<tr class="separator:aa594d7a5afebc3bed6bb265348cf6b0d"><td class="memSeparator" colspan="2"> </td></tr> 53.214 +<tr class="memitem:a169e0470a20484dd76425fdf77e3651e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMap.html">UcxMap</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a169e0470a20484dd76425fdf77e3651e">ucx_map_intersection_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, const <a class="el" href="structUcxMap.html">UcxMap</a> *first, const <a class="el" href="structUcxMap.html">UcxMap</a> *second, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, void *cpdata)</td></tr> 53.215 +<tr class="memdesc:a169e0470a20484dd76425fdf77e3651e"><td class="mdescLeft"> </td><td class="mdescRight">Returns the intersection of two maps. <a href="#a169e0470a20484dd76425fdf77e3651e">More...</a><br /></td></tr> 53.216 +<tr class="separator:a169e0470a20484dd76425fdf77e3651e"><td class="memSeparator" colspan="2"> </td></tr> 53.217 +<tr class="memitem:a774fcff87d1e58b6c5af77dd19a8c3dc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMap.html">UcxMap</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#a774fcff87d1e58b6c5af77dd19a8c3dc">ucx_map_difference</a> (const <a class="el" href="structUcxMap.html">UcxMap</a> *first, const <a class="el" href="structUcxMap.html">UcxMap</a> *second, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, void *cpdata)</td></tr> 53.218 +<tr class="memdesc:a774fcff87d1e58b6c5af77dd19a8c3dc"><td class="mdescLeft"> </td><td class="mdescRight">Returns the difference of two maps. <a href="#a774fcff87d1e58b6c5af77dd19a8c3dc">More...</a><br /></td></tr> 53.219 +<tr class="separator:a774fcff87d1e58b6c5af77dd19a8c3dc"><td class="memSeparator" colspan="2"> </td></tr> 53.220 +<tr class="memitem:ad0ba103494247d798ac3037c50fc8831"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMap.html">UcxMap</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="map_8h.html#ad0ba103494247d798ac3037c50fc8831">ucx_map_difference_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, const <a class="el" href="structUcxMap.html">UcxMap</a> *first, const <a class="el" href="structUcxMap.html">UcxMap</a> *second, <a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, void *cpdata)</td></tr> 53.221 +<tr class="memdesc:ad0ba103494247d798ac3037c50fc8831"><td class="mdescLeft"> </td><td class="mdescRight">Returns the difference of two maps. <a href="#ad0ba103494247d798ac3037c50fc8831">More...</a><br /></td></tr> 53.222 +<tr class="separator:ad0ba103494247d798ac3037c50fc8831"><td class="memSeparator" colspan="2"> </td></tr> 53.223 +</table> 53.224 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 53.225 +<div class="textblock"><p>Hash map implementation. </p> 53.226 +<p>This implementation uses murmur hash 2 and separate chaining with linked lists.</p> 53.227 +<dl class="section author"><dt>Author</dt><dd>Mike Becker </dd> 53.228 +<dd> 53.229 +Olaf Wintermann </dd></dl> 53.230 +</div><h2 class="groupheader">Macro Definition Documentation</h2> 53.231 +<a id="a64e1fb55498fa502dd2ed8ed69062cdd"></a> 53.232 +<h2 class="memtitle"><span class="permalink"><a href="#a64e1fb55498fa502dd2ed8ed69062cdd">◆ </a></span>ucx_map_cstr_get</h2> 53.233 + 53.234 +<div class="memitem"> 53.235 +<div class="memproto"> 53.236 + <table class="memname"> 53.237 + <tr> 53.238 + <td class="memname">#define ucx_map_cstr_get</td> 53.239 + <td>(</td> 53.240 + <td class="paramtype"> </td> 53.241 + <td class="paramname">map, </td> 53.242 + </tr> 53.243 + <tr> 53.244 + <td class="paramkey"></td> 53.245 + <td></td> 53.246 + <td class="paramtype"> </td> 53.247 + <td class="paramname">key </td> 53.248 + </tr> 53.249 + <tr> 53.250 + <td></td> 53.251 + <td>)</td> 53.252 + <td></td><td>   <a class="el" href="map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6">ucx_map_get</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(key, strlen(key)))</td> 53.253 + </tr> 53.254 + </table> 53.255 +</div><div class="memdoc"> 53.256 + 53.257 +<p>Shorthand for getting data from the map with a C string key. </p> 53.258 +<dl class="params"><dt>Parameters</dt><dd> 53.259 + <table class="params"> 53.260 + <tr><td class="paramname">map</td><td>the map </td></tr> 53.261 + <tr><td class="paramname">key</td><td>the key </td></tr> 53.262 + </table> 53.263 + </dd> 53.264 +</dl> 53.265 +<dl class="section return"><dt>Returns</dt><dd>the value </dd></dl> 53.266 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6" title="Retrieves a value by using a key. ">ucx_map_get()</a> </dd></dl> 53.267 + 53.268 +</div> 53.269 +</div> 53.270 +<a id="ad9356b01425b934ab237b52339ac0cc3"></a> 53.271 +<h2 class="memtitle"><span class="permalink"><a href="#ad9356b01425b934ab237b52339ac0cc3">◆ </a></span>ucx_map_cstr_put</h2> 53.272 + 53.273 +<div class="memitem"> 53.274 +<div class="memproto"> 53.275 + <table class="memname"> 53.276 + <tr> 53.277 + <td class="memname">#define ucx_map_cstr_put</td> 53.278 + <td>(</td> 53.279 + <td class="paramtype"> </td> 53.280 + <td class="paramname">map, </td> 53.281 + </tr> 53.282 + <tr> 53.283 + <td class="paramkey"></td> 53.284 + <td></td> 53.285 + <td class="paramtype"> </td> 53.286 + <td class="paramname">key, </td> 53.287 + </tr> 53.288 + <tr> 53.289 + <td class="paramkey"></td> 53.290 + <td></td> 53.291 + <td class="paramtype"> </td> 53.292 + <td class="paramname">value </td> 53.293 + </tr> 53.294 + <tr> 53.295 + <td></td> 53.296 + <td>)</td> 53.297 + <td></td><td>   <a class="el" href="map_8h.html#ac04a08b604217070254d4c58f0e82498">ucx_map_put</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(key, strlen(key)), (void*)value)</td> 53.298 + </tr> 53.299 + </table> 53.300 +</div><div class="memdoc"> 53.301 + 53.302 +<p>Shorthand for putting data with a C string key into the map. </p> 53.303 +<dl class="params"><dt>Parameters</dt><dd> 53.304 + <table class="params"> 53.305 + <tr><td class="paramname">map</td><td>the map </td></tr> 53.306 + <tr><td class="paramname">key</td><td>the key </td></tr> 53.307 + <tr><td class="paramname">value</td><td>the value </td></tr> 53.308 + </table> 53.309 + </dd> 53.310 +</dl> 53.311 +<dl class="section return"><dt>Returns</dt><dd>0 on success, non-zero value on failure </dd></dl> 53.312 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#ac04a08b604217070254d4c58f0e82498" title="Puts a key/value-pair into the map. ">ucx_map_put()</a> </dd></dl> 53.313 + 53.314 +</div> 53.315 +</div> 53.316 +<a id="a9c4405a5a75ecf64e2ef3d0c6501a9fe"></a> 53.317 +<h2 class="memtitle"><span class="permalink"><a href="#a9c4405a5a75ecf64e2ef3d0c6501a9fe">◆ </a></span>ucx_map_cstr_remove</h2> 53.318 + 53.319 +<div class="memitem"> 53.320 +<div class="memproto"> 53.321 + <table class="memname"> 53.322 + <tr> 53.323 + <td class="memname">#define ucx_map_cstr_remove</td> 53.324 + <td>(</td> 53.325 + <td class="paramtype"> </td> 53.326 + <td class="paramname">map, </td> 53.327 + </tr> 53.328 + <tr> 53.329 + <td class="paramkey"></td> 53.330 + <td></td> 53.331 + <td class="paramtype"> </td> 53.332 + <td class="paramname">key </td> 53.333 + </tr> 53.334 + <tr> 53.335 + <td></td> 53.336 + <td>)</td> 53.337 + <td></td><td>   <a class="el" href="map_8h.html#a17248a4888eb8f9ae18be522d64632aa">ucx_map_remove</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(key, strlen(key)))</td> 53.338 + </tr> 53.339 + </table> 53.340 +</div><div class="memdoc"> 53.341 + 53.342 +<p>Shorthand for removing data from the map with a C string key. </p> 53.343 +<dl class="params"><dt>Parameters</dt><dd> 53.344 + <table class="params"> 53.345 + <tr><td class="paramname">map</td><td>the map </td></tr> 53.346 + <tr><td class="paramname">key</td><td>the key </td></tr> 53.347 + </table> 53.348 + </dd> 53.349 +</dl> 53.350 +<dl class="section return"><dt>Returns</dt><dd>the removed value </dd></dl> 53.351 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#a17248a4888eb8f9ae18be522d64632aa" title="Removes a key/value-pair from the map by using the key. ">ucx_map_remove()</a> </dd></dl> 53.352 + 53.353 +</div> 53.354 +</div> 53.355 +<a id="a940896c4aa1b13e54c55c04c3efc186b"></a> 53.356 +<h2 class="memtitle"><span class="permalink"><a href="#a940896c4aa1b13e54c55c04c3efc186b">◆ </a></span>UCX_MAP_FOREACH</h2> 53.357 + 53.358 +<div class="memitem"> 53.359 +<div class="memproto"> 53.360 + <table class="memname"> 53.361 + <tr> 53.362 + <td class="memname">#define UCX_MAP_FOREACH</td> 53.363 + <td>(</td> 53.364 + <td class="paramtype"> </td> 53.365 + <td class="paramname">key, </td> 53.366 + </tr> 53.367 + <tr> 53.368 + <td class="paramkey"></td> 53.369 + <td></td> 53.370 + <td class="paramtype"> </td> 53.371 + <td class="paramname">value, </td> 53.372 + </tr> 53.373 + <tr> 53.374 + <td class="paramkey"></td> 53.375 + <td></td> 53.376 + <td class="paramtype"> </td> 53.377 + <td class="paramname">iter </td> 53.378 + </tr> 53.379 + <tr> 53.380 + <td></td> 53.381 + <td>)</td> 53.382 + <td></td><td>   for(<a class="el" href="structUcxKey.html">UcxKey</a> key;<a class="el" href="map_8h.html#aceb8675abf44860b4bbc301bbada5b91">ucx_map_iter_next</a>(&iter,&key, (void**)&value);)</td> 53.383 + </tr> 53.384 + </table> 53.385 +</div><div class="memdoc"> 53.386 + 53.387 +<p>Loop statement for UCX maps. </p> 53.388 +<p>The <code>key</code> variable is implicitly defined, but the <code>value</code> variable must be already declared as type information cannot be inferred.</p> 53.389 +<dl class="params"><dt>Parameters</dt><dd> 53.390 + <table class="params"> 53.391 + <tr><td class="paramname">key</td><td>the variable name for the key </td></tr> 53.392 + <tr><td class="paramname">value</td><td>the variable name for the value </td></tr> 53.393 + <tr><td class="paramname">iter</td><td>a <a class="el" href="structUcxMapIterator.html" title="Structure for an iterator over a UcxMap. ">UcxMapIterator</a> </td></tr> 53.394 + </table> 53.395 + </dd> 53.396 +</dl> 53.397 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#a9150e9c64fdf4dfcc2cad106b91aa110" title="Creates an iterator for a map. ">ucx_map_iterator()</a> </dd></dl> 53.398 + 53.399 +</div> 53.400 +</div> 53.401 +<a id="aa1681bd2178553cd092fd24c4d681d3c"></a> 53.402 +<h2 class="memtitle"><span class="permalink"><a href="#aa1681bd2178553cd092fd24c4d681d3c">◆ </a></span>ucx_map_int_get</h2> 53.403 + 53.404 +<div class="memitem"> 53.405 +<div class="memproto"> 53.406 + <table class="memname"> 53.407 + <tr> 53.408 + <td class="memname">#define ucx_map_int_get</td> 53.409 + <td>(</td> 53.410 + <td class="paramtype"> </td> 53.411 + <td class="paramname">map, </td> 53.412 + </tr> 53.413 + <tr> 53.414 + <td class="paramkey"></td> 53.415 + <td></td> 53.416 + <td class="paramtype"> </td> 53.417 + <td class="paramname">key </td> 53.418 + </tr> 53.419 + <tr> 53.420 + <td></td> 53.421 + <td>)</td> 53.422 + <td></td><td>   <a class="el" href="map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6">ucx_map_get</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(&key, sizeof(int)))</td> 53.423 + </tr> 53.424 + </table> 53.425 +</div><div class="memdoc"> 53.426 + 53.427 +<p>Shorthand for getting data from the map with an integer key. </p> 53.428 +<dl class="params"><dt>Parameters</dt><dd> 53.429 + <table class="params"> 53.430 + <tr><td class="paramname">map</td><td>the map </td></tr> 53.431 + <tr><td class="paramname">key</td><td>the key </td></tr> 53.432 + </table> 53.433 + </dd> 53.434 +</dl> 53.435 +<dl class="section return"><dt>Returns</dt><dd>the value </dd></dl> 53.436 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6" title="Retrieves a value by using a key. ">ucx_map_get()</a> </dd></dl> 53.437 + 53.438 +</div> 53.439 +</div> 53.440 +<a id="aaa30af79b4068c923895619e83f44367"></a> 53.441 +<h2 class="memtitle"><span class="permalink"><a href="#aaa30af79b4068c923895619e83f44367">◆ </a></span>ucx_map_int_put</h2> 53.442 + 53.443 +<div class="memitem"> 53.444 +<div class="memproto"> 53.445 + <table class="memname"> 53.446 + <tr> 53.447 + <td class="memname">#define ucx_map_int_put</td> 53.448 + <td>(</td> 53.449 + <td class="paramtype"> </td> 53.450 + <td class="paramname">map, </td> 53.451 + </tr> 53.452 + <tr> 53.453 + <td class="paramkey"></td> 53.454 + <td></td> 53.455 + <td class="paramtype"> </td> 53.456 + <td class="paramname">key, </td> 53.457 + </tr> 53.458 + <tr> 53.459 + <td class="paramkey"></td> 53.460 + <td></td> 53.461 + <td class="paramtype"> </td> 53.462 + <td class="paramname">value </td> 53.463 + </tr> 53.464 + <tr> 53.465 + <td></td> 53.466 + <td>)</td> 53.467 + <td></td><td>   <a class="el" href="map_8h.html#ac04a08b604217070254d4c58f0e82498">ucx_map_put</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(&key, sizeof(key)), (void*)value)</td> 53.468 + </tr> 53.469 + </table> 53.470 +</div><div class="memdoc"> 53.471 + 53.472 +<p>Shorthand for putting data with an integer key into the map. </p> 53.473 +<dl class="params"><dt>Parameters</dt><dd> 53.474 + <table class="params"> 53.475 + <tr><td class="paramname">map</td><td>the map </td></tr> 53.476 + <tr><td class="paramname">key</td><td>the key </td></tr> 53.477 + <tr><td class="paramname">value</td><td>the value </td></tr> 53.478 + </table> 53.479 + </dd> 53.480 +</dl> 53.481 +<dl class="section return"><dt>Returns</dt><dd>0 on success, non-zero value on failure </dd></dl> 53.482 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#ac04a08b604217070254d4c58f0e82498" title="Puts a key/value-pair into the map. ">ucx_map_put()</a> </dd></dl> 53.483 + 53.484 +</div> 53.485 +</div> 53.486 +<a id="aa767958b5468737755c09f7185b1770c"></a> 53.487 +<h2 class="memtitle"><span class="permalink"><a href="#aa767958b5468737755c09f7185b1770c">◆ </a></span>ucx_map_int_remove</h2> 53.488 + 53.489 +<div class="memitem"> 53.490 +<div class="memproto"> 53.491 + <table class="memname"> 53.492 + <tr> 53.493 + <td class="memname">#define ucx_map_int_remove</td> 53.494 + <td>(</td> 53.495 + <td class="paramtype"> </td> 53.496 + <td class="paramname">map, </td> 53.497 + </tr> 53.498 + <tr> 53.499 + <td class="paramkey"></td> 53.500 + <td></td> 53.501 + <td class="paramtype"> </td> 53.502 + <td class="paramname">key </td> 53.503 + </tr> 53.504 + <tr> 53.505 + <td></td> 53.506 + <td>)</td> 53.507 + <td></td><td>   <a class="el" href="map_8h.html#a17248a4888eb8f9ae18be522d64632aa">ucx_map_remove</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(&key, sizeof(key)))</td> 53.508 + </tr> 53.509 + </table> 53.510 +</div><div class="memdoc"> 53.511 + 53.512 +<p>Shorthand for removing data from the map with an integer key. </p> 53.513 +<dl class="params"><dt>Parameters</dt><dd> 53.514 + <table class="params"> 53.515 + <tr><td class="paramname">map</td><td>the map </td></tr> 53.516 + <tr><td class="paramname">key</td><td>the key </td></tr> 53.517 + </table> 53.518 + </dd> 53.519 +</dl> 53.520 +<dl class="section return"><dt>Returns</dt><dd>the removed value </dd></dl> 53.521 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#a17248a4888eb8f9ae18be522d64632aa" title="Removes a key/value-pair from the map by using the key. ">ucx_map_remove()</a> </dd></dl> 53.522 + 53.523 +</div> 53.524 +</div> 53.525 +<a id="a14d385f6b7f371f0507861cabd2eab4e"></a> 53.526 +<h2 class="memtitle"><span class="permalink"><a href="#a14d385f6b7f371f0507861cabd2eab4e">◆ </a></span>ucx_map_sstr_get</h2> 53.527 + 53.528 +<div class="memitem"> 53.529 +<div class="memproto"> 53.530 + <table class="memname"> 53.531 + <tr> 53.532 + <td class="memname">#define ucx_map_sstr_get</td> 53.533 + <td>(</td> 53.534 + <td class="paramtype"> </td> 53.535 + <td class="paramname">map, </td> 53.536 + </tr> 53.537 + <tr> 53.538 + <td class="paramkey"></td> 53.539 + <td></td> 53.540 + <td class="paramtype"> </td> 53.541 + <td class="paramname">key </td> 53.542 + </tr> 53.543 + <tr> 53.544 + <td></td> 53.545 + <td>)</td> 53.546 + <td></td><td>   <a class="el" href="map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6">ucx_map_get</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(key.ptr, key.length))</td> 53.547 + </tr> 53.548 + </table> 53.549 +</div><div class="memdoc"> 53.550 + 53.551 +<p>Shorthand for getting data from the map with a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> key. </p> 53.552 +<dl class="params"><dt>Parameters</dt><dd> 53.553 + <table class="params"> 53.554 + <tr><td class="paramname">map</td><td>the map </td></tr> 53.555 + <tr><td class="paramname">key</td><td>the key </td></tr> 53.556 + </table> 53.557 + </dd> 53.558 +</dl> 53.559 +<dl class="section return"><dt>Returns</dt><dd>the value </dd></dl> 53.560 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6" title="Retrieves a value by using a key. ">ucx_map_get()</a> </dd></dl> 53.561 + 53.562 +</div> 53.563 +</div> 53.564 +<a id="ac26a8615bfc8f47ee9eaceb47645f98e"></a> 53.565 +<h2 class="memtitle"><span class="permalink"><a href="#ac26a8615bfc8f47ee9eaceb47645f98e">◆ </a></span>ucx_map_sstr_put</h2> 53.566 + 53.567 +<div class="memitem"> 53.568 +<div class="memproto"> 53.569 + <table class="memname"> 53.570 + <tr> 53.571 + <td class="memname">#define ucx_map_sstr_put</td> 53.572 + <td>(</td> 53.573 + <td class="paramtype"> </td> 53.574 + <td class="paramname">map, </td> 53.575 + </tr> 53.576 + <tr> 53.577 + <td class="paramkey"></td> 53.578 + <td></td> 53.579 + <td class="paramtype"> </td> 53.580 + <td class="paramname">key, </td> 53.581 + </tr> 53.582 + <tr> 53.583 + <td class="paramkey"></td> 53.584 + <td></td> 53.585 + <td class="paramtype"> </td> 53.586 + <td class="paramname">value </td> 53.587 + </tr> 53.588 + <tr> 53.589 + <td></td> 53.590 + <td>)</td> 53.591 + <td></td><td>   <a class="el" href="map_8h.html#ac04a08b604217070254d4c58f0e82498">ucx_map_put</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(key.ptr, key.length), (void*)value)</td> 53.592 + </tr> 53.593 + </table> 53.594 +</div><div class="memdoc"> 53.595 + 53.596 +<p>Shorthand for putting data with a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> key into the map. </p> 53.597 +<dl class="params"><dt>Parameters</dt><dd> 53.598 + <table class="params"> 53.599 + <tr><td class="paramname">map</td><td>the map </td></tr> 53.600 + <tr><td class="paramname">key</td><td>the key </td></tr> 53.601 + <tr><td class="paramname">value</td><td>the value </td></tr> 53.602 + </table> 53.603 + </dd> 53.604 +</dl> 53.605 +<dl class="section return"><dt>Returns</dt><dd>0 on success, non-zero value on failure </dd></dl> 53.606 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#ac04a08b604217070254d4c58f0e82498" title="Puts a key/value-pair into the map. ">ucx_map_put()</a> </dd></dl> 53.607 + 53.608 +</div> 53.609 +</div> 53.610 +<a id="a48700ea86fadb9ea54d13010f9124df2"></a> 53.611 +<h2 class="memtitle"><span class="permalink"><a href="#a48700ea86fadb9ea54d13010f9124df2">◆ </a></span>ucx_map_sstr_remove</h2> 53.612 + 53.613 +<div class="memitem"> 53.614 +<div class="memproto"> 53.615 + <table class="memname"> 53.616 + <tr> 53.617 + <td class="memname">#define ucx_map_sstr_remove</td> 53.618 + <td>(</td> 53.619 + <td class="paramtype"> </td> 53.620 + <td class="paramname">map, </td> 53.621 + </tr> 53.622 + <tr> 53.623 + <td class="paramkey"></td> 53.624 + <td></td> 53.625 + <td class="paramtype"> </td> 53.626 + <td class="paramname">key </td> 53.627 + </tr> 53.628 + <tr> 53.629 + <td></td> 53.630 + <td>)</td> 53.631 + <td></td><td>   <a class="el" href="map_8h.html#a17248a4888eb8f9ae18be522d64632aa">ucx_map_remove</a>(map, <a class="el" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(key.ptr, key.length))</td> 53.632 + </tr> 53.633 + </table> 53.634 +</div><div class="memdoc"> 53.635 + 53.636 +<p>Shorthand for removing data from the map with a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> key. </p> 53.637 +<dl class="params"><dt>Parameters</dt><dd> 53.638 + <table class="params"> 53.639 + <tr><td class="paramname">map</td><td>the map </td></tr> 53.640 + <tr><td class="paramname">key</td><td>the key </td></tr> 53.641 + </table> 53.642 + </dd> 53.643 +</dl> 53.644 +<dl class="section return"><dt>Returns</dt><dd>the removed value </dd></dl> 53.645 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#a17248a4888eb8f9ae18be522d64632aa" title="Removes a key/value-pair from the map by using the key. ">ucx_map_remove()</a> </dd></dl> 53.646 + 53.647 +</div> 53.648 +</div> 53.649 +<h2 class="groupheader">Typedef Documentation</h2> 53.650 +<a id="ad63828bb23123fc01a5315a2bac3b142"></a> 53.651 +<h2 class="memtitle"><span class="permalink"><a href="#ad63828bb23123fc01a5315a2bac3b142">◆ </a></span>UcxKey</h2> 53.652 + 53.653 +<div class="memitem"> 53.654 +<div class="memproto"> 53.655 + <table class="memname"> 53.656 + <tr> 53.657 + <td class="memname">typedef struct <a class="el" href="structUcxKey.html">UcxKey</a> <a class="el" href="structUcxKey.html">UcxKey</a></td> 53.658 + </tr> 53.659 + </table> 53.660 +</div><div class="memdoc"> 53.661 + 53.662 +<p>Type for a key of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. </p> 53.663 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="structUcxKey.html" title="Structure to publicly denote a key of a UcxMap. ">UcxKey</a> </dd></dl> 53.664 + 53.665 +</div> 53.666 +</div> 53.667 +<a id="a18e21948725b2da68c35da587a722033"></a> 53.668 +<h2 class="memtitle"><span class="permalink"><a href="#a18e21948725b2da68c35da587a722033">◆ </a></span>UcxMap</h2> 53.669 + 53.670 +<div class="memitem"> 53.671 +<div class="memproto"> 53.672 + <table class="memname"> 53.673 + <tr> 53.674 + <td class="memname">typedef struct <a class="el" href="structUcxMap.html">UcxMap</a> <a class="el" href="structUcxMap.html">UcxMap</a></td> 53.675 + </tr> 53.676 + </table> 53.677 +</div><div class="memdoc"> 53.678 + 53.679 +<p>Type for the UCX map. </p> 53.680 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a> </dd></dl> 53.681 + 53.682 +</div> 53.683 +</div> 53.684 +<a id="ad7d7a910a32113eb93eae11c3dc97b4b"></a> 53.685 +<h2 class="memtitle"><span class="permalink"><a href="#ad7d7a910a32113eb93eae11c3dc97b4b">◆ </a></span>UcxMapElement</h2> 53.686 + 53.687 +<div class="memitem"> 53.688 +<div class="memproto"> 53.689 + <table class="memname"> 53.690 + <tr> 53.691 + <td class="memname">typedef struct <a class="el" href="structUcxMapElement.html">UcxMapElement</a> <a class="el" href="structUcxMapElement.html">UcxMapElement</a></td> 53.692 + </tr> 53.693 + </table> 53.694 +</div><div class="memdoc"> 53.695 + 53.696 +<p>Type for an element of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. </p> 53.697 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="structUcxMapElement.html" title="Structure for an element of a UcxMap. ">UcxMapElement</a> </dd></dl> 53.698 + 53.699 +</div> 53.700 +</div> 53.701 +<a id="ae36aff5f645948c54f51578b11fd87fb"></a> 53.702 +<h2 class="memtitle"><span class="permalink"><a href="#ae36aff5f645948c54f51578b11fd87fb">◆ </a></span>UcxMapIterator</h2> 53.703 + 53.704 +<div class="memitem"> 53.705 +<div class="memproto"> 53.706 + <table class="memname"> 53.707 + <tr> 53.708 + <td class="memname">typedef struct <a class="el" href="structUcxMapIterator.html">UcxMapIterator</a> <a class="el" href="structUcxMapIterator.html">UcxMapIterator</a></td> 53.709 + </tr> 53.710 + </table> 53.711 +</div><div class="memdoc"> 53.712 + 53.713 +<p>Type for an iterator over a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. </p> 53.714 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="structUcxMapIterator.html" title="Structure for an iterator over a UcxMap. ">UcxMapIterator</a> </dd></dl> 53.715 + 53.716 +</div> 53.717 +</div> 53.718 +<h2 class="groupheader">Function Documentation</h2> 53.719 +<a id="aea3be97254c05595d986ef6a9faae87b"></a> 53.720 +<h2 class="memtitle"><span class="permalink"><a href="#aea3be97254c05595d986ef6a9faae87b">◆ </a></span>ucx_hash()</h2> 53.721 + 53.722 +<div class="memitem"> 53.723 +<div class="memproto"> 53.724 + <table class="memname"> 53.725 + <tr> 53.726 + <td class="memname">int ucx_hash </td> 53.727 + <td>(</td> 53.728 + <td class="paramtype">const char * </td> 53.729 + <td class="paramname"><em>data</em>, </td> 53.730 + </tr> 53.731 + <tr> 53.732 + <td class="paramkey"></td> 53.733 + <td></td> 53.734 + <td class="paramtype">size_t </td> 53.735 + <td class="paramname"><em>len</em> </td> 53.736 + </tr> 53.737 + <tr> 53.738 + <td></td> 53.739 + <td>)</td> 53.740 + <td></td><td></td> 53.741 + </tr> 53.742 + </table> 53.743 +</div><div class="memdoc"> 53.744 + 53.745 +<p>Computes a murmur hash-2. </p> 53.746 +<dl class="params"><dt>Parameters</dt><dd> 53.747 + <table class="params"> 53.748 + <tr><td class="paramname">data</td><td>the data to hash </td></tr> 53.749 + <tr><td class="paramname">len</td><td>the length of the data </td></tr> 53.750 + </table> 53.751 + </dd> 53.752 +</dl> 53.753 +<dl class="section return"><dt>Returns</dt><dd>the murmur hash-2 of the data </dd></dl> 53.754 + 53.755 +</div> 53.756 +</div> 53.757 +<a id="a3e540bb46b8ee19789aed63fd8919200"></a> 53.758 +<h2 class="memtitle"><span class="permalink"><a href="#a3e540bb46b8ee19789aed63fd8919200">◆ </a></span>ucx_key()</h2> 53.759 + 53.760 +<div class="memitem"> 53.761 +<div class="memproto"> 53.762 + <table class="memname"> 53.763 + <tr> 53.764 + <td class="memname"><a class="el" href="structUcxKey.html">UcxKey</a> ucx_key </td> 53.765 + <td>(</td> 53.766 + <td class="paramtype">const void * </td> 53.767 + <td class="paramname"><em>data</em>, </td> 53.768 + </tr> 53.769 + <tr> 53.770 + <td class="paramkey"></td> 53.771 + <td></td> 53.772 + <td class="paramtype">size_t </td> 53.773 + <td class="paramname"><em>len</em> </td> 53.774 + </tr> 53.775 + <tr> 53.776 + <td></td> 53.777 + <td>)</td> 53.778 + <td></td><td></td> 53.779 + </tr> 53.780 + </table> 53.781 +</div><div class="memdoc"> 53.782 + 53.783 +<p>Creates a <a class="el" href="structUcxKey.html" title="Structure to publicly denote a key of a UcxMap. ">UcxKey</a> based on the given data. </p> 53.784 +<p>This function implicitly computes the hash.</p> 53.785 +<dl class="params"><dt>Parameters</dt><dd> 53.786 + <table class="params"> 53.787 + <tr><td class="paramname">data</td><td>the data for the key </td></tr> 53.788 + <tr><td class="paramname">len</td><td>the length of the data </td></tr> 53.789 + </table> 53.790 + </dd> 53.791 +</dl> 53.792 +<dl class="section return"><dt>Returns</dt><dd>a <a class="el" href="structUcxKey.html" title="Structure to publicly denote a key of a UcxMap. ">UcxKey</a> with implicitly computed hash </dd></dl> 53.793 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#aea3be97254c05595d986ef6a9faae87b" title="Computes a murmur hash-2. ">ucx_hash()</a> </dd></dl> 53.794 + 53.795 +</div> 53.796 +</div> 53.797 +<a id="a285e90e40681c6d9631c935dda0967f2"></a> 53.798 +<h2 class="memtitle"><span class="permalink"><a href="#a285e90e40681c6d9631c935dda0967f2">◆ </a></span>ucx_map_clear()</h2> 53.799 + 53.800 +<div class="memitem"> 53.801 +<div class="memproto"> 53.802 + <table class="memname"> 53.803 + <tr> 53.804 + <td class="memname">void ucx_map_clear </td> 53.805 + <td>(</td> 53.806 + <td class="paramtype"><a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.807 + <td class="paramname"><em>map</em></td><td>)</td> 53.808 + <td></td> 53.809 + </tr> 53.810 + </table> 53.811 +</div><div class="memdoc"> 53.812 + 53.813 +<p>Clears a hash map. </p> 53.814 +<p><b>Note:</b> the contents are <b>not</b> freed, use <a class="el" href="map_8h.html#a750f3d9d83e2f3788a14c17a9d160618" title="Frees the contents of a hash map. ">ucx_map_free_content()</a> before calling this function to achieve that.</p> 53.815 +<dl class="params"><dt>Parameters</dt><dd> 53.816 + <table class="params"> 53.817 + <tr><td class="paramname">map</td><td>the map to be cleared </td></tr> 53.818 + </table> 53.819 + </dd> 53.820 +</dl> 53.821 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#a750f3d9d83e2f3788a14c17a9d160618" title="Frees the contents of a hash map. ">ucx_map_free_content()</a> </dd></dl> 53.822 + 53.823 +</div> 53.824 +</div> 53.825 +<a id="a62c6c30cbb0d824ba710f5030ff9a4e4"></a> 53.826 +<h2 class="memtitle"><span class="permalink"><a href="#a62c6c30cbb0d824ba710f5030ff9a4e4">◆ </a></span>ucx_map_clone()</h2> 53.827 + 53.828 +<div class="memitem"> 53.829 +<div class="memproto"> 53.830 + <table class="memname"> 53.831 + <tr> 53.832 + <td class="memname"><a class="el" href="structUcxMap.html">UcxMap</a>* ucx_map_clone </td> 53.833 + <td>(</td> 53.834 + <td class="paramtype"><a class="el" href="structUcxMap.html">UcxMap</a> const * </td> 53.835 + <td class="paramname"><em>map</em>, </td> 53.836 + </tr> 53.837 + <tr> 53.838 + <td class="paramkey"></td> 53.839 + <td></td> 53.840 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 53.841 + <td class="paramname"><em>fnc</em>, </td> 53.842 + </tr> 53.843 + <tr> 53.844 + <td class="paramkey"></td> 53.845 + <td></td> 53.846 + <td class="paramtype">void * </td> 53.847 + <td class="paramname"><em>data</em> </td> 53.848 + </tr> 53.849 + <tr> 53.850 + <td></td> 53.851 + <td>)</td> 53.852 + <td></td><td></td> 53.853 + </tr> 53.854 + </table> 53.855 +</div><div class="memdoc"> 53.856 + 53.857 +<p>Clones the map and rehashes if necessary. </p> 53.858 +<p><b>Note:</b> In contrast to <a class="el" href="map_8h.html#a174bce9fad554dd92b8da354e0d32512" title="Increases size of the hash map, if necessary. ">ucx_map_rehash()</a> the load factor is irrelevant. This function <em>always</em> ensures a new <a class="el" href="structUcxMap.html#afe120846b26d99580a7ff1276464e838" title="The size of the map is the length of the element list array. ">UcxMap.size</a> of at least 2.5*UcxMap.count.</p> 53.859 +<dl class="params"><dt>Parameters</dt><dd> 53.860 + <table class="params"> 53.861 + <tr><td class="paramname">map</td><td>the map to clone </td></tr> 53.862 + <tr><td class="paramname">fnc</td><td>the copy function to use or <code>NULL</code> if the new and the old map shall share the data pointers </td></tr> 53.863 + <tr><td class="paramname">data</td><td>additional data for the copy function </td></tr> 53.864 + </table> 53.865 + </dd> 53.866 +</dl> 53.867 +<dl class="section return"><dt>Returns</dt><dd>the cloned map </dd></dl> 53.868 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#adfeb2d61003fd2896bcfdc9a57f36425" title="Copies contents from a map to another map using a copy function. ">ucx_map_copy()</a> </dd></dl> 53.869 + 53.870 +</div> 53.871 +</div> 53.872 +<a id="a9aea9103703d5c168420bb6bf85549ea"></a> 53.873 +<h2 class="memtitle"><span class="permalink"><a href="#a9aea9103703d5c168420bb6bf85549ea">◆ </a></span>ucx_map_clone_a()</h2> 53.874 + 53.875 +<div class="memitem"> 53.876 +<div class="memproto"> 53.877 + <table class="memname"> 53.878 + <tr> 53.879 + <td class="memname"><a class="el" href="structUcxMap.html">UcxMap</a>* ucx_map_clone_a </td> 53.880 + <td>(</td> 53.881 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 53.882 + <td class="paramname"><em>allocator</em>, </td> 53.883 + </tr> 53.884 + <tr> 53.885 + <td class="paramkey"></td> 53.886 + <td></td> 53.887 + <td class="paramtype"><a class="el" href="structUcxMap.html">UcxMap</a> const * </td> 53.888 + <td class="paramname"><em>map</em>, </td> 53.889 + </tr> 53.890 + <tr> 53.891 + <td class="paramkey"></td> 53.892 + <td></td> 53.893 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 53.894 + <td class="paramname"><em>fnc</em>, </td> 53.895 + </tr> 53.896 + <tr> 53.897 + <td class="paramkey"></td> 53.898 + <td></td> 53.899 + <td class="paramtype">void * </td> 53.900 + <td class="paramname"><em>data</em> </td> 53.901 + </tr> 53.902 + <tr> 53.903 + <td></td> 53.904 + <td>)</td> 53.905 + <td></td><td></td> 53.906 + </tr> 53.907 + </table> 53.908 +</div><div class="memdoc"> 53.909 + 53.910 +<p>Clones the map and rehashes if necessary. </p> 53.911 +<p><b>Note:</b> In contrast to <a class="el" href="map_8h.html#a174bce9fad554dd92b8da354e0d32512" title="Increases size of the hash map, if necessary. ">ucx_map_rehash()</a> the load factor is irrelevant. This function <em>always</em> ensures a new <a class="el" href="structUcxMap.html#afe120846b26d99580a7ff1276464e838" title="The size of the map is the length of the element list array. ">UcxMap.size</a> of at least 2.5*UcxMap.count.</p> 53.912 +<dl class="params"><dt>Parameters</dt><dd> 53.913 + <table class="params"> 53.914 + <tr><td class="paramname">allocator</td><td>the allocator to use for the cloned map </td></tr> 53.915 + <tr><td class="paramname">map</td><td>the map to clone </td></tr> 53.916 + <tr><td class="paramname">fnc</td><td>the copy function to use or <code>NULL</code> if the new and the old map shall share the data pointers </td></tr> 53.917 + <tr><td class="paramname">data</td><td>additional data for the copy function </td></tr> 53.918 + </table> 53.919 + </dd> 53.920 +</dl> 53.921 +<dl class="section return"><dt>Returns</dt><dd>the cloned map </dd></dl> 53.922 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#adfeb2d61003fd2896bcfdc9a57f36425" title="Copies contents from a map to another map using a copy function. ">ucx_map_copy()</a> </dd></dl> 53.923 + 53.924 +</div> 53.925 +</div> 53.926 +<a id="adfeb2d61003fd2896bcfdc9a57f36425"></a> 53.927 +<h2 class="memtitle"><span class="permalink"><a href="#adfeb2d61003fd2896bcfdc9a57f36425">◆ </a></span>ucx_map_copy()</h2> 53.928 + 53.929 +<div class="memitem"> 53.930 +<div class="memproto"> 53.931 + <table class="memname"> 53.932 + <tr> 53.933 + <td class="memname">int ucx_map_copy </td> 53.934 + <td>(</td> 53.935 + <td class="paramtype"><a class="el" href="structUcxMap.html">UcxMap</a> const * </td> 53.936 + <td class="paramname"><em>from</em>, </td> 53.937 + </tr> 53.938 + <tr> 53.939 + <td class="paramkey"></td> 53.940 + <td></td> 53.941 + <td class="paramtype"><a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.942 + <td class="paramname"><em>to</em>, </td> 53.943 + </tr> 53.944 + <tr> 53.945 + <td class="paramkey"></td> 53.946 + <td></td> 53.947 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 53.948 + <td class="paramname"><em>fnc</em>, </td> 53.949 + </tr> 53.950 + <tr> 53.951 + <td class="paramkey"></td> 53.952 + <td></td> 53.953 + <td class="paramtype">void * </td> 53.954 + <td class="paramname"><em>data</em> </td> 53.955 + </tr> 53.956 + <tr> 53.957 + <td></td> 53.958 + <td>)</td> 53.959 + <td></td><td></td> 53.960 + </tr> 53.961 + </table> 53.962 +</div><div class="memdoc"> 53.963 + 53.964 +<p>Copies contents from a map to another map using a copy function. </p> 53.965 +<p><b>Note:</b> 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.</p> 53.966 +<dl class="params"><dt>Parameters</dt><dd> 53.967 + <table class="params"> 53.968 + <tr><td class="paramname">from</td><td>the source map </td></tr> 53.969 + <tr><td class="paramname">to</td><td>the destination map </td></tr> 53.970 + <tr><td class="paramname">fnc</td><td>the copy function or <code>NULL</code> if the pointer address shall be copied </td></tr> 53.971 + <tr><td class="paramname">data</td><td>additional data for the copy function </td></tr> 53.972 + </table> 53.973 + </dd> 53.974 +</dl> 53.975 +<dl class="section return"><dt>Returns</dt><dd>0 on success or a non-zero value on memory allocation errors </dd></dl> 53.976 + 53.977 +</div> 53.978 +</div> 53.979 +<a id="a774fcff87d1e58b6c5af77dd19a8c3dc"></a> 53.980 +<h2 class="memtitle"><span class="permalink"><a href="#a774fcff87d1e58b6c5af77dd19a8c3dc">◆ </a></span>ucx_map_difference()</h2> 53.981 + 53.982 +<div class="memitem"> 53.983 +<div class="memproto"> 53.984 + <table class="memname"> 53.985 + <tr> 53.986 + <td class="memname"><a class="el" href="structUcxMap.html">UcxMap</a>* ucx_map_difference </td> 53.987 + <td>(</td> 53.988 + <td class="paramtype">const <a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.989 + <td class="paramname"><em>first</em>, </td> 53.990 + </tr> 53.991 + <tr> 53.992 + <td class="paramkey"></td> 53.993 + <td></td> 53.994 + <td class="paramtype">const <a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.995 + <td class="paramname"><em>second</em>, </td> 53.996 + </tr> 53.997 + <tr> 53.998 + <td class="paramkey"></td> 53.999 + <td></td> 53.1000 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 53.1001 + <td class="paramname"><em>cpfnc</em>, </td> 53.1002 + </tr> 53.1003 + <tr> 53.1004 + <td class="paramkey"></td> 53.1005 + <td></td> 53.1006 + <td class="paramtype">void * </td> 53.1007 + <td class="paramname"><em>cpdata</em> </td> 53.1008 + </tr> 53.1009 + <tr> 53.1010 + <td></td> 53.1011 + <td>)</td> 53.1012 + <td></td><td></td> 53.1013 + </tr> 53.1014 + </table> 53.1015 +</div><div class="memdoc"> 53.1016 + 53.1017 +<p>Returns the difference of two maps. </p> 53.1018 +<p>The difference contains a copy of all elements of the first map for which the corresponding keys cannot be found in the second map.</p> 53.1019 +<dl class="params"><dt>Parameters</dt><dd> 53.1020 + <table class="params"> 53.1021 + <tr><td class="paramname">first</td><td>the first source map </td></tr> 53.1022 + <tr><td class="paramname">second</td><td>the second source map </td></tr> 53.1023 + <tr><td class="paramname">cpfnc</td><td>a function to copy the elements </td></tr> 53.1024 + <tr><td class="paramname">cpdata</td><td>additional data for the copy function </td></tr> 53.1025 + </table> 53.1026 + </dd> 53.1027 +</dl> 53.1028 +<dl class="section return"><dt>Returns</dt><dd>a new list containing the difference </dd></dl> 53.1029 + 53.1030 +</div> 53.1031 +</div> 53.1032 +<a id="ad0ba103494247d798ac3037c50fc8831"></a> 53.1033 +<h2 class="memtitle"><span class="permalink"><a href="#ad0ba103494247d798ac3037c50fc8831">◆ </a></span>ucx_map_difference_a()</h2> 53.1034 + 53.1035 +<div class="memitem"> 53.1036 +<div class="memproto"> 53.1037 + <table class="memname"> 53.1038 + <tr> 53.1039 + <td class="memname"><a class="el" href="structUcxMap.html">UcxMap</a>* ucx_map_difference_a </td> 53.1040 + <td>(</td> 53.1041 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 53.1042 + <td class="paramname"><em>allocator</em>, </td> 53.1043 + </tr> 53.1044 + <tr> 53.1045 + <td class="paramkey"></td> 53.1046 + <td></td> 53.1047 + <td class="paramtype">const <a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.1048 + <td class="paramname"><em>first</em>, </td> 53.1049 + </tr> 53.1050 + <tr> 53.1051 + <td class="paramkey"></td> 53.1052 + <td></td> 53.1053 + <td class="paramtype">const <a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.1054 + <td class="paramname"><em>second</em>, </td> 53.1055 + </tr> 53.1056 + <tr> 53.1057 + <td class="paramkey"></td> 53.1058 + <td></td> 53.1059 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 53.1060 + <td class="paramname"><em>cpfnc</em>, </td> 53.1061 + </tr> 53.1062 + <tr> 53.1063 + <td class="paramkey"></td> 53.1064 + <td></td> 53.1065 + <td class="paramtype">void * </td> 53.1066 + <td class="paramname"><em>cpdata</em> </td> 53.1067 + </tr> 53.1068 + <tr> 53.1069 + <td></td> 53.1070 + <td>)</td> 53.1071 + <td></td><td></td> 53.1072 + </tr> 53.1073 + </table> 53.1074 +</div><div class="memdoc"> 53.1075 + 53.1076 +<p>Returns the difference of two maps. </p> 53.1077 +<p>The difference contains a copy of all elements of the first map for which the corresponding keys cannot be found in the second map.</p> 53.1078 +<dl class="params"><dt>Parameters</dt><dd> 53.1079 + <table class="params"> 53.1080 + <tr><td class="paramname">allocator</td><td>the allocator that shall be used by the new map </td></tr> 53.1081 + <tr><td class="paramname">first</td><td>the first source map </td></tr> 53.1082 + <tr><td class="paramname">second</td><td>the second source map </td></tr> 53.1083 + <tr><td class="paramname">cpfnc</td><td>a function to copy the elements </td></tr> 53.1084 + <tr><td class="paramname">cpdata</td><td>additional data for the copy function </td></tr> 53.1085 + </table> 53.1086 + </dd> 53.1087 +</dl> 53.1088 +<dl class="section return"><dt>Returns</dt><dd>a new list containing the difference </dd></dl> 53.1089 + 53.1090 +</div> 53.1091 +</div> 53.1092 +<a id="abe3d9688e4224bf7bb962abf25ff8c2e"></a> 53.1093 +<h2 class="memtitle"><span class="permalink"><a href="#abe3d9688e4224bf7bb962abf25ff8c2e">◆ </a></span>ucx_map_free()</h2> 53.1094 + 53.1095 +<div class="memitem"> 53.1096 +<div class="memproto"> 53.1097 + <table class="memname"> 53.1098 + <tr> 53.1099 + <td class="memname">void ucx_map_free </td> 53.1100 + <td>(</td> 53.1101 + <td class="paramtype"><a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.1102 + <td class="paramname"><em>map</em></td><td>)</td> 53.1103 + <td></td> 53.1104 + </tr> 53.1105 + </table> 53.1106 +</div><div class="memdoc"> 53.1107 + 53.1108 +<p>Frees a hash map. </p> 53.1109 +<p><b>Note:</b> the contents are <b>not</b> freed, use <a class="el" href="map_8h.html#a750f3d9d83e2f3788a14c17a9d160618" title="Frees the contents of a hash map. ">ucx_map_free_content()</a> before calling this function to achieve that.</p> 53.1110 +<dl class="params"><dt>Parameters</dt><dd> 53.1111 + <table class="params"> 53.1112 + <tr><td class="paramname">map</td><td>the map to be freed </td></tr> 53.1113 + </table> 53.1114 + </dd> 53.1115 +</dl> 53.1116 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#a750f3d9d83e2f3788a14c17a9d160618" title="Frees the contents of a hash map. ">ucx_map_free_content()</a> </dd></dl> 53.1117 + 53.1118 +</div> 53.1119 +</div> 53.1120 +<a id="a750f3d9d83e2f3788a14c17a9d160618"></a> 53.1121 +<h2 class="memtitle"><span class="permalink"><a href="#a750f3d9d83e2f3788a14c17a9d160618">◆ </a></span>ucx_map_free_content()</h2> 53.1122 + 53.1123 +<div class="memitem"> 53.1124 +<div class="memproto"> 53.1125 + <table class="memname"> 53.1126 + <tr> 53.1127 + <td class="memname">void ucx_map_free_content </td> 53.1128 + <td>(</td> 53.1129 + <td class="paramtype"><a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.1130 + <td class="paramname"><em>map</em>, </td> 53.1131 + </tr> 53.1132 + <tr> 53.1133 + <td class="paramkey"></td> 53.1134 + <td></td> 53.1135 + <td class="paramtype"><a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> </td> 53.1136 + <td class="paramname"><em>destr</em> </td> 53.1137 + </tr> 53.1138 + <tr> 53.1139 + <td></td> 53.1140 + <td>)</td> 53.1141 + <td></td><td></td> 53.1142 + </tr> 53.1143 + </table> 53.1144 +</div><div class="memdoc"> 53.1145 + 53.1146 +<p>Frees the contents of a hash map. </p> 53.1147 +<p>This is a convenience function that iterates over the map and passes all values to the specified destructor function.</p> 53.1148 +<p>If no destructor is specified (<code>NULL</code>), the free() function of the map's own allocator is used.</p> 53.1149 +<p>You must ensure, that it is valid to pass each value in the map to the same destructor function.</p> 53.1150 +<p>You should free or clear the map afterwards, as the contents will be invalid.</p> 53.1151 +<dl class="params"><dt>Parameters</dt><dd> 53.1152 + <table class="params"> 53.1153 + <tr><td class="paramname">map</td><td>for which the contents shall be freed </td></tr> 53.1154 + <tr><td class="paramname">destr</td><td>optional pointer to a destructor function </td></tr> 53.1155 + </table> 53.1156 + </dd> 53.1157 +</dl> 53.1158 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#abe3d9688e4224bf7bb962abf25ff8c2e" title="Frees a hash map. ">ucx_map_free()</a> </dd> 53.1159 +<dd> 53.1160 +<a class="el" href="map_8h.html#a285e90e40681c6d9631c935dda0967f2" title="Clears a hash map. ">ucx_map_clear()</a> </dd></dl> 53.1161 + 53.1162 +</div> 53.1163 +</div> 53.1164 +<a id="ab61192c5af2e06ecb9ad73880d1c95a6"></a> 53.1165 +<h2 class="memtitle"><span class="permalink"><a href="#ab61192c5af2e06ecb9ad73880d1c95a6">◆ </a></span>ucx_map_get()</h2> 53.1166 + 53.1167 +<div class="memitem"> 53.1168 +<div class="memproto"> 53.1169 + <table class="memname"> 53.1170 + <tr> 53.1171 + <td class="memname">void* ucx_map_get </td> 53.1172 + <td>(</td> 53.1173 + <td class="paramtype"><a class="el" href="structUcxMap.html">UcxMap</a> const * </td> 53.1174 + <td class="paramname"><em>map</em>, </td> 53.1175 + </tr> 53.1176 + <tr> 53.1177 + <td class="paramkey"></td> 53.1178 + <td></td> 53.1179 + <td class="paramtype"><a class="el" href="structUcxKey.html">UcxKey</a> </td> 53.1180 + <td class="paramname"><em>key</em> </td> 53.1181 + </tr> 53.1182 + <tr> 53.1183 + <td></td> 53.1184 + <td>)</td> 53.1185 + <td></td><td></td> 53.1186 + </tr> 53.1187 + </table> 53.1188 +</div><div class="memdoc"> 53.1189 + 53.1190 +<p>Retrieves a value by using a key. </p> 53.1191 +<dl class="params"><dt>Parameters</dt><dd> 53.1192 + <table class="params"> 53.1193 + <tr><td class="paramname">map</td><td>the map </td></tr> 53.1194 + <tr><td class="paramname">key</td><td>the key </td></tr> 53.1195 + </table> 53.1196 + </dd> 53.1197 +</dl> 53.1198 +<dl class="section return"><dt>Returns</dt><dd>the value </dd></dl> 53.1199 + 53.1200 +</div> 53.1201 +</div> 53.1202 +<a id="aa594d7a5afebc3bed6bb265348cf6b0d"></a> 53.1203 +<h2 class="memtitle"><span class="permalink"><a href="#aa594d7a5afebc3bed6bb265348cf6b0d">◆ </a></span>ucx_map_intersection()</h2> 53.1204 + 53.1205 +<div class="memitem"> 53.1206 +<div class="memproto"> 53.1207 + <table class="memname"> 53.1208 + <tr> 53.1209 + <td class="memname"><a class="el" href="structUcxMap.html">UcxMap</a>* ucx_map_intersection </td> 53.1210 + <td>(</td> 53.1211 + <td class="paramtype">const <a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.1212 + <td class="paramname"><em>first</em>, </td> 53.1213 + </tr> 53.1214 + <tr> 53.1215 + <td class="paramkey"></td> 53.1216 + <td></td> 53.1217 + <td class="paramtype">const <a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.1218 + <td class="paramname"><em>second</em>, </td> 53.1219 + </tr> 53.1220 + <tr> 53.1221 + <td class="paramkey"></td> 53.1222 + <td></td> 53.1223 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 53.1224 + <td class="paramname"><em>cpfnc</em>, </td> 53.1225 + </tr> 53.1226 + <tr> 53.1227 + <td class="paramkey"></td> 53.1228 + <td></td> 53.1229 + <td class="paramtype">void * </td> 53.1230 + <td class="paramname"><em>cpdata</em> </td> 53.1231 + </tr> 53.1232 + <tr> 53.1233 + <td></td> 53.1234 + <td>)</td> 53.1235 + <td></td><td></td> 53.1236 + </tr> 53.1237 + </table> 53.1238 +</div><div class="memdoc"> 53.1239 + 53.1240 +<p>Returns the intersection of two maps. </p> 53.1241 +<p>The intersection is defined as a copy of the first map with every element removed that has no valid key in the second map.</p> 53.1242 +<dl class="params"><dt>Parameters</dt><dd> 53.1243 + <table class="params"> 53.1244 + <tr><td class="paramname">first</td><td>the first source map </td></tr> 53.1245 + <tr><td class="paramname">second</td><td>the second source map </td></tr> 53.1246 + <tr><td class="paramname">cpfnc</td><td>a function to copy the elements </td></tr> 53.1247 + <tr><td class="paramname">cpdata</td><td>additional data for the copy function </td></tr> 53.1248 + </table> 53.1249 + </dd> 53.1250 +</dl> 53.1251 +<dl class="section return"><dt>Returns</dt><dd>a new map containing the intersection </dd></dl> 53.1252 + 53.1253 +</div> 53.1254 +</div> 53.1255 +<a id="a169e0470a20484dd76425fdf77e3651e"></a> 53.1256 +<h2 class="memtitle"><span class="permalink"><a href="#a169e0470a20484dd76425fdf77e3651e">◆ </a></span>ucx_map_intersection_a()</h2> 53.1257 + 53.1258 +<div class="memitem"> 53.1259 +<div class="memproto"> 53.1260 + <table class="memname"> 53.1261 + <tr> 53.1262 + <td class="memname"><a class="el" href="structUcxMap.html">UcxMap</a>* ucx_map_intersection_a </td> 53.1263 + <td>(</td> 53.1264 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 53.1265 + <td class="paramname"><em>allocator</em>, </td> 53.1266 + </tr> 53.1267 + <tr> 53.1268 + <td class="paramkey"></td> 53.1269 + <td></td> 53.1270 + <td class="paramtype">const <a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.1271 + <td class="paramname"><em>first</em>, </td> 53.1272 + </tr> 53.1273 + <tr> 53.1274 + <td class="paramkey"></td> 53.1275 + <td></td> 53.1276 + <td class="paramtype">const <a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.1277 + <td class="paramname"><em>second</em>, </td> 53.1278 + </tr> 53.1279 + <tr> 53.1280 + <td class="paramkey"></td> 53.1281 + <td></td> 53.1282 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 53.1283 + <td class="paramname"><em>cpfnc</em>, </td> 53.1284 + </tr> 53.1285 + <tr> 53.1286 + <td class="paramkey"></td> 53.1287 + <td></td> 53.1288 + <td class="paramtype">void * </td> 53.1289 + <td class="paramname"><em>cpdata</em> </td> 53.1290 + </tr> 53.1291 + <tr> 53.1292 + <td></td> 53.1293 + <td>)</td> 53.1294 + <td></td><td></td> 53.1295 + </tr> 53.1296 + </table> 53.1297 +</div><div class="memdoc"> 53.1298 + 53.1299 +<p>Returns the intersection of two maps. </p> 53.1300 +<p>The intersection is defined as a copy of the first map with every element removed that has no valid key in the second map.</p> 53.1301 +<dl class="params"><dt>Parameters</dt><dd> 53.1302 + <table class="params"> 53.1303 + <tr><td class="paramname">allocator</td><td>the allocator that shall be used by the new map </td></tr> 53.1304 + <tr><td class="paramname">first</td><td>the first source map </td></tr> 53.1305 + <tr><td class="paramname">second</td><td>the second source map </td></tr> 53.1306 + <tr><td class="paramname">cpfnc</td><td>a function to copy the elements </td></tr> 53.1307 + <tr><td class="paramname">cpdata</td><td>additional data for the copy function </td></tr> 53.1308 + </table> 53.1309 + </dd> 53.1310 +</dl> 53.1311 +<dl class="section return"><dt>Returns</dt><dd>a new map containing the intersection </dd></dl> 53.1312 + 53.1313 +</div> 53.1314 +</div> 53.1315 +<a id="aceb8675abf44860b4bbc301bbada5b91"></a> 53.1316 +<h2 class="memtitle"><span class="permalink"><a href="#aceb8675abf44860b4bbc301bbada5b91">◆ </a></span>ucx_map_iter_next()</h2> 53.1317 + 53.1318 +<div class="memitem"> 53.1319 +<div class="memproto"> 53.1320 + <table class="memname"> 53.1321 + <tr> 53.1322 + <td class="memname">int ucx_map_iter_next </td> 53.1323 + <td>(</td> 53.1324 + <td class="paramtype"><a class="el" href="structUcxMapIterator.html">UcxMapIterator</a> * </td> 53.1325 + <td class="paramname"><em>iterator</em>, </td> 53.1326 + </tr> 53.1327 + <tr> 53.1328 + <td class="paramkey"></td> 53.1329 + <td></td> 53.1330 + <td class="paramtype"><a class="el" href="structUcxKey.html">UcxKey</a> * </td> 53.1331 + <td class="paramname"><em>key</em>, </td> 53.1332 + </tr> 53.1333 + <tr> 53.1334 + <td class="paramkey"></td> 53.1335 + <td></td> 53.1336 + <td class="paramtype">void ** </td> 53.1337 + <td class="paramname"><em>value</em> </td> 53.1338 + </tr> 53.1339 + <tr> 53.1340 + <td></td> 53.1341 + <td>)</td> 53.1342 + <td></td><td></td> 53.1343 + </tr> 53.1344 + </table> 53.1345 +</div><div class="memdoc"> 53.1346 + 53.1347 +<p>Proceeds to the next element of the map (if any). </p> 53.1348 +<p>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.</p> 53.1349 +<p>If no further elements are found, this function returns zero and leaves the last found key/value-pair in memory.</p> 53.1350 +<dl class="params"><dt>Parameters</dt><dd> 53.1351 + <table class="params"> 53.1352 + <tr><td class="paramname">iterator</td><td>the iterator to use </td></tr> 53.1353 + <tr><td class="paramname">key</td><td>a pointer to the memory where to store the key </td></tr> 53.1354 + <tr><td class="paramname">value</td><td>a pointer to the memory where to store the value </td></tr> 53.1355 + </table> 53.1356 + </dd> 53.1357 +</dl> 53.1358 +<dl class="section return"><dt>Returns</dt><dd>1, if another element was found, 0 if all elements has been processed </dd></dl> 53.1359 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#a9150e9c64fdf4dfcc2cad106b91aa110" title="Creates an iterator for a map. ">ucx_map_iterator()</a> </dd></dl> 53.1360 + 53.1361 +</div> 53.1362 +</div> 53.1363 +<a id="a9150e9c64fdf4dfcc2cad106b91aa110"></a> 53.1364 +<h2 class="memtitle"><span class="permalink"><a href="#a9150e9c64fdf4dfcc2cad106b91aa110">◆ </a></span>ucx_map_iterator()</h2> 53.1365 + 53.1366 +<div class="memitem"> 53.1367 +<div class="memproto"> 53.1368 + <table class="memname"> 53.1369 + <tr> 53.1370 + <td class="memname"><a class="el" href="structUcxMapIterator.html">UcxMapIterator</a> ucx_map_iterator </td> 53.1371 + <td>(</td> 53.1372 + <td class="paramtype"><a class="el" href="structUcxMap.html">UcxMap</a> const * </td> 53.1373 + <td class="paramname"><em>map</em></td><td>)</td> 53.1374 + <td></td> 53.1375 + </tr> 53.1376 + </table> 53.1377 +</div><div class="memdoc"> 53.1378 + 53.1379 +<p>Creates an iterator for a map. </p> 53.1380 +<p><b>Note:</b> A <a class="el" href="structUcxMapIterator.html" title="Structure for an iterator over a UcxMap. ">UcxMapIterator</a> 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 <b>NOT</b> rely on the iteration order.</p> 53.1381 +<p><b>Note:</b> The iterator is <b>NOT</b> initialized. You need to call <a class="el" href="map_8h.html#aceb8675abf44860b4bbc301bbada5b91" title="Proceeds to the next element of the map (if any). ">ucx_map_iter_next()</a> at least once before accessing any information. However, it is not recommended to access the fields of a <a class="el" href="structUcxMapIterator.html" title="Structure for an iterator over a UcxMap. ">UcxMapIterator</a> directly.</p> 53.1382 +<dl class="params"><dt>Parameters</dt><dd> 53.1383 + <table class="params"> 53.1384 + <tr><td class="paramname">map</td><td>the map to create the iterator for </td></tr> 53.1385 + </table> 53.1386 + </dd> 53.1387 +</dl> 53.1388 +<dl class="section return"><dt>Returns</dt><dd>an iterator initialized on the first element of the first element list </dd></dl> 53.1389 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="map_8h.html#aceb8675abf44860b4bbc301bbada5b91" title="Proceeds to the next element of the map (if any). ">ucx_map_iter_next()</a> </dd></dl> 53.1390 + 53.1391 +</div> 53.1392 +</div> 53.1393 +<a id="a79f31de8b93814493759dbc8b940cf0c"></a> 53.1394 +<h2 class="memtitle"><span class="permalink"><a href="#a79f31de8b93814493759dbc8b940cf0c">◆ </a></span>ucx_map_new()</h2> 53.1395 + 53.1396 +<div class="memitem"> 53.1397 +<div class="memproto"> 53.1398 + <table class="memname"> 53.1399 + <tr> 53.1400 + <td class="memname"><a class="el" href="structUcxMap.html">UcxMap</a>* ucx_map_new </td> 53.1401 + <td>(</td> 53.1402 + <td class="paramtype">size_t </td> 53.1403 + <td class="paramname"><em>size</em></td><td>)</td> 53.1404 + <td></td> 53.1405 + </tr> 53.1406 + </table> 53.1407 +</div><div class="memdoc"> 53.1408 + 53.1409 +<p>Creates a new hash map with the specified size. </p> 53.1410 +<dl class="params"><dt>Parameters</dt><dd> 53.1411 + <table class="params"> 53.1412 + <tr><td class="paramname">size</td><td>the size of the hash map </td></tr> 53.1413 + </table> 53.1414 + </dd> 53.1415 +</dl> 53.1416 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the new hash map </dd></dl> 53.1417 + 53.1418 +</div> 53.1419 +</div> 53.1420 +<a id="aed508a94c66cc15372503c64b70eb03e"></a> 53.1421 +<h2 class="memtitle"><span class="permalink"><a href="#aed508a94c66cc15372503c64b70eb03e">◆ </a></span>ucx_map_new_a()</h2> 53.1422 + 53.1423 +<div class="memitem"> 53.1424 +<div class="memproto"> 53.1425 + <table class="memname"> 53.1426 + <tr> 53.1427 + <td class="memname"><a class="el" href="structUcxMap.html">UcxMap</a>* ucx_map_new_a </td> 53.1428 + <td>(</td> 53.1429 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 53.1430 + <td class="paramname"><em>allocator</em>, </td> 53.1431 + </tr> 53.1432 + <tr> 53.1433 + <td class="paramkey"></td> 53.1434 + <td></td> 53.1435 + <td class="paramtype">size_t </td> 53.1436 + <td class="paramname"><em>size</em> </td> 53.1437 + </tr> 53.1438 + <tr> 53.1439 + <td></td> 53.1440 + <td>)</td> 53.1441 + <td></td><td></td> 53.1442 + </tr> 53.1443 + </table> 53.1444 +</div><div class="memdoc"> 53.1445 + 53.1446 +<p>Creates a new hash map with the specified size using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. </p> 53.1447 +<dl class="params"><dt>Parameters</dt><dd> 53.1448 + <table class="params"> 53.1449 + <tr><td class="paramname">allocator</td><td>the allocator to use </td></tr> 53.1450 + <tr><td class="paramname">size</td><td>the size of the hash map </td></tr> 53.1451 + </table> 53.1452 + </dd> 53.1453 +</dl> 53.1454 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the new hash map </dd></dl> 53.1455 + 53.1456 +</div> 53.1457 +</div> 53.1458 +<a id="ac04a08b604217070254d4c58f0e82498"></a> 53.1459 +<h2 class="memtitle"><span class="permalink"><a href="#ac04a08b604217070254d4c58f0e82498">◆ </a></span>ucx_map_put()</h2> 53.1460 + 53.1461 +<div class="memitem"> 53.1462 +<div class="memproto"> 53.1463 + <table class="memname"> 53.1464 + <tr> 53.1465 + <td class="memname">int ucx_map_put </td> 53.1466 + <td>(</td> 53.1467 + <td class="paramtype"><a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.1468 + <td class="paramname"><em>map</em>, </td> 53.1469 + </tr> 53.1470 + <tr> 53.1471 + <td class="paramkey"></td> 53.1472 + <td></td> 53.1473 + <td class="paramtype"><a class="el" href="structUcxKey.html">UcxKey</a> </td> 53.1474 + <td class="paramname"><em>key</em>, </td> 53.1475 + </tr> 53.1476 + <tr> 53.1477 + <td class="paramkey"></td> 53.1478 + <td></td> 53.1479 + <td class="paramtype">void * </td> 53.1480 + <td class="paramname"><em>value</em> </td> 53.1481 + </tr> 53.1482 + <tr> 53.1483 + <td></td> 53.1484 + <td>)</td> 53.1485 + <td></td><td></td> 53.1486 + </tr> 53.1487 + </table> 53.1488 +</div><div class="memdoc"> 53.1489 + 53.1490 +<p>Puts a key/value-pair into the map. </p> 53.1491 +<dl class="params"><dt>Parameters</dt><dd> 53.1492 + <table class="params"> 53.1493 + <tr><td class="paramname">map</td><td>the map </td></tr> 53.1494 + <tr><td class="paramname">key</td><td>the key </td></tr> 53.1495 + <tr><td class="paramname">value</td><td>the value </td></tr> 53.1496 + </table> 53.1497 + </dd> 53.1498 +</dl> 53.1499 +<dl class="section return"><dt>Returns</dt><dd>0 on success, non-zero value on failure </dd></dl> 53.1500 + 53.1501 +</div> 53.1502 +</div> 53.1503 +<a id="a174bce9fad554dd92b8da354e0d32512"></a> 53.1504 +<h2 class="memtitle"><span class="permalink"><a href="#a174bce9fad554dd92b8da354e0d32512">◆ </a></span>ucx_map_rehash()</h2> 53.1505 + 53.1506 +<div class="memitem"> 53.1507 +<div class="memproto"> 53.1508 + <table class="memname"> 53.1509 + <tr> 53.1510 + <td class="memname">int ucx_map_rehash </td> 53.1511 + <td>(</td> 53.1512 + <td class="paramtype"><a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.1513 + <td class="paramname"><em>map</em></td><td>)</td> 53.1514 + <td></td> 53.1515 + </tr> 53.1516 + </table> 53.1517 +</div><div class="memdoc"> 53.1518 + 53.1519 +<p>Increases size of the hash map, if necessary. </p> 53.1520 +<p>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.</p> 53.1521 +<p>The rehashing process ensures, that the <a class="el" href="structUcxMap.html#afe120846b26d99580a7ff1276464e838" title="The size of the map is the length of the element list array. ">UcxMap.size</a> is at least 2.5*UcxMap.count. So there is enough room for additional elements without the need of another soon rehashing.</p> 53.1522 +<p>You can use this function to dramatically increase access performance.</p> 53.1523 +<dl class="params"><dt>Parameters</dt><dd> 53.1524 + <table class="params"> 53.1525 + <tr><td class="paramname">map</td><td>the map to rehash </td></tr> 53.1526 + </table> 53.1527 + </dd> 53.1528 +</dl> 53.1529 +<dl class="section return"><dt>Returns</dt><dd>1, if a memory allocation error occurred, 0 otherwise </dd></dl> 53.1530 + 53.1531 +</div> 53.1532 +</div> 53.1533 +<a id="a17248a4888eb8f9ae18be522d64632aa"></a> 53.1534 +<h2 class="memtitle"><span class="permalink"><a href="#a17248a4888eb8f9ae18be522d64632aa">◆ </a></span>ucx_map_remove()</h2> 53.1535 + 53.1536 +<div class="memitem"> 53.1537 +<div class="memproto"> 53.1538 + <table class="memname"> 53.1539 + <tr> 53.1540 + <td class="memname">void* ucx_map_remove </td> 53.1541 + <td>(</td> 53.1542 + <td class="paramtype"><a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.1543 + <td class="paramname"><em>map</em>, </td> 53.1544 + </tr> 53.1545 + <tr> 53.1546 + <td class="paramkey"></td> 53.1547 + <td></td> 53.1548 + <td class="paramtype"><a class="el" href="structUcxKey.html">UcxKey</a> </td> 53.1549 + <td class="paramname"><em>key</em> </td> 53.1550 + </tr> 53.1551 + <tr> 53.1552 + <td></td> 53.1553 + <td>)</td> 53.1554 + <td></td><td></td> 53.1555 + </tr> 53.1556 + </table> 53.1557 +</div><div class="memdoc"> 53.1558 + 53.1559 +<p>Removes a key/value-pair from the map by using the key. </p> 53.1560 +<dl class="params"><dt>Parameters</dt><dd> 53.1561 + <table class="params"> 53.1562 + <tr><td class="paramname">map</td><td>the map </td></tr> 53.1563 + <tr><td class="paramname">key</td><td>the key </td></tr> 53.1564 + </table> 53.1565 + </dd> 53.1566 +</dl> 53.1567 +<dl class="section return"><dt>Returns</dt><dd>the removed value </dd></dl> 53.1568 + 53.1569 +</div> 53.1570 +</div> 53.1571 +<a id="a3f65978c481af7f637cad021d93522d5"></a> 53.1572 +<h2 class="memtitle"><span class="permalink"><a href="#a3f65978c481af7f637cad021d93522d5">◆ </a></span>ucx_map_union()</h2> 53.1573 + 53.1574 +<div class="memitem"> 53.1575 +<div class="memproto"> 53.1576 + <table class="memname"> 53.1577 + <tr> 53.1578 + <td class="memname"><a class="el" href="structUcxMap.html">UcxMap</a>* ucx_map_union </td> 53.1579 + <td>(</td> 53.1580 + <td class="paramtype">const <a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.1581 + <td class="paramname"><em>first</em>, </td> 53.1582 + </tr> 53.1583 + <tr> 53.1584 + <td class="paramkey"></td> 53.1585 + <td></td> 53.1586 + <td class="paramtype">const <a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.1587 + <td class="paramname"><em>second</em>, </td> 53.1588 + </tr> 53.1589 + <tr> 53.1590 + <td class="paramkey"></td> 53.1591 + <td></td> 53.1592 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 53.1593 + <td class="paramname"><em>cpfnc</em>, </td> 53.1594 + </tr> 53.1595 + <tr> 53.1596 + <td class="paramkey"></td> 53.1597 + <td></td> 53.1598 + <td class="paramtype">void * </td> 53.1599 + <td class="paramname"><em>cpdata</em> </td> 53.1600 + </tr> 53.1601 + <tr> 53.1602 + <td></td> 53.1603 + <td>)</td> 53.1604 + <td></td><td></td> 53.1605 + </tr> 53.1606 + </table> 53.1607 +</div><div class="memdoc"> 53.1608 + 53.1609 +<p>Returns the union of two maps. </p> 53.1610 +<p>The union is a fresh map which is filled by two successive calls of <a class="el" href="map_8h.html#adfeb2d61003fd2896bcfdc9a57f36425" title="Copies contents from a map to another map using a copy function. ">ucx_map_copy()</a> on the two input maps.</p> 53.1611 +<dl class="params"><dt>Parameters</dt><dd> 53.1612 + <table class="params"> 53.1613 + <tr><td class="paramname">first</td><td>the first source map </td></tr> 53.1614 + <tr><td class="paramname">second</td><td>the second source map </td></tr> 53.1615 + <tr><td class="paramname">cpfnc</td><td>a function to copy the elements </td></tr> 53.1616 + <tr><td class="paramname">cpdata</td><td>additional data for the copy function </td></tr> 53.1617 + </table> 53.1618 + </dd> 53.1619 +</dl> 53.1620 +<dl class="section return"><dt>Returns</dt><dd>a new map containing the union </dd></dl> 53.1621 + 53.1622 +</div> 53.1623 +</div> 53.1624 +<a id="ab6370c3fa8113fdad593ce4b0460c9c6"></a> 53.1625 +<h2 class="memtitle"><span class="permalink"><a href="#ab6370c3fa8113fdad593ce4b0460c9c6">◆ </a></span>ucx_map_union_a()</h2> 53.1626 + 53.1627 +<div class="memitem"> 53.1628 +<div class="memproto"> 53.1629 + <table class="memname"> 53.1630 + <tr> 53.1631 + <td class="memname"><a class="el" href="structUcxMap.html">UcxMap</a>* ucx_map_union_a </td> 53.1632 + <td>(</td> 53.1633 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 53.1634 + <td class="paramname"><em>allocator</em>, </td> 53.1635 + </tr> 53.1636 + <tr> 53.1637 + <td class="paramkey"></td> 53.1638 + <td></td> 53.1639 + <td class="paramtype">const <a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.1640 + <td class="paramname"><em>first</em>, </td> 53.1641 + </tr> 53.1642 + <tr> 53.1643 + <td class="paramkey"></td> 53.1644 + <td></td> 53.1645 + <td class="paramtype">const <a class="el" href="structUcxMap.html">UcxMap</a> * </td> 53.1646 + <td class="paramname"><em>second</em>, </td> 53.1647 + </tr> 53.1648 + <tr> 53.1649 + <td class="paramkey"></td> 53.1650 + <td></td> 53.1651 + <td class="paramtype"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> </td> 53.1652 + <td class="paramname"><em>cpfnc</em>, </td> 53.1653 + </tr> 53.1654 + <tr> 53.1655 + <td class="paramkey"></td> 53.1656 + <td></td> 53.1657 + <td class="paramtype">void * </td> 53.1658 + <td class="paramname"><em>cpdata</em> </td> 53.1659 + </tr> 53.1660 + <tr> 53.1661 + <td></td> 53.1662 + <td>)</td> 53.1663 + <td></td><td></td> 53.1664 + </tr> 53.1665 + </table> 53.1666 +</div><div class="memdoc"> 53.1667 + 53.1668 +<p>Returns the union of two maps. </p> 53.1669 +<p>The union is a fresh map which is filled by two successive calls of <a class="el" href="map_8h.html#adfeb2d61003fd2896bcfdc9a57f36425" title="Copies contents from a map to another map using a copy function. ">ucx_map_copy()</a> on the two input maps.</p> 53.1670 +<dl class="params"><dt>Parameters</dt><dd> 53.1671 + <table class="params"> 53.1672 + <tr><td class="paramname">allocator</td><td>the allocator that shall be used by the new map </td></tr> 53.1673 + <tr><td class="paramname">first</td><td>the first source map </td></tr> 53.1674 + <tr><td class="paramname">second</td><td>the second source map </td></tr> 53.1675 + <tr><td class="paramname">cpfnc</td><td>a function to copy the elements </td></tr> 53.1676 + <tr><td class="paramname">cpdata</td><td>additional data for the copy function </td></tr> 53.1677 + </table> 53.1678 + </dd> 53.1679 +</dl> 53.1680 +<dl class="section return"><dt>Returns</dt><dd>a new map containing the union </dd></dl> 53.1681 + 53.1682 +</div> 53.1683 +</div> 53.1684 +</div><!-- contents --> 53.1685 +<!-- start footer part --> 53.1686 +<hr class="footer"/><address class="footer"><small> 53.1687 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 53.1688 +<img class="footer" src="doxygen.png" alt="doxygen"/> 53.1689 +</a> 1.8.13 53.1690 +</small></address> 53.1691 +</body> 53.1692 +</html>
54.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 54.2 +++ b/docs/api-2.1/map_8h_source.html Sat Feb 06 19:11:44 2021 +0100 54.3 @@ -0,0 +1,127 @@ 54.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 54.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 54.6 +<head> 54.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 54.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 54.9 +<meta name="generator" content="Doxygen 1.8.13"/> 54.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 54.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/map.h Source File</title> 54.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 54.13 +<script type="text/javascript" src="jquery.js"></script> 54.14 +<script type="text/javascript" src="dynsections.js"></script> 54.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 54.16 +<script type="text/javascript" src="search/searchdata.js"></script> 54.17 +<script type="text/javascript" src="search/search.js"></script> 54.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 54.19 +</head> 54.20 +<body> 54.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 54.22 +<div id="titlearea"> 54.23 +<table cellspacing="0" cellpadding="0"> 54.24 + <tbody> 54.25 + <tr style="height: 56px;"> 54.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 54.27 + <td id="projectalign" style="padding-left: 0.5em;"> 54.28 + <div id="projectname">ucx 54.29 + </div> 54.30 + <div id="projectbrief">UAP Common Extensions</div> 54.31 + </td> 54.32 + </tr> 54.33 + </tbody> 54.34 +</table> 54.35 +</div> 54.36 +<!-- end header part --> 54.37 +<!-- Generated by Doxygen 1.8.13 --> 54.38 +<script type="text/javascript"> 54.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 54.40 +</script> 54.41 +<script type="text/javascript" src="menudata.js"></script> 54.42 +<script type="text/javascript" src="menu.js"></script> 54.43 +<script type="text/javascript"> 54.44 +$(function() { 54.45 + initMenu('',true,false,'search.php','Search'); 54.46 + $(document).ready(function() { init_search(); }); 54.47 +}); 54.48 +</script> 54.49 +<div id="main-nav"></div> 54.50 +<!-- window showing the filter options --> 54.51 +<div id="MSearchSelectWindow" 54.52 + onmouseover="return searchBox.OnSearchSelectShow()" 54.53 + onmouseout="return searchBox.OnSearchSelectHide()" 54.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 54.55 +</div> 54.56 + 54.57 +<!-- iframe showing the search results (closed by default) --> 54.58 +<div id="MSearchResultsWindow"> 54.59 +<iframe src="javascript:void(0)" frameborder="0" 54.60 + name="MSearchResults" id="MSearchResults"> 54.61 +</iframe> 54.62 +</div> 54.63 + 54.64 +<div id="nav-path" class="navpath"> 54.65 + <ul> 54.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 54.67 +</div> 54.68 +</div><!-- top --> 54.69 +<div class="header"> 54.70 + <div class="headertitle"> 54.71 +<div class="title">map.h</div> </div> 54.72 +</div><!--header--> 54.73 +<div class="contents"> 54.74 +<a href="map_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are met:</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * documentation and/or other materials provided with the distribution.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#ifndef UCX_MAP_H</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#define UCX_MAP_H</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include "<a class="code" href="ucx_8h.html">ucx.h</a>"</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include "<a class="code" href="string_8h.html">string.h</a>"</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include "<a class="code" href="allocator_8h.html">allocator.h</a>"</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include <stdio.h></span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="map_8h.html#a940896c4aa1b13e54c55c04c3efc186b"> 65</a></span> <span class="preprocessor">#define UCX_MAP_FOREACH(key,value,iter) \</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor"> for(UcxKey key;ucx_map_iter_next(&iter,&key, (void**)&value);)</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="map_8h.html#a18e21948725b2da68c35da587a722033"> 69</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structUcxMap.html">UcxMap</a> <a class="code" href="structUcxMap.html">UcxMap</a>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> </div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="map_8h.html#ad63828bb23123fc01a5315a2bac3b142"> 72</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structUcxKey.html">UcxKey</a> <a class="code" href="structUcxKey.html">UcxKey</a>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00075"></a><span class="lineno"><a class="line" href="map_8h.html#ad7d7a910a32113eb93eae11c3dc97b4b"> 75</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structUcxMapElement.html">UcxMapElement</a> <a class="code" href="structUcxMapElement.html">UcxMapElement</a>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="map_8h.html#ae36aff5f645948c54f51578b11fd87fb"> 78</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structUcxMapIterator.html">UcxMapIterator</a> <a class="code" href="structUcxMapIterator.html">UcxMapIterator</a>;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> </div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="structUcxMap.html"> 81</a></span> <span class="keyword">struct </span><a class="code" href="structUcxMap.html">UcxMap</a> {</div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="structUcxMap.html#a531f3e481c1c331cf037b916192e974d"> 83</a></span>  <a class="code" href="structUcxAllocator.html">UcxAllocator</a> *<a class="code" href="structUcxMap.html#a531f3e481c1c331cf037b916192e974d">allocator</a>;</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790"> 85</a></span>  <a class="code" href="structUcxMapElement.html">UcxMapElement</a> **<a class="code" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790">map</a>;</div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="structUcxMap.html#afe120846b26d99580a7ff1276464e838"> 87</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxMap.html#afe120846b26d99580a7ff1276464e838">size</a>;</div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="structUcxMap.html#a14e9163f71f6c014dfa2103de70ae9cd"> 89</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxMap.html#a14e9163f71f6c014dfa2103de70ae9cd">count</a>;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> };</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> </div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="structUcxKey.html"> 93</a></span> <span class="keyword">struct </span><a class="code" href="structUcxKey.html">UcxKey</a> {</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="structUcxKey.html#a6176109f25b34f3fa92bcfbc8ae7a88c"> 95</a></span>  <span class="keyword">const</span> <span class="keywordtype">void</span> *<a class="code" href="structUcxKey.html#a6176109f25b34f3fa92bcfbc8ae7a88c">data</a>;</div><div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="structUcxKey.html#abef01de37f355688f2ac797d2c280683"> 97</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxKey.html#abef01de37f355688f2ac797d2c280683">len</a>;</div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="structUcxKey.html#aac9d372ac34a4cbd8459e2b04e505752"> 99</a></span>  <span class="keywordtype">int</span> <a class="code" href="structUcxKey.html#aac9d372ac34a4cbd8459e2b04e505752">hash</a>;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> };</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="structUcxMapKey.html"> 103</a></span> <span class="keyword">struct </span><a class="code" href="structUcxMapKey.html">UcxMapKey</a> {</div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="structUcxMapKey.html#ab71d1841e4f538628c00f782267fb6d5"> 105</a></span>  <span class="keywordtype">void</span> *<a class="code" href="structUcxMapKey.html#ab71d1841e4f538628c00f782267fb6d5">data</a>;</div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="structUcxMapKey.html#a504d46caa45c79cd87ff8cd835654270"> 107</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxMapKey.html#a504d46caa45c79cd87ff8cd835654270">len</a>;</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="structUcxMapKey.html#a34c1f8fec98174583944fffd30e7c913"> 109</a></span>  <span class="keywordtype">int</span> <a class="code" href="structUcxMapKey.html#a34c1f8fec98174583944fffd30e7c913">hash</a>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> };</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="structUcxMapElement.html"> 113</a></span> <span class="keyword">struct </span><a class="code" href="structUcxMapElement.html">UcxMapElement</a> {</div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="structUcxMapElement.html#abbd7f3bf5beef370f702d2d5bb07733c"> 115</a></span>  <span class="keywordtype">void</span> *<a class="code" href="structUcxMapElement.html#abbd7f3bf5beef370f702d2d5bb07733c">data</a>;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  </div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="structUcxMapElement.html#a99fe8188b0889201d70ff5f922deef51"> 118</a></span>  <a class="code" href="structUcxMapElement.html">UcxMapElement</a> *<a class="code" href="structUcxMapElement.html#a99fe8188b0889201d70ff5f922deef51">next</a>;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  </div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="structUcxMapElement.html#aa446141b708e106e2c8de1303318187c"> 121</a></span>  <span class="keyword">struct </span><a class="code" href="structUcxMapKey.html">UcxMapKey</a> key;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> };</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="structUcxMapIterator.html"> 125</a></span> <span class="keyword">struct </span><a class="code" href="structUcxMapIterator.html">UcxMapIterator</a> {</div><div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="structUcxMapIterator.html#af88d6e22547d09fe1d665dd650dcdb95"> 127</a></span>  <a class="code" href="structUcxMap.html">UcxMap</a> <span class="keyword">const</span> *<a class="code" href="structUcxMapIterator.html#af88d6e22547d09fe1d665dd650dcdb95">map</a>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  </div><div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="structUcxMapIterator.html#af1fc40f899f37280adb5b85acf6e742f"> 130</a></span>  <a class="code" href="structUcxMapElement.html">UcxMapElement</a> *<a class="code" href="structUcxMapIterator.html#af1fc40f899f37280adb5b85acf6e742f">cur</a>;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  </div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="structUcxMapIterator.html#ac2376545c8816dd6895de4995e558c65"> 138</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxMapIterator.html#ac2376545c8816dd6895de4995e558c65">index</a>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> };</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <a class="code" href="structUcxMap.html">UcxMap</a> *<a class="code" href="map_8h.html#a79f31de8b93814493759dbc8b940cf0c">ucx_map_new</a>(<span class="keywordtype">size_t</span> <a class="code" href="structUcxMap.html#afe120846b26d99580a7ff1276464e838">size</a>);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <a class="code" href="structUcxMap.html">UcxMap</a> *<a class="code" href="map_8h.html#aed508a94c66cc15372503c64b70eb03e">ucx_map_new_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *<a class="code" href="structUcxMap.html#a531f3e481c1c331cf037b916192e974d">allocator</a>, <span class="keywordtype">size_t</span> <a class="code" href="structUcxMap.html#afe120846b26d99580a7ff1276464e838">size</a>);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordtype">void</span> <a class="code" href="map_8h.html#abe3d9688e4224bf7bb962abf25ff8c2e">ucx_map_free</a>(<a class="code" href="structUcxMap.html">UcxMap</a> *<a class="code" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790">map</a>);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordtype">void</span> <a class="code" href="map_8h.html#a750f3d9d83e2f3788a14c17a9d160618">ucx_map_free_content</a>(<a class="code" href="structUcxMap.html">UcxMap</a> *<a class="code" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790">map</a>, <a class="code" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> destr);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="keywordtype">void</span> <a class="code" href="map_8h.html#a285e90e40681c6d9631c935dda0967f2">ucx_map_clear</a>(<a class="code" href="structUcxMap.html">UcxMap</a> *<a class="code" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790">map</a>);</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordtype">int</span> <a class="code" href="map_8h.html#adfeb2d61003fd2896bcfdc9a57f36425">ucx_map_copy</a>(<a class="code" href="structUcxMap.html">UcxMap</a> <span class="keyword">const</span> *from, <a class="code" href="structUcxMap.html">UcxMap</a> *to, <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> fnc, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <a class="code" href="structUcxMap.html">UcxMap</a> *<a class="code" href="map_8h.html#a62c6c30cbb0d824ba710f5030ff9a4e4">ucx_map_clone</a>(<a class="code" href="structUcxMap.html">UcxMap</a> <span class="keyword">const</span> *<a class="code" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790">map</a>, <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> fnc, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <a class="code" href="structUcxMap.html">UcxMap</a> *<a class="code" href="map_8h.html#a9aea9103703d5c168420bb6bf85549ea">ucx_map_clone_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *<a class="code" href="structUcxMap.html#a531f3e481c1c331cf037b916192e974d">allocator</a>,</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <a class="code" href="structUcxMap.html">UcxMap</a> <span class="keyword">const</span> *<a class="code" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790">map</a>, <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> fnc, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keywordtype">int</span> <a class="code" href="map_8h.html#a174bce9fad554dd92b8da354e0d32512">ucx_map_rehash</a>(<a class="code" href="structUcxMap.html">UcxMap</a> *<a class="code" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790">map</a>);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> <span class="keywordtype">int</span> <a class="code" href="map_8h.html#ac04a08b604217070254d4c58f0e82498">ucx_map_put</a>(<a class="code" href="structUcxMap.html">UcxMap</a> *<a class="code" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790">map</a>, <a class="code" href="structUcxKey.html">UcxKey</a> key, <span class="keywordtype">void</span> *value);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordtype">void</span>* <a class="code" href="map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6">ucx_map_get</a>(<a class="code" href="structUcxMap.html">UcxMap</a> <span class="keyword">const</span> *<a class="code" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790">map</a>, <a class="code" href="structUcxKey.html">UcxKey</a> key);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> <span class="keywordtype">void</span>* <a class="code" href="map_8h.html#a17248a4888eb8f9ae18be522d64632aa">ucx_map_remove</a>(<a class="code" href="structUcxMap.html">UcxMap</a> *<a class="code" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790">map</a>, <a class="code" href="structUcxKey.html">UcxKey</a> key);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div><div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="map_8h.html#ac26a8615bfc8f47ee9eaceb47645f98e"> 304</a></span> <span class="preprocessor">#define ucx_map_sstr_put(map, key, value) \</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="preprocessor"> ucx_map_put(map, ucx_key(key.ptr, key.length), (void*)value)</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="map_8h.html#ad9356b01425b934ab237b52339ac0cc3"> 315</a></span> <span class="preprocessor">#define ucx_map_cstr_put(map, key, value) \</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="preprocessor"> ucx_map_put(map, ucx_key(key, strlen(key)), (void*)value)</span></div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> </div><div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="map_8h.html#aaa30af79b4068c923895619e83f44367"> 326</a></span> <span class="preprocessor">#define ucx_map_int_put(map, key, value) \</span></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span> <span class="preprocessor"> ucx_map_put(map, ucx_key(&key, sizeof(key)), (void*)value)</span></div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div><div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="map_8h.html#a14d385f6b7f371f0507861cabd2eab4e"> 336</a></span> <span class="preprocessor">#define ucx_map_sstr_get(map, key) \</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span> <span class="preprocessor"> ucx_map_get(map, ucx_key(key.ptr, key.length))</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> </div><div class="line"><a name="l00346"></a><span class="lineno"><a class="line" href="map_8h.html#a64e1fb55498fa502dd2ed8ed69062cdd"> 346</a></span> <span class="preprocessor">#define ucx_map_cstr_get(map, key) \</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="preprocessor"> ucx_map_get(map, ucx_key(key, strlen(key)))</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00356"></a><span class="lineno"><a class="line" href="map_8h.html#aa1681bd2178553cd092fd24c4d681d3c"> 356</a></span> <span class="preprocessor">#define ucx_map_int_get(map, key) \</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="preprocessor"> ucx_map_get(map, ucx_key(&key, sizeof(int)))</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div><div class="line"><a name="l00366"></a><span class="lineno"><a class="line" href="map_8h.html#a48700ea86fadb9ea54d13010f9124df2"> 366</a></span> <span class="preprocessor">#define ucx_map_sstr_remove(map, key) \</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="preprocessor"> ucx_map_remove(map, ucx_key(key.ptr, key.length))</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div><div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="map_8h.html#a9c4405a5a75ecf64e2ef3d0c6501a9fe"> 376</a></span> <span class="preprocessor">#define ucx_map_cstr_remove(map, key) \</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="preprocessor"> ucx_map_remove(map, ucx_key(key, strlen(key)))</span></div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00386"></a><span class="lineno"><a class="line" href="map_8h.html#aa767958b5468737755c09f7185b1770c"> 386</a></span> <span class="preprocessor">#define ucx_map_int_remove(map, key) \</span></div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="preprocessor"> ucx_map_remove(map, ucx_key(&key, sizeof(key)))</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> </div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <a class="code" href="structUcxKey.html">UcxKey</a> <a class="code" href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *data, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> <span class="keywordtype">int</span> <a class="code" href="map_8h.html#aea3be97254c05595d986ef6a9faae87b">ucx_hash</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *data, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> <a class="code" href="structUcxMapIterator.html">UcxMapIterator</a> <a class="code" href="map_8h.html#a9150e9c64fdf4dfcc2cad106b91aa110">ucx_map_iterator</a>(<a class="code" href="structUcxMap.html">UcxMap</a> <span class="keyword">const</span> *<a class="code" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790">map</a>);</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> </div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span> <span class="keywordtype">int</span> <a class="code" href="map_8h.html#aceb8675abf44860b4bbc301bbada5b91">ucx_map_iter_next</a>(<a class="code" href="structUcxMapIterator.html">UcxMapIterator</a> *iterator, <a class="code" href="structUcxKey.html">UcxKey</a> *key, <span class="keywordtype">void</span> **value);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span> <a class="code" href="structUcxMap.html">UcxMap</a>* <a class="code" href="map_8h.html#a3f65978c481af7f637cad021d93522d5">ucx_map_union</a>(<span class="keyword">const</span> <a class="code" href="structUcxMap.html">UcxMap</a> *first, <span class="keyword">const</span> <a class="code" href="structUcxMap.html">UcxMap</a> *second,</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, <span class="keywordtype">void</span>* cpdata);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span> <a class="code" href="structUcxMap.html">UcxMap</a>* <a class="code" href="map_8h.html#ab6370c3fa8113fdad593ce4b0460c9c6">ucx_map_union_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *<a class="code" href="structUcxMap.html#a531f3e481c1c331cf037b916192e974d">allocator</a>,</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <span class="keyword">const</span> <a class="code" href="structUcxMap.html">UcxMap</a> *first, <span class="keyword">const</span> <a class="code" href="structUcxMap.html">UcxMap</a> *second,</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, <span class="keywordtype">void</span>* cpdata);</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span> <a class="code" href="structUcxMap.html">UcxMap</a>* <a class="code" href="map_8h.html#aa594d7a5afebc3bed6bb265348cf6b0d">ucx_map_intersection</a>(<span class="keyword">const</span> <a class="code" href="structUcxMap.html">UcxMap</a> *first, <span class="keyword">const</span> <a class="code" href="structUcxMap.html">UcxMap</a> *second,</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, <span class="keywordtype">void</span>* cpdata);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span> </div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <a class="code" href="structUcxMap.html">UcxMap</a>* <a class="code" href="map_8h.html#a169e0470a20484dd76425fdf77e3651e">ucx_map_intersection_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *<a class="code" href="structUcxMap.html#a531f3e481c1c331cf037b916192e974d">allocator</a>,</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keyword">const</span> <a class="code" href="structUcxMap.html">UcxMap</a> *first, <span class="keyword">const</span> <a class="code" href="structUcxMap.html">UcxMap</a> *second,</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, <span class="keywordtype">void</span>* cpdata);</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> <a class="code" href="structUcxMap.html">UcxMap</a>* <a class="code" href="map_8h.html#a774fcff87d1e58b6c5af77dd19a8c3dc">ucx_map_difference</a>(<span class="keyword">const</span> <a class="code" href="structUcxMap.html">UcxMap</a> *first, <span class="keyword">const</span> <a class="code" href="structUcxMap.html">UcxMap</a> *second,</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, <span class="keywordtype">void</span>* cpdata);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span> </div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <a class="code" href="structUcxMap.html">UcxMap</a>* <a class="code" href="map_8h.html#ad0ba103494247d798ac3037c50fc8831">ucx_map_difference_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *<a class="code" href="structUcxMap.html#a531f3e481c1c331cf037b916192e974d">allocator</a>,</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keyword">const</span> <a class="code" href="structUcxMap.html">UcxMap</a> *first, <span class="keyword">const</span> <a class="code" href="structUcxMap.html">UcxMap</a> *second,</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <a class="code" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a> cpfnc, <span class="keywordtype">void</span>* cpdata);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> </div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> </div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_MAP_H */</span><span class="preprocessor"></span></div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div><div class="ttc" id="ucx_8h_html_aab917a5fe0965673c73e8ebd0a1fc967"><div class="ttname"><a href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a></div><div class="ttdeci">void *(* copy_func)(const void *, void *)</div><div class="ttdoc">Function pointer to a copy function. </div><div class="ttdef"><b>Definition:</b> ucx.h:106</div></div> 54.75 +<div class="ttc" id="structUcxMapIterator_html_ac2376545c8816dd6895de4995e558c65"><div class="ttname"><a href="structUcxMapIterator.html#ac2376545c8816dd6895de4995e558c65">UcxMapIterator::index</a></div><div class="ttdeci">size_t index</div><div class="ttdoc">The current index of the element list array. </div><div class="ttdef"><b>Definition:</b> map.h:138</div></div> 54.76 +<div class="ttc" id="structUcxMapKey_html_a504d46caa45c79cd87ff8cd835654270"><div class="ttname"><a href="structUcxMapKey.html#a504d46caa45c79cd87ff8cd835654270">UcxMapKey::len</a></div><div class="ttdeci">size_t len</div><div class="ttdoc">The length of the key data. </div><div class="ttdef"><b>Definition:</b> map.h:107</div></div> 54.77 +<div class="ttc" id="map_8h_html_ad0ba103494247d798ac3037c50fc8831"><div class="ttname"><a href="map_8h.html#ad0ba103494247d798ac3037c50fc8831">ucx_map_difference_a</a></div><div class="ttdeci">UcxMap * ucx_map_difference_a(UcxAllocator *allocator, const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)</div><div class="ttdoc">Returns the difference of two maps. </div><div class="ttdef"><b>Definition:</b> map.c:386</div></div> 54.78 +<div class="ttc" id="string_8h_html"><div class="ttname"><a href="string_8h.html">string.h</a></div><div class="ttdoc">Bounded string implementation. </div></div> 54.79 +<div class="ttc" id="ucx_8h_html"><div class="ttname"><a href="ucx_8h.html">ucx.h</a></div><div class="ttdoc">Main UCX Header providing most common definitions. </div></div> 54.80 +<div class="ttc" id="map_8h_html_aea3be97254c05595d986ef6a9faae87b"><div class="ttname"><a href="map_8h.html#aea3be97254c05595d986ef6a9faae87b">ucx_hash</a></div><div class="ttdeci">int ucx_hash(const char *data, size_t len)</div><div class="ttdoc">Computes a murmur hash-2. </div><div class="ttdef"><b>Definition:</b> map.c:260</div></div> 54.81 +<div class="ttc" id="structUcxMapKey_html_a34c1f8fec98174583944fffd30e7c913"><div class="ttname"><a href="structUcxMapKey.html#a34c1f8fec98174583944fffd30e7c913">UcxMapKey::hash</a></div><div class="ttdeci">int hash</div><div class="ttdoc">The hash value of the key data. </div><div class="ttdef"><b>Definition:</b> map.h:109</div></div> 54.82 +<div class="ttc" id="map_8h_html_a750f3d9d83e2f3788a14c17a9d160618"><div class="ttname"><a href="map_8h.html#a750f3d9d83e2f3788a14c17a9d160618">ucx_map_free_content</a></div><div class="ttdeci">void ucx_map_free_content(UcxMap *map, ucx_destructor destr)</div><div class="ttdoc">Frees the contents of a hash map. </div><div class="ttdef"><b>Definition:</b> map.c:85</div></div> 54.83 +<div class="ttc" id="map_8h_html_ab61192c5af2e06ecb9ad73880d1c95a6"><div class="ttname"><a href="map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6">ucx_map_get</a></div><div class="ttdeci">void * ucx_map_get(UcxMap const *map, UcxKey key)</div><div class="ttdoc">Retrieves a value by using a key. </div><div class="ttdef"><b>Definition:</b> map.c:243</div></div> 54.84 +<div class="ttc" id="map_8h_html_a9150e9c64fdf4dfcc2cad106b91aa110"><div class="ttname"><a href="map_8h.html#a9150e9c64fdf4dfcc2cad106b91aa110">ucx_map_iterator</a></div><div class="ttdeci">UcxMapIterator ucx_map_iterator(UcxMap const *map)</div><div class="ttdoc">Creates an iterator for a map. </div><div class="ttdef"><b>Definition:</b> map.c:302</div></div> 54.85 +<div class="ttc" id="map_8h_html_a3f65978c481af7f637cad021d93522d5"><div class="ttname"><a href="map_8h.html#a3f65978c481af7f637cad021d93522d5">ucx_map_union</a></div><div class="ttdeci">UcxMap * ucx_map_union(const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)</div><div class="ttdoc">Returns the union of two maps. </div><div class="ttdef"><b>Definition:</b> map.c:343</div></div> 54.86 +<div class="ttc" id="structUcxKey_html_aac9d372ac34a4cbd8459e2b04e505752"><div class="ttname"><a href="structUcxKey.html#aac9d372ac34a4cbd8459e2b04e505752">UcxKey::hash</a></div><div class="ttdeci">int hash</div><div class="ttdoc">A cache for the hash value of the key data. </div><div class="ttdef"><b>Definition:</b> map.h:99</div></div> 54.87 +<div class="ttc" id="map_8h_html_a285e90e40681c6d9631c935dda0967f2"><div class="ttname"><a href="map_8h.html#a285e90e40681c6d9631c935dda0967f2">ucx_map_clear</a></div><div class="ttdeci">void ucx_map_clear(UcxMap *map)</div><div class="ttdoc">Clears a hash map. </div><div class="ttdef"><b>Definition:</b> map.c:97</div></div> 54.88 +<div class="ttc" id="map_8h_html_a774fcff87d1e58b6c5af77dd19a8c3dc"><div class="ttname"><a href="map_8h.html#a774fcff87d1e58b6c5af77dd19a8c3dc">ucx_map_difference</a></div><div class="ttdeci">UcxMap * ucx_map_difference(const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)</div><div class="ttdoc">Returns the difference of two maps. </div><div class="ttdef"><b>Definition:</b> map.c:380</div></div> 54.89 +<div class="ttc" id="structUcxMapElement_html"><div class="ttname"><a href="structUcxMapElement.html">UcxMapElement</a></div><div class="ttdoc">Structure for an element of a UcxMap. </div><div class="ttdef"><b>Definition:</b> map.h:113</div></div> 54.90 +<div class="ttc" id="structUcxKey_html"><div class="ttname"><a href="structUcxKey.html">UcxKey</a></div><div class="ttdoc">Structure to publicly denote a key of a UcxMap. </div><div class="ttdef"><b>Definition:</b> map.h:93</div></div> 54.91 +<div class="ttc" id="structUcxMap_html_a14e9163f71f6c014dfa2103de70ae9cd"><div class="ttname"><a href="structUcxMap.html#a14e9163f71f6c014dfa2103de70ae9cd">UcxMap::count</a></div><div class="ttdeci">size_t count</div><div class="ttdoc">The count of elements currently stored in this map. </div><div class="ttdef"><b>Definition:</b> map.h:89</div></div> 54.92 +<div class="ttc" id="structUcxMapElement_html_a99fe8188b0889201d70ff5f922deef51"><div class="ttname"><a href="structUcxMapElement.html#a99fe8188b0889201d70ff5f922deef51">UcxMapElement::next</a></div><div class="ttdeci">UcxMapElement * next</div><div class="ttdoc">A pointer to the next element in the current list. </div><div class="ttdef"><b>Definition:</b> map.h:118</div></div> 54.93 +<div class="ttc" id="map_8h_html_ab6370c3fa8113fdad593ce4b0460c9c6"><div class="ttname"><a href="map_8h.html#ab6370c3fa8113fdad593ce4b0460c9c6">ucx_map_union_a</a></div><div class="ttdeci">UcxMap * ucx_map_union_a(UcxAllocator *allocator, const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)</div><div class="ttdoc">Returns the union of two maps. </div><div class="ttdef"><b>Definition:</b> map.c:349</div></div> 54.94 +<div class="ttc" id="structUcxMapIterator_html_af88d6e22547d09fe1d665dd650dcdb95"><div class="ttname"><a href="structUcxMapIterator.html#af88d6e22547d09fe1d665dd650dcdb95">UcxMapIterator::map</a></div><div class="ttdeci">UcxMap const * map</div><div class="ttdoc">The map to iterate over. </div><div class="ttdef"><b>Definition:</b> map.h:127</div></div> 54.95 +<div class="ttc" id="structUcxMapIterator_html"><div class="ttname"><a href="structUcxMapIterator.html">UcxMapIterator</a></div><div class="ttdoc">Structure for an iterator over a UcxMap. </div><div class="ttdef"><b>Definition:</b> map.h:125</div></div> 54.96 +<div class="ttc" id="structUcxMapElement_html_abbd7f3bf5beef370f702d2d5bb07733c"><div class="ttname"><a href="structUcxMapElement.html#abbd7f3bf5beef370f702d2d5bb07733c">UcxMapElement::data</a></div><div class="ttdeci">void * data</div><div class="ttdoc">The value data. </div><div class="ttdef"><b>Definition:</b> map.h:115</div></div> 54.97 +<div class="ttc" id="map_8h_html_adfeb2d61003fd2896bcfdc9a57f36425"><div class="ttname"><a href="map_8h.html#adfeb2d61003fd2896bcfdc9a57f36425">ucx_map_copy</a></div><div class="ttdeci">int ucx_map_copy(UcxMap const *from, UcxMap *to, copy_func fnc, void *data)</div><div class="ttdoc">Copies contents from a map to another map using a copy function. </div><div class="ttdef"><b>Definition:</b> map.c:106</div></div> 54.98 +<div class="ttc" id="structUcxAllocator_html"><div class="ttname"><a href="structUcxAllocator.html">UcxAllocator</a></div><div class="ttdoc">UCX allocator data structure containing memory management functions. </div><div class="ttdef"><b>Definition:</b> allocator.h:88</div></div> 54.99 +<div class="ttc" id="map_8h_html_a3e540bb46b8ee19789aed63fd8919200"><div class="ttname"><a href="map_8h.html#a3e540bb46b8ee19789aed63fd8919200">ucx_key</a></div><div class="ttdeci">UcxKey ucx_key(const void *data, size_t len)</div><div class="ttdoc">Creates a UcxKey based on the given data. </div><div class="ttdef"><b>Definition:</b> map.c:251</div></div> 54.100 +<div class="ttc" id="map_8h_html_a79f31de8b93814493759dbc8b940cf0c"><div class="ttname"><a href="map_8h.html#a79f31de8b93814493759dbc8b940cf0c">ucx_map_new</a></div><div class="ttdeci">UcxMap * ucx_map_new(size_t size)</div><div class="ttdoc">Creates a new hash map with the specified size. </div><div class="ttdef"><b>Definition:</b> map.c:34</div></div> 54.101 +<div class="ttc" id="structUcxMapIterator_html_af1fc40f899f37280adb5b85acf6e742f"><div class="ttname"><a href="structUcxMapIterator.html#af1fc40f899f37280adb5b85acf6e742f">UcxMapIterator::cur</a></div><div class="ttdeci">UcxMapElement * cur</div><div class="ttdoc">The current map element. </div><div class="ttdef"><b>Definition:</b> map.h:130</div></div> 54.102 +<div class="ttc" id="map_8h_html_aed508a94c66cc15372503c64b70eb03e"><div class="ttname"><a href="map_8h.html#aed508a94c66cc15372503c64b70eb03e">ucx_map_new_a</a></div><div class="ttdeci">UcxMap * ucx_map_new_a(UcxAllocator *allocator, size_t size)</div><div class="ttdoc">Creates a new hash map with the specified size using a UcxAllocator. </div><div class="ttdef"><b>Definition:</b> map.c:38</div></div> 54.103 +<div class="ttc" id="structUcxMap_html_a531f3e481c1c331cf037b916192e974d"><div class="ttname"><a href="structUcxMap.html#a531f3e481c1c331cf037b916192e974d">UcxMap::allocator</a></div><div class="ttdeci">UcxAllocator * allocator</div><div class="ttdoc">An allocator that is used for the map elements. </div><div class="ttdef"><b>Definition:</b> map.h:83</div></div> 54.104 +<div class="ttc" id="structUcxMapKey_html"><div class="ttname"><a href="structUcxMapKey.html">UcxMapKey</a></div><div class="ttdoc">Internal structure for a key of a UcxMap. </div><div class="ttdef"><b>Definition:</b> map.h:103</div></div> 54.105 +<div class="ttc" id="map_8h_html_ac04a08b604217070254d4c58f0e82498"><div class="ttname"><a href="map_8h.html#ac04a08b604217070254d4c58f0e82498">ucx_map_put</a></div><div class="ttdeci">int ucx_map_put(UcxMap *map, UcxKey key, void *value)</div><div class="ttdoc">Puts a key/value-pair into the map. </div><div class="ttdef"><b>Definition:</b> map.c:158</div></div> 54.106 +<div class="ttc" id="map_8h_html_a9aea9103703d5c168420bb6bf85549ea"><div class="ttname"><a href="map_8h.html#a9aea9103703d5c168420bb6bf85549ea">ucx_map_clone_a</a></div><div class="ttdeci">UcxMap * ucx_map_clone_a(UcxAllocator *allocator, UcxMap const *map, copy_func fnc, void *data)</div><div class="ttdoc">Clones the map and rehashes if necessary. </div><div class="ttdef"><b>Definition:</b> map.c:121</div></div> 54.107 +<div class="ttc" id="structUcxMap_html_afe120846b26d99580a7ff1276464e838"><div class="ttname"><a href="structUcxMap.html#afe120846b26d99580a7ff1276464e838">UcxMap::size</a></div><div class="ttdeci">size_t size</div><div class="ttdoc">The size of the map is the length of the element list array. </div><div class="ttdef"><b>Definition:</b> map.h:87</div></div> 54.108 +<div class="ttc" id="map_8h_html_aceb8675abf44860b4bbc301bbada5b91"><div class="ttname"><a href="map_8h.html#aceb8675abf44860b4bbc301bbada5b91">ucx_map_iter_next</a></div><div class="ttdeci">int ucx_map_iter_next(UcxMapIterator *iterator, UcxKey *key, void **value)</div><div class="ttdoc">Proceeds to the next element of the map (if any). </div><div class="ttdef"><b>Definition:</b> map.c:310</div></div> 54.109 +<div class="ttc" id="structUcxKey_html_a6176109f25b34f3fa92bcfbc8ae7a88c"><div class="ttname"><a href="structUcxKey.html#a6176109f25b34f3fa92bcfbc8ae7a88c">UcxKey::data</a></div><div class="ttdeci">const void * data</div><div class="ttdoc">The key data. </div><div class="ttdef"><b>Definition:</b> map.h:95</div></div> 54.110 +<div class="ttc" id="allocator_8h_html"><div class="ttname"><a href="allocator_8h.html">allocator.h</a></div><div class="ttdoc">Allocator for custom memory management. </div></div> 54.111 +<div class="ttc" id="structUcxMap_html"><div class="ttname"><a href="structUcxMap.html">UcxMap</a></div><div class="ttdoc">Structure for the UCX map. </div><div class="ttdef"><b>Definition:</b> map.h:81</div></div> 54.112 +<div class="ttc" id="map_8h_html_a17248a4888eb8f9ae18be522d64632aa"><div class="ttname"><a href="map_8h.html#a17248a4888eb8f9ae18be522d64632aa">ucx_map_remove</a></div><div class="ttdeci">void * ucx_map_remove(UcxMap *map, UcxKey key)</div><div class="ttdoc">Removes a key/value-pair from the map by using the key. </div><div class="ttdef"><b>Definition:</b> map.c:247</div></div> 54.113 +<div class="ttc" id="structUcxKey_html_abef01de37f355688f2ac797d2c280683"><div class="ttname"><a href="structUcxKey.html#abef01de37f355688f2ac797d2c280683">UcxKey::len</a></div><div class="ttdeci">size_t len</div><div class="ttdoc">The length of the key data. </div><div class="ttdef"><b>Definition:</b> map.h:97</div></div> 54.114 +<div class="ttc" id="map_8h_html_aa594d7a5afebc3bed6bb265348cf6b0d"><div class="ttname"><a href="map_8h.html#aa594d7a5afebc3bed6bb265348cf6b0d">ucx_map_intersection</a></div><div class="ttdeci">UcxMap * ucx_map_intersection(const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)</div><div class="ttdoc">Returns the intersection of two maps. </div><div class="ttdef"><b>Definition:</b> map.c:357</div></div> 54.115 +<div class="ttc" id="map_8h_html_a174bce9fad554dd92b8da354e0d32512"><div class="ttname"><a href="map_8h.html#a174bce9fad554dd92b8da354e0d32512">ucx_map_rehash</a></div><div class="ttdeci">int ucx_map_rehash(UcxMap *map)</div><div class="ttdoc">Increases size of the hash map, if necessary. </div><div class="ttdef"><b>Definition:</b> map.c:132</div></div> 54.116 +<div class="ttc" id="map_8h_html_abe3d9688e4224bf7bb962abf25ff8c2e"><div class="ttname"><a href="map_8h.html#abe3d9688e4224bf7bb962abf25ff8c2e">ucx_map_free</a></div><div class="ttdeci">void ucx_map_free(UcxMap *map)</div><div class="ttdoc">Frees a hash map. </div><div class="ttdef"><b>Definition:</b> map.c:79</div></div> 54.117 +<div class="ttc" id="map_8h_html_a62c6c30cbb0d824ba710f5030ff9a4e4"><div class="ttname"><a href="map_8h.html#a62c6c30cbb0d824ba710f5030ff9a4e4">ucx_map_clone</a></div><div class="ttdeci">UcxMap * ucx_map_clone(UcxMap const *map, copy_func fnc, void *data)</div><div class="ttdoc">Clones the map and rehashes if necessary. </div><div class="ttdef"><b>Definition:</b> map.c:117</div></div> 54.118 +<div class="ttc" id="structUcxMap_html_a5792b5037c4f77ea3cb144b66c9b8790"><div class="ttname"><a href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790">UcxMap::map</a></div><div class="ttdeci">UcxMapElement ** map</div><div class="ttdoc">The array of map element lists. </div><div class="ttdef"><b>Definition:</b> map.h:85</div></div> 54.119 +<div class="ttc" id="map_8h_html_a169e0470a20484dd76425fdf77e3651e"><div class="ttname"><a href="map_8h.html#a169e0470a20484dd76425fdf77e3651e">ucx_map_intersection_a</a></div><div class="ttdeci">UcxMap * ucx_map_intersection_a(UcxAllocator *allocator, const UcxMap *first, const UcxMap *second, copy_func cpfnc, void *cpdata)</div><div class="ttdoc">Returns the intersection of two maps. </div><div class="ttdef"><b>Definition:</b> map.c:363</div></div> 54.120 +<div class="ttc" id="structUcxMapKey_html_ab71d1841e4f538628c00f782267fb6d5"><div class="ttname"><a href="structUcxMapKey.html#ab71d1841e4f538628c00f782267fb6d5">UcxMapKey::data</a></div><div class="ttdeci">void * data</div><div class="ttdoc">The key data. </div><div class="ttdef"><b>Definition:</b> map.h:105</div></div> 54.121 +<div class="ttc" id="ucx_8h_html_ad2b370c2809914c8b7fedab163c266b3"><div class="ttname"><a href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a></div><div class="ttdeci">void(* ucx_destructor)(void *)</div><div class="ttdoc">A function pointer to a destructor function. </div><div class="ttdef"><b>Definition:</b> ucx.h:72</div></div> 54.122 +</div><!-- fragment --></div><!-- contents --> 54.123 +<!-- start footer part --> 54.124 +<hr class="footer"/><address class="footer"><small> 54.125 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 54.126 +<img class="footer" src="doxygen.png" alt="doxygen"/> 54.127 +</a> 1.8.13 54.128 +</small></address> 54.129 +</body> 54.130 +</html>
55.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 55.2 +++ b/docs/api-2.1/mempool_8h.html Sat Feb 06 19:11:44 2021 +0100 55.3 @@ -0,0 +1,517 @@ 55.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 55.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 55.6 +<head> 55.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 55.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 55.9 +<meta name="generator" content="Doxygen 1.8.13"/> 55.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 55.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/mempool.h File Reference</title> 55.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 55.13 +<script type="text/javascript" src="jquery.js"></script> 55.14 +<script type="text/javascript" src="dynsections.js"></script> 55.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 55.16 +<script type="text/javascript" src="search/searchdata.js"></script> 55.17 +<script type="text/javascript" src="search/search.js"></script> 55.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 55.19 +</head> 55.20 +<body> 55.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 55.22 +<div id="titlearea"> 55.23 +<table cellspacing="0" cellpadding="0"> 55.24 + <tbody> 55.25 + <tr style="height: 56px;"> 55.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 55.27 + <td id="projectalign" style="padding-left: 0.5em;"> 55.28 + <div id="projectname">ucx 55.29 + </div> 55.30 + <div id="projectbrief">UAP Common Extensions</div> 55.31 + </td> 55.32 + </tr> 55.33 + </tbody> 55.34 +</table> 55.35 +</div> 55.36 +<!-- end header part --> 55.37 +<!-- Generated by Doxygen 1.8.13 --> 55.38 +<script type="text/javascript"> 55.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 55.40 +</script> 55.41 +<script type="text/javascript" src="menudata.js"></script> 55.42 +<script type="text/javascript" src="menu.js"></script> 55.43 +<script type="text/javascript"> 55.44 +$(function() { 55.45 + initMenu('',true,false,'search.php','Search'); 55.46 + $(document).ready(function() { init_search(); }); 55.47 +}); 55.48 +</script> 55.49 +<div id="main-nav"></div> 55.50 +<!-- window showing the filter options --> 55.51 +<div id="MSearchSelectWindow" 55.52 + onmouseover="return searchBox.OnSearchSelectShow()" 55.53 + onmouseout="return searchBox.OnSearchSelectHide()" 55.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 55.55 +</div> 55.56 + 55.57 +<!-- iframe showing the search results (closed by default) --> 55.58 +<div id="MSearchResultsWindow"> 55.59 +<iframe src="javascript:void(0)" frameborder="0" 55.60 + name="MSearchResults" id="MSearchResults"> 55.61 +</iframe> 55.62 +</div> 55.63 + 55.64 +<div id="nav-path" class="navpath"> 55.65 + <ul> 55.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 55.67 +</div> 55.68 +</div><!-- top --> 55.69 +<div class="header"> 55.70 + <div class="summary"> 55.71 +<a href="#nested-classes">Data Structures</a> | 55.72 +<a href="#define-members">Macros</a> | 55.73 +<a href="#func-members">Functions</a> </div> 55.74 + <div class="headertitle"> 55.75 +<div class="title">mempool.h File Reference</div> </div> 55.76 +</div><!--header--> 55.77 +<div class="contents"> 55.78 + 55.79 +<p>Memory pool implementation. 55.80 +<a href="#details">More...</a></p> 55.81 +<div class="textblock"><code>#include "<a class="el" href="ucx_8h_source.html">ucx.h</a>"</code><br /> 55.82 +<code>#include "<a class="el" href="allocator_8h_source.html">allocator.h</a>"</code><br /> 55.83 +<code>#include <stddef.h></code><br /> 55.84 +</div> 55.85 +<p><a href="mempool_8h_source.html">Go to the source code of this file.</a></p> 55.86 +<table class="memberdecls"> 55.87 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> 55.88 +Data Structures</h2></td></tr> 55.89 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMempool.html">UcxMempool</a></td></tr> 55.90 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">UCX mempool structure. <a href="structUcxMempool.html#details">More...</a><br /></td></tr> 55.91 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 55.92 +</table><table class="memberdecls"> 55.93 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> 55.94 +Macros</h2></td></tr> 55.95 +<tr class="memitem:a49f7bd1da5ac201d0cf54dc0f0d82dd2"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="mempool_8h.html#a49f7bd1da5ac201d0cf54dc0f0d82dd2">ucx_mempool_new_default</a>()   <a class="el" href="mempool_8h.html#ad71cb8c3b6fdb30360376a8b372ef22a">ucx_mempool_new</a>(16)</td></tr> 55.96 +<tr class="memdesc:a49f7bd1da5ac201d0cf54dc0f0d82dd2"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for a new default memory pool with a capacity of 16 elements. <a href="#a49f7bd1da5ac201d0cf54dc0f0d82dd2">More...</a><br /></td></tr> 55.97 +<tr class="separator:a49f7bd1da5ac201d0cf54dc0f0d82dd2"><td class="memSeparator" colspan="2"> </td></tr> 55.98 +</table><table class="memberdecls"> 55.99 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 55.100 +Functions</h2></td></tr> 55.101 +<tr class="memitem:ad71cb8c3b6fdb30360376a8b372ef22a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMempool.html">UcxMempool</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="mempool_8h.html#ad71cb8c3b6fdb30360376a8b372ef22a">ucx_mempool_new</a> (size_t n)</td></tr> 55.102 +<tr class="memdesc:ad71cb8c3b6fdb30360376a8b372ef22a"><td class="mdescLeft"> </td><td class="mdescRight">Creates a memory pool with the specified initial size. <a href="#ad71cb8c3b6fdb30360376a8b372ef22a">More...</a><br /></td></tr> 55.103 +<tr class="separator:ad71cb8c3b6fdb30360376a8b372ef22a"><td class="memSeparator" colspan="2"> </td></tr> 55.104 +<tr class="memitem:aaf75b5016098723a9280531ccc3a6d77"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="mempool_8h.html#aaf75b5016098723a9280531ccc3a6d77">ucx_mempool_chcap</a> (<a class="el" href="structUcxMempool.html">UcxMempool</a> *pool, size_t newcap)</td></tr> 55.105 +<tr class="memdesc:aaf75b5016098723a9280531ccc3a6d77"><td class="mdescLeft"> </td><td class="mdescRight">Resizes a memory pool. <a href="#aaf75b5016098723a9280531ccc3a6d77">More...</a><br /></td></tr> 55.106 +<tr class="separator:aaf75b5016098723a9280531ccc3a6d77"><td class="memSeparator" colspan="2"> </td></tr> 55.107 +<tr class="memitem:a2ae492b8f2878ccc9837ac213dced11e"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="mempool_8h.html#a2ae492b8f2878ccc9837ac213dced11e">ucx_mempool_malloc</a> (<a class="el" href="structUcxMempool.html">UcxMempool</a> *pool, size_t n)</td></tr> 55.108 +<tr class="memdesc:a2ae492b8f2878ccc9837ac213dced11e"><td class="mdescLeft"> </td><td class="mdescRight">Allocates pooled memory. <a href="#a2ae492b8f2878ccc9837ac213dced11e">More...</a><br /></td></tr> 55.109 +<tr class="separator:a2ae492b8f2878ccc9837ac213dced11e"><td class="memSeparator" colspan="2"> </td></tr> 55.110 +<tr class="memitem:a4b9142011824ae24f00fabe128417d69"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="mempool_8h.html#a4b9142011824ae24f00fabe128417d69">ucx_mempool_calloc</a> (<a class="el" href="structUcxMempool.html">UcxMempool</a> *pool, size_t nelem, size_t elsize)</td></tr> 55.111 +<tr class="memdesc:a4b9142011824ae24f00fabe128417d69"><td class="mdescLeft"> </td><td class="mdescRight">Allocates a pooled memory array. <a href="#a4b9142011824ae24f00fabe128417d69">More...</a><br /></td></tr> 55.112 +<tr class="separator:a4b9142011824ae24f00fabe128417d69"><td class="memSeparator" colspan="2"> </td></tr> 55.113 +<tr class="memitem:a660ef42520ed6737c2e77aae18e3a7a4"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="mempool_8h.html#a660ef42520ed6737c2e77aae18e3a7a4">ucx_mempool_realloc</a> (<a class="el" href="structUcxMempool.html">UcxMempool</a> *pool, void *ptr, size_t n)</td></tr> 55.114 +<tr class="memdesc:a660ef42520ed6737c2e77aae18e3a7a4"><td class="mdescLeft"> </td><td class="mdescRight">Reallocates pooled memory. <a href="#a660ef42520ed6737c2e77aae18e3a7a4">More...</a><br /></td></tr> 55.115 +<tr class="separator:a660ef42520ed6737c2e77aae18e3a7a4"><td class="memSeparator" colspan="2"> </td></tr> 55.116 +<tr class="memitem:aefa26e3015f5aefadbfc74221bd246ac"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="mempool_8h.html#aefa26e3015f5aefadbfc74221bd246ac">ucx_mempool_free</a> (<a class="el" href="structUcxMempool.html">UcxMempool</a> *pool, void *ptr)</td></tr> 55.117 +<tr class="memdesc:aefa26e3015f5aefadbfc74221bd246ac"><td class="mdescLeft"> </td><td class="mdescRight">Frees pooled memory. <a href="#aefa26e3015f5aefadbfc74221bd246ac">More...</a><br /></td></tr> 55.118 +<tr class="separator:aefa26e3015f5aefadbfc74221bd246ac"><td class="memSeparator" colspan="2"> </td></tr> 55.119 +<tr class="memitem:af096378da7e9bfbed3088497cf4c15bf"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="mempool_8h.html#af096378da7e9bfbed3088497cf4c15bf">ucx_mempool_destroy</a> (<a class="el" href="structUcxMempool.html">UcxMempool</a> *pool)</td></tr> 55.120 +<tr class="memdesc:af096378da7e9bfbed3088497cf4c15bf"><td class="mdescLeft"> </td><td class="mdescRight">Destroys a memory pool. <a href="#af096378da7e9bfbed3088497cf4c15bf">More...</a><br /></td></tr> 55.121 +<tr class="separator:af096378da7e9bfbed3088497cf4c15bf"><td class="memSeparator" colspan="2"> </td></tr> 55.122 +<tr class="memitem:adb788e7ec24cd7dbdea6381539c549f2"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="mempool_8h.html#adb788e7ec24cd7dbdea6381539c549f2">ucx_mempool_set_destr</a> (void *ptr, <a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> func)</td></tr> 55.123 +<tr class="memdesc:adb788e7ec24cd7dbdea6381539c549f2"><td class="mdescLeft"> </td><td class="mdescRight">Sets a destructor function for the specified memory. <a href="#adb788e7ec24cd7dbdea6381539c549f2">More...</a><br /></td></tr> 55.124 +<tr class="separator:adb788e7ec24cd7dbdea6381539c549f2"><td class="memSeparator" colspan="2"> </td></tr> 55.125 +<tr class="memitem:af47b6b7c40f8f263dc28cc9a4e77b27c"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="mempool_8h.html#af47b6b7c40f8f263dc28cc9a4e77b27c">ucx_mempool_reg_destr</a> (<a class="el" href="structUcxMempool.html">UcxMempool</a> *pool, void *ptr, <a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> destr)</td></tr> 55.126 +<tr class="memdesc:af47b6b7c40f8f263dc28cc9a4e77b27c"><td class="mdescLeft"> </td><td class="mdescRight">Registers a destructor function for the specified (non-pooled) memory. <a href="#af47b6b7c40f8f263dc28cc9a4e77b27c">More...</a><br /></td></tr> 55.127 +<tr class="separator:af47b6b7c40f8f263dc28cc9a4e77b27c"><td class="memSeparator" colspan="2"> </td></tr> 55.128 +</table> 55.129 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 55.130 +<div class="textblock"><p>Memory pool implementation. </p> 55.131 +<dl class="section author"><dt>Author</dt><dd>Mike Becker </dd> 55.132 +<dd> 55.133 +Olaf Wintermann </dd></dl> 55.134 +</div><h2 class="groupheader">Macro Definition Documentation</h2> 55.135 +<a id="a49f7bd1da5ac201d0cf54dc0f0d82dd2"></a> 55.136 +<h2 class="memtitle"><span class="permalink"><a href="#a49f7bd1da5ac201d0cf54dc0f0d82dd2">◆ </a></span>ucx_mempool_new_default</h2> 55.137 + 55.138 +<div class="memitem"> 55.139 +<div class="memproto"> 55.140 + <table class="memname"> 55.141 + <tr> 55.142 + <td class="memname">#define ucx_mempool_new_default</td> 55.143 + <td>(</td> 55.144 + <td class="paramname"></td><td>)</td> 55.145 + <td>   <a class="el" href="mempool_8h.html#ad71cb8c3b6fdb30360376a8b372ef22a">ucx_mempool_new</a>(16)</td> 55.146 + </tr> 55.147 + </table> 55.148 +</div><div class="memdoc"> 55.149 + 55.150 +<p>Shorthand for a new default memory pool with a capacity of 16 elements. </p> 55.151 + 55.152 +</div> 55.153 +</div> 55.154 +<h2 class="groupheader">Function Documentation</h2> 55.155 +<a id="a4b9142011824ae24f00fabe128417d69"></a> 55.156 +<h2 class="memtitle"><span class="permalink"><a href="#a4b9142011824ae24f00fabe128417d69">◆ </a></span>ucx_mempool_calloc()</h2> 55.157 + 55.158 +<div class="memitem"> 55.159 +<div class="memproto"> 55.160 + <table class="memname"> 55.161 + <tr> 55.162 + <td class="memname">void* ucx_mempool_calloc </td> 55.163 + <td>(</td> 55.164 + <td class="paramtype"><a class="el" href="structUcxMempool.html">UcxMempool</a> * </td> 55.165 + <td class="paramname"><em>pool</em>, </td> 55.166 + </tr> 55.167 + <tr> 55.168 + <td class="paramkey"></td> 55.169 + <td></td> 55.170 + <td class="paramtype">size_t </td> 55.171 + <td class="paramname"><em>nelem</em>, </td> 55.172 + </tr> 55.173 + <tr> 55.174 + <td class="paramkey"></td> 55.175 + <td></td> 55.176 + <td class="paramtype">size_t </td> 55.177 + <td class="paramname"><em>elsize</em> </td> 55.178 + </tr> 55.179 + <tr> 55.180 + <td></td> 55.181 + <td>)</td> 55.182 + <td></td><td></td> 55.183 + </tr> 55.184 + </table> 55.185 +</div><div class="memdoc"> 55.186 + 55.187 +<p>Allocates a pooled memory array. </p> 55.188 +<p>The content of the allocated memory is set to zero.</p> 55.189 +<dl class="params"><dt>Parameters</dt><dd> 55.190 + <table class="params"> 55.191 + <tr><td class="paramname">pool</td><td>the memory pool </td></tr> 55.192 + <tr><td class="paramname">nelem</td><td>amount of elements to allocate </td></tr> 55.193 + <tr><td class="paramname">elsize</td><td>amount of memory per element </td></tr> 55.194 + </table> 55.195 + </dd> 55.196 +</dl> 55.197 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the allocated memory </dd></dl> 55.198 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="allocator_8h.html#a2c0aba4221c1ac6801f03ed799f15b12" title="A function pointer to the allocators calloc() function. ">ucx_allocator_calloc()</a> </dd></dl> 55.199 + 55.200 +</div> 55.201 +</div> 55.202 +<a id="aaf75b5016098723a9280531ccc3a6d77"></a> 55.203 +<h2 class="memtitle"><span class="permalink"><a href="#aaf75b5016098723a9280531ccc3a6d77">◆ </a></span>ucx_mempool_chcap()</h2> 55.204 + 55.205 +<div class="memitem"> 55.206 +<div class="memproto"> 55.207 + <table class="memname"> 55.208 + <tr> 55.209 + <td class="memname">int ucx_mempool_chcap </td> 55.210 + <td>(</td> 55.211 + <td class="paramtype"><a class="el" href="structUcxMempool.html">UcxMempool</a> * </td> 55.212 + <td class="paramname"><em>pool</em>, </td> 55.213 + </tr> 55.214 + <tr> 55.215 + <td class="paramkey"></td> 55.216 + <td></td> 55.217 + <td class="paramtype">size_t </td> 55.218 + <td class="paramname"><em>newcap</em> </td> 55.219 + </tr> 55.220 + <tr> 55.221 + <td></td> 55.222 + <td>)</td> 55.223 + <td></td><td></td> 55.224 + </tr> 55.225 + </table> 55.226 +</div><div class="memdoc"> 55.227 + 55.228 +<p>Resizes a memory pool. </p> 55.229 +<p>This function will fail if the new capacity is not sufficient for the present data.</p> 55.230 +<dl class="params"><dt>Parameters</dt><dd> 55.231 + <table class="params"> 55.232 + <tr><td class="paramname">pool</td><td>the pool to resize </td></tr> 55.233 + <tr><td class="paramname">newcap</td><td>the new capacity </td></tr> 55.234 + </table> 55.235 + </dd> 55.236 +</dl> 55.237 +<dl class="section return"><dt>Returns</dt><dd>zero on success or non-zero on failure </dd></dl> 55.238 + 55.239 +</div> 55.240 +</div> 55.241 +<a id="af096378da7e9bfbed3088497cf4c15bf"></a> 55.242 +<h2 class="memtitle"><span class="permalink"><a href="#af096378da7e9bfbed3088497cf4c15bf">◆ </a></span>ucx_mempool_destroy()</h2> 55.243 + 55.244 +<div class="memitem"> 55.245 +<div class="memproto"> 55.246 + <table class="memname"> 55.247 + <tr> 55.248 + <td class="memname">void ucx_mempool_destroy </td> 55.249 + <td>(</td> 55.250 + <td class="paramtype"><a class="el" href="structUcxMempool.html">UcxMempool</a> * </td> 55.251 + <td class="paramname"><em>pool</em></td><td>)</td> 55.252 + <td></td> 55.253 + </tr> 55.254 + </table> 55.255 +</div><div class="memdoc"> 55.256 + 55.257 +<p>Destroys a memory pool. </p> 55.258 +<p>For each element the destructor function (if any) is called and the element is freed.</p> 55.259 +<p>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).</p> 55.260 +<dl class="params"><dt>Parameters</dt><dd> 55.261 + <table class="params"> 55.262 + <tr><td class="paramname">pool</td><td>the mempool to destroy </td></tr> 55.263 + </table> 55.264 + </dd> 55.265 +</dl> 55.266 + 55.267 +</div> 55.268 +</div> 55.269 +<a id="aefa26e3015f5aefadbfc74221bd246ac"></a> 55.270 +<h2 class="memtitle"><span class="permalink"><a href="#aefa26e3015f5aefadbfc74221bd246ac">◆ </a></span>ucx_mempool_free()</h2> 55.271 + 55.272 +<div class="memitem"> 55.273 +<div class="memproto"> 55.274 + <table class="memname"> 55.275 + <tr> 55.276 + <td class="memname">void ucx_mempool_free </td> 55.277 + <td>(</td> 55.278 + <td class="paramtype"><a class="el" href="structUcxMempool.html">UcxMempool</a> * </td> 55.279 + <td class="paramname"><em>pool</em>, </td> 55.280 + </tr> 55.281 + <tr> 55.282 + <td class="paramkey"></td> 55.283 + <td></td> 55.284 + <td class="paramtype">void * </td> 55.285 + <td class="paramname"><em>ptr</em> </td> 55.286 + </tr> 55.287 + <tr> 55.288 + <td></td> 55.289 + <td>)</td> 55.290 + <td></td><td></td> 55.291 + </tr> 55.292 + </table> 55.293 +</div><div class="memdoc"> 55.294 + 55.295 +<p>Frees pooled memory. </p> 55.296 +<p>Before freeing the memory, the specified destructor function (if any) is called.</p> 55.297 +<p>If you specify memory, that is not pooled by the specified memory pool, the program will terminate with a call to <code>abort()</code>.</p> 55.298 +<dl class="params"><dt>Parameters</dt><dd> 55.299 + <table class="params"> 55.300 + <tr><td class="paramname">pool</td><td>the memory pool </td></tr> 55.301 + <tr><td class="paramname">ptr</td><td>a pointer to the memory that shall be freed </td></tr> 55.302 + </table> 55.303 + </dd> 55.304 +</dl> 55.305 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="mempool_8h.html#adb788e7ec24cd7dbdea6381539c549f2" title="Sets a destructor function for the specified memory. ">ucx_mempool_set_destr()</a> </dd></dl> 55.306 + 55.307 +</div> 55.308 +</div> 55.309 +<a id="a2ae492b8f2878ccc9837ac213dced11e"></a> 55.310 +<h2 class="memtitle"><span class="permalink"><a href="#a2ae492b8f2878ccc9837ac213dced11e">◆ </a></span>ucx_mempool_malloc()</h2> 55.311 + 55.312 +<div class="memitem"> 55.313 +<div class="memproto"> 55.314 + <table class="memname"> 55.315 + <tr> 55.316 + <td class="memname">void* ucx_mempool_malloc </td> 55.317 + <td>(</td> 55.318 + <td class="paramtype"><a class="el" href="structUcxMempool.html">UcxMempool</a> * </td> 55.319 + <td class="paramname"><em>pool</em>, </td> 55.320 + </tr> 55.321 + <tr> 55.322 + <td class="paramkey"></td> 55.323 + <td></td> 55.324 + <td class="paramtype">size_t </td> 55.325 + <td class="paramname"><em>n</em> </td> 55.326 + </tr> 55.327 + <tr> 55.328 + <td></td> 55.329 + <td>)</td> 55.330 + <td></td><td></td> 55.331 + </tr> 55.332 + </table> 55.333 +</div><div class="memdoc"> 55.334 + 55.335 +<p>Allocates pooled memory. </p> 55.336 +<dl class="params"><dt>Parameters</dt><dd> 55.337 + <table class="params"> 55.338 + <tr><td class="paramname">pool</td><td>the memory pool </td></tr> 55.339 + <tr><td class="paramname">n</td><td>amount of memory to allocate </td></tr> 55.340 + </table> 55.341 + </dd> 55.342 +</dl> 55.343 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the allocated memory </dd></dl> 55.344 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="allocator_8h.html#a29f0f6a23a70db3b60635cd6dc384473" title="A function pointer to the allocators malloc() function. ">ucx_allocator_malloc()</a> </dd></dl> 55.345 + 55.346 +</div> 55.347 +</div> 55.348 +<a id="ad71cb8c3b6fdb30360376a8b372ef22a"></a> 55.349 +<h2 class="memtitle"><span class="permalink"><a href="#ad71cb8c3b6fdb30360376a8b372ef22a">◆ </a></span>ucx_mempool_new()</h2> 55.350 + 55.351 +<div class="memitem"> 55.352 +<div class="memproto"> 55.353 + <table class="memname"> 55.354 + <tr> 55.355 + <td class="memname"><a class="el" href="structUcxMempool.html">UcxMempool</a>* ucx_mempool_new </td> 55.356 + <td>(</td> 55.357 + <td class="paramtype">size_t </td> 55.358 + <td class="paramname"><em>n</em></td><td>)</td> 55.359 + <td></td> 55.360 + </tr> 55.361 + </table> 55.362 +</div><div class="memdoc"> 55.363 + 55.364 +<p>Creates a memory pool with the specified initial size. </p> 55.365 +<p>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.</p> 55.366 +<dl class="params"><dt>Parameters</dt><dd> 55.367 + <table class="params"> 55.368 + <tr><td class="paramname">n</td><td>initial pool size (should be a power of two, e.g. 16) </td></tr> 55.369 + </table> 55.370 + </dd> 55.371 +</dl> 55.372 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the new memory pool </dd></dl> 55.373 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="mempool_8h.html#a49f7bd1da5ac201d0cf54dc0f0d82dd2" title="Shorthand for a new default memory pool with a capacity of 16 elements. ">ucx_mempool_new_default()</a> </dd></dl> 55.374 + 55.375 +</div> 55.376 +</div> 55.377 +<a id="a660ef42520ed6737c2e77aae18e3a7a4"></a> 55.378 +<h2 class="memtitle"><span class="permalink"><a href="#a660ef42520ed6737c2e77aae18e3a7a4">◆ </a></span>ucx_mempool_realloc()</h2> 55.379 + 55.380 +<div class="memitem"> 55.381 +<div class="memproto"> 55.382 + <table class="memname"> 55.383 + <tr> 55.384 + <td class="memname">void* ucx_mempool_realloc </td> 55.385 + <td>(</td> 55.386 + <td class="paramtype"><a class="el" href="structUcxMempool.html">UcxMempool</a> * </td> 55.387 + <td class="paramname"><em>pool</em>, </td> 55.388 + </tr> 55.389 + <tr> 55.390 + <td class="paramkey"></td> 55.391 + <td></td> 55.392 + <td class="paramtype">void * </td> 55.393 + <td class="paramname"><em>ptr</em>, </td> 55.394 + </tr> 55.395 + <tr> 55.396 + <td class="paramkey"></td> 55.397 + <td></td> 55.398 + <td class="paramtype">size_t </td> 55.399 + <td class="paramname"><em>n</em> </td> 55.400 + </tr> 55.401 + <tr> 55.402 + <td></td> 55.403 + <td>)</td> 55.404 + <td></td><td></td> 55.405 + </tr> 55.406 + </table> 55.407 +</div><div class="memdoc"> 55.408 + 55.409 +<p>Reallocates pooled memory. </p> 55.410 +<p>If the memory to be reallocated is not contained by the specified pool, the behavior is undefined.</p> 55.411 +<dl class="params"><dt>Parameters</dt><dd> 55.412 + <table class="params"> 55.413 + <tr><td class="paramname">pool</td><td>the memory pool </td></tr> 55.414 + <tr><td class="paramname">ptr</td><td>a pointer to the memory that shall be reallocated </td></tr> 55.415 + <tr><td class="paramname">n</td><td>the new size of the memory </td></tr> 55.416 + </table> 55.417 + </dd> 55.418 +</dl> 55.419 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the new location of the memory </dd></dl> 55.420 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="allocator_8h.html#a6d7cf038a806e327c5da37321d04e426" title="A function pointer to the allocators realloc() function. ">ucx_allocator_realloc()</a> </dd></dl> 55.421 + 55.422 +</div> 55.423 +</div> 55.424 +<a id="af47b6b7c40f8f263dc28cc9a4e77b27c"></a> 55.425 +<h2 class="memtitle"><span class="permalink"><a href="#af47b6b7c40f8f263dc28cc9a4e77b27c">◆ </a></span>ucx_mempool_reg_destr()</h2> 55.426 + 55.427 +<div class="memitem"> 55.428 +<div class="memproto"> 55.429 + <table class="memname"> 55.430 + <tr> 55.431 + <td class="memname">void ucx_mempool_reg_destr </td> 55.432 + <td>(</td> 55.433 + <td class="paramtype"><a class="el" href="structUcxMempool.html">UcxMempool</a> * </td> 55.434 + <td class="paramname"><em>pool</em>, </td> 55.435 + </tr> 55.436 + <tr> 55.437 + <td class="paramkey"></td> 55.438 + <td></td> 55.439 + <td class="paramtype">void * </td> 55.440 + <td class="paramname"><em>ptr</em>, </td> 55.441 + </tr> 55.442 + <tr> 55.443 + <td class="paramkey"></td> 55.444 + <td></td> 55.445 + <td class="paramtype"><a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> </td> 55.446 + <td class="paramname"><em>destr</em> </td> 55.447 + </tr> 55.448 + <tr> 55.449 + <td></td> 55.450 + <td>)</td> 55.451 + <td></td><td></td> 55.452 + </tr> 55.453 + </table> 55.454 +</div><div class="memdoc"> 55.455 + 55.456 +<p>Registers a destructor function for the specified (non-pooled) memory. </p> 55.457 +<p>This is useful, if you have memory that has not been allocated by a mempool, but shall be managed by a mempool.</p> 55.458 +<p>This function creates an entry in the specified mempool and the memory will therefore (logically) convert to pooled memory. <b>However, this does not cause the memory to be freed automatically!</b>. If you want to use this function, make the memory pool free non-pooled memory, the specified destructor function must call <code>free()</code> by itself. But keep in mind, that you then MUST NOT use this destructor function with pooled memory (e.g. in <a class="el" href="mempool_8h.html#adb788e7ec24cd7dbdea6381539c549f2" title="Sets a destructor function for the specified memory. ">ucx_mempool_set_destr()</a>), as it would cause a double-free.</p> 55.459 +<dl class="params"><dt>Parameters</dt><dd> 55.460 + <table class="params"> 55.461 + <tr><td class="paramname">pool</td><td>the memory pool </td></tr> 55.462 + <tr><td class="paramname">ptr</td><td>data the destructor is registered for </td></tr> 55.463 + <tr><td class="paramname">destr</td><td>a pointer to the destructor function </td></tr> 55.464 + </table> 55.465 + </dd> 55.466 +</dl> 55.467 + 55.468 +</div> 55.469 +</div> 55.470 +<a id="adb788e7ec24cd7dbdea6381539c549f2"></a> 55.471 +<h2 class="memtitle"><span class="permalink"><a href="#adb788e7ec24cd7dbdea6381539c549f2">◆ </a></span>ucx_mempool_set_destr()</h2> 55.472 + 55.473 +<div class="memitem"> 55.474 +<div class="memproto"> 55.475 + <table class="memname"> 55.476 + <tr> 55.477 + <td class="memname">void ucx_mempool_set_destr </td> 55.478 + <td>(</td> 55.479 + <td class="paramtype">void * </td> 55.480 + <td class="paramname"><em>ptr</em>, </td> 55.481 + </tr> 55.482 + <tr> 55.483 + <td class="paramkey"></td> 55.484 + <td></td> 55.485 + <td class="paramtype"><a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> </td> 55.486 + <td class="paramname"><em>func</em> </td> 55.487 + </tr> 55.488 + <tr> 55.489 + <td></td> 55.490 + <td>)</td> 55.491 + <td></td><td></td> 55.492 + </tr> 55.493 + </table> 55.494 +</div><div class="memdoc"> 55.495 + 55.496 +<p>Sets a destructor function for the specified memory. </p> 55.497 +<p>The destructor is automatically called when the memory is freed or the pool is destroyed. A destructor for pooled memory <b>MUST NOT</b> free the memory itself, as this is done by the pool. Use a destructor to free any resources managed by the pooled object.</p> 55.498 +<p>The only requirement for the specified memory is, that it <b>MUST</b> be pooled memory by a <a class="el" href="structUcxMempool.html" title="UCX mempool structure. ">UcxMempool</a> or an element-compatible mempool. The pointer to the destructor function is saved in a reserved area before the actual memory.</p> 55.499 +<dl class="params"><dt>Parameters</dt><dd> 55.500 + <table class="params"> 55.501 + <tr><td class="paramname">ptr</td><td>pooled memory </td></tr> 55.502 + <tr><td class="paramname">func</td><td>a pointer to the destructor function </td></tr> 55.503 + </table> 55.504 + </dd> 55.505 +</dl> 55.506 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="mempool_8h.html#aefa26e3015f5aefadbfc74221bd246ac" title="Frees pooled memory. ">ucx_mempool_free()</a> </dd> 55.507 +<dd> 55.508 +<a class="el" href="mempool_8h.html#af096378da7e9bfbed3088497cf4c15bf" title="Destroys a memory pool. ">ucx_mempool_destroy()</a> </dd></dl> 55.509 + 55.510 +</div> 55.511 +</div> 55.512 +</div><!-- contents --> 55.513 +<!-- start footer part --> 55.514 +<hr class="footer"/><address class="footer"><small> 55.515 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 55.516 +<img class="footer" src="doxygen.png" alt="doxygen"/> 55.517 +</a> 1.8.13 55.518 +</small></address> 55.519 +</body> 55.520 +</html>
56.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 56.2 +++ b/docs/api-2.1/mempool_8h_source.html Sat Feb 06 19:11:44 2021 +0100 56.3 @@ -0,0 +1,97 @@ 56.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 56.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 56.6 +<head> 56.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 56.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 56.9 +<meta name="generator" content="Doxygen 1.8.13"/> 56.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 56.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/mempool.h Source File</title> 56.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 56.13 +<script type="text/javascript" src="jquery.js"></script> 56.14 +<script type="text/javascript" src="dynsections.js"></script> 56.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 56.16 +<script type="text/javascript" src="search/searchdata.js"></script> 56.17 +<script type="text/javascript" src="search/search.js"></script> 56.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 56.19 +</head> 56.20 +<body> 56.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 56.22 +<div id="titlearea"> 56.23 +<table cellspacing="0" cellpadding="0"> 56.24 + <tbody> 56.25 + <tr style="height: 56px;"> 56.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 56.27 + <td id="projectalign" style="padding-left: 0.5em;"> 56.28 + <div id="projectname">ucx 56.29 + </div> 56.30 + <div id="projectbrief">UAP Common Extensions</div> 56.31 + </td> 56.32 + </tr> 56.33 + </tbody> 56.34 +</table> 56.35 +</div> 56.36 +<!-- end header part --> 56.37 +<!-- Generated by Doxygen 1.8.13 --> 56.38 +<script type="text/javascript"> 56.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 56.40 +</script> 56.41 +<script type="text/javascript" src="menudata.js"></script> 56.42 +<script type="text/javascript" src="menu.js"></script> 56.43 +<script type="text/javascript"> 56.44 +$(function() { 56.45 + initMenu('',true,false,'search.php','Search'); 56.46 + $(document).ready(function() { init_search(); }); 56.47 +}); 56.48 +</script> 56.49 +<div id="main-nav"></div> 56.50 +<!-- window showing the filter options --> 56.51 +<div id="MSearchSelectWindow" 56.52 + onmouseover="return searchBox.OnSearchSelectShow()" 56.53 + onmouseout="return searchBox.OnSearchSelectHide()" 56.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 56.55 +</div> 56.56 + 56.57 +<!-- iframe showing the search results (closed by default) --> 56.58 +<div id="MSearchResultsWindow"> 56.59 +<iframe src="javascript:void(0)" frameborder="0" 56.60 + name="MSearchResults" id="MSearchResults"> 56.61 +</iframe> 56.62 +</div> 56.63 + 56.64 +<div id="nav-path" class="navpath"> 56.65 + <ul> 56.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 56.67 +</div> 56.68 +</div><!-- top --> 56.69 +<div class="header"> 56.70 + <div class="headertitle"> 56.71 +<div class="title">mempool.h</div> </div> 56.72 +</div><!--header--> 56.73 +<div class="contents"> 56.74 +<a href="mempool_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are met:</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * documentation and/or other materials provided with the distribution.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#ifndef UCX_MEMPOOL_H</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#define UCX_MEMPOOL_H</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="ucx_8h.html">ucx.h</a>"</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="allocator_8h.html">allocator.h</a>"</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include <stddef.h></span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="structUcxMempool.html"> 52</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="structUcxMempool.html#ac45fd1e9269399e4c434d6bdaa770d92"> 54</a></span>  <a class="code" href="structUcxAllocator.html">UcxAllocator</a> *<a class="code" href="structUcxMempool.html#ac45fd1e9269399e4c434d6bdaa770d92">allocator</a>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="structUcxMempool.html#ae98c1b0150bb119ee0a8506a6f310d6e"> 57</a></span>  <span class="keywordtype">void</span> **<a class="code" href="structUcxMempool.html#ae98c1b0150bb119ee0a8506a6f310d6e">data</a>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  </div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="structUcxMempool.html#aa3a73ab231e1bc207d526f46f1c1e23a"> 60</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxMempool.html#aa3a73ab231e1bc207d526f46f1c1e23a">ndata</a>;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="structUcxMempool.html#a304729986f2894971d0469e71e196bf0"> 63</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxMempool.html#a304729986f2894971d0469e71e196bf0">size</a>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> } <a class="code" href="structUcxMempool.html">UcxMempool</a>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="mempool_8h.html#a49f7bd1da5ac201d0cf54dc0f0d82dd2"> 67</a></span> <span class="preprocessor">#define ucx_mempool_new_default() ucx_mempool_new(16)</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <a class="code" href="structUcxMempool.html">UcxMempool</a> *<a class="code" href="mempool_8h.html#ad71cb8c3b6fdb30360376a8b372ef22a">ucx_mempool_new</a>(<span class="keywordtype">size_t</span> n);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">int</span> <a class="code" href="mempool_8h.html#aaf75b5016098723a9280531ccc3a6d77">ucx_mempool_chcap</a>(<a class="code" href="structUcxMempool.html">UcxMempool</a> *pool, <span class="keywordtype">size_t</span> newcap);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keywordtype">void</span> *<a class="code" href="mempool_8h.html#a2ae492b8f2878ccc9837ac213dced11e">ucx_mempool_malloc</a>(<a class="code" href="structUcxMempool.html">UcxMempool</a> *pool, <span class="keywordtype">size_t</span> n);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="keywordtype">void</span> *<a class="code" href="mempool_8h.html#a4b9142011824ae24f00fabe128417d69">ucx_mempool_calloc</a>(<a class="code" href="structUcxMempool.html">UcxMempool</a> *pool, <span class="keywordtype">size_t</span> nelem, <span class="keywordtype">size_t</span> elsize);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="keywordtype">void</span> *<a class="code" href="mempool_8h.html#a660ef42520ed6737c2e77aae18e3a7a4">ucx_mempool_realloc</a>(<a class="code" href="structUcxMempool.html">UcxMempool</a> *pool, <span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> n);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keywordtype">void</span> <a class="code" href="mempool_8h.html#aefa26e3015f5aefadbfc74221bd246ac">ucx_mempool_free</a>(<a class="code" href="structUcxMempool.html">UcxMempool</a> *pool, <span class="keywordtype">void</span> *ptr);</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keywordtype">void</span> <a class="code" href="mempool_8h.html#af096378da7e9bfbed3088497cf4c15bf">ucx_mempool_destroy</a>(<a class="code" href="structUcxMempool.html">UcxMempool</a> *pool);</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="keywordtype">void</span> <a class="code" href="mempool_8h.html#adb788e7ec24cd7dbdea6381539c549f2">ucx_mempool_set_destr</a>(<span class="keywordtype">void</span> *ptr, <a class="code" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> func);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keywordtype">void</span> <a class="code" href="mempool_8h.html#af47b6b7c40f8f263dc28cc9a4e77b27c">ucx_mempool_reg_destr</a>(<a class="code" href="structUcxMempool.html">UcxMempool</a> *pool, <span class="keywordtype">void</span> *ptr, <a class="code" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> destr);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_MEMPOOL_H */</span><span class="preprocessor"></span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="ttc" id="mempool_8h_html_aefa26e3015f5aefadbfc74221bd246ac"><div class="ttname"><a href="mempool_8h.html#aefa26e3015f5aefadbfc74221bd246ac">ucx_mempool_free</a></div><div class="ttdeci">void ucx_mempool_free(UcxMempool *pool, void *ptr)</div><div class="ttdoc">Frees pooled memory. </div><div class="ttdef"><b>Definition:</b> mempool.c:187</div></div> 56.75 +<div class="ttc" id="structUcxMempool_html"><div class="ttname"><a href="structUcxMempool.html">UcxMempool</a></div><div class="ttdoc">UCX mempool structure. </div><div class="ttdef"><b>Definition:</b> mempool.h:52</div></div> 56.76 +<div class="ttc" id="mempool_8h_html_af096378da7e9bfbed3088497cf4c15bf"><div class="ttname"><a href="mempool_8h.html#af096378da7e9bfbed3088497cf4c15bf">ucx_mempool_destroy</a></div><div class="ttdeci">void ucx_mempool_destroy(UcxMempool *pool)</div><div class="ttdoc">Destroys a memory pool. </div><div class="ttdef"><b>Definition:</b> mempool.c:209</div></div> 56.77 +<div class="ttc" id="ucx_8h_html"><div class="ttname"><a href="ucx_8h.html">ucx.h</a></div><div class="ttdoc">Main UCX Header providing most common definitions. </div></div> 56.78 +<div class="ttc" id="mempool_8h_html_aaf75b5016098723a9280531ccc3a6d77"><div class="ttname"><a href="mempool_8h.html#aaf75b5016098723a9280531ccc3a6d77">ucx_mempool_chcap</a></div><div class="ttdeci">int ucx_mempool_chcap(UcxMempool *pool, size_t newcap)</div><div class="ttdoc">Resizes a memory pool. </div><div class="ttdef"><b>Definition:</b> mempool.c:103</div></div> 56.79 +<div class="ttc" id="mempool_8h_html_af47b6b7c40f8f263dc28cc9a4e77b27c"><div class="ttname"><a href="mempool_8h.html#af47b6b7c40f8f263dc28cc9a4e77b27c">ucx_mempool_reg_destr</a></div><div class="ttdeci">void ucx_mempool_reg_destr(UcxMempool *pool, void *ptr, ucx_destructor destr)</div><div class="ttdoc">Registers a destructor function for the specified (non-pooled) memory. </div><div class="ttdef"><b>Definition:</b> mempool.c:229</div></div> 56.80 +<div class="ttc" id="mempool_8h_html_a2ae492b8f2878ccc9837ac213dced11e"><div class="ttname"><a href="mempool_8h.html#a2ae492b8f2878ccc9837ac213dced11e">ucx_mempool_malloc</a></div><div class="ttdeci">void * ucx_mempool_malloc(UcxMempool *pool, size_t n)</div><div class="ttdoc">Allocates pooled memory. </div><div class="ttdef"><b>Definition:</b> mempool.c:123</div></div> 56.81 +<div class="ttc" id="structUcxMempool_html_a304729986f2894971d0469e71e196bf0"><div class="ttname"><a href="structUcxMempool.html#a304729986f2894971d0469e71e196bf0">UcxMempool::size</a></div><div class="ttdeci">size_t size</div><div class="ttdoc">Memory pool size. </div><div class="ttdef"><b>Definition:</b> mempool.h:63</div></div> 56.82 +<div class="ttc" id="structUcxMempool_html_aa3a73ab231e1bc207d526f46f1c1e23a"><div class="ttname"><a href="structUcxMempool.html#aa3a73ab231e1bc207d526f46f1c1e23a">UcxMempool::ndata</a></div><div class="ttdeci">size_t ndata</div><div class="ttdoc">Count of pooled memory items. </div><div class="ttdef"><b>Definition:</b> mempool.h:60</div></div> 56.83 +<div class="ttc" id="structUcxAllocator_html"><div class="ttname"><a href="structUcxAllocator.html">UcxAllocator</a></div><div class="ttdoc">UCX allocator data structure containing memory management functions. </div><div class="ttdef"><b>Definition:</b> allocator.h:88</div></div> 56.84 +<div class="ttc" id="mempool_8h_html_a4b9142011824ae24f00fabe128417d69"><div class="ttname"><a href="mempool_8h.html#a4b9142011824ae24f00fabe128417d69">ucx_mempool_calloc</a></div><div class="ttdeci">void * ucx_mempool_calloc(UcxMempool *pool, size_t nelem, size_t elsize)</div><div class="ttdoc">Allocates a pooled memory array. </div><div class="ttdef"><b>Definition:</b> mempool.c:148</div></div> 56.85 +<div class="ttc" id="structUcxMempool_html_ae98c1b0150bb119ee0a8506a6f310d6e"><div class="ttname"><a href="structUcxMempool.html#ae98c1b0150bb119ee0a8506a6f310d6e">UcxMempool::data</a></div><div class="ttdeci">void ** data</div><div class="ttdoc">List of pointers to pooled memory. </div><div class="ttdef"><b>Definition:</b> mempool.h:57</div></div> 56.86 +<div class="ttc" id="mempool_8h_html_ad71cb8c3b6fdb30360376a8b372ef22a"><div class="ttname"><a href="mempool_8h.html#ad71cb8c3b6fdb30360376a8b372ef22a">ucx_mempool_new</a></div><div class="ttdeci">UcxMempool * ucx_mempool_new(size_t n)</div><div class="ttdoc">Creates a memory pool with the specified initial size. </div><div class="ttdef"><b>Definition:</b> mempool.c:67</div></div> 56.87 +<div class="ttc" id="mempool_8h_html_a660ef42520ed6737c2e77aae18e3a7a4"><div class="ttname"><a href="mempool_8h.html#a660ef42520ed6737c2e77aae18e3a7a4">ucx_mempool_realloc</a></div><div class="ttdeci">void * ucx_mempool_realloc(UcxMempool *pool, void *ptr, size_t n)</div><div class="ttdoc">Reallocates pooled memory. </div><div class="ttdef"><b>Definition:</b> mempool.c:162</div></div> 56.88 +<div class="ttc" id="allocator_8h_html"><div class="ttname"><a href="allocator_8h.html">allocator.h</a></div><div class="ttdoc">Allocator for custom memory management. </div></div> 56.89 +<div class="ttc" id="structUcxMempool_html_ac45fd1e9269399e4c434d6bdaa770d92"><div class="ttname"><a href="structUcxMempool.html#ac45fd1e9269399e4c434d6bdaa770d92">UcxMempool::allocator</a></div><div class="ttdeci">UcxAllocator * allocator</div><div class="ttdoc">UcxAllocator based on this pool. </div><div class="ttdef"><b>Definition:</b> mempool.h:54</div></div> 56.90 +<div class="ttc" id="mempool_8h_html_adb788e7ec24cd7dbdea6381539c549f2"><div class="ttname"><a href="mempool_8h.html#adb788e7ec24cd7dbdea6381539c549f2">ucx_mempool_set_destr</a></div><div class="ttdeci">void ucx_mempool_set_destr(void *ptr, ucx_destructor func)</div><div class="ttdoc">Sets a destructor function for the specified memory. </div><div class="ttdef"><b>Definition:</b> mempool.c:225</div></div> 56.91 +<div class="ttc" id="ucx_8h_html_ad2b370c2809914c8b7fedab163c266b3"><div class="ttname"><a href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a></div><div class="ttdeci">void(* ucx_destructor)(void *)</div><div class="ttdoc">A function pointer to a destructor function. </div><div class="ttdef"><b>Definition:</b> ucx.h:72</div></div> 56.92 +</div><!-- fragment --></div><!-- contents --> 56.93 +<!-- start footer part --> 56.94 +<hr class="footer"/><address class="footer"><small> 56.95 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 56.96 +<img class="footer" src="doxygen.png" alt="doxygen"/> 56.97 +</a> 1.8.13 56.98 +</small></address> 56.99 +</body> 56.100 +</html>
57.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 57.2 +++ b/docs/api-2.1/menu.js Sat Feb 06 19:11:44 2021 +0100 57.3 @@ -0,0 +1,26 @@ 57.4 +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { 57.5 + function makeTree(data,relPath) { 57.6 + var result=''; 57.7 + if ('children' in data) { 57.8 + result+='<ul>'; 57.9 + for (var i in data.children) { 57.10 + result+='<li><a href="'+relPath+data.children[i].url+'">'+ 57.11 + data.children[i].text+'</a>'+ 57.12 + makeTree(data.children[i],relPath)+'</li>'; 57.13 + } 57.14 + result+='</ul>'; 57.15 + } 57.16 + return result; 57.17 + } 57.18 + 57.19 + $('#main-nav').append(makeTree(menudata,relPath)); 57.20 + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); 57.21 + if (searchEnabled) { 57.22 + if (serverSide) { 57.23 + $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><div class="left"><form id="FSearchBox" action="'+searchPage+'" method="get"><img id="MSearchSelect" src="'+relPath+'search/mag.png" alt=""/><input type="text" id="MSearchField" name="query" value="'+search+'" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"></form></div><div class="right"></div></div></li>'); 57.24 + } else { 57.25 + $('#main-menu').append('<li style="float:right"><div id="MSearchBox" class="MSearchBoxInactive"><span class="left"><img id="MSearchSelect" src="'+relPath+'search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/><input type="text" id="MSearchField" value="'+search+'" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/></span><span class="right"><a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="'+relPath+'search/close.png" alt=""/></a></span></div></li>'); 57.26 + } 57.27 + } 57.28 + $('#main-menu').smartmenus(); 57.29 +}
58.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 58.2 +++ b/docs/api-2.1/menudata.js Sat Feb 06 19:11:44 2021 +0100 58.3 @@ -0,0 +1,69 @@ 58.4 +var menudata={children:[ 58.5 +{text:"Main Page",url:"index.html"}, 58.6 +{text:"Data Structures",url:"annotated.html",children:[ 58.7 +{text:"Data Structures",url:"annotated.html"}, 58.8 +{text:"Data Structure Index",url:"classes.html"}, 58.9 +{text:"Data Fields",url:"functions.html",children:[ 58.10 +{text:"All",url:"functions.html",children:[ 58.11 +{text:"a",url:"functions.html#index_a"}, 58.12 +{text:"b",url:"functions.html#index_b"}, 58.13 +{text:"c",url:"functions.html#index_c"}, 58.14 +{text:"d",url:"functions.html#index_d"}, 58.15 +{text:"e",url:"functions.html#index_e"}, 58.16 +{text:"f",url:"functions.html#index_f"}, 58.17 +{text:"h",url:"functions.html#index_h"}, 58.18 +{text:"i",url:"functions.html#index_i"}, 58.19 +{text:"k",url:"functions.html#index_k"}, 58.20 +{text:"l",url:"functions.html#index_l"}, 58.21 +{text:"m",url:"functions.html#index_m"}, 58.22 +{text:"n",url:"functions.html#index_n"}, 58.23 +{text:"p",url:"functions.html#index_p"}, 58.24 +{text:"r",url:"functions.html#index_r"}, 58.25 +{text:"s",url:"functions.html#index_s"}, 58.26 +{text:"t",url:"functions.html#index_t"}, 58.27 +{text:"u",url:"functions.html#index_u"}, 58.28 +{text:"v",url:"functions.html#index_v"}, 58.29 +{text:"w",url:"functions.html#index_w"}]}, 58.30 +{text:"Variables",url:"functions_vars.html",children:[ 58.31 +{text:"a",url:"functions_vars.html#index_a"}, 58.32 +{text:"b",url:"functions_vars.html#index_b"}, 58.33 +{text:"c",url:"functions_vars.html#index_c"}, 58.34 +{text:"d",url:"functions_vars.html#index_d"}, 58.35 +{text:"e",url:"functions_vars.html#index_e"}, 58.36 +{text:"f",url:"functions_vars.html#index_f"}, 58.37 +{text:"h",url:"functions_vars.html#index_h"}, 58.38 +{text:"i",url:"functions_vars.html#index_i"}, 58.39 +{text:"k",url:"functions_vars.html#index_k"}, 58.40 +{text:"l",url:"functions_vars.html#index_l"}, 58.41 +{text:"m",url:"functions_vars.html#index_m"}, 58.42 +{text:"n",url:"functions_vars.html#index_n"}, 58.43 +{text:"p",url:"functions_vars.html#index_p"}, 58.44 +{text:"r",url:"functions_vars.html#index_r"}, 58.45 +{text:"s",url:"functions_vars.html#index_s"}, 58.46 +{text:"t",url:"functions_vars.html#index_t"}, 58.47 +{text:"u",url:"functions_vars.html#index_u"}, 58.48 +{text:"v",url:"functions_vars.html#index_v"}, 58.49 +{text:"w",url:"functions_vars.html#index_w"}]}]}]}, 58.50 +{text:"Files",url:"files.html",children:[ 58.51 +{text:"File List",url:"files.html"}, 58.52 +{text:"Globals",url:"globals.html",children:[ 58.53 +{text:"All",url:"globals.html",children:[ 58.54 +{text:"_",url:"globals.html#index__"}, 58.55 +{text:"a",url:"globals_a.html#index_a"}, 58.56 +{text:"c",url:"globals_c.html#index_c"}, 58.57 +{text:"d",url:"globals_d.html#index_d"}, 58.58 +{text:"p",url:"globals_p.html#index_p"}, 58.59 +{text:"r",url:"globals_r.html#index_r"}, 58.60 +{text:"s",url:"globals_s.html#index_s"}, 58.61 +{text:"u",url:"globals_u.html#index_u"}, 58.62 +{text:"w",url:"globals_w.html#index_w"}]}, 58.63 +{text:"Functions",url:"globals_func.html",children:[ 58.64 +{text:"s",url:"globals_func.html#index_s"}, 58.65 +{text:"u",url:"globals_func_u.html#index_u"}]}, 58.66 +{text:"Typedefs",url:"globals_type.html"}, 58.67 +{text:"Macros",url:"globals_defs.html",children:[ 58.68 +{text:"_",url:"globals_defs.html#index__"}, 58.69 +{text:"a",url:"globals_defs.html#index_a"}, 58.70 +{text:"p",url:"globals_defs.html#index_p"}, 58.71 +{text:"s",url:"globals_defs.html#index_s"}, 58.72 +{text:"u",url:"globals_defs.html#index_u"}]}]}]}]}
59.1 Binary file docs/api-2.1/nav_f.png has changed
60.1 Binary file docs/api-2.1/nav_g.png has changed
61.1 Binary file docs/api-2.1/nav_h.png has changed
62.1 Binary file docs/api-2.1/open.png has changed
63.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 63.2 +++ b/docs/api-2.1/properties_8h.html Sat Feb 06 19:11:44 2021 +0100 63.3 @@ -0,0 +1,393 @@ 63.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 63.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 63.6 +<head> 63.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 63.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 63.9 +<meta name="generator" content="Doxygen 1.8.13"/> 63.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 63.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/properties.h File Reference</title> 63.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 63.13 +<script type="text/javascript" src="jquery.js"></script> 63.14 +<script type="text/javascript" src="dynsections.js"></script> 63.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 63.16 +<script type="text/javascript" src="search/searchdata.js"></script> 63.17 +<script type="text/javascript" src="search/search.js"></script> 63.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 63.19 +</head> 63.20 +<body> 63.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 63.22 +<div id="titlearea"> 63.23 +<table cellspacing="0" cellpadding="0"> 63.24 + <tbody> 63.25 + <tr style="height: 56px;"> 63.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 63.27 + <td id="projectalign" style="padding-left: 0.5em;"> 63.28 + <div id="projectname">ucx 63.29 + </div> 63.30 + <div id="projectbrief">UAP Common Extensions</div> 63.31 + </td> 63.32 + </tr> 63.33 + </tbody> 63.34 +</table> 63.35 +</div> 63.36 +<!-- end header part --> 63.37 +<!-- Generated by Doxygen 1.8.13 --> 63.38 +<script type="text/javascript"> 63.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 63.40 +</script> 63.41 +<script type="text/javascript" src="menudata.js"></script> 63.42 +<script type="text/javascript" src="menu.js"></script> 63.43 +<script type="text/javascript"> 63.44 +$(function() { 63.45 + initMenu('',true,false,'search.php','Search'); 63.46 + $(document).ready(function() { init_search(); }); 63.47 +}); 63.48 +</script> 63.49 +<div id="main-nav"></div> 63.50 +<!-- window showing the filter options --> 63.51 +<div id="MSearchSelectWindow" 63.52 + onmouseover="return searchBox.OnSearchSelectShow()" 63.53 + onmouseout="return searchBox.OnSearchSelectHide()" 63.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 63.55 +</div> 63.56 + 63.57 +<!-- iframe showing the search results (closed by default) --> 63.58 +<div id="MSearchResultsWindow"> 63.59 +<iframe src="javascript:void(0)" frameborder="0" 63.60 + name="MSearchResults" id="MSearchResults"> 63.61 +</iframe> 63.62 +</div> 63.63 + 63.64 +<div id="nav-path" class="navpath"> 63.65 + <ul> 63.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 63.67 +</div> 63.68 +</div><!-- top --> 63.69 +<div class="header"> 63.70 + <div class="summary"> 63.71 +<a href="#nested-classes">Data Structures</a> | 63.72 +<a href="#func-members">Functions</a> </div> 63.73 + <div class="headertitle"> 63.74 +<div class="title">properties.h File Reference</div> </div> 63.75 +</div><!--header--> 63.76 +<div class="contents"> 63.77 + 63.78 +<p>Load / store utilities for properties files. 63.79 +<a href="#details">More...</a></p> 63.80 +<div class="textblock"><code>#include "<a class="el" href="ucx_8h_source.html">ucx.h</a>"</code><br /> 63.81 +<code>#include "<a class="el" href="map_8h_source.html">map.h</a>"</code><br /> 63.82 +</div> 63.83 +<p><a href="properties_8h_source.html">Go to the source code of this file.</a></p> 63.84 +<table class="memberdecls"> 63.85 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> 63.86 +Data Structures</h2></td></tr> 63.87 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxProperties.html">UcxProperties</a></td></tr> 63.88 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="structUcxProperties.html" title="UcxProperties object for parsing properties data. ">UcxProperties</a> object for parsing properties data. <a href="structUcxProperties.html#details">More...</a><br /></td></tr> 63.89 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 63.90 +</table><table class="memberdecls"> 63.91 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 63.92 +Functions</h2></td></tr> 63.93 +<tr class="memitem:a44d9dd12cab3aaa0084f1c8b89405796"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxProperties.html">UcxProperties</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="properties_8h.html#a44d9dd12cab3aaa0084f1c8b89405796">ucx_properties_new</a> ()</td></tr> 63.94 +<tr class="memdesc:a44d9dd12cab3aaa0084f1c8b89405796"><td class="mdescLeft"> </td><td class="mdescRight">Constructs a new <a class="el" href="structUcxProperties.html" title="UcxProperties object for parsing properties data. ">UcxProperties</a> object. <a href="#a44d9dd12cab3aaa0084f1c8b89405796">More...</a><br /></td></tr> 63.95 +<tr class="separator:a44d9dd12cab3aaa0084f1c8b89405796"><td class="memSeparator" colspan="2"> </td></tr> 63.96 +<tr class="memitem:a38a2fe7bb2986bd87c7e69356ab05c05"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="properties_8h.html#a38a2fe7bb2986bd87c7e69356ab05c05">ucx_properties_free</a> (<a class="el" href="structUcxProperties.html">UcxProperties</a> *prop)</td></tr> 63.97 +<tr class="memdesc:a38a2fe7bb2986bd87c7e69356ab05c05"><td class="mdescLeft"> </td><td class="mdescRight">Destroys a <a class="el" href="structUcxProperties.html" title="UcxProperties object for parsing properties data. ">UcxProperties</a> object. <a href="#a38a2fe7bb2986bd87c7e69356ab05c05">More...</a><br /></td></tr> 63.98 +<tr class="separator:a38a2fe7bb2986bd87c7e69356ab05c05"><td class="memSeparator" colspan="2"> </td></tr> 63.99 +<tr class="memitem:aaf8de121764a4d22c763ff2ab41f3a4d"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="properties_8h.html#aaf8de121764a4d22c763ff2ab41f3a4d">ucx_properties_fill</a> (<a class="el" href="structUcxProperties.html">UcxProperties</a> *prop, char *buf, size_t len)</td></tr> 63.100 +<tr class="memdesc:aaf8de121764a4d22c763ff2ab41f3a4d"><td class="mdescLeft"> </td><td class="mdescRight">Sets the input buffer for the properties parser. <a href="#aaf8de121764a4d22c763ff2ab41f3a4d">More...</a><br /></td></tr> 63.101 +<tr class="separator:aaf8de121764a4d22c763ff2ab41f3a4d"><td class="memSeparator" colspan="2"> </td></tr> 63.102 +<tr class="memitem:a7e03bc573d45d48c538cd721e810d33c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="properties_8h.html#a7e03bc573d45d48c538cd721e810d33c">ucx_properties_next</a> (<a class="el" href="structUcxProperties.html">UcxProperties</a> *prop, <a class="el" href="structsstr__t.html">sstr_t</a> *name, <a class="el" href="structsstr__t.html">sstr_t</a> *value)</td></tr> 63.103 +<tr class="memdesc:a7e03bc573d45d48c538cd721e810d33c"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves the next key/value-pair. <a href="#a7e03bc573d45d48c538cd721e810d33c">More...</a><br /></td></tr> 63.104 +<tr class="separator:a7e03bc573d45d48c538cd721e810d33c"><td class="memSeparator" colspan="2"> </td></tr> 63.105 +<tr class="memitem:a5c7ff8bc3139960a3f3dc92072b742f3"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="properties_8h.html#a5c7ff8bc3139960a3f3dc92072b742f3">ucx_properties2map</a> (<a class="el" href="structUcxProperties.html">UcxProperties</a> *prop, <a class="el" href="structUcxMap.html">UcxMap</a> *map)</td></tr> 63.106 +<tr class="memdesc:a5c7ff8bc3139960a3f3dc92072b742f3"><td class="mdescLeft"> </td><td class="mdescRight">Retrieves all available key/value-pairs and puts them into a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. <a href="#a5c7ff8bc3139960a3f3dc92072b742f3">More...</a><br /></td></tr> 63.107 +<tr class="separator:a5c7ff8bc3139960a3f3dc92072b742f3"><td class="memSeparator" colspan="2"> </td></tr> 63.108 +<tr class="memitem:ae1b600f839a6b2278b68fc314981a8a3"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="properties_8h.html#ae1b600f839a6b2278b68fc314981a8a3">ucx_properties_load</a> (<a class="el" href="structUcxMap.html">UcxMap</a> *map, FILE *file)</td></tr> 63.109 +<tr class="memdesc:ae1b600f839a6b2278b68fc314981a8a3"><td class="mdescLeft"> </td><td class="mdescRight">Loads a properties file to a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. <a href="#ae1b600f839a6b2278b68fc314981a8a3">More...</a><br /></td></tr> 63.110 +<tr class="separator:ae1b600f839a6b2278b68fc314981a8a3"><td class="memSeparator" colspan="2"> </td></tr> 63.111 +<tr class="memitem:a63c0c1b7648e675b21a1788917ff36fb"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="properties_8h.html#a63c0c1b7648e675b21a1788917ff36fb">ucx_properties_store</a> (<a class="el" href="structUcxMap.html">UcxMap</a> *map, FILE *file)</td></tr> 63.112 +<tr class="memdesc:a63c0c1b7648e675b21a1788917ff36fb"><td class="mdescLeft"> </td><td class="mdescRight">Stores a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a> to a file. <a href="#a63c0c1b7648e675b21a1788917ff36fb">More...</a><br /></td></tr> 63.113 +<tr class="separator:a63c0c1b7648e675b21a1788917ff36fb"><td class="memSeparator" colspan="2"> </td></tr> 63.114 +</table> 63.115 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 63.116 +<div class="textblock"><p>Load / store utilities for properties files. </p> 63.117 +<dl class="section author"><dt>Author</dt><dd>Mike Becker </dd> 63.118 +<dd> 63.119 +Olaf Wintermann </dd></dl> 63.120 +</div><h2 class="groupheader">Function Documentation</h2> 63.121 +<a id="a5c7ff8bc3139960a3f3dc92072b742f3"></a> 63.122 +<h2 class="memtitle"><span class="permalink"><a href="#a5c7ff8bc3139960a3f3dc92072b742f3">◆ </a></span>ucx_properties2map()</h2> 63.123 + 63.124 +<div class="memitem"> 63.125 +<div class="memproto"> 63.126 + <table class="memname"> 63.127 + <tr> 63.128 + <td class="memname">int ucx_properties2map </td> 63.129 + <td>(</td> 63.130 + <td class="paramtype"><a class="el" href="structUcxProperties.html">UcxProperties</a> * </td> 63.131 + <td class="paramname"><em>prop</em>, </td> 63.132 + </tr> 63.133 + <tr> 63.134 + <td class="paramkey"></td> 63.135 + <td></td> 63.136 + <td class="paramtype"><a class="el" href="structUcxMap.html">UcxMap</a> * </td> 63.137 + <td class="paramname"><em>map</em> </td> 63.138 + </tr> 63.139 + <tr> 63.140 + <td></td> 63.141 + <td>)</td> 63.142 + <td></td><td></td> 63.143 + </tr> 63.144 + </table> 63.145 +</div><div class="memdoc"> 63.146 + 63.147 +<p>Retrieves all available key/value-pairs and puts them into a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. </p> 63.148 +<p>This is done by successive calls to <a class="el" href="properties_8h.html#a7e03bc573d45d48c538cd721e810d33c" title="Retrieves the next key/value-pair. ">ucx_properties_next()</a> until no more key/value-pairs can be retrieved.</p> 63.149 +<p>The memory for the map values is allocated by the map's own allocator.</p> 63.150 +<dl class="params"><dt>Parameters</dt><dd> 63.151 + <table class="params"> 63.152 + <tr><td class="paramname">prop</td><td>the <a class="el" href="structUcxProperties.html" title="UcxProperties object for parsing properties data. ">UcxProperties</a> object </td></tr> 63.153 + <tr><td class="paramname">map</td><td>the target map </td></tr> 63.154 + </table> 63.155 + </dd> 63.156 +</dl> 63.157 +<dl class="section return"><dt>Returns</dt><dd>The <a class="el" href="structUcxProperties.html#a34f71a6ab6dcb6892e3b4eb802e75bff" title="Parser error code. ">UcxProperties.error</a> code (i.e. 0 on success). </dd></dl> 63.158 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="properties_8h.html#aaf8de121764a4d22c763ff2ab41f3a4d" title="Sets the input buffer for the properties parser. ">ucx_properties_fill()</a> </dd> 63.159 +<dd> 63.160 +<a class="el" href="structUcxMap.html#a531f3e481c1c331cf037b916192e974d" title="An allocator that is used for the map elements. ">UcxMap.allocator</a> </dd></dl> 63.161 + 63.162 +</div> 63.163 +</div> 63.164 +<a id="aaf8de121764a4d22c763ff2ab41f3a4d"></a> 63.165 +<h2 class="memtitle"><span class="permalink"><a href="#aaf8de121764a4d22c763ff2ab41f3a4d">◆ </a></span>ucx_properties_fill()</h2> 63.166 + 63.167 +<div class="memitem"> 63.168 +<div class="memproto"> 63.169 + <table class="memname"> 63.170 + <tr> 63.171 + <td class="memname">void ucx_properties_fill </td> 63.172 + <td>(</td> 63.173 + <td class="paramtype"><a class="el" href="structUcxProperties.html">UcxProperties</a> * </td> 63.174 + <td class="paramname"><em>prop</em>, </td> 63.175 + </tr> 63.176 + <tr> 63.177 + <td class="paramkey"></td> 63.178 + <td></td> 63.179 + <td class="paramtype">char * </td> 63.180 + <td class="paramname"><em>buf</em>, </td> 63.181 + </tr> 63.182 + <tr> 63.183 + <td class="paramkey"></td> 63.184 + <td></td> 63.185 + <td class="paramtype">size_t </td> 63.186 + <td class="paramname"><em>len</em> </td> 63.187 + </tr> 63.188 + <tr> 63.189 + <td></td> 63.190 + <td>)</td> 63.191 + <td></td><td></td> 63.192 + </tr> 63.193 + </table> 63.194 +</div><div class="memdoc"> 63.195 + 63.196 +<p>Sets the input buffer for the properties parser. </p> 63.197 +<p>After calling this function, you may parse the data by calling <a class="el" href="properties_8h.html#a7e03bc573d45d48c538cd721e810d33c" title="Retrieves the next key/value-pair. ">ucx_properties_next()</a> until it returns 0. The function <a class="el" href="properties_8h.html#a5c7ff8bc3139960a3f3dc92072b742f3" title="Retrieves all available key/value-pairs and puts them into a UcxMap. ">ucx_properties2map()</a> is a convenience function that reads as much data as possible by using this function.</p> 63.198 +<dl class="params"><dt>Parameters</dt><dd> 63.199 + <table class="params"> 63.200 + <tr><td class="paramname">prop</td><td>the <a class="el" href="structUcxProperties.html" title="UcxProperties object for parsing properties data. ">UcxProperties</a> object </td></tr> 63.201 + <tr><td class="paramname">buf</td><td>a pointer to the new buffer </td></tr> 63.202 + <tr><td class="paramname">len</td><td>the payload length of the buffer </td></tr> 63.203 + </table> 63.204 + </dd> 63.205 +</dl> 63.206 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="properties_8h.html#a7e03bc573d45d48c538cd721e810d33c" title="Retrieves the next key/value-pair. ">ucx_properties_next()</a> </dd> 63.207 +<dd> 63.208 +<a class="el" href="properties_8h.html#a5c7ff8bc3139960a3f3dc92072b742f3" title="Retrieves all available key/value-pairs and puts them into a UcxMap. ">ucx_properties2map()</a> </dd></dl> 63.209 + 63.210 +</div> 63.211 +</div> 63.212 +<a id="a38a2fe7bb2986bd87c7e69356ab05c05"></a> 63.213 +<h2 class="memtitle"><span class="permalink"><a href="#a38a2fe7bb2986bd87c7e69356ab05c05">◆ </a></span>ucx_properties_free()</h2> 63.214 + 63.215 +<div class="memitem"> 63.216 +<div class="memproto"> 63.217 + <table class="memname"> 63.218 + <tr> 63.219 + <td class="memname">void ucx_properties_free </td> 63.220 + <td>(</td> 63.221 + <td class="paramtype"><a class="el" href="structUcxProperties.html">UcxProperties</a> * </td> 63.222 + <td class="paramname"><em>prop</em></td><td>)</td> 63.223 + <td></td> 63.224 + </tr> 63.225 + </table> 63.226 +</div><div class="memdoc"> 63.227 + 63.228 +<p>Destroys a <a class="el" href="structUcxProperties.html" title="UcxProperties object for parsing properties data. ">UcxProperties</a> object. </p> 63.229 +<dl class="params"><dt>Parameters</dt><dd> 63.230 + <table class="params"> 63.231 + <tr><td class="paramname">prop</td><td>the <a class="el" href="structUcxProperties.html" title="UcxProperties object for parsing properties data. ">UcxProperties</a> object to destroy </td></tr> 63.232 + </table> 63.233 + </dd> 63.234 +</dl> 63.235 + 63.236 +</div> 63.237 +</div> 63.238 +<a id="ae1b600f839a6b2278b68fc314981a8a3"></a> 63.239 +<h2 class="memtitle"><span class="permalink"><a href="#ae1b600f839a6b2278b68fc314981a8a3">◆ </a></span>ucx_properties_load()</h2> 63.240 + 63.241 +<div class="memitem"> 63.242 +<div class="memproto"> 63.243 + <table class="memname"> 63.244 + <tr> 63.245 + <td class="memname">int ucx_properties_load </td> 63.246 + <td>(</td> 63.247 + <td class="paramtype"><a class="el" href="structUcxMap.html">UcxMap</a> * </td> 63.248 + <td class="paramname"><em>map</em>, </td> 63.249 + </tr> 63.250 + <tr> 63.251 + <td class="paramkey"></td> 63.252 + <td></td> 63.253 + <td class="paramtype">FILE * </td> 63.254 + <td class="paramname"><em>file</em> </td> 63.255 + </tr> 63.256 + <tr> 63.257 + <td></td> 63.258 + <td>)</td> 63.259 + <td></td><td></td> 63.260 + </tr> 63.261 + </table> 63.262 +</div><div class="memdoc"> 63.263 + 63.264 +<p>Loads a properties file to a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. </p> 63.265 +<p>This is a convenience function that reads data from an input stream until the end of the stream is reached.</p> 63.266 +<dl class="params"><dt>Parameters</dt><dd> 63.267 + <table class="params"> 63.268 + <tr><td class="paramname">map</td><td>the map object to write the key/value-pairs to </td></tr> 63.269 + <tr><td class="paramname">file</td><td>the <code>FILE*</code> stream to read from </td></tr> 63.270 + </table> 63.271 + </dd> 63.272 +</dl> 63.273 +<dl class="section return"><dt>Returns</dt><dd>0 on success, or a non-zero value on error</dd></dl> 63.274 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="properties_8h.html#aaf8de121764a4d22c763ff2ab41f3a4d" title="Sets the input buffer for the properties parser. ">ucx_properties_fill()</a> </dd> 63.275 +<dd> 63.276 +<a class="el" href="properties_8h.html#a5c7ff8bc3139960a3f3dc92072b742f3" title="Retrieves all available key/value-pairs and puts them into a UcxMap. ">ucx_properties2map()</a> </dd></dl> 63.277 + 63.278 +</div> 63.279 +</div> 63.280 +<a id="a44d9dd12cab3aaa0084f1c8b89405796"></a> 63.281 +<h2 class="memtitle"><span class="permalink"><a href="#a44d9dd12cab3aaa0084f1c8b89405796">◆ </a></span>ucx_properties_new()</h2> 63.282 + 63.283 +<div class="memitem"> 63.284 +<div class="memproto"> 63.285 + <table class="memname"> 63.286 + <tr> 63.287 + <td class="memname"><a class="el" href="structUcxProperties.html">UcxProperties</a>* ucx_properties_new </td> 63.288 + <td>(</td> 63.289 + <td class="paramname"></td><td>)</td> 63.290 + <td></td> 63.291 + </tr> 63.292 + </table> 63.293 +</div><div class="memdoc"> 63.294 + 63.295 +<p>Constructs a new <a class="el" href="structUcxProperties.html" title="UcxProperties object for parsing properties data. ">UcxProperties</a> object. </p> 63.296 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the new <a class="el" href="structUcxProperties.html" title="UcxProperties object for parsing properties data. ">UcxProperties</a> object </dd></dl> 63.297 + 63.298 +</div> 63.299 +</div> 63.300 +<a id="a7e03bc573d45d48c538cd721e810d33c"></a> 63.301 +<h2 class="memtitle"><span class="permalink"><a href="#a7e03bc573d45d48c538cd721e810d33c">◆ </a></span>ucx_properties_next()</h2> 63.302 + 63.303 +<div class="memitem"> 63.304 +<div class="memproto"> 63.305 + <table class="memname"> 63.306 + <tr> 63.307 + <td class="memname">int ucx_properties_next </td> 63.308 + <td>(</td> 63.309 + <td class="paramtype"><a class="el" href="structUcxProperties.html">UcxProperties</a> * </td> 63.310 + <td class="paramname"><em>prop</em>, </td> 63.311 + </tr> 63.312 + <tr> 63.313 + <td class="paramkey"></td> 63.314 + <td></td> 63.315 + <td class="paramtype"><a class="el" href="structsstr__t.html">sstr_t</a> * </td> 63.316 + <td class="paramname"><em>name</em>, </td> 63.317 + </tr> 63.318 + <tr> 63.319 + <td class="paramkey"></td> 63.320 + <td></td> 63.321 + <td class="paramtype"><a class="el" href="structsstr__t.html">sstr_t</a> * </td> 63.322 + <td class="paramname"><em>value</em> </td> 63.323 + </tr> 63.324 + <tr> 63.325 + <td></td> 63.326 + <td>)</td> 63.327 + <td></td><td></td> 63.328 + </tr> 63.329 + </table> 63.330 +</div><div class="memdoc"> 63.331 + 63.332 +<p>Retrieves the next key/value-pair. </p> 63.333 +<p>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 <a class="el" href="properties_8h.html#aaf8de121764a4d22c763ff2ab41f3a4d" title="Sets the input buffer for the properties parser. ">ucx_properties_fill()</a>.</p> 63.334 +<p><b>Attention:</b> the <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> 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 <a class="el" href="string_8h.html#accbfd2b459a028d7af9fb7df6f977d80" title="Creates a duplicate of the specified string. ">sstrdup()</a> after calling this function.</p> 63.335 +<dl class="params"><dt>Parameters</dt><dd> 63.336 + <table class="params"> 63.337 + <tr><td class="paramname">prop</td><td>the <a class="el" href="structUcxProperties.html" title="UcxProperties object for parsing properties data. ">UcxProperties</a> object </td></tr> 63.338 + <tr><td class="paramname">name</td><td>a pointer to the <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> that shall contain the property name </td></tr> 63.339 + <tr><td class="paramname">value</td><td>a pointer to the <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> that shall contain the property value </td></tr> 63.340 + </table> 63.341 + </dd> 63.342 +</dl> 63.343 +<dl class="section return"><dt>Returns</dt><dd>Nonzero, if a key/value-pair was successfully retrieved </dd></dl> 63.344 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="properties_8h.html#aaf8de121764a4d22c763ff2ab41f3a4d" title="Sets the input buffer for the properties parser. ">ucx_properties_fill()</a> </dd></dl> 63.345 + 63.346 +</div> 63.347 +</div> 63.348 +<a id="a63c0c1b7648e675b21a1788917ff36fb"></a> 63.349 +<h2 class="memtitle"><span class="permalink"><a href="#a63c0c1b7648e675b21a1788917ff36fb">◆ </a></span>ucx_properties_store()</h2> 63.350 + 63.351 +<div class="memitem"> 63.352 +<div class="memproto"> 63.353 + <table class="memname"> 63.354 + <tr> 63.355 + <td class="memname">int ucx_properties_store </td> 63.356 + <td>(</td> 63.357 + <td class="paramtype"><a class="el" href="structUcxMap.html">UcxMap</a> * </td> 63.358 + <td class="paramname"><em>map</em>, </td> 63.359 + </tr> 63.360 + <tr> 63.361 + <td class="paramkey"></td> 63.362 + <td></td> 63.363 + <td class="paramtype">FILE * </td> 63.364 + <td class="paramname"><em>file</em> </td> 63.365 + </tr> 63.366 + <tr> 63.367 + <td></td> 63.368 + <td>)</td> 63.369 + <td></td><td></td> 63.370 + </tr> 63.371 + </table> 63.372 +</div><div class="memdoc"> 63.373 + 63.374 +<p>Stores a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a> to a file. </p> 63.375 +<p>The key/value-pairs are written by using the following format:</p> 63.376 +<p><code>[key] = [value]\n</code></p> 63.377 +<dl class="params"><dt>Parameters</dt><dd> 63.378 + <table class="params"> 63.379 + <tr><td class="paramname">map</td><td>the map to store </td></tr> 63.380 + <tr><td class="paramname">file</td><td>the <code>FILE*</code> stream to write to </td></tr> 63.381 + </table> 63.382 + </dd> 63.383 +</dl> 63.384 +<dl class="section return"><dt>Returns</dt><dd>0 on success, or a non-zero value on error </dd></dl> 63.385 + 63.386 +</div> 63.387 +</div> 63.388 +</div><!-- contents --> 63.389 +<!-- start footer part --> 63.390 +<hr class="footer"/><address class="footer"><small> 63.391 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 63.392 +<img class="footer" src="doxygen.png" alt="doxygen"/> 63.393 +</a> 1.8.13 63.394 +</small></address> 63.395 +</body> 63.396 +</html>
64.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 64.2 +++ b/docs/api-2.1/properties_8h_source.html Sat Feb 06 19:11:44 2021 +0100 64.3 @@ -0,0 +1,102 @@ 64.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 64.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 64.6 +<head> 64.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 64.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 64.9 +<meta name="generator" content="Doxygen 1.8.13"/> 64.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 64.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/properties.h Source File</title> 64.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 64.13 +<script type="text/javascript" src="jquery.js"></script> 64.14 +<script type="text/javascript" src="dynsections.js"></script> 64.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 64.16 +<script type="text/javascript" src="search/searchdata.js"></script> 64.17 +<script type="text/javascript" src="search/search.js"></script> 64.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 64.19 +</head> 64.20 +<body> 64.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 64.22 +<div id="titlearea"> 64.23 +<table cellspacing="0" cellpadding="0"> 64.24 + <tbody> 64.25 + <tr style="height: 56px;"> 64.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 64.27 + <td id="projectalign" style="padding-left: 0.5em;"> 64.28 + <div id="projectname">ucx 64.29 + </div> 64.30 + <div id="projectbrief">UAP Common Extensions</div> 64.31 + </td> 64.32 + </tr> 64.33 + </tbody> 64.34 +</table> 64.35 +</div> 64.36 +<!-- end header part --> 64.37 +<!-- Generated by Doxygen 1.8.13 --> 64.38 +<script type="text/javascript"> 64.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 64.40 +</script> 64.41 +<script type="text/javascript" src="menudata.js"></script> 64.42 +<script type="text/javascript" src="menu.js"></script> 64.43 +<script type="text/javascript"> 64.44 +$(function() { 64.45 + initMenu('',true,false,'search.php','Search'); 64.46 + $(document).ready(function() { init_search(); }); 64.47 +}); 64.48 +</script> 64.49 +<div id="main-nav"></div> 64.50 +<!-- window showing the filter options --> 64.51 +<div id="MSearchSelectWindow" 64.52 + onmouseover="return searchBox.OnSearchSelectShow()" 64.53 + onmouseout="return searchBox.OnSearchSelectHide()" 64.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 64.55 +</div> 64.56 + 64.57 +<!-- iframe showing the search results (closed by default) --> 64.58 +<div id="MSearchResultsWindow"> 64.59 +<iframe src="javascript:void(0)" frameborder="0" 64.60 + name="MSearchResults" id="MSearchResults"> 64.61 +</iframe> 64.62 +</div> 64.63 + 64.64 +<div id="nav-path" class="navpath"> 64.65 + <ul> 64.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 64.67 +</div> 64.68 +</div><!-- top --> 64.69 +<div class="header"> 64.70 + <div class="headertitle"> 64.71 +<div class="title">properties.h</div> </div> 64.72 +</div><!--header--> 64.73 +<div class="contents"> 64.74 +<a href="properties_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are met:</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * documentation and/or other materials provided with the distribution.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#ifndef UCX_PROPERTIES_H</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#define UCX_PROPERTIES_H</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#include "<a class="code" href="ucx_8h.html">ucx.h</a>"</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="map_8h.html">map.h</a>"</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="structUcxProperties.html"> 53</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="structUcxProperties.html#a6bb4d29686df41a0f42641ee15232bfd"> 58</a></span>  <span class="keywordtype">char</span> *<a class="code" href="structUcxProperties.html#a6bb4d29686df41a0f42641ee15232bfd">buffer</a>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  </div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="structUcxProperties.html#a4e7524434525267e29f493a25dcca6b5"> 64</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxProperties.html#a4e7524434525267e29f493a25dcca6b5">buflen</a>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  </div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="structUcxProperties.html#addd36ac8e5e42241c0a57453633970db"> 70</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxProperties.html#addd36ac8e5e42241c0a57453633970db">pos</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  </div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="structUcxProperties.html#a68556d4260153f58dde44e4c365edce6"> 76</a></span>  <span class="keywordtype">char</span> *<a class="code" href="structUcxProperties.html#a68556d4260153f58dde44e4c365edce6">tmp</a>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  </div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="structUcxProperties.html#a8a81853d5903bee2f4e1fa53fdffae6e"> 82</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxProperties.html#a8a81853d5903bee2f4e1fa53fdffae6e">tmplen</a>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  </div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="structUcxProperties.html#a5af10131ea9f679b4ee174499f92e210"> 88</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxProperties.html#a5af10131ea9f679b4ee174499f92e210">tmpcap</a>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  </div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="structUcxProperties.html#a34f71a6ab6dcb6892e3b4eb802e75bff"> 95</a></span>  <span class="keywordtype">int</span> <a class="code" href="structUcxProperties.html#a34f71a6ab6dcb6892e3b4eb802e75bff">error</a>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  </div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="structUcxProperties.html#af6adb3f69616cf9d2bb5ea7b4d837ca5"> 101</a></span>  <span class="keywordtype">char</span> <a class="code" href="structUcxProperties.html#af6adb3f69616cf9d2bb5ea7b4d837ca5">delimiter</a>;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  </div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="structUcxProperties.html#afaa2e6a289fa6949b7b01df35fa5def8"> 107</a></span>  <span class="keywordtype">char</span> <a class="code" href="structUcxProperties.html#afaa2e6a289fa6949b7b01df35fa5def8">comment1</a>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  </div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="structUcxProperties.html#a9ea7ecb414ca8bc7bef62cdd19cc6363"> 113</a></span>  <span class="keywordtype">char</span> <a class="code" href="structUcxProperties.html#a9ea7ecb414ca8bc7bef62cdd19cc6363">comment2</a>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  </div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="structUcxProperties.html#a5f3e561e32bac03e36a191a6940cca92"> 119</a></span>  <span class="keywordtype">char</span> <a class="code" href="structUcxProperties.html#a5f3e561e32bac03e36a191a6940cca92">comment3</a>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> } <a class="code" href="structUcxProperties.html">UcxProperties</a>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <a class="code" href="structUcxProperties.html">UcxProperties</a> *<a class="code" href="properties_8h.html#a44d9dd12cab3aaa0084f1c8b89405796">ucx_properties_new</a>();</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">void</span> <a class="code" href="properties_8h.html#a38a2fe7bb2986bd87c7e69356ab05c05">ucx_properties_free</a>(<a class="code" href="structUcxProperties.html">UcxProperties</a> *prop);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordtype">void</span> <a class="code" href="properties_8h.html#aaf8de121764a4d22c763ff2ab41f3a4d">ucx_properties_fill</a>(<a class="code" href="structUcxProperties.html">UcxProperties</a> *prop, <span class="keywordtype">char</span> *buf, <span class="keywordtype">size_t</span> len);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> <span class="keywordtype">int</span> <a class="code" href="properties_8h.html#a7e03bc573d45d48c538cd721e810d33c">ucx_properties_next</a>(<a class="code" href="structUcxProperties.html">UcxProperties</a> *prop, <a class="code" href="structsstr__t.html">sstr_t</a> *name, <a class="code" href="structsstr__t.html">sstr_t</a> *value);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> </div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keywordtype">int</span> <a class="code" href="properties_8h.html#a5c7ff8bc3139960a3f3dc92072b742f3">ucx_properties2map</a>(<a class="code" href="structUcxProperties.html">UcxProperties</a> *prop, <a class="code" href="structUcxMap.html">UcxMap</a> *map);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="keywordtype">int</span> <a class="code" href="properties_8h.html#ae1b600f839a6b2278b68fc314981a8a3">ucx_properties_load</a>(<a class="code" href="structUcxMap.html">UcxMap</a> *map, FILE *file);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keywordtype">int</span> <a class="code" href="properties_8h.html#a63c0c1b7648e675b21a1788917ff36fb">ucx_properties_store</a>(<a class="code" href="structUcxMap.html">UcxMap</a> *map, FILE *file);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span> }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_PROPERTIES_H */</span><span class="preprocessor"></span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="ttc" id="structsstr__t_html"><div class="ttname"><a href="structsstr__t.html">sstr_t</a></div><div class="ttdoc">The UCX string structure. </div><div class="ttdef"><b>Definition:</b> string.h:90</div></div> 64.75 +<div class="ttc" id="properties_8h_html_a44d9dd12cab3aaa0084f1c8b89405796"><div class="ttname"><a href="properties_8h.html#a44d9dd12cab3aaa0084f1c8b89405796">ucx_properties_new</a></div><div class="ttdeci">UcxProperties * ucx_properties_new()</div><div class="ttdoc">Constructs a new UcxProperties object. </div><div class="ttdef"><b>Definition:</b> properties.c:35</div></div> 64.76 +<div class="ttc" id="structUcxProperties_html_a5f3e561e32bac03e36a191a6940cca92"><div class="ttname"><a href="structUcxProperties.html#a5f3e561e32bac03e36a191a6940cca92">UcxProperties::comment3</a></div><div class="ttdeci">char comment3</div><div class="ttdoc">The third comment character. </div><div class="ttdef"><b>Definition:</b> properties.h:119</div></div> 64.77 +<div class="ttc" id="ucx_8h_html"><div class="ttname"><a href="ucx_8h.html">ucx.h</a></div><div class="ttdoc">Main UCX Header providing most common definitions. </div></div> 64.78 +<div class="ttc" id="structUcxProperties_html_addd36ac8e5e42241c0a57453633970db"><div class="ttname"><a href="structUcxProperties.html#addd36ac8e5e42241c0a57453633970db">UcxProperties::pos</a></div><div class="ttdeci">size_t pos</div><div class="ttdoc">Current buffer position (don&#39;t set manually). </div><div class="ttdef"><b>Definition:</b> properties.h:70</div></div> 64.79 +<div class="ttc" id="structUcxProperties_html_a9ea7ecb414ca8bc7bef62cdd19cc6363"><div class="ttname"><a href="structUcxProperties.html#a9ea7ecb414ca8bc7bef62cdd19cc6363">UcxProperties::comment2</a></div><div class="ttdeci">char comment2</div><div class="ttdoc">The second comment character. </div><div class="ttdef"><b>Definition:</b> properties.h:113</div></div> 64.80 +<div class="ttc" id="properties_8h_html_ae1b600f839a6b2278b68fc314981a8a3"><div class="ttname"><a href="properties_8h.html#ae1b600f839a6b2278b68fc314981a8a3">ucx_properties_load</a></div><div class="ttdeci">int ucx_properties_load(UcxMap *map, FILE *file)</div><div class="ttdoc">Loads a properties file to a UcxMap. </div><div class="ttdef"><b>Definition:</b> properties.c:222</div></div> 64.81 +<div class="ttc" id="structUcxProperties_html"><div class="ttname"><a href="structUcxProperties.html">UcxProperties</a></div><div class="ttdoc">UcxProperties object for parsing properties data. </div><div class="ttdef"><b>Definition:</b> properties.h:53</div></div> 64.82 +<div class="ttc" id="structUcxProperties_html_a4e7524434525267e29f493a25dcca6b5"><div class="ttname"><a href="structUcxProperties.html#a4e7524434525267e29f493a25dcca6b5">UcxProperties::buflen</a></div><div class="ttdeci">size_t buflen</div><div class="ttdoc">Length of the input buffer (don&#39;t set manually). </div><div class="ttdef"><b>Definition:</b> properties.h:64</div></div> 64.83 +<div class="ttc" id="structUcxProperties_html_a6bb4d29686df41a0f42641ee15232bfd"><div class="ttname"><a href="structUcxProperties.html#a6bb4d29686df41a0f42641ee15232bfd">UcxProperties::buffer</a></div><div class="ttdeci">char * buffer</div><div class="ttdoc">Input buffer (don&#39;t set manually). </div><div class="ttdef"><b>Definition:</b> properties.h:58</div></div> 64.84 +<div class="ttc" id="structUcxProperties_html_a34f71a6ab6dcb6892e3b4eb802e75bff"><div class="ttname"><a href="structUcxProperties.html#a34f71a6ab6dcb6892e3b4eb802e75bff">UcxProperties::error</a></div><div class="ttdeci">int error</div><div class="ttdoc">Parser error code. </div><div class="ttdef"><b>Definition:</b> properties.h:95</div></div> 64.85 +<div class="ttc" id="structUcxProperties_html_a8a81853d5903bee2f4e1fa53fdffae6e"><div class="ttname"><a href="structUcxProperties.html#a8a81853d5903bee2f4e1fa53fdffae6e">UcxProperties::tmplen</a></div><div class="ttdeci">size_t tmplen</div><div class="ttdoc">Internal temporary buffer length (don&#39;t set manually). </div><div class="ttdef"><b>Definition:</b> properties.h:82</div></div> 64.86 +<div class="ttc" id="structUcxProperties_html_afaa2e6a289fa6949b7b01df35fa5def8"><div class="ttname"><a href="structUcxProperties.html#afaa2e6a289fa6949b7b01df35fa5def8">UcxProperties::comment1</a></div><div class="ttdeci">char comment1</div><div class="ttdoc">The first comment character. </div><div class="ttdef"><b>Definition:</b> properties.h:107</div></div> 64.87 +<div class="ttc" id="properties_8h_html_a7e03bc573d45d48c538cd721e810d33c"><div class="ttname"><a href="properties_8h.html#a7e03bc573d45d48c538cd721e810d33c">ucx_properties_next</a></div><div class="ttdeci">int ucx_properties_next(UcxProperties *prop, sstr_t *name, sstr_t *value)</div><div class="ttdoc">Retrieves the next key/value-pair. </div><div class="ttdef"><b>Definition:</b> properties.c:80</div></div> 64.88 +<div class="ttc" id="properties_8h_html_a5c7ff8bc3139960a3f3dc92072b742f3"><div class="ttname"><a href="properties_8h.html#a5c7ff8bc3139960a3f3dc92072b742f3">ucx_properties2map</a></div><div class="ttdeci">int ucx_properties2map(UcxProperties *prop, UcxMap *map)</div><div class="ttdoc">Retrieves all available key/value-pairs and puts them into a UcxMap. </div><div class="ttdef"><b>Definition:</b> properties.c:200</div></div> 64.89 +<div class="ttc" id="structUcxProperties_html_af6adb3f69616cf9d2bb5ea7b4d837ca5"><div class="ttname"><a href="structUcxProperties.html#af6adb3f69616cf9d2bb5ea7b4d837ca5">UcxProperties::delimiter</a></div><div class="ttdeci">char delimiter</div><div class="ttdoc">The delimiter that shall be used. </div><div class="ttdef"><b>Definition:</b> properties.h:101</div></div> 64.90 +<div class="ttc" id="structUcxProperties_html_a68556d4260153f58dde44e4c365edce6"><div class="ttname"><a href="structUcxProperties.html#a68556d4260153f58dde44e4c365edce6">UcxProperties::tmp</a></div><div class="ttdeci">char * tmp</div><div class="ttdoc">Internal temporary buffer (don&#39;t set manually). </div><div class="ttdef"><b>Definition:</b> properties.h:76</div></div> 64.91 +<div class="ttc" id="structUcxMap_html"><div class="ttname"><a href="structUcxMap.html">UcxMap</a></div><div class="ttdoc">Structure for the UCX map. </div><div class="ttdef"><b>Definition:</b> map.h:81</div></div> 64.92 +<div class="ttc" id="structUcxProperties_html_a5af10131ea9f679b4ee174499f92e210"><div class="ttname"><a href="structUcxProperties.html#a5af10131ea9f679b4ee174499f92e210">UcxProperties::tmpcap</a></div><div class="ttdeci">size_t tmpcap</div><div class="ttdoc">Internal temporary buffer capacity (don&#39;t set manually). </div><div class="ttdef"><b>Definition:</b> properties.h:88</div></div> 64.93 +<div class="ttc" id="map_8h_html"><div class="ttname"><a href="map_8h.html">map.h</a></div><div class="ttdoc">Hash map implementation. </div></div> 64.94 +<div class="ttc" id="properties_8h_html_aaf8de121764a4d22c763ff2ab41f3a4d"><div class="ttname"><a href="properties_8h.html#aaf8de121764a4d22c763ff2ab41f3a4d">ucx_properties_fill</a></div><div class="ttdeci">void ucx_properties_fill(UcxProperties *prop, char *buf, size_t len)</div><div class="ttdoc">Sets the input buffer for the properties parser. </div><div class="ttdef"><b>Definition:</b> properties.c:64</div></div> 64.95 +<div class="ttc" id="properties_8h_html_a63c0c1b7648e675b21a1788917ff36fb"><div class="ttname"><a href="properties_8h.html#a63c0c1b7648e675b21a1788917ff36fb">ucx_properties_store</a></div><div class="ttdeci">int ucx_properties_store(UcxMap *map, FILE *file)</div><div class="ttdoc">Stores a UcxMap to a file. </div><div class="ttdef"><b>Definition:</b> properties.c:242</div></div> 64.96 +<div class="ttc" id="properties_8h_html_a38a2fe7bb2986bd87c7e69356ab05c05"><div class="ttname"><a href="properties_8h.html#a38a2fe7bb2986bd87c7e69356ab05c05">ucx_properties_free</a></div><div class="ttdeci">void ucx_properties_free(UcxProperties *prop)</div><div class="ttdoc">Destroys a UcxProperties object. </div><div class="ttdef"><b>Definition:</b> properties.c:57</div></div> 64.97 +</div><!-- fragment --></div><!-- contents --> 64.98 +<!-- start footer part --> 64.99 +<hr class="footer"/><address class="footer"><small> 64.100 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 64.101 +<img class="footer" src="doxygen.png" alt="doxygen"/> 64.102 +</a> 1.8.13 64.103 +</small></address> 64.104 +</body> 64.105 +</html>
65.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 65.2 +++ b/docs/api-2.1/search/all_0.html Sat Feb 06 19:11:44 2021 +0100 65.3 @@ -0,0 +1,26 @@ 65.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 65.5 +<html><head><title></title> 65.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 65.7 +<meta name="generator" content="Doxygen 1.8.13"/> 65.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 65.9 +<script type="text/javascript" src="all_0.js"></script> 65.10 +<script type="text/javascript" src="search.js"></script> 65.11 +</head> 65.12 +<body class="SRPage"> 65.13 +<div id="SRIndex"> 65.14 +<div class="SRStatus" id="Loading">Loading...</div> 65.15 +<div id="SRResults"></div> 65.16 +<script type="text/javascript"><!-- 65.17 +createResults(); 65.18 +--></script> 65.19 +<div class="SRStatus" id="Searching">Searching...</div> 65.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 65.21 +<script type="text/javascript"><!-- 65.22 +document.getElementById("Loading").style.display="none"; 65.23 +document.getElementById("NoMatches").style.display="none"; 65.24 +var searchResults = new SearchResults("searchResults"); 65.25 +searchResults.Search(); 65.26 +--></script> 65.27 +</div> 65.28 +</body> 65.29 +</html>
66.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 66.2 +++ b/docs/api-2.1/search/all_0.js Sat Feb 06 19:11:44 2021 +0100 66.3 @@ -0,0 +1,4 @@ 66.4 +var searchData= 66.5 +[ 66.6 + ['_5f_5ffunction_5f_5f',['__FUNCTION__',['../test_8h.html#a828bb1dfda1afd67ca795075903d227d',1,'test.h']]] 66.7 +];
67.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 67.2 +++ b/docs/api-2.1/search/all_1.html Sat Feb 06 19:11:44 2021 +0100 67.3 @@ -0,0 +1,26 @@ 67.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 67.5 +<html><head><title></title> 67.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 67.7 +<meta name="generator" content="Doxygen 1.8.13"/> 67.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 67.9 +<script type="text/javascript" src="all_1.js"></script> 67.10 +<script type="text/javascript" src="search.js"></script> 67.11 +</head> 67.12 +<body class="SRPage"> 67.13 +<div id="SRIndex"> 67.14 +<div class="SRStatus" id="Loading">Loading...</div> 67.15 +<div id="SRResults"></div> 67.16 +<script type="text/javascript"><!-- 67.17 +createResults(); 67.18 +--></script> 67.19 +<div class="SRStatus" id="Searching">Searching...</div> 67.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 67.21 +<script type="text/javascript"><!-- 67.22 +document.getElementById("Loading").style.display="none"; 67.23 +document.getElementById("NoMatches").style.display="none"; 67.24 +var searchResults = new SearchResults("searchResults"); 67.25 +searchResults.Search(); 67.26 +--></script> 67.27 +</div> 67.28 +</body> 67.29 +</html>
68.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 68.2 +++ b/docs/api-2.1/search/all_1.js Sat Feb 06 19:11:44 2021 +0100 68.3 @@ -0,0 +1,11 @@ 68.4 +var searchData= 68.5 +[ 68.6 + ['alcalloc',['alcalloc',['../allocator_8h.html#a8d71470816f88f78cb9a9686c57e1b10',1,'allocator.h']]], 68.7 + ['alfree',['alfree',['../allocator_8h.html#acd775785b54e97dc2b33a432c12c8fb2',1,'allocator.h']]], 68.8 + ['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()']]], 68.9 + ['allocator_2eh',['allocator.h',['../allocator_8h.html',1,'']]], 68.10 + ['almalloc',['almalloc',['../allocator_8h.html#ae1bc218fea8a35f4a3706f0beefcfb19',1,'allocator.h']]], 68.11 + ['alrealloc',['alrealloc',['../allocator_8h.html#a029ee5c9bcbb3f873571553f788c5820',1,'allocator.h']]], 68.12 + ['array_2eh',['array.h',['../array_8h.html',1,'']]], 68.13 + ['avl_2eh',['avl.h',['../avl_8h.html',1,'']]] 68.14 +];
69.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 69.2 +++ b/docs/api-2.1/search/all_10.html Sat Feb 06 19:11:44 2021 +0100 69.3 @@ -0,0 +1,26 @@ 69.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 69.5 +<html><head><title></title> 69.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 69.7 +<meta name="generator" content="Doxygen 1.8.13"/> 69.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 69.9 +<script type="text/javascript" src="all_10.js"></script> 69.10 +<script type="text/javascript" src="search.js"></script> 69.11 +</head> 69.12 +<body class="SRPage"> 69.13 +<div id="SRIndex"> 69.14 +<div class="SRStatus" id="Loading">Loading...</div> 69.15 +<div id="SRResults"></div> 69.16 +<script type="text/javascript"><!-- 69.17 +createResults(); 69.18 +--></script> 69.19 +<div class="SRStatus" id="Searching">Searching...</div> 69.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 69.21 +<script type="text/javascript"><!-- 69.22 +document.getElementById("Loading").style.display="none"; 69.23 +document.getElementById("NoMatches").style.display="none"; 69.24 +var searchResults = new SearchResults("searchResults"); 69.25 +searchResults.Search(); 69.26 +--></script> 69.27 +</div> 69.28 +</body> 69.29 +</html>
70.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 70.2 +++ b/docs/api-2.1/search/all_10.js Sat Feb 06 19:11:44 2021 +0100 70.3 @@ -0,0 +1,10 @@ 70.4 +var searchData= 70.5 +[ 70.6 + ['test',['test',['../structUcxTestList.html#a6022faa52e772b073141ca0a2f5a56c9',1,'UcxTestList']]], 70.7 + ['test_2eh',['test.h',['../test_8h.html',1,'']]], 70.8 + ['tests',['tests',['../structUcxTestSuite.html#a630677a70ebc2c3296704cda3196492b',1,'UcxTestSuite']]], 70.9 + ['tmp',['tmp',['../structUcxProperties.html#a68556d4260153f58dde44e4c365edce6',1,'UcxProperties']]], 70.10 + ['tmpcap',['tmpcap',['../structUcxProperties.html#a5af10131ea9f679b4ee174499f92e210',1,'UcxProperties']]], 70.11 + ['tmplen',['tmplen',['../structUcxProperties.html#a8a81853d5903bee2f4e1fa53fdffae6e',1,'UcxProperties']]], 70.12 + ['top',['top',['../structUcxStack.html#af0ff6f58edce469f17683013b86ade27',1,'UcxStack']]] 70.13 +];
71.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 71.2 +++ b/docs/api-2.1/search/all_11.html Sat Feb 06 19:11:44 2021 +0100 71.3 @@ -0,0 +1,26 @@ 71.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 71.5 +<html><head><title></title> 71.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 71.7 +<meta name="generator" content="Doxygen 1.8.13"/> 71.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 71.9 +<script type="text/javascript" src="all_11.js"></script> 71.10 +<script type="text/javascript" src="search.js"></script> 71.11 +</head> 71.12 +<body class="SRPage"> 71.13 +<div id="SRIndex"> 71.14 +<div class="SRStatus" id="Loading">Loading...</div> 71.15 +<div id="SRResults"></div> 71.16 +<script type="text/javascript"><!-- 71.17 +createResults(); 71.18 +--></script> 71.19 +<div class="SRStatus" id="Searching">Searching...</div> 71.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 71.21 +<script type="text/javascript"><!-- 71.22 +document.getElementById("Loading").style.display="none"; 71.23 +document.getElementById("NoMatches").style.display="none"; 71.24 +var searchResults = new SearchResults("searchResults"); 71.25 +searchResults.Search(); 71.26 +--></script> 71.27 +</div> 71.28 +</body> 71.29 +</html>
72.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 72.2 +++ b/docs/api-2.1/search/all_11.js Sat Feb 06 19:11:44 2021 +0100 72.3 @@ -0,0 +1,271 @@ 72.4 +var searchData= 72.5 +[ 72.6 + ['uap_20common_20extensions',['UAP Common Extensions',['../index.html',1,'']]], 72.7 + ['ucx_2eh',['ucx.h',['../ucx_8h.html',1,'']]], 72.8 + ['ucx_5fallocator_5fcalloc',['ucx_allocator_calloc',['../allocator_8h.html#a2c0aba4221c1ac6801f03ed799f15b12',1,'allocator.h']]], 72.9 + ['ucx_5fallocator_5fdefault',['UCX_ALLOCATOR_DEFAULT',['../allocator_8h.html#a1283a8f875f90a7af3aba5e031fc2e3f',1,'allocator.h']]], 72.10 + ['ucx_5fallocator_5ffree',['ucx_allocator_free',['../allocator_8h.html#aaf2387ddaddd8ab4b267e6b00e5d6f7e',1,'allocator.h']]], 72.11 + ['ucx_5fallocator_5fmalloc',['ucx_allocator_malloc',['../allocator_8h.html#a29f0f6a23a70db3b60635cd6dc384473',1,'allocator.h']]], 72.12 + ['ucx_5fallocator_5frealloc',['ucx_allocator_realloc',['../allocator_8h.html#a6d7cf038a806e327c5da37321d04e426',1,'allocator.h']]], 72.13 + ['ucx_5farray_5fappend_5ffrom',['ucx_array_append_from',['../array_8h.html#aea01731ad94ea73c0c8fb1d1b7a35fcf',1,'array.c']]], 72.14 + ['ucx_5farray_5fat',['ucx_array_at',['../array_8h.html#aa698085fd1a8b70d6b709999c51b49e8',1,'array.c']]], 72.15 + ['ucx_5farray_5fclone',['ucx_array_clone',['../array_8h.html#a4a8c273370e4a3a3e2624e364f5ab410',1,'array.c']]], 72.16 + ['ucx_5farray_5fconcat',['ucx_array_concat',['../array_8h.html#aa5a0bf3d3f0df6406beb0e569021cc28',1,'array.c']]], 72.17 + ['ucx_5farray_5fcontains',['ucx_array_contains',['../array_8h.html#a5241058cd2329147bc5b1593ae7e51dc',1,'array.c']]], 72.18 + ['ucx_5farray_5fdestroy',['ucx_array_destroy',['../array_8h.html#a8e83681d8d5d8cddbf10f63ce5be4c10',1,'array.c']]], 72.19 + ['ucx_5farray_5fequals',['ucx_array_equals',['../array_8h.html#a43292b448adb1741677aa8c578bcc201',1,'array.c']]], 72.20 + ['ucx_5farray_5ffind',['ucx_array_find',['../array_8h.html#ae7bdbed94afee9b20b38b95e3ab470f0',1,'array.c']]], 72.21 + ['ucx_5farray_5ffree',['ucx_array_free',['../array_8h.html#ac01ee914468a16f470bf3071fffbe438',1,'array.c']]], 72.22 + ['ucx_5farray_5fgrow',['ucx_array_grow',['../array_8h.html#ab0cbf243824aaebee48277315e03afce',1,'array.c']]], 72.23 + ['ucx_5farray_5finit',['ucx_array_init',['../array_8h.html#ad921e85c28ffae32230777a53c5037e5',1,'array.c']]], 72.24 + ['ucx_5farray_5finit_5fa',['ucx_array_init_a',['../array_8h.html#a2451e61ebb15a7ba1c1319267ba75b8c',1,'array.c']]], 72.25 + ['ucx_5farray_5fnew',['ucx_array_new',['../array_8h.html#a994a2fbf1c33a3833e2a70cd9a4352b7',1,'array.c']]], 72.26 + ['ucx_5farray_5fnew_5fa',['ucx_array_new_a',['../array_8h.html#a177170258c215eb2e4f5a32e59f0cb1b',1,'array.c']]], 72.27 + ['ucx_5farray_5fprepend_5ffrom',['ucx_array_prepend_from',['../array_8h.html#a95b52acc2193b5c33cf0eaa4f2082477',1,'array.c']]], 72.28 + ['ucx_5farray_5fremove',['ucx_array_remove',['../array_8h.html#aa45eac6b697f83adac81c0860cf306b8',1,'array.c']]], 72.29 + ['ucx_5farray_5fremove_5ffast',['ucx_array_remove_fast',['../array_8h.html#a548d81b07612bae3ba8c4c4b49104b8e',1,'array.c']]], 72.30 + ['ucx_5farray_5freserve',['ucx_array_reserve',['../array_8h.html#a1c3bf8433c1de3c933f3854ab297fe1d',1,'array.c']]], 72.31 + ['ucx_5farray_5fresize',['ucx_array_resize',['../array_8h.html#a27762e7c06a6c781015e3c8ceeee0ce3',1,'array.c']]], 72.32 + ['ucx_5farray_5fset_5ffrom',['ucx_array_set_from',['../array_8h.html#a1bb545d065358d265d80d815ba382a28',1,'array.c']]], 72.33 + ['ucx_5farray_5fshrink',['ucx_array_shrink',['../array_8h.html#a2daf50e80aee9bccebee876a7efd2dfc',1,'array.c']]], 72.34 + ['ucx_5farray_5fsort',['ucx_array_sort',['../array_8h.html#add773514569b872a6624381b4b6af52c',1,'array.c']]], 72.35 + ['ucx_5farray_5futil_5fset',['ucx_array_util_set',['../array_8h.html#a1d959c29af3125bdd37cde3a554e729c',1,'array.h']]], 72.36 + ['ucx_5farray_5futil_5fset_5fa',['ucx_array_util_set_a',['../array_8h.html#ad0a8d76980cf1c1910e64a245803fb9a',1,'array.c']]], 72.37 + ['ucx_5farray_5futil_5fsetptr',['ucx_array_util_setptr',['../array_8h.html#a59a5b342965e790945f9c7a3f86b99f9',1,'array.h']]], 72.38 + ['ucx_5farray_5futil_5fsetptr_5fa',['ucx_array_util_setptr_a',['../array_8h.html#ad708b333c0c1b02c998309a58ea65e31',1,'array.c']]], 72.39 + ['ucx_5fasprintf',['ucx_asprintf',['../utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5',1,'utils.c']]], 72.40 + ['ucx_5favl_5fcount',['ucx_avl_count',['../avl_8h.html#a92c1d41c2b22fe4a029a486ab2153e35',1,'avl.c']]], 72.41 + ['ucx_5favl_5fdefault_5fnew',['ucx_avl_default_new',['../avl_8h.html#ac2886d4b79b48c9fabf6408873f84cd2',1,'avl.h']]], 72.42 + ['ucx_5favl_5ffind',['ucx_avl_find',['../avl_8h.html#a51770e1614b28d7d22dea096c3704f83',1,'avl.c']]], 72.43 + ['ucx_5favl_5ffind_5fclosest',['UCX_AVL_FIND_CLOSEST',['../avl_8h.html#af16f24d74fd6af0154de041566c6603b',1,'avl.h']]], 72.44 + ['ucx_5favl_5ffind_5fexact',['UCX_AVL_FIND_EXACT',['../avl_8h.html#aaaf4a6f6f661cda7791db239212285d9',1,'avl.h']]], 72.45 + ['ucx_5favl_5ffind_5flower_5fbounded',['UCX_AVL_FIND_LOWER_BOUNDED',['../avl_8h.html#abd2446d544d5412b6997ee8a17bd368c',1,'avl.h']]], 72.46 + ['ucx_5favl_5ffind_5fnode',['ucx_avl_find_node',['../avl_8h.html#a664986f64d6865605199fbff06e19cd5',1,'avl.c']]], 72.47 + ['ucx_5favl_5ffind_5fupper_5fbounded',['UCX_AVL_FIND_UPPER_BOUNDED',['../avl_8h.html#ac74ee7649c1e206b08b31f37dd68ca5e',1,'avl.h']]], 72.48 + ['ucx_5favl_5ffree',['ucx_avl_free',['../avl_8h.html#a2f92db538f25fce908d2cb3e5590944c',1,'avl.c']]], 72.49 + ['ucx_5favl_5ffree_5fcontent',['ucx_avl_free_content',['../avl_8h.html#a31ad7fb196ca211f1fc39f4e15f72279',1,'avl.c']]], 72.50 + ['ucx_5favl_5fget',['ucx_avl_get',['../avl_8h.html#adbcf7ceb3f014a30c7214f7304519efe',1,'avl.c']]], 72.51 + ['ucx_5favl_5fget_5fnode',['ucx_avl_get_node',['../avl_8h.html#acf42da9a4168e47dc10b4ba0d27ceb4e',1,'avl.c']]], 72.52 + ['ucx_5favl_5fnew',['ucx_avl_new',['../avl_8h.html#a11b043d65a11b7092d5d98b298e5ede3',1,'avl.c']]], 72.53 + ['ucx_5favl_5fnew_5fa',['ucx_avl_new_a',['../avl_8h.html#af0f868d67e9dc08b4867c02a06c23ee2',1,'avl.c']]], 72.54 + ['ucx_5favl_5fpred',['ucx_avl_pred',['../avl_8h.html#a0e739aeb66dda6a6a3f6eb51b50cf346',1,'avl.c']]], 72.55 + ['ucx_5favl_5fput',['ucx_avl_put',['../avl_8h.html#aec401fab4a24a7edffa734f9baf88577',1,'avl.c']]], 72.56 + ['ucx_5favl_5fput_5fs',['ucx_avl_put_s',['../avl_8h.html#a32cf8955cc0226a82bacfc7b76d6474c',1,'avl.c']]], 72.57 + ['ucx_5favl_5fremove',['ucx_avl_remove',['../avl_8h.html#a1d821119c805d7fbb7e424bc3effeba9',1,'avl.c']]], 72.58 + ['ucx_5favl_5fremove_5fnode',['ucx_avl_remove_node',['../avl_8h.html#a9a792b7d9e58073deef74a341f8bc720',1,'avl.c']]], 72.59 + ['ucx_5favl_5fremove_5fs',['ucx_avl_remove_s',['../avl_8h.html#a01aeeecd6415f0cc2b623486eb28f254',1,'avl.c']]], 72.60 + ['ucx_5favl_5fsucc',['ucx_avl_succ',['../avl_8h.html#aab1ad9b027ff5e50671aa0ee84e2d541',1,'avl.c']]], 72.61 + ['ucx_5fbprintf',['ucx_bprintf',['../utils_8h.html#a9d7d65a420f026fcb6982803d5120519',1,'utils.h']]], 72.62 + ['ucx_5fbuffer_5fautoextend',['UCX_BUFFER_AUTOEXTEND',['../buffer_8h.html#a05f9565f2d04399168c3b1c152a632be',1,'buffer.h']]], 72.63 + ['ucx_5fbuffer_5fautofree',['UCX_BUFFER_AUTOFREE',['../buffer_8h.html#a8bab11ad8a76719228b9ee91e2e45535',1,'buffer.h']]], 72.64 + ['ucx_5fbuffer_5fclear',['ucx_buffer_clear',['../buffer_8h.html#a374abd5aabfcc3ee0777a79d5fe651ab',1,'buffer.h']]], 72.65 + ['ucx_5fbuffer_5fclone',['ucx_buffer_clone',['../buffer_8h.html#a828353846428c2c2f695f9938f059e52',1,'buffer.h']]], 72.66 + ['ucx_5fbuffer_5fdefault',['UCX_BUFFER_DEFAULT',['../buffer_8h.html#acc77c8ed7b26854f555d4a5d11e49ea2',1,'buffer.h']]], 72.67 + ['ucx_5fbuffer_5feof',['ucx_buffer_eof',['../buffer_8h.html#abad7fd9ad5061224c780b8d1d4c55f09',1,'buffer.c']]], 72.68 + ['ucx_5fbuffer_5fextend',['ucx_buffer_extend',['../buffer_8h.html#afaf97d2cd7e9faad79a9d35fe33e30c6',1,'buffer.c']]], 72.69 + ['ucx_5fbuffer_5fextract',['ucx_buffer_extract',['../buffer_8h.html#a33fa7bb35fe08bbb3542f227514332ef',1,'buffer.c']]], 72.70 + ['ucx_5fbuffer_5ffree',['ucx_buffer_free',['../buffer_8h.html#a2af8646d8905c22c7322e7540b0440af',1,'buffer.c']]], 72.71 + ['ucx_5fbuffer_5fgetc',['ucx_buffer_getc',['../buffer_8h.html#a396339022159ce4ca6d069de9f9209b0',1,'buffer.c']]], 72.72 + ['ucx_5fbuffer_5fnew',['ucx_buffer_new',['../buffer_8h.html#aacea876d692193ec6f859ce98da7351c',1,'buffer.c']]], 72.73 + ['ucx_5fbuffer_5fputc',['ucx_buffer_putc',['../buffer_8h.html#a7d6f01b9d631b0123475dfb98fb849ac',1,'buffer.c']]], 72.74 + ['ucx_5fbuffer_5fputs',['ucx_buffer_puts',['../buffer_8h.html#af1d4b478e04b3ae0bf30e7c2ea964ea2',1,'buffer.c']]], 72.75 + ['ucx_5fbuffer_5fread',['ucx_buffer_read',['../buffer_8h.html#ae5c3430759f0059547b35d5a254d4da5',1,'buffer.c']]], 72.76 + ['ucx_5fbuffer_5fseek',['ucx_buffer_seek',['../buffer_8h.html#a47d98482662073c74f35deb0957d15d1',1,'buffer.c']]], 72.77 + ['ucx_5fbuffer_5fshift',['ucx_buffer_shift',['../buffer_8h.html#a12a0c6a2379ef080043e6286bb8bad69',1,'buffer.c']]], 72.78 + ['ucx_5fbuffer_5fshift_5fleft',['ucx_buffer_shift_left',['../buffer_8h.html#a20431dd0ed6a6fe9f15333bd72afe4db',1,'buffer.c']]], 72.79 + ['ucx_5fbuffer_5fshift_5fright',['ucx_buffer_shift_right',['../buffer_8h.html#a4fa10b6471495547eb981248fd4f1bc2',1,'buffer.c']]], 72.80 + ['ucx_5fbuffer_5fto_5fsstr',['ucx_buffer_to_sstr',['../buffer_8h.html#a0f4b64f1b3a74c4f6c5d9409d6b6086a',1,'buffer.h']]], 72.81 + ['ucx_5fbuffer_5fwrite',['ucx_buffer_write',['../buffer_8h.html#af8aacc7401814392b58c1b7b81bffc05',1,'buffer.c']]], 72.82 + ['ucx_5fcmp_5fdouble',['ucx_cmp_double',['../utils_8h.html#ab804b7c27d0bfcd7bf3a3583140825b6',1,'utils.c']]], 72.83 + ['ucx_5fcmp_5ffloat',['ucx_cmp_float',['../utils_8h.html#ad1196b561bcdad76c393885819769a97',1,'utils.c']]], 72.84 + ['ucx_5fcmp_5fint',['ucx_cmp_int',['../utils_8h.html#a8ce7e11e6b3deafe89a32a091fde7f16',1,'utils.c']]], 72.85 + ['ucx_5fcmp_5fint16',['ucx_cmp_int16',['../utils_8h.html#aa29e6e559946375e34113e34e0b0bd0d',1,'utils.c']]], 72.86 + ['ucx_5fcmp_5fint32',['ucx_cmp_int32',['../utils_8h.html#a858b2ac443fb202643b71f6a7e9218dd',1,'utils.c']]], 72.87 + ['ucx_5fcmp_5fint64',['ucx_cmp_int64',['../utils_8h.html#a54701aea6a89fed1402dfb0bf56bc7f6',1,'utils.c']]], 72.88 + ['ucx_5fcmp_5flongint',['ucx_cmp_longint',['../utils_8h.html#aeb57a2b9a6aaa0460c7a6bec29accf2c',1,'utils.c']]], 72.89 + ['ucx_5fcmp_5flonglong',['ucx_cmp_longlong',['../utils_8h.html#a366b57def20f86a41eaedf575eea5375',1,'utils.c']]], 72.90 + ['ucx_5fcmp_5fmem',['ucx_cmp_mem',['../utils_8h.html#aff7d2bcded71196831a8c0664333f8e7',1,'utils.c']]], 72.91 + ['ucx_5fcmp_5fptr',['ucx_cmp_ptr',['../utils_8h.html#aa174d539de3ea59be4f9640f17ce53d8',1,'utils.c']]], 72.92 + ['ucx_5fcmp_5fsstr',['ucx_cmp_sstr',['../utils_8h.html#adee0739589166d272f8cb7c23aabf8ba',1,'utils.c']]], 72.93 + ['ucx_5fcmp_5fstr',['ucx_cmp_str',['../utils_8h.html#aa6a37b9d172b6a5b2803d152f9e1b258',1,'utils.c']]], 72.94 + ['ucx_5fcmp_5fstrn',['ucx_cmp_strn',['../utils_8h.html#ac6b354a878f551a3a5b20a167db3f308',1,'utils.c']]], 72.95 + ['ucx_5fcmp_5fuint',['ucx_cmp_uint',['../utils_8h.html#abd83a5da91c3dd026a6931bd80c12f1e',1,'utils.c']]], 72.96 + ['ucx_5fcmp_5fuint16',['ucx_cmp_uint16',['../utils_8h.html#acde5366437e886a459b7468f7a9e11f0',1,'utils.c']]], 72.97 + ['ucx_5fcmp_5fuint32',['ucx_cmp_uint32',['../utils_8h.html#a5879d1722330355914d8c9146fa549d3',1,'utils.c']]], 72.98 + ['ucx_5fcmp_5fuint64',['ucx_cmp_uint64',['../utils_8h.html#a1572a78b5b42f7151a5b2a5a7283d62d',1,'utils.c']]], 72.99 + ['ucx_5fcmp_5fulongint',['ucx_cmp_ulongint',['../utils_8h.html#a3f3cbae2594d6f722bae29acb0408a24',1,'utils.c']]], 72.100 + ['ucx_5fcmp_5fulonglong',['ucx_cmp_ulonglong',['../utils_8h.html#a6acfc359421f21f9a042a654ff7faac5',1,'utils.c']]], 72.101 + ['ucx_5fdefault_5fallocator',['ucx_default_allocator',['../allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf',1,'allocator.c']]], 72.102 + ['ucx_5fdefault_5fcalloc',['ucx_default_calloc',['../allocator_8h.html#a3a0bfdd13d887012309c459b339f338f',1,'allocator.c']]], 72.103 + ['ucx_5fdefault_5ffree',['ucx_default_free',['../allocator_8h.html#a646d83aaaadfe33ae414c0fad8bfc52a',1,'allocator.c']]], 72.104 + ['ucx_5fdefault_5fmalloc',['ucx_default_malloc',['../allocator_8h.html#a96403ebf3d2312d95f2fe7627a1cdbc0',1,'allocator.c']]], 72.105 + ['ucx_5fdefault_5frealloc',['ucx_default_realloc',['../allocator_8h.html#a47cfc8af626a86fcb93a2b14b90498ed',1,'allocator.c']]], 72.106 + ['ucx_5fdestructor',['ucx_destructor',['../ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3',1,'ucx.h']]], 72.107 + ['ucx_5fdist_5fint',['ucx_dist_int',['../utils_8h.html#a4ab6753739d56c09cdf6079fdcabf7c6',1,'utils.c']]], 72.108 + ['ucx_5fdist_5fint16',['ucx_dist_int16',['../utils_8h.html#a81fb8434b70ca11bf2c14abfa21d16a9',1,'utils.c']]], 72.109 + ['ucx_5fdist_5fint32',['ucx_dist_int32',['../utils_8h.html#ab4a659cc46096f0490c1dafa57726476',1,'utils.c']]], 72.110 + ['ucx_5fdist_5fint64',['ucx_dist_int64',['../utils_8h.html#a54e7d06585bad3a899befc4e9c13853f',1,'utils.c']]], 72.111 + ['ucx_5fdist_5flongint',['ucx_dist_longint',['../utils_8h.html#a43e73d288b1553a0078bf4c98dd341f5',1,'utils.c']]], 72.112 + ['ucx_5fdist_5flonglong',['ucx_dist_longlong',['../utils_8h.html#a306778414a2427951ea263be92368627',1,'utils.c']]], 72.113 + ['ucx_5fdist_5fuint',['ucx_dist_uint',['../utils_8h.html#a37b7d471ca1679992afc11a0deda45f4',1,'utils.c']]], 72.114 + ['ucx_5fdist_5fuint16',['ucx_dist_uint16',['../utils_8h.html#a66e00a0703cbcde050ec922578e2f080',1,'utils.c']]], 72.115 + ['ucx_5fdist_5fuint32',['ucx_dist_uint32',['../utils_8h.html#add2b5c5507caba59d894b84e056b079b',1,'utils.c']]], 72.116 + ['ucx_5fdist_5fuint64',['ucx_dist_uint64',['../utils_8h.html#a3ba75e2e0b2479eef2b22fb219b42da7',1,'utils.c']]], 72.117 + ['ucx_5fdist_5fulongint',['ucx_dist_ulongint',['../utils_8h.html#abb13476228d0c16bfaba08469adbae2d',1,'utils.c']]], 72.118 + ['ucx_5fdist_5fulonglong',['ucx_dist_ulonglong',['../utils_8h.html#a59a5859272cb4b43cbdd58208c41e32b',1,'utils.c']]], 72.119 + ['ucx_5fforeach',['UCX_FOREACH',['../list_8h.html#a4b143b6526a410aa4d22cb3bb9365d70',1,'list.h']]], 72.120 + ['ucx_5ffprintf',['ucx_fprintf',['../utils_8h.html#aa0bec80e1c67f769ff5e112a7d4ce72a',1,'utils.c']]], 72.121 + ['ucx_5fhash',['ucx_hash',['../map_8h.html#aea3be97254c05595d986ef6a9faae87b',1,'map.c']]], 72.122 + ['ucx_5fkey',['ucx_key',['../map_8h.html#a3e540bb46b8ee19789aed63fd8919200',1,'map.c']]], 72.123 + ['ucx_5flist_5fappend',['ucx_list_append',['../list_8h.html#a00c122c8a26d35b60676939df4161621',1,'list.c']]], 72.124 + ['ucx_5flist_5fappend_5fa',['ucx_list_append_a',['../list_8h.html#adf3b3e2e0ff977d8928671d6bd82fc60',1,'list.c']]], 72.125 + ['ucx_5flist_5fclone',['ucx_list_clone',['../list_8h.html#ae7054a41c289b24e6caf5cb07ac850ed',1,'list.c']]], 72.126 + ['ucx_5flist_5fclone_5fa',['ucx_list_clone_a',['../list_8h.html#a08ca1ba0d2e82258b0408714c1f4c425',1,'list.c']]], 72.127 + ['ucx_5flist_5fconcat',['ucx_list_concat',['../list_8h.html#a77163a0cc82fae52bec26c8c0c3674d9',1,'list.c']]], 72.128 + ['ucx_5flist_5fcontains',['ucx_list_contains',['../list_8h.html#a8b0fa051fcfe12e1a82cca1087973852',1,'list.c']]], 72.129 + ['ucx_5flist_5fdifference',['ucx_list_difference',['../list_8h.html#a6c5db5d1d11ad28b6fe1a80ee1c1e449',1,'list.c']]], 72.130 + ['ucx_5flist_5fdifference_5fa',['ucx_list_difference_a',['../list_8h.html#a4a2a2fc5cc41073c516db6235bbc51d5',1,'list.c']]], 72.131 + ['ucx_5flist_5fequals',['ucx_list_equals',['../list_8h.html#adc435447cecf885bc63d232191085bbe',1,'list.c']]], 72.132 + ['ucx_5flist_5ffind',['ucx_list_find',['../list_8h.html#a9b3b6842d3be572e06a7f519e198cb83',1,'list.c']]], 72.133 + ['ucx_5flist_5ffirst',['ucx_list_first',['../list_8h.html#a6aa0e34ebc5f0dca6f52d0f7626b4bd5',1,'list.c']]], 72.134 + ['ucx_5flist_5ffree',['ucx_list_free',['../list_8h.html#a1a0fa2c5b1e478a96da19b0c3f013668',1,'list.c']]], 72.135 + ['ucx_5flist_5ffree_5fa',['ucx_list_free_a',['../list_8h.html#a944e11f76c38767cd1100d72a4e3b25b',1,'list.c']]], 72.136 + ['ucx_5flist_5ffree_5fcontent',['ucx_list_free_content',['../list_8h.html#a4ba6c96642f72ea046cc22627c72979c',1,'list.c']]], 72.137 + ['ucx_5flist_5fget',['ucx_list_get',['../list_8h.html#a2509ffe19bce6a8708c77f89480c75fb',1,'list.c']]], 72.138 + ['ucx_5flist_5findexof',['ucx_list_indexof',['../list_8h.html#ae2ff2974812ca185870f80bc4ed9337e',1,'list.c']]], 72.139 + ['ucx_5flist_5fintersection',['ucx_list_intersection',['../list_8h.html#a259f9b754978aeca23dfabba16e20f39',1,'list.c']]], 72.140 + ['ucx_5flist_5fintersection_5fa',['ucx_list_intersection_a',['../list_8h.html#a1d0b00514dbb81ba6270b58da0c5b9a8',1,'list.c']]], 72.141 + ['ucx_5flist_5flast',['ucx_list_last',['../list_8h.html#add5ec40c5006e29c629d23c2eb5a6553',1,'list.c']]], 72.142 + ['ucx_5flist_5fprepend',['ucx_list_prepend',['../list_8h.html#a8fcb68e4556395b15180eec2d0b77aa4',1,'list.c']]], 72.143 + ['ucx_5flist_5fprepend_5fa',['ucx_list_prepend_a',['../list_8h.html#a54654e6dc60e1c3de9e886c150e404ec',1,'list.c']]], 72.144 + ['ucx_5flist_5fremove',['ucx_list_remove',['../list_8h.html#a410cb3e8260037ba56c72d14b899b468',1,'list.c']]], 72.145 + ['ucx_5flist_5fremove_5fa',['ucx_list_remove_a',['../list_8h.html#aca687b7c4e7170175f447e549125aa52',1,'list.c']]], 72.146 + ['ucx_5flist_5fsize',['ucx_list_size',['../list_8h.html#ae88001cc8ae40b946560f31434abed8f',1,'list.c']]], 72.147 + ['ucx_5flist_5fsort',['ucx_list_sort',['../list_8h.html#ac74962d9bd7cfc9d3e2e09651469377b',1,'list.c']]], 72.148 + ['ucx_5flist_5funion',['ucx_list_union',['../list_8h.html#a94ecdb0cea1633ad7074f027fa8485fa',1,'list.c']]], 72.149 + ['ucx_5flist_5funion_5fa',['ucx_list_union_a',['../list_8h.html#a65b4355536f4ebc4130211b46469f4c1',1,'list.c']]], 72.150 + ['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']]], 72.151 + ['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']]], 72.152 + ['ucx_5flogger_5ffree',['ucx_logger_free',['../logging_8h.html#ac4697b784e01ec990d2acea192e21658',1,'logging.c']]], 72.153 + ['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']]], 72.154 + ['ucx_5flogger_5flevel',['UCX_LOGGER_LEVEL',['../logging_8h.html#aee18bc20e58ffb69910121512c350839',1,'logging.h']]], 72.155 + ['ucx_5flogger_5flog',['ucx_logger_log',['../logging_8h.html#aa0245325031d95799b28def177fd14ec',1,'logging.h']]], 72.156 + ['ucx_5flogger_5flogf',['ucx_logger_logf',['../logging_8h.html#ac337e5d02ebea565012d4c11bd643801',1,'logging.c']]], 72.157 + ['ucx_5flogger_5fnew',['ucx_logger_new',['../logging_8h.html#ac560f8517d2172794c9d2691735ec48c',1,'logging.c']]], 72.158 + ['ucx_5flogger_5fregister_5flevel',['ucx_logger_register_level',['../logging_8h.html#a5cffc19502c4c90bfb3bd3bbcd18170a',1,'logging.h']]], 72.159 + ['ucx_5flogger_5fsource',['UCX_LOGGER_SOURCE',['../logging_8h.html#a0e0d72b12616c1e49ff8834eaf4cb8a2',1,'logging.h']]], 72.160 + ['ucx_5flogger_5ftimestamp',['UCX_LOGGER_TIMESTAMP',['../logging_8h.html#a38607008268b4f776ee500fb95d2e823',1,'logging.h']]], 72.161 + ['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']]], 72.162 + ['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']]], 72.163 + ['ucx_5fmap_5fclear',['ucx_map_clear',['../map_8h.html#a285e90e40681c6d9631c935dda0967f2',1,'map.c']]], 72.164 + ['ucx_5fmap_5fclone',['ucx_map_clone',['../map_8h.html#a62c6c30cbb0d824ba710f5030ff9a4e4',1,'map.c']]], 72.165 + ['ucx_5fmap_5fclone_5fa',['ucx_map_clone_a',['../map_8h.html#a9aea9103703d5c168420bb6bf85549ea',1,'map.c']]], 72.166 + ['ucx_5fmap_5fcopy',['ucx_map_copy',['../map_8h.html#adfeb2d61003fd2896bcfdc9a57f36425',1,'map.c']]], 72.167 + ['ucx_5fmap_5fcstr_5fget',['ucx_map_cstr_get',['../map_8h.html#a64e1fb55498fa502dd2ed8ed69062cdd',1,'map.h']]], 72.168 + ['ucx_5fmap_5fcstr_5fput',['ucx_map_cstr_put',['../map_8h.html#ad9356b01425b934ab237b52339ac0cc3',1,'map.h']]], 72.169 + ['ucx_5fmap_5fcstr_5fremove',['ucx_map_cstr_remove',['../map_8h.html#a9c4405a5a75ecf64e2ef3d0c6501a9fe',1,'map.h']]], 72.170 + ['ucx_5fmap_5fdifference',['ucx_map_difference',['../map_8h.html#a774fcff87d1e58b6c5af77dd19a8c3dc',1,'map.c']]], 72.171 + ['ucx_5fmap_5fdifference_5fa',['ucx_map_difference_a',['../map_8h.html#ad0ba103494247d798ac3037c50fc8831',1,'map.c']]], 72.172 + ['ucx_5fmap_5fforeach',['UCX_MAP_FOREACH',['../map_8h.html#a940896c4aa1b13e54c55c04c3efc186b',1,'map.h']]], 72.173 + ['ucx_5fmap_5ffree',['ucx_map_free',['../map_8h.html#abe3d9688e4224bf7bb962abf25ff8c2e',1,'map.c']]], 72.174 + ['ucx_5fmap_5ffree_5fcontent',['ucx_map_free_content',['../map_8h.html#a750f3d9d83e2f3788a14c17a9d160618',1,'map.c']]], 72.175 + ['ucx_5fmap_5fget',['ucx_map_get',['../map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6',1,'map.c']]], 72.176 + ['ucx_5fmap_5fint_5fget',['ucx_map_int_get',['../map_8h.html#aa1681bd2178553cd092fd24c4d681d3c',1,'map.h']]], 72.177 + ['ucx_5fmap_5fint_5fput',['ucx_map_int_put',['../map_8h.html#aaa30af79b4068c923895619e83f44367',1,'map.h']]], 72.178 + ['ucx_5fmap_5fint_5fremove',['ucx_map_int_remove',['../map_8h.html#aa767958b5468737755c09f7185b1770c',1,'map.h']]], 72.179 + ['ucx_5fmap_5fintersection',['ucx_map_intersection',['../map_8h.html#aa594d7a5afebc3bed6bb265348cf6b0d',1,'map.c']]], 72.180 + ['ucx_5fmap_5fintersection_5fa',['ucx_map_intersection_a',['../map_8h.html#a169e0470a20484dd76425fdf77e3651e',1,'map.c']]], 72.181 + ['ucx_5fmap_5fiter_5fnext',['ucx_map_iter_next',['../map_8h.html#aceb8675abf44860b4bbc301bbada5b91',1,'map.c']]], 72.182 + ['ucx_5fmap_5fiterator',['ucx_map_iterator',['../map_8h.html#a9150e9c64fdf4dfcc2cad106b91aa110',1,'map.c']]], 72.183 + ['ucx_5fmap_5fnew',['ucx_map_new',['../map_8h.html#a79f31de8b93814493759dbc8b940cf0c',1,'map.c']]], 72.184 + ['ucx_5fmap_5fnew_5fa',['ucx_map_new_a',['../map_8h.html#aed508a94c66cc15372503c64b70eb03e',1,'map.c']]], 72.185 + ['ucx_5fmap_5fput',['ucx_map_put',['../map_8h.html#ac04a08b604217070254d4c58f0e82498',1,'map.c']]], 72.186 + ['ucx_5fmap_5frehash',['ucx_map_rehash',['../map_8h.html#a174bce9fad554dd92b8da354e0d32512',1,'map.c']]], 72.187 + ['ucx_5fmap_5fremove',['ucx_map_remove',['../map_8h.html#a17248a4888eb8f9ae18be522d64632aa',1,'map.c']]], 72.188 + ['ucx_5fmap_5fsstr_5fget',['ucx_map_sstr_get',['../map_8h.html#a14d385f6b7f371f0507861cabd2eab4e',1,'map.h']]], 72.189 + ['ucx_5fmap_5fsstr_5fput',['ucx_map_sstr_put',['../map_8h.html#ac26a8615bfc8f47ee9eaceb47645f98e',1,'map.h']]], 72.190 + ['ucx_5fmap_5fsstr_5fremove',['ucx_map_sstr_remove',['../map_8h.html#a48700ea86fadb9ea54d13010f9124df2',1,'map.h']]], 72.191 + ['ucx_5fmap_5funion',['ucx_map_union',['../map_8h.html#a3f65978c481af7f637cad021d93522d5',1,'map.c']]], 72.192 + ['ucx_5fmap_5funion_5fa',['ucx_map_union_a',['../map_8h.html#ab6370c3fa8113fdad593ce4b0460c9c6',1,'map.c']]], 72.193 + ['ucx_5fmemchunk',['ucx_memchunk',['../structucx__memchunk.html',1,'']]], 72.194 + ['ucx_5fmemcpy',['ucx_memcpy',['../utils_8h.html#ab2e184e6a744941aab6b8058116baf30',1,'utils.c']]], 72.195 + ['ucx_5fmempool_5fcalloc',['ucx_mempool_calloc',['../mempool_8h.html#a4b9142011824ae24f00fabe128417d69',1,'mempool.c']]], 72.196 + ['ucx_5fmempool_5fchcap',['ucx_mempool_chcap',['../mempool_8h.html#aaf75b5016098723a9280531ccc3a6d77',1,'mempool.c']]], 72.197 + ['ucx_5fmempool_5fdestroy',['ucx_mempool_destroy',['../mempool_8h.html#af096378da7e9bfbed3088497cf4c15bf',1,'mempool.c']]], 72.198 + ['ucx_5fmempool_5ffree',['ucx_mempool_free',['../mempool_8h.html#aefa26e3015f5aefadbfc74221bd246ac',1,'mempool.c']]], 72.199 + ['ucx_5fmempool_5fmalloc',['ucx_mempool_malloc',['../mempool_8h.html#a2ae492b8f2878ccc9837ac213dced11e',1,'mempool.c']]], 72.200 + ['ucx_5fmempool_5fnew',['ucx_mempool_new',['../mempool_8h.html#ad71cb8c3b6fdb30360376a8b372ef22a',1,'mempool.c']]], 72.201 + ['ucx_5fmempool_5fnew_5fdefault',['ucx_mempool_new_default',['../mempool_8h.html#a49f7bd1da5ac201d0cf54dc0f0d82dd2',1,'mempool.h']]], 72.202 + ['ucx_5fmempool_5frealloc',['ucx_mempool_realloc',['../mempool_8h.html#a660ef42520ed6737c2e77aae18e3a7a4',1,'mempool.c']]], 72.203 + ['ucx_5fmempool_5freg_5fdestr',['ucx_mempool_reg_destr',['../mempool_8h.html#af47b6b7c40f8f263dc28cc9a4e77b27c',1,'mempool.c']]], 72.204 + ['ucx_5fmempool_5fset_5fdestr',['ucx_mempool_set_destr',['../mempool_8h.html#adb788e7ec24cd7dbdea6381539c549f2',1,'mempool.c']]], 72.205 + ['ucx_5fproperties2map',['ucx_properties2map',['../properties_8h.html#a5c7ff8bc3139960a3f3dc92072b742f3',1,'properties.c']]], 72.206 + ['ucx_5fproperties_5ffill',['ucx_properties_fill',['../properties_8h.html#aaf8de121764a4d22c763ff2ab41f3a4d',1,'properties.c']]], 72.207 + ['ucx_5fproperties_5ffree',['ucx_properties_free',['../properties_8h.html#a38a2fe7bb2986bd87c7e69356ab05c05',1,'properties.c']]], 72.208 + ['ucx_5fproperties_5fload',['ucx_properties_load',['../properties_8h.html#ae1b600f839a6b2278b68fc314981a8a3',1,'properties.c']]], 72.209 + ['ucx_5fproperties_5fnew',['ucx_properties_new',['../properties_8h.html#a44d9dd12cab3aaa0084f1c8b89405796',1,'properties.c']]], 72.210 + ['ucx_5fproperties_5fnext',['ucx_properties_next',['../properties_8h.html#a7e03bc573d45d48c538cd721e810d33c',1,'properties.c']]], 72.211 + ['ucx_5fproperties_5fstore',['ucx_properties_store',['../properties_8h.html#a63c0c1b7648e675b21a1788917ff36fb',1,'properties.c']]], 72.212 + ['ucx_5fregdestr',['ucx_regdestr',['../structucx__regdestr.html',1,'']]], 72.213 + ['ucx_5fsc2sc',['ucx_sc2sc',['../string_8h.html#a69d5e3eeec783cc43314df71248768f5',1,'string.c']]], 72.214 + ['ucx_5fsprintf',['ucx_sprintf',['../utils_8h.html#af9f333b66ecd639c347c7235f4992e2e',1,'utils.h']]], 72.215 + ['ucx_5fss2c_5fs',['ucx_ss2c_s',['../string_8h.html#aedeb5d7bddda54116101a8d68af8c56d',1,'string.h']]], 72.216 + ['ucx_5fss2sc',['ucx_ss2sc',['../string_8h.html#a9ce5ad1b2aa2dbeba204d452c2e64359',1,'string.c']]], 72.217 + ['ucx_5fstack_5favail',['ucx_stack_avail',['../stack_8h.html#a53cd2c7743dc8ad9cbd35ade0b4873e7',1,'stack.c']]], 72.218 + ['ucx_5fstack_5fcalloc',['ucx_stack_calloc',['../stack_8h.html#afdc467524b5e19a9a777c6bc03e17174',1,'stack.c']]], 72.219 + ['ucx_5fstack_5fdim',['ucx_stack_dim',['../stack_8h.html#a3b761343c6491222604341ebfa443226',1,'stack.h']]], 72.220 + ['ucx_5fstack_5fempty',['ucx_stack_empty',['../stack_8h.html#a4f7239dbd6c032c56812e370b71c1985',1,'stack.h']]], 72.221 + ['ucx_5fstack_5ffree',['ucx_stack_free',['../stack_8h.html#aabd55c14a3866b3782ba324f4d8b4c41',1,'stack.c']]], 72.222 + ['ucx_5fstack_5finit',['ucx_stack_init',['../stack_8h.html#abaef685df4e7ef95cd7218984a0618fe',1,'stack.c']]], 72.223 + ['ucx_5fstack_5fmalloc',['ucx_stack_malloc',['../stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac',1,'stack.c']]], 72.224 + ['ucx_5fstack_5fmetadata',['ucx_stack_metadata',['../structucx__stack__metadata.html',1,'']]], 72.225 + ['ucx_5fstack_5fpop',['ucx_stack_pop',['../stack_8h.html#a506b82374734ec476d086ddfb561174d',1,'stack.h']]], 72.226 + ['ucx_5fstack_5fpopn',['ucx_stack_popn',['../stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81',1,'stack.c']]], 72.227 + ['ucx_5fstack_5fpush',['ucx_stack_push',['../stack_8h.html#af85e6f77a8341beb6188f9ae1a8e9f92',1,'stack.c']]], 72.228 + ['ucx_5fstack_5fpusharr',['ucx_stack_pusharr',['../stack_8h.html#a7bb138979191bba138e76ea37488fae2',1,'stack.c']]], 72.229 + ['ucx_5fstack_5frealloc',['ucx_stack_realloc',['../stack_8h.html#a0c678f96f6fabab49b2b034a1fe91c3a',1,'stack.c']]], 72.230 + ['ucx_5fstack_5ftopsize',['ucx_stack_topsize',['../stack_8h.html#a030197051a803e87d5eeac5adb80b15a',1,'stack.h']]], 72.231 + ['ucx_5fstrcpy',['ucx_strcpy',['../utils_8h.html#adeb6e8d0a53a829207cfa0a979d01fff',1,'utils.c']]], 72.232 + ['ucx_5fstream_5fbcopy',['ucx_stream_bcopy',['../utils_8h.html#a6003a1750a66234169bd1f8cc84b297b',1,'utils.h']]], 72.233 + ['ucx_5fstream_5fbncopy',['ucx_stream_bncopy',['../utils_8h.html#a114ee7f7da62656ffd35e2dc23394201',1,'utils.c']]], 72.234 + ['ucx_5fstream_5fcopy',['ucx_stream_copy',['../utils_8h.html#a41ca1344f781c0d3bf7a414a6e811392',1,'utils.h']]], 72.235 + ['ucx_5fstream_5fcopy_5fbufsize',['UCX_STREAM_COPY_BUFSIZE',['../utils_8h.html#a23efd74fa5f701d4cf26ccbfd138a439',1,'utils.h']]], 72.236 + ['ucx_5fstream_5fncopy',['ucx_stream_ncopy',['../utils_8h.html#add13f39a8af440b4f7e6f74339eaada2',1,'utils.h']]], 72.237 + ['ucx_5fszmul',['ucx_szmul',['../ucx_8h.html#a0b5ed6c1a0b15356f4f948acfd32a4cc',1,'ucx.h']]], 72.238 + ['ucx_5fszmul_5fimpl',['ucx_szmul_impl',['../ucx_8h.html#a6637171cc0ec097b297f731a3036dd3b',1,'ucx.c']]], 72.239 + ['ucx_5ftest',['UCX_TEST',['../test_8h.html#a66cfb29c329fc9eaef071f2449836659',1,'test.h']]], 72.240 + ['ucx_5ftest_5fassert',['UCX_TEST_ASSERT',['../test_8h.html#a08f477cd12fc3fe741a92493e5df58a9',1,'test.h']]], 72.241 + ['ucx_5ftest_5fbegin',['UCX_TEST_BEGIN',['../test_8h.html#a0547b8d4f3bcdb0633fdd8925e8aa5d4',1,'test.h']]], 72.242 + ['ucx_5ftest_5fcall_5fsubroutine',['UCX_TEST_CALL_SUBROUTINE',['../test_8h.html#a0efbab91c54f5237a2ab207f48cf0e51',1,'test.h']]], 72.243 + ['ucx_5ftest_5fend',['UCX_TEST_END',['../test_8h.html#a86e64857c04f0447f8b16fb9c2b3b639',1,'test.h']]], 72.244 + ['ucx_5ftest_5fregister',['ucx_test_register',['../test_8h.html#a8dfabc42f183d3a4d79379a5d17bf67d',1,'test.c']]], 72.245 + ['ucx_5ftest_5frun',['ucx_test_run',['../test_8h.html#a3721458deeecb43aa322428f007714c3',1,'test.c']]], 72.246 + ['ucx_5ftest_5fsubroutine',['UCX_TEST_SUBROUTINE',['../test_8h.html#ae073cf5ead22cb27d662da048e16f44a',1,'test.h']]], 72.247 + ['ucx_5ftest_5fsuite_5ffree',['ucx_test_suite_free',['../test_8h.html#a4a6ac61a6f72722273f8eaa7a343edde',1,'test.c']]], 72.248 + ['ucx_5ftest_5fsuite_5fnew',['ucx_test_suite_new',['../test_8h.html#a531f0df90363e0befbe900878f65f09e',1,'test.c']]], 72.249 + ['ucx_5fvasprintf',['ucx_vasprintf',['../utils_8h.html#a3ea1dfb856c741f3e8ec6bfdc9ad427e',1,'utils.c']]], 72.250 + ['ucx_5fversion',['UCX_VERSION',['../ucx_8h.html#af12001920ca2fc1405615684e4dea284',1,'ucx.h']]], 72.251 + ['ucx_5fversion_5fmajor',['UCX_VERSION_MAJOR',['../ucx_8h.html#aa57e5dd22d42387d748cc16777df1383',1,'ucx.h']]], 72.252 + ['ucx_5fversion_5fminor',['UCX_VERSION_MINOR',['../ucx_8h.html#a9ac10d6353e23d4615a87fc737c65eb0',1,'ucx.h']]], 72.253 + ['ucx_5fvfprintf',['ucx_vfprintf',['../utils_8h.html#a4907967beb92c3ae351dd239abbb6927',1,'utils.c']]], 72.254 + ['ucxallocator',['UcxAllocator',['../structUcxAllocator.html',1,'']]], 72.255 + ['ucxarray',['UcxArray',['../structUcxArray.html',1,'']]], 72.256 + ['ucxavlnode',['UcxAVLNode',['../structUcxAVLNode.html',1,'UcxAVLNode'],['../avl_8h.html#a08ba2496c2316df58548c3cc29712add',1,'UcxAVLNode(): avl.h']]], 72.257 + ['ucxavltree',['UcxAVLTree',['../structUcxAVLTree.html',1,'']]], 72.258 + ['ucxbuffer',['UcxBuffer',['../structUcxBuffer.html',1,'']]], 72.259 + ['ucxkey',['UcxKey',['../structUcxKey.html',1,'UcxKey'],['../map_8h.html#ad63828bb23123fc01a5315a2bac3b142',1,'UcxKey(): map.h']]], 72.260 + ['ucxlist',['UcxList',['../structUcxList.html',1,'UcxList'],['../list_8h.html#aa6f89f91c1081c9a7c6866c298f497a2',1,'UcxList(): list.h']]], 72.261 + ['ucxlogger',['UcxLogger',['../structUcxLogger.html',1,'']]], 72.262 + ['ucxmap',['UcxMap',['../structUcxMap.html',1,'UcxMap'],['../map_8h.html#a18e21948725b2da68c35da587a722033',1,'UcxMap(): map.h']]], 72.263 + ['ucxmapelement',['UcxMapElement',['../structUcxMapElement.html',1,'UcxMapElement'],['../map_8h.html#ad7d7a910a32113eb93eae11c3dc97b4b',1,'UcxMapElement(): map.h']]], 72.264 + ['ucxmapiterator',['UcxMapIterator',['../structUcxMapIterator.html',1,'UcxMapIterator'],['../map_8h.html#ae36aff5f645948c54f51578b11fd87fb',1,'UcxMapIterator(): map.h']]], 72.265 + ['ucxmapkey',['UcxMapKey',['../structUcxMapKey.html',1,'']]], 72.266 + ['ucxmempool',['UcxMempool',['../structUcxMempool.html',1,'']]], 72.267 + ['ucxproperties',['UcxProperties',['../structUcxProperties.html',1,'']]], 72.268 + ['ucxstack',['UcxStack',['../structUcxStack.html',1,'']]], 72.269 + ['ucxtest',['UcxTest',['../test_8h.html#ae906817354c010b83c2784260cce7a1c',1,'test.h']]], 72.270 + ['ucxtestlist',['UcxTestList',['../structUcxTestList.html',1,'UcxTestList'],['../test_8h.html#a8048c50ae73ea690b776edfd63bd6a5d',1,'UcxTestList(): test.h']]], 72.271 + ['ucxtestsuite',['UcxTestSuite',['../structUcxTestSuite.html',1,'UcxTestSuite'],['../test_8h.html#a52115d1d0f1c4a565ed6ef7c1bfd0363',1,'UcxTestSuite(): test.h']]], 72.272 + ['userdata',['userdata',['../structUcxAVLTree.html#ae92a3bfad3fe33c8dcbdad85112f83fd',1,'UcxAVLTree']]], 72.273 + ['utils_2eh',['utils.h',['../utils_8h.html',1,'']]] 72.274 +];
73.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 73.2 +++ b/docs/api-2.1/search/all_12.html Sat Feb 06 19:11:44 2021 +0100 73.3 @@ -0,0 +1,26 @@ 73.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 73.5 +<html><head><title></title> 73.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 73.7 +<meta name="generator" content="Doxygen 1.8.13"/> 73.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 73.9 +<script type="text/javascript" src="all_12.js"></script> 73.10 +<script type="text/javascript" src="search.js"></script> 73.11 +</head> 73.12 +<body class="SRPage"> 73.13 +<div id="SRIndex"> 73.14 +<div class="SRStatus" id="Loading">Loading...</div> 73.15 +<div id="SRResults"></div> 73.16 +<script type="text/javascript"><!-- 73.17 +createResults(); 73.18 +--></script> 73.19 +<div class="SRStatus" id="Searching">Searching...</div> 73.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 73.21 +<script type="text/javascript"><!-- 73.22 +document.getElementById("Loading").style.display="none"; 73.23 +document.getElementById("NoMatches").style.display="none"; 73.24 +var searchResults = new SearchResults("searchResults"); 73.25 +searchResults.Search(); 73.26 +--></script> 73.27 +</div> 73.28 +</body> 73.29 +</html>
74.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 74.2 +++ b/docs/api-2.1/search/all_12.js Sat Feb 06 19:11:44 2021 +0100 74.3 @@ -0,0 +1,4 @@ 74.4 +var searchData= 74.5 +[ 74.6 + ['value',['value',['../structUcxAVLNode.html#a302501b8c04c3fde668fe72249871258',1,'UcxAVLNode']]] 74.7 +];
75.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 75.2 +++ b/docs/api-2.1/search/all_13.html Sat Feb 06 19:11:44 2021 +0100 75.3 @@ -0,0 +1,26 @@ 75.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 75.5 +<html><head><title></title> 75.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 75.7 +<meta name="generator" content="Doxygen 1.8.13"/> 75.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 75.9 +<script type="text/javascript" src="all_13.js"></script> 75.10 +<script type="text/javascript" src="search.js"></script> 75.11 +</head> 75.12 +<body class="SRPage"> 75.13 +<div id="SRIndex"> 75.14 +<div class="SRStatus" id="Loading">Loading...</div> 75.15 +<div id="SRResults"></div> 75.16 +<script type="text/javascript"><!-- 75.17 +createResults(); 75.18 +--></script> 75.19 +<div class="SRStatus" id="Searching">Searching...</div> 75.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 75.21 +<script type="text/javascript"><!-- 75.22 +document.getElementById("Loading").style.display="none"; 75.23 +document.getElementById("NoMatches").style.display="none"; 75.24 +var searchResults = new SearchResults("searchResults"); 75.25 +searchResults.Search(); 75.26 +--></script> 75.27 +</div> 75.28 +</body> 75.29 +</html>
76.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 76.2 +++ b/docs/api-2.1/search/all_13.js Sat Feb 06 19:11:44 2021 +0100 76.3 @@ -0,0 +1,5 @@ 76.4 +var searchData= 76.5 +[ 76.6 + ['write_5ffunc',['write_func',['../ucx_8h.html#a989b3f0fa4d307d278378fde435641ed',1,'ucx.h']]], 76.7 + ['writer',['writer',['../structUcxLogger.html#ada13bba090a9dc4f8d6cd9be73c60930',1,'UcxLogger']]] 76.8 +];
77.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 77.2 +++ b/docs/api-2.1/search/all_2.html Sat Feb 06 19:11:44 2021 +0100 77.3 @@ -0,0 +1,26 @@ 77.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 77.5 +<html><head><title></title> 77.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 77.7 +<meta name="generator" content="Doxygen 1.8.13"/> 77.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 77.9 +<script type="text/javascript" src="all_2.js"></script> 77.10 +<script type="text/javascript" src="search.js"></script> 77.11 +</head> 77.12 +<body class="SRPage"> 77.13 +<div id="SRIndex"> 77.14 +<div class="SRStatus" id="Loading">Loading...</div> 77.15 +<div id="SRResults"></div> 77.16 +<script type="text/javascript"><!-- 77.17 +createResults(); 77.18 +--></script> 77.19 +<div class="SRStatus" id="Searching">Searching...</div> 77.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 77.21 +<script type="text/javascript"><!-- 77.22 +document.getElementById("Loading").style.display="none"; 77.23 +document.getElementById("NoMatches").style.display="none"; 77.24 +var searchResults = new SearchResults("searchResults"); 77.25 +searchResults.Search(); 77.26 +--></script> 77.27 +</div> 77.28 +</body> 77.29 +</html>
78.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 78.2 +++ b/docs/api-2.1/search/all_2.js Sat Feb 06 19:11:44 2021 +0100 78.3 @@ -0,0 +1,6 @@ 78.4 +var searchData= 78.5 +[ 78.6 + ['buffer',['buffer',['../structUcxProperties.html#a6bb4d29686df41a0f42641ee15232bfd',1,'UcxProperties']]], 78.7 + ['buffer_2eh',['buffer.h',['../buffer_8h.html',1,'']]], 78.8 + ['buflen',['buflen',['../structUcxProperties.html#a4e7524434525267e29f493a25dcca6b5',1,'UcxProperties']]] 78.9 +];
79.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 79.2 +++ b/docs/api-2.1/search/all_3.html Sat Feb 06 19:11:44 2021 +0100 79.3 @@ -0,0 +1,26 @@ 79.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 79.5 +<html><head><title></title> 79.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 79.7 +<meta name="generator" content="Doxygen 1.8.13"/> 79.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 79.9 +<script type="text/javascript" src="all_3.js"></script> 79.10 +<script type="text/javascript" src="search.js"></script> 79.11 +</head> 79.12 +<body class="SRPage"> 79.13 +<div id="SRIndex"> 79.14 +<div class="SRStatus" id="Loading">Loading...</div> 79.15 +<div id="SRResults"></div> 79.16 +<script type="text/javascript"><!-- 79.17 +createResults(); 79.18 +--></script> 79.19 +<div class="SRStatus" id="Searching">Searching...</div> 79.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 79.21 +<script type="text/javascript"><!-- 79.22 +document.getElementById("Loading").style.display="none"; 79.23 +document.getElementById("NoMatches").style.display="none"; 79.24 +var searchResults = new SearchResults("searchResults"); 79.25 +searchResults.Search(); 79.26 +--></script> 79.27 +</div> 79.28 +</body> 79.29 +</html>
80.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 80.2 +++ b/docs/api-2.1/search/all_3.js Sat Feb 06 19:11:44 2021 +0100 80.3 @@ -0,0 +1,14 @@ 80.4 +var searchData= 80.5 +[ 80.6 + ['c',['c',['../structucx__memchunk.html#ab86550503e5f019bfa61a1e91f1c40da',1,'ucx_memchunk']]], 80.7 + ['calloc',['calloc',['../structUcxAllocator.html#ab94ec1cba45cc4e7d81e1588a11cbb62',1,'UcxAllocator']]], 80.8 + ['capacity',['capacity',['../structUcxArray.html#a7ed074887908e45bde7e1fbc67b31c18',1,'UcxArray::capacity()'],['../structUcxBuffer.html#a385661894f3cee9c549bfe07a8b316bf',1,'UcxBuffer::capacity()']]], 80.9 + ['cmp_5ffunc',['cmp_func',['../ucx_8h.html#afe5e2d5dbf34778e0e97852051570791',1,'ucx.h']]], 80.10 + ['cmpfunc',['cmpfunc',['../structUcxAVLTree.html#a87aff25cb726cb9eb88eb815a10d1004',1,'UcxAVLTree']]], 80.11 + ['comment1',['comment1',['../structUcxProperties.html#afaa2e6a289fa6949b7b01df35fa5def8',1,'UcxProperties']]], 80.12 + ['comment2',['comment2',['../structUcxProperties.html#a9ea7ecb414ca8bc7bef62cdd19cc6363',1,'UcxProperties']]], 80.13 + ['comment3',['comment3',['../structUcxProperties.html#a5f3e561e32bac03e36a191a6940cca92',1,'UcxProperties']]], 80.14 + ['copy_5ffunc',['copy_func',['../ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967',1,'ucx.h']]], 80.15 + ['count',['count',['../structUcxMap.html#a14e9163f71f6c014dfa2103de70ae9cd',1,'UcxMap']]], 80.16 + ['cur',['cur',['../structUcxMapIterator.html#af1fc40f899f37280adb5b85acf6e742f',1,'UcxMapIterator']]] 80.17 +];
81.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 81.2 +++ b/docs/api-2.1/search/all_4.html Sat Feb 06 19:11:44 2021 +0100 81.3 @@ -0,0 +1,26 @@ 81.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 81.5 +<html><head><title></title> 81.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 81.7 +<meta name="generator" content="Doxygen 1.8.13"/> 81.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 81.9 +<script type="text/javascript" src="all_4.js"></script> 81.10 +<script type="text/javascript" src="search.js"></script> 81.11 +</head> 81.12 +<body class="SRPage"> 81.13 +<div id="SRIndex"> 81.14 +<div class="SRStatus" id="Loading">Loading...</div> 81.15 +<div id="SRResults"></div> 81.16 +<script type="text/javascript"><!-- 81.17 +createResults(); 81.18 +--></script> 81.19 +<div class="SRStatus" id="Searching">Searching...</div> 81.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 81.21 +<script type="text/javascript"><!-- 81.22 +document.getElementById("Loading").style.display="none"; 81.23 +document.getElementById("NoMatches").style.display="none"; 81.24 +var searchResults = new SearchResults("searchResults"); 81.25 +searchResults.Search(); 81.26 +--></script> 81.27 +</div> 81.28 +</body> 81.29 +</html>
82.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 82.2 +++ b/docs/api-2.1/search/all_4.js Sat Feb 06 19:11:44 2021 +0100 82.3 @@ -0,0 +1,8 @@ 82.4 +var searchData= 82.5 +[ 82.6 + ['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()']]], 82.7 + ['dateformat',['dateformat',['../structUcxLogger.html#a086f75df0f6c81ec491f25c0a4d9262b',1,'UcxLogger']]], 82.8 + ['delimiter',['delimiter',['../structUcxProperties.html#af6adb3f69616cf9d2bb5ea7b4d837ca5',1,'UcxProperties']]], 82.9 + ['destructor',['destructor',['../structucx__memchunk.html#ac7b5e3fda47b917d6fb2a1d7ea28447b',1,'ucx_memchunk::destructor()'],['../structucx__regdestr.html#acea2a3bb66909aa800a931ac8b0cce56',1,'ucx_regdestr::destructor()']]], 82.10 + ['distance_5ffunc',['distance_func',['../ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9',1,'ucx.h']]] 82.11 +];
83.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 83.2 +++ b/docs/api-2.1/search/all_5.html Sat Feb 06 19:11:44 2021 +0100 83.3 @@ -0,0 +1,26 @@ 83.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 83.5 +<html><head><title></title> 83.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 83.7 +<meta name="generator" content="Doxygen 1.8.13"/> 83.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 83.9 +<script type="text/javascript" src="all_5.js"></script> 83.10 +<script type="text/javascript" src="search.js"></script> 83.11 +</head> 83.12 +<body class="SRPage"> 83.13 +<div id="SRIndex"> 83.14 +<div class="SRStatus" id="Loading">Loading...</div> 83.15 +<div id="SRResults"></div> 83.16 +<script type="text/javascript"><!-- 83.17 +createResults(); 83.18 +--></script> 83.19 +<div class="SRStatus" id="Searching">Searching...</div> 83.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 83.21 +<script type="text/javascript"><!-- 83.22 +document.getElementById("Loading").style.display="none"; 83.23 +document.getElementById("NoMatches").style.display="none"; 83.24 +var searchResults = new SearchResults("searchResults"); 83.25 +searchResults.Search(); 83.26 +--></script> 83.27 +</div> 83.28 +</body> 83.29 +</html>
84.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 84.2 +++ b/docs/api-2.1/search/all_5.js Sat Feb 06 19:11:44 2021 +0100 84.3 @@ -0,0 +1,5 @@ 84.4 +var searchData= 84.5 +[ 84.6 + ['elemsize',['elemsize',['../structUcxArray.html#ac4e9ecdf8a8d010644f6e44dfef8190f',1,'UcxArray']]], 84.7 + ['error',['error',['../structUcxProperties.html#a34f71a6ab6dcb6892e3b4eb802e75bff',1,'UcxProperties']]] 84.8 +];
85.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 85.2 +++ b/docs/api-2.1/search/all_6.html Sat Feb 06 19:11:44 2021 +0100 85.3 @@ -0,0 +1,26 @@ 85.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 85.5 +<html><head><title></title> 85.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 85.7 +<meta name="generator" content="Doxygen 1.8.13"/> 85.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 85.9 +<script type="text/javascript" src="all_6.js"></script> 85.10 +<script type="text/javascript" src="search.js"></script> 85.11 +</head> 85.12 +<body class="SRPage"> 85.13 +<div id="SRIndex"> 85.14 +<div class="SRStatus" id="Loading">Loading...</div> 85.15 +<div id="SRResults"></div> 85.16 +<script type="text/javascript"><!-- 85.17 +createResults(); 85.18 +--></script> 85.19 +<div class="SRStatus" id="Searching">Searching...</div> 85.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 85.21 +<script type="text/javascript"><!-- 85.22 +document.getElementById("Loading").style.display="none"; 85.23 +document.getElementById("NoMatches").style.display="none"; 85.24 +var searchResults = new SearchResults("searchResults"); 85.25 +searchResults.Search(); 85.26 +--></script> 85.27 +</div> 85.28 +</body> 85.29 +</html>
86.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 86.2 +++ b/docs/api-2.1/search/all_6.js Sat Feb 06 19:11:44 2021 +0100 86.3 @@ -0,0 +1,6 @@ 86.4 +var searchData= 86.5 +[ 86.6 + ['failure',['failure',['../structUcxTestSuite.html#abfd240541d1e956e49cde0ac36286951',1,'UcxTestSuite']]], 86.7 + ['flags',['flags',['../structUcxBuffer.html#ac642e07b0a03be5aac48eb4aa5bec2f7',1,'UcxBuffer']]], 86.8 + ['free',['free',['../structUcxAllocator.html#aecce1840378ed53f1002190f4f87026f',1,'UcxAllocator']]] 86.9 +];
87.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 87.2 +++ b/docs/api-2.1/search/all_7.html Sat Feb 06 19:11:44 2021 +0100 87.3 @@ -0,0 +1,26 @@ 87.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 87.5 +<html><head><title></title> 87.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 87.7 +<meta name="generator" content="Doxygen 1.8.13"/> 87.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 87.9 +<script type="text/javascript" src="all_7.js"></script> 87.10 +<script type="text/javascript" src="search.js"></script> 87.11 +</head> 87.12 +<body class="SRPage"> 87.13 +<div id="SRIndex"> 87.14 +<div class="SRStatus" id="Loading">Loading...</div> 87.15 +<div id="SRResults"></div> 87.16 +<script type="text/javascript"><!-- 87.17 +createResults(); 87.18 +--></script> 87.19 +<div class="SRStatus" id="Searching">Searching...</div> 87.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 87.21 +<script type="text/javascript"><!-- 87.22 +document.getElementById("Loading").style.display="none"; 87.23 +document.getElementById("NoMatches").style.display="none"; 87.24 +var searchResults = new SearchResults("searchResults"); 87.25 +searchResults.Search(); 87.26 +--></script> 87.27 +</div> 87.28 +</body> 87.29 +</html>
88.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 88.2 +++ b/docs/api-2.1/search/all_7.js Sat Feb 06 19:11:44 2021 +0100 88.3 @@ -0,0 +1,5 @@ 88.4 +var searchData= 88.5 +[ 88.6 + ['hash',['hash',['../structUcxKey.html#aac9d372ac34a4cbd8459e2b04e505752',1,'UcxKey::hash()'],['../structUcxMapKey.html#a34c1f8fec98174583944fffd30e7c913',1,'UcxMapKey::hash()']]], 88.7 + ['height',['height',['../structUcxAVLNode.html#af129fd32863a7c35e82c5cd9d11dc95a',1,'UcxAVLNode']]] 88.8 +];
89.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 89.2 +++ b/docs/api-2.1/search/all_8.html Sat Feb 06 19:11:44 2021 +0100 89.3 @@ -0,0 +1,26 @@ 89.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 89.5 +<html><head><title></title> 89.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 89.7 +<meta name="generator" content="Doxygen 1.8.13"/> 89.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 89.9 +<script type="text/javascript" src="all_8.js"></script> 89.10 +<script type="text/javascript" src="search.js"></script> 89.11 +</head> 89.12 +<body class="SRPage"> 89.13 +<div id="SRIndex"> 89.14 +<div class="SRStatus" id="Loading">Loading...</div> 89.15 +<div id="SRResults"></div> 89.16 +<script type="text/javascript"><!-- 89.17 +createResults(); 89.18 +--></script> 89.19 +<div class="SRStatus" id="Searching">Searching...</div> 89.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 89.21 +<script type="text/javascript"><!-- 89.22 +document.getElementById("Loading").style.display="none"; 89.23 +document.getElementById("NoMatches").style.display="none"; 89.24 +var searchResults = new SearchResults("searchResults"); 89.25 +searchResults.Search(); 89.26 +--></script> 89.27 +</div> 89.28 +</body> 89.29 +</html>
90.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 90.2 +++ b/docs/api-2.1/search/all_8.js Sat Feb 06 19:11:44 2021 +0100 90.3 @@ -0,0 +1,4 @@ 90.4 +var searchData= 90.5 +[ 90.6 + ['index',['index',['../structUcxMapIterator.html#ac2376545c8816dd6895de4995e558c65',1,'UcxMapIterator']]] 90.7 +];
91.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 91.2 +++ b/docs/api-2.1/search/all_9.html Sat Feb 06 19:11:44 2021 +0100 91.3 @@ -0,0 +1,26 @@ 91.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 91.5 +<html><head><title></title> 91.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 91.7 +<meta name="generator" content="Doxygen 1.8.13"/> 91.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 91.9 +<script type="text/javascript" src="all_9.js"></script> 91.10 +<script type="text/javascript" src="search.js"></script> 91.11 +</head> 91.12 +<body class="SRPage"> 91.13 +<div id="SRIndex"> 91.14 +<div class="SRStatus" id="Loading">Loading...</div> 91.15 +<div id="SRResults"></div> 91.16 +<script type="text/javascript"><!-- 91.17 +createResults(); 91.18 +--></script> 91.19 +<div class="SRStatus" id="Searching">Searching...</div> 91.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 91.21 +<script type="text/javascript"><!-- 91.22 +document.getElementById("Loading").style.display="none"; 91.23 +document.getElementById("NoMatches").style.display="none"; 91.24 +var searchResults = new SearchResults("searchResults"); 91.25 +searchResults.Search(); 91.26 +--></script> 91.27 +</div> 91.28 +</body> 91.29 +</html>
92.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 92.2 +++ b/docs/api-2.1/search/all_9.js Sat Feb 06 19:11:44 2021 +0100 92.3 @@ -0,0 +1,4 @@ 92.4 +var searchData= 92.5 +[ 92.6 + ['key',['key',['../structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6',1,'UcxAVLNode::key()'],['../structUcxMapElement.html#aa446141b708e106e2c8de1303318187c',1,'UcxMapElement::key()']]] 92.7 +];
93.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 93.2 +++ b/docs/api-2.1/search/all_a.html Sat Feb 06 19:11:44 2021 +0100 93.3 @@ -0,0 +1,26 @@ 93.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 93.5 +<html><head><title></title> 93.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 93.7 +<meta name="generator" content="Doxygen 1.8.13"/> 93.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 93.9 +<script type="text/javascript" src="all_a.js"></script> 93.10 +<script type="text/javascript" src="search.js"></script> 93.11 +</head> 93.12 +<body class="SRPage"> 93.13 +<div id="SRIndex"> 93.14 +<div class="SRStatus" id="Loading">Loading...</div> 93.15 +<div id="SRResults"></div> 93.16 +<script type="text/javascript"><!-- 93.17 +createResults(); 93.18 +--></script> 93.19 +<div class="SRStatus" id="Searching">Searching...</div> 93.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 93.21 +<script type="text/javascript"><!-- 93.22 +document.getElementById("Loading").style.display="none"; 93.23 +document.getElementById("NoMatches").style.display="none"; 93.24 +var searchResults = new SearchResults("searchResults"); 93.25 +searchResults.Search(); 93.26 +--></script> 93.27 +</div> 93.28 +</body> 93.29 +</html>
94.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 94.2 +++ b/docs/api-2.1/search/all_a.js Sat Feb 06 19:11:44 2021 +0100 94.3 @@ -0,0 +1,10 @@ 94.4 +var searchData= 94.5 +[ 94.6 + ['left',['left',['../structUcxAVLNode.html#ad3a1c733f2c1cc81ac527f846fc24b9c',1,'UcxAVLNode']]], 94.7 + ['len',['len',['../structUcxKey.html#abef01de37f355688f2ac797d2c280683',1,'UcxKey::len()'],['../structUcxMapKey.html#a504d46caa45c79cd87ff8cd835654270',1,'UcxMapKey::len()']]], 94.8 + ['length',['length',['../structsstr__t.html#a5cf571708cdff92e45f08458f2b98229',1,'sstr_t::length()'],['../structscstr__t.html#aaa0229f64f1057b6f65adededaa5a172',1,'scstr_t::length()']]], 94.9 + ['level',['level',['../structUcxLogger.html#a2e0ee94c25b2307096c7970280d189cd',1,'UcxLogger']]], 94.10 + ['levels',['levels',['../structUcxLogger.html#a187129f7bc6e5064b3d92a5f1217f396',1,'UcxLogger']]], 94.11 + ['list_2eh',['list.h',['../list_8h.html',1,'']]], 94.12 + ['logging_2eh',['logging.h',['../logging_8h.html',1,'']]] 94.13 +];
95.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 95.2 +++ b/docs/api-2.1/search/all_b.html Sat Feb 06 19:11:44 2021 +0100 95.3 @@ -0,0 +1,26 @@ 95.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 95.5 +<html><head><title></title> 95.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 95.7 +<meta name="generator" content="Doxygen 1.8.13"/> 95.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 95.9 +<script type="text/javascript" src="all_b.js"></script> 95.10 +<script type="text/javascript" src="search.js"></script> 95.11 +</head> 95.12 +<body class="SRPage"> 95.13 +<div id="SRIndex"> 95.14 +<div class="SRStatus" id="Loading">Loading...</div> 95.15 +<div id="SRResults"></div> 95.16 +<script type="text/javascript"><!-- 95.17 +createResults(); 95.18 +--></script> 95.19 +<div class="SRStatus" id="Searching">Searching...</div> 95.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 95.21 +<script type="text/javascript"><!-- 95.22 +document.getElementById("Loading").style.display="none"; 95.23 +document.getElementById("NoMatches").style.display="none"; 95.24 +var searchResults = new SearchResults("searchResults"); 95.25 +searchResults.Search(); 95.26 +--></script> 95.27 +</div> 95.28 +</body> 95.29 +</html>
96.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 96.2 +++ b/docs/api-2.1/search/all_b.js Sat Feb 06 19:11:44 2021 +0100 96.3 @@ -0,0 +1,8 @@ 96.4 +var searchData= 96.5 +[ 96.6 + ['malloc',['malloc',['../structUcxAllocator.html#a013376172be39ed54f77c4be6898845a',1,'UcxAllocator']]], 96.7 + ['map',['map',['../structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790',1,'UcxMap::map()'],['../structUcxMapIterator.html#af88d6e22547d09fe1d665dd650dcdb95',1,'UcxMapIterator::map()']]], 96.8 + ['map_2eh',['map.h',['../map_8h.html',1,'']]], 96.9 + ['mask',['mask',['../structUcxLogger.html#a1de0db2e02dcf03366268f6943f8b97c',1,'UcxLogger']]], 96.10 + ['mempool_2eh',['mempool.h',['../mempool_8h.html',1,'']]] 96.11 +];
97.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 97.2 +++ b/docs/api-2.1/search/all_c.html Sat Feb 06 19:11:44 2021 +0100 97.3 @@ -0,0 +1,26 @@ 97.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 97.5 +<html><head><title></title> 97.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 97.7 +<meta name="generator" content="Doxygen 1.8.13"/> 97.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 97.9 +<script type="text/javascript" src="all_c.js"></script> 97.10 +<script type="text/javascript" src="search.js"></script> 97.11 +</head> 97.12 +<body class="SRPage"> 97.13 +<div id="SRIndex"> 97.14 +<div class="SRStatus" id="Loading">Loading...</div> 97.15 +<div id="SRResults"></div> 97.16 +<script type="text/javascript"><!-- 97.17 +createResults(); 97.18 +--></script> 97.19 +<div class="SRStatus" id="Searching">Searching...</div> 97.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 97.21 +<script type="text/javascript"><!-- 97.22 +document.getElementById("Loading").style.display="none"; 97.23 +document.getElementById("NoMatches").style.display="none"; 97.24 +var searchResults = new SearchResults("searchResults"); 97.25 +searchResults.Search(); 97.26 +--></script> 97.27 +</div> 97.28 +</body> 97.29 +</html>
98.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 98.2 +++ b/docs/api-2.1/search/all_c.js Sat Feb 06 19:11:44 2021 +0100 98.3 @@ -0,0 +1,5 @@ 98.4 +var searchData= 98.5 +[ 98.6 + ['ndata',['ndata',['../structUcxMempool.html#aa3a73ab231e1bc207d526f46f1c1e23a',1,'UcxMempool']]], 98.7 + ['next',['next',['../structUcxList.html#a82a1818f1abf765b026fa91478569a8f',1,'UcxList::next()'],['../structUcxMapElement.html#a99fe8188b0889201d70ff5f922deef51',1,'UcxMapElement::next()'],['../structUcxTestList.html#aeebb80ff75d9f6f82ab6dc2641a3c74e',1,'UcxTestList::next()']]] 98.8 +];
99.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 99.2 +++ b/docs/api-2.1/search/all_d.html Sat Feb 06 19:11:44 2021 +0100 99.3 @@ -0,0 +1,26 @@ 99.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 99.5 +<html><head><title></title> 99.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 99.7 +<meta name="generator" content="Doxygen 1.8.13"/> 99.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 99.9 +<script type="text/javascript" src="all_d.js"></script> 99.10 +<script type="text/javascript" src="search.js"></script> 99.11 +</head> 99.12 +<body class="SRPage"> 99.13 +<div id="SRIndex"> 99.14 +<div class="SRStatus" id="Loading">Loading...</div> 99.15 +<div id="SRResults"></div> 99.16 +<script type="text/javascript"><!-- 99.17 +createResults(); 99.18 +--></script> 99.19 +<div class="SRStatus" id="Searching">Searching...</div> 99.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 99.21 +<script type="text/javascript"><!-- 99.22 +document.getElementById("Loading").style.display="none"; 99.23 +document.getElementById("NoMatches").style.display="none"; 99.24 +var searchResults = new SearchResults("searchResults"); 99.25 +searchResults.Search(); 99.26 +--></script> 99.27 +</div> 99.28 +</body> 99.29 +</html>
100.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 100.2 +++ b/docs/api-2.1/search/all_d.js Sat Feb 06 19:11:44 2021 +0100 100.3 @@ -0,0 +1,10 @@ 100.4 +var searchData= 100.5 +[ 100.6 + ['parent',['parent',['../structUcxAVLNode.html#afc4e3b4f452aa2d91cabb2135b9d42f7',1,'UcxAVLNode']]], 100.7 + ['pool',['pool',['../structUcxAllocator.html#a1b78012998d1c28be86dc595f8f0aac9',1,'UcxAllocator']]], 100.8 + ['pos',['pos',['../structUcxBuffer.html#a7a64288f002cf62b492e2ea49c79615c',1,'UcxBuffer::pos()'],['../structUcxProperties.html#addd36ac8e5e42241c0a57453633970db',1,'UcxProperties::pos()']]], 100.9 + ['prev',['prev',['../structUcxList.html#a0f1fddce9088b9c1414745d0b1b5c08b',1,'UcxList::prev()'],['../structucx__stack__metadata.html#ad46d2e8e5b0acf05f2def41d451c5579',1,'ucx_stack_metadata::prev()']]], 100.10 + ['prisstr',['PRIsstr',['../string_8h.html#a7d5bc48708405a28b23667e32dfcecae',1,'string.h']]], 100.11 + ['properties_2eh',['properties.h',['../properties_8h.html',1,'']]], 100.12 + ['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()']]] 100.13 +];
101.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 101.2 +++ b/docs/api-2.1/search/all_e.html Sat Feb 06 19:11:44 2021 +0100 101.3 @@ -0,0 +1,26 @@ 101.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 101.5 +<html><head><title></title> 101.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 101.7 +<meta name="generator" content="Doxygen 1.8.13"/> 101.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 101.9 +<script type="text/javascript" src="all_e.js"></script> 101.10 +<script type="text/javascript" src="search.js"></script> 101.11 +</head> 101.12 +<body class="SRPage"> 101.13 +<div id="SRIndex"> 101.14 +<div class="SRStatus" id="Loading">Loading...</div> 101.15 +<div id="SRResults"></div> 101.16 +<script type="text/javascript"><!-- 101.17 +createResults(); 101.18 +--></script> 101.19 +<div class="SRStatus" id="Searching">Searching...</div> 101.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 101.21 +<script type="text/javascript"><!-- 101.22 +document.getElementById("Loading").style.display="none"; 101.23 +document.getElementById("NoMatches").style.display="none"; 101.24 +var searchResults = new SearchResults("searchResults"); 101.25 +searchResults.Search(); 101.26 +--></script> 101.27 +</div> 101.28 +</body> 101.29 +</html>
102.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 102.2 +++ b/docs/api-2.1/search/all_e.js Sat Feb 06 19:11:44 2021 +0100 102.3 @@ -0,0 +1,7 @@ 102.4 +var searchData= 102.5 +[ 102.6 + ['read_5ffunc',['read_func',['../ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5',1,'ucx.h']]], 102.7 + ['realloc',['realloc',['../structUcxAllocator.html#a3550e3847f31d9e9ce3ffcb0d3440c15',1,'UcxAllocator']]], 102.8 + ['right',['right',['../structUcxAVLNode.html#a7cbaa31dba8c7a89f4f8f7905f6fd238',1,'UcxAVLNode']]], 102.9 + ['root',['root',['../structUcxAVLTree.html#a393a8fc99eb2c290d3cb67170081d742',1,'UcxAVLTree']]] 102.10 +];
103.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 103.2 +++ b/docs/api-2.1/search/all_f.html Sat Feb 06 19:11:44 2021 +0100 103.3 @@ -0,0 +1,26 @@ 103.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 103.5 +<html><head><title></title> 103.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 103.7 +<meta name="generator" content="Doxygen 1.8.13"/> 103.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 103.9 +<script type="text/javascript" src="all_f.js"></script> 103.10 +<script type="text/javascript" src="search.js"></script> 103.11 +</head> 103.12 +<body class="SRPage"> 103.13 +<div id="SRIndex"> 103.14 +<div class="SRStatus" id="Loading">Loading...</div> 103.15 +<div id="SRResults"></div> 103.16 +<script type="text/javascript"><!-- 103.17 +createResults(); 103.18 +--></script> 103.19 +<div class="SRStatus" id="Searching">Searching...</div> 103.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 103.21 +<script type="text/javascript"><!-- 103.22 +document.getElementById("Loading").style.display="none"; 103.23 +document.getElementById("NoMatches").style.display="none"; 103.24 +var searchResults = new SearchResults("searchResults"); 103.25 +searchResults.Search(); 103.26 +--></script> 103.27 +</div> 103.28 +</body> 103.29 +</html>
104.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 104.2 +++ b/docs/api-2.1/search/all_f.js Sat Feb 06 19:11:44 2021 +0100 104.3 @@ -0,0 +1,67 @@ 104.4 +var searchData= 104.5 +[ 104.6 + ['s',['S',['../string_8h.html#a8fa17c8cf4c36df48f4108c36da8573e',1,'string.h']]], 104.7 + ['sc',['SC',['../string_8h.html#a7d261dd0bc358c957a368bc058c1ce53',1,'string.h']]], 104.8 + ['scstr',['SCSTR',['../string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed',1,'SCSTR(): string.h'],['../string_8h.html#a2b1d6f1eca1c1549f37107b9c026c5a6',1,'scstr(const char *cstring): string.c']]], 104.9 + ['scstr_5ft',['scstr_t',['../structscstr__t.html',1,'']]], 104.10 + ['scstrcasecmp',['scstrcasecmp',['../string_8h.html#aca8142fb823d253054e17c17cfca05e0',1,'string.c']]], 104.11 + ['scstrcaseprefix',['scstrcaseprefix',['../string_8h.html#a3718ef4aa1e86cdb26bda2f07fb585df',1,'string.c']]], 104.12 + ['scstrcasesuffix',['scstrcasesuffix',['../string_8h.html#a6edb4b85f2b9efe79db7ffe6eccd7bc3',1,'string.c']]], 104.13 + ['scstrcat',['scstrcat',['../string_8h.html#a7376842c19e954b49215da81ef76ac0c',1,'string.c']]], 104.14 + ['scstrcat_5fa',['scstrcat_a',['../string_8h.html#abacce4cbd6f70fcb6453904ef08b02e9',1,'string.c']]], 104.15 + ['scstrchr',['scstrchr',['../string_8h.html#a5836d6a7a744791c35e5c17bdc394a87',1,'string.c']]], 104.16 + ['scstrcmp',['scstrcmp',['../string_8h.html#af35272a8e5408c88ed3e25a3a98f0a82',1,'string.c']]], 104.17 + ['scstrdup',['scstrdup',['../string_8h.html#a97dccce03af419596dbdd592ca46a164',1,'string.c']]], 104.18 + ['scstrdup_5fa',['scstrdup_a',['../string_8h.html#a8fe58921f51eb1fde038472377e63014',1,'string.c']]], 104.19 + ['scstrlower',['scstrlower',['../string_8h.html#abccf198bea3186ff2abb080cc88dcae6',1,'string.c']]], 104.20 + ['scstrlower_5fa',['scstrlower_a',['../string_8h.html#a3cf1e557df7ab58d03c78832c4060276',1,'string.c']]], 104.21 + ['scstrn',['scstrn',['../string_8h.html#ae594f6e222ea394cef6a26c0dfad000d',1,'string.c']]], 104.22 + ['scstrnlen',['scstrnlen',['../string_8h.html#ac1b000030d6d197eec48c15a182055d5',1,'string.c']]], 104.23 + ['scstrprefix',['scstrprefix',['../string_8h.html#a599ddc2f88dd1df68b72eefd91347393',1,'string.c']]], 104.24 + ['scstrrchr',['scstrrchr',['../string_8h.html#ae389835b97cd9382e7d6a6a075323376',1,'string.c']]], 104.25 + ['scstrscstr',['scstrscstr',['../string_8h.html#a54f256c3abe811c52d58b4ff1b23f051',1,'string.c']]], 104.26 + ['scstrsplit',['scstrsplit',['../string_8h.html#ae71cac352b00230848bde358f0fb05ea',1,'string.c']]], 104.27 + ['scstrsplit_5fa',['scstrsplit_a',['../string_8h.html#a52906455ae530c9cdc6812c8e6d9bdef',1,'string.c']]], 104.28 + ['scstrsstr',['scstrsstr',['../string_8h.html#aa4362cb36c6629f9d8484739fd827748',1,'string.c']]], 104.29 + ['scstrsubs',['scstrsubs',['../string_8h.html#a9a6c8d8db0dda0037c3c852cce1a5060',1,'string.c']]], 104.30 + ['scstrsubsl',['scstrsubsl',['../string_8h.html#ad50f0f67b906fad0744f46bcb51e144b',1,'string.c']]], 104.31 + ['scstrsuffix',['scstrsuffix',['../string_8h.html#a1f0ae316a2afe85d5b4655e6ece6721a',1,'string.c']]], 104.32 + ['scstrtrim',['scstrtrim',['../string_8h.html#ad374b16eb1be8b48019debad9b9f268c',1,'string.c']]], 104.33 + ['scstrupper',['scstrupper',['../string_8h.html#af3dd09ec9d11162fe0075f4e60f41240',1,'string.c']]], 104.34 + ['scstrupper_5fa',['scstrupper_a',['../string_8h.html#aea94613eb74668cc05d365803d32bfad',1,'string.c']]], 104.35 + ['sfmt',['SFMT',['../string_8h.html#a23ed51e87385886bb65e8cd19c839362',1,'string.h']]], 104.36 + ['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()']]], 104.37 + ['space',['space',['../structUcxBuffer.html#a1a5076e85acb84b715a53bc0f37fb721',1,'UcxBuffer::space()'],['../structUcxStack.html#af64d528744bf3a47fec87d2e45d2992f',1,'UcxStack::space()']]], 104.38 + ['sstr',['sstr',['../string_8h.html#a539eb7059251a051ee5d179526a23e9a',1,'string.c']]], 104.39 + ['sstr_5ft',['sstr_t',['../structsstr__t.html',1,'']]], 104.40 + ['sstrcasecmp',['sstrcasecmp',['../string_8h.html#a81b0f6df794152c2038703d4e9d0ad59',1,'string.h']]], 104.41 + ['sstrcaseprefix',['sstrcaseprefix',['../string_8h.html#acd3dc64e90db9b4046e14f115a815ff4',1,'string.h']]], 104.42 + ['sstrcasesuffix',['sstrcasesuffix',['../string_8h.html#a57eabd4862d531dd685bbf2feb8468bf',1,'string.h']]], 104.43 + ['sstrcat',['sstrcat',['../string_8h.html#a6af8a4c347c7fdb5980d4c4803be2759',1,'string.h']]], 104.44 + ['sstrcat_5fa',['sstrcat_a',['../string_8h.html#a6068d460f9bc05962666a917d26568b3',1,'string.h']]], 104.45 + ['sstrchr',['sstrchr',['../string_8h.html#af80898a0b75955eb2579298c3ae2c481',1,'string.c']]], 104.46 + ['sstrcmp',['sstrcmp',['../string_8h.html#a7ae7156c8de57454ca38d306100b8160',1,'string.h']]], 104.47 + ['sstrdup',['sstrdup',['../string_8h.html#accbfd2b459a028d7af9fb7df6f977d80',1,'string.h']]], 104.48 + ['sstrdup_5fa',['sstrdup_a',['../string_8h.html#a8d098baada4ea9ad5d8b6343b5aec007',1,'string.h']]], 104.49 + ['sstrlower',['sstrlower',['../string_8h.html#a89343ea3e719f00ee802b557db57b769',1,'string.h']]], 104.50 + ['sstrlower_5fa',['sstrlower_a',['../string_8h.html#a4bb4742fe71115f493991d307cb22b23',1,'string.h']]], 104.51 + ['sstrn',['sstrn',['../string_8h.html#a2744c38ac44abf3e01fa059056dcf36c',1,'string.c']]], 104.52 + ['sstrnlen',['sstrnlen',['../string_8h.html#a33fa945acc5ac2ce962e5ef13cf1638c',1,'string.h']]], 104.53 + ['sstrprefix',['sstrprefix',['../string_8h.html#a7d73b66256384b26927e787318fdefa2',1,'string.h']]], 104.54 + ['sstrrchr',['sstrrchr',['../string_8h.html#adae3f59957ca328e1da5285cb8b02a72',1,'string.c']]], 104.55 + ['sstrscstr',['sstrscstr',['../string_8h.html#aa696932213265e10f864678686f4ccde',1,'string.h']]], 104.56 + ['sstrsplit',['sstrsplit',['../string_8h.html#aa929984004c3576bfafb95031aca8eb7',1,'string.h']]], 104.57 + ['sstrsplit_5fa',['sstrsplit_a',['../string_8h.html#ac9f69fa3a17e26a3a5f9d985b5844601',1,'string.h']]], 104.58 + ['sstrstr',['sstrstr',['../string_8h.html#a9d03be026afa9447c52bb34b9e3b895a',1,'string.h']]], 104.59 + ['sstrsubs',['sstrsubs',['../string_8h.html#a5eb9e0e1f26cf7fbecc038cd90e8b258',1,'string.c']]], 104.60 + ['sstrsubsl',['sstrsubsl',['../string_8h.html#a78925c91af54f23cebd20ff99ef4331a',1,'string.c']]], 104.61 + ['sstrsuffix',['sstrsuffix',['../string_8h.html#ac6a5246f26be2e8a5f34d8995b7ec14e',1,'string.h']]], 104.62 + ['sstrtrim',['sstrtrim',['../string_8h.html#ae2d6da564d3fce51f2e0cac580fdbc56',1,'string.c']]], 104.63 + ['sstrupper',['sstrupper',['../string_8h.html#a084fe5a3a90d6fb6b15ecda03bb30824',1,'string.h']]], 104.64 + ['sstrupper_5fa',['sstrupper_a',['../string_8h.html#a5f0dd83c0176b812fb428004b2877a34',1,'string.h']]], 104.65 + ['st',['ST',['../string_8h.html#a9037956cca97a4e84b642f17f3d10378',1,'string.h']]], 104.66 + ['stack_2eh',['stack.h',['../stack_8h.html',1,'']]], 104.67 + ['stream',['stream',['../structUcxLogger.html#a33fddf4791e8d49e479ecc78bf5d1b9e',1,'UcxLogger']]], 104.68 + ['string_2eh',['string.h',['../string_8h.html',1,'']]], 104.69 + ['success',['success',['../structUcxTestSuite.html#a6cefa870a3c2e38d6ee682e38643dbbb',1,'UcxTestSuite']]] 104.70 +];
105.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 105.2 +++ b/docs/api-2.1/search/classes_0.html Sat Feb 06 19:11:44 2021 +0100 105.3 @@ -0,0 +1,26 @@ 105.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 105.5 +<html><head><title></title> 105.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 105.7 +<meta name="generator" content="Doxygen 1.8.13"/> 105.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 105.9 +<script type="text/javascript" src="classes_0.js"></script> 105.10 +<script type="text/javascript" src="search.js"></script> 105.11 +</head> 105.12 +<body class="SRPage"> 105.13 +<div id="SRIndex"> 105.14 +<div class="SRStatus" id="Loading">Loading...</div> 105.15 +<div id="SRResults"></div> 105.16 +<script type="text/javascript"><!-- 105.17 +createResults(); 105.18 +--></script> 105.19 +<div class="SRStatus" id="Searching">Searching...</div> 105.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 105.21 +<script type="text/javascript"><!-- 105.22 +document.getElementById("Loading").style.display="none"; 105.23 +document.getElementById("NoMatches").style.display="none"; 105.24 +var searchResults = new SearchResults("searchResults"); 105.25 +searchResults.Search(); 105.26 +--></script> 105.27 +</div> 105.28 +</body> 105.29 +</html>
106.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 106.2 +++ b/docs/api-2.1/search/classes_0.js Sat Feb 06 19:11:44 2021 +0100 106.3 @@ -0,0 +1,5 @@ 106.4 +var searchData= 106.5 +[ 106.6 + ['scstr_5ft',['scstr_t',['../structscstr__t.html',1,'']]], 106.7 + ['sstr_5ft',['sstr_t',['../structsstr__t.html',1,'']]] 106.8 +];
107.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 107.2 +++ b/docs/api-2.1/search/classes_1.html Sat Feb 06 19:11:44 2021 +0100 107.3 @@ -0,0 +1,26 @@ 107.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 107.5 +<html><head><title></title> 107.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 107.7 +<meta name="generator" content="Doxygen 1.8.13"/> 107.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 107.9 +<script type="text/javascript" src="classes_1.js"></script> 107.10 +<script type="text/javascript" src="search.js"></script> 107.11 +</head> 107.12 +<body class="SRPage"> 107.13 +<div id="SRIndex"> 107.14 +<div class="SRStatus" id="Loading">Loading...</div> 107.15 +<div id="SRResults"></div> 107.16 +<script type="text/javascript"><!-- 107.17 +createResults(); 107.18 +--></script> 107.19 +<div class="SRStatus" id="Searching">Searching...</div> 107.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 107.21 +<script type="text/javascript"><!-- 107.22 +document.getElementById("Loading").style.display="none"; 107.23 +document.getElementById("NoMatches").style.display="none"; 107.24 +var searchResults = new SearchResults("searchResults"); 107.25 +searchResults.Search(); 107.26 +--></script> 107.27 +</div> 107.28 +</body> 107.29 +</html>
108.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 108.2 +++ b/docs/api-2.1/search/classes_1.js Sat Feb 06 19:11:44 2021 +0100 108.3 @@ -0,0 +1,23 @@ 108.4 +var searchData= 108.5 +[ 108.6 + ['ucx_5fmemchunk',['ucx_memchunk',['../structucx__memchunk.html',1,'']]], 108.7 + ['ucx_5fregdestr',['ucx_regdestr',['../structucx__regdestr.html',1,'']]], 108.8 + ['ucx_5fstack_5fmetadata',['ucx_stack_metadata',['../structucx__stack__metadata.html',1,'']]], 108.9 + ['ucxallocator',['UcxAllocator',['../structUcxAllocator.html',1,'']]], 108.10 + ['ucxarray',['UcxArray',['../structUcxArray.html',1,'']]], 108.11 + ['ucxavlnode',['UcxAVLNode',['../structUcxAVLNode.html',1,'']]], 108.12 + ['ucxavltree',['UcxAVLTree',['../structUcxAVLTree.html',1,'']]], 108.13 + ['ucxbuffer',['UcxBuffer',['../structUcxBuffer.html',1,'']]], 108.14 + ['ucxkey',['UcxKey',['../structUcxKey.html',1,'']]], 108.15 + ['ucxlist',['UcxList',['../structUcxList.html',1,'']]], 108.16 + ['ucxlogger',['UcxLogger',['../structUcxLogger.html',1,'']]], 108.17 + ['ucxmap',['UcxMap',['../structUcxMap.html',1,'']]], 108.18 + ['ucxmapelement',['UcxMapElement',['../structUcxMapElement.html',1,'']]], 108.19 + ['ucxmapiterator',['UcxMapIterator',['../structUcxMapIterator.html',1,'']]], 108.20 + ['ucxmapkey',['UcxMapKey',['../structUcxMapKey.html',1,'']]], 108.21 + ['ucxmempool',['UcxMempool',['../structUcxMempool.html',1,'']]], 108.22 + ['ucxproperties',['UcxProperties',['../structUcxProperties.html',1,'']]], 108.23 + ['ucxstack',['UcxStack',['../structUcxStack.html',1,'']]], 108.24 + ['ucxtestlist',['UcxTestList',['../structUcxTestList.html',1,'']]], 108.25 + ['ucxtestsuite',['UcxTestSuite',['../structUcxTestSuite.html',1,'']]] 108.26 +];
109.1 Binary file docs/api-2.1/search/close.png has changed
110.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 110.2 +++ b/docs/api-2.1/search/defines_0.html Sat Feb 06 19:11:44 2021 +0100 110.3 @@ -0,0 +1,26 @@ 110.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 110.5 +<html><head><title></title> 110.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 110.7 +<meta name="generator" content="Doxygen 1.8.13"/> 110.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 110.9 +<script type="text/javascript" src="defines_0.js"></script> 110.10 +<script type="text/javascript" src="search.js"></script> 110.11 +</head> 110.12 +<body class="SRPage"> 110.13 +<div id="SRIndex"> 110.14 +<div class="SRStatus" id="Loading">Loading...</div> 110.15 +<div id="SRResults"></div> 110.16 +<script type="text/javascript"><!-- 110.17 +createResults(); 110.18 +--></script> 110.19 +<div class="SRStatus" id="Searching">Searching...</div> 110.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 110.21 +<script type="text/javascript"><!-- 110.22 +document.getElementById("Loading").style.display="none"; 110.23 +document.getElementById("NoMatches").style.display="none"; 110.24 +var searchResults = new SearchResults("searchResults"); 110.25 +searchResults.Search(); 110.26 +--></script> 110.27 +</div> 110.28 +</body> 110.29 +</html>
111.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 111.2 +++ b/docs/api-2.1/search/defines_0.js Sat Feb 06 19:11:44 2021 +0100 111.3 @@ -0,0 +1,4 @@ 111.4 +var searchData= 111.5 +[ 111.6 + ['_5f_5ffunction_5f_5f',['__FUNCTION__',['../test_8h.html#a828bb1dfda1afd67ca795075903d227d',1,'test.h']]] 111.7 +];
112.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 112.2 +++ b/docs/api-2.1/search/defines_1.html Sat Feb 06 19:11:44 2021 +0100 112.3 @@ -0,0 +1,26 @@ 112.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 112.5 +<html><head><title></title> 112.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 112.7 +<meta name="generator" content="Doxygen 1.8.13"/> 112.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 112.9 +<script type="text/javascript" src="defines_1.js"></script> 112.10 +<script type="text/javascript" src="search.js"></script> 112.11 +</head> 112.12 +<body class="SRPage"> 112.13 +<div id="SRIndex"> 112.14 +<div class="SRStatus" id="Loading">Loading...</div> 112.15 +<div id="SRResults"></div> 112.16 +<script type="text/javascript"><!-- 112.17 +createResults(); 112.18 +--></script> 112.19 +<div class="SRStatus" id="Searching">Searching...</div> 112.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 112.21 +<script type="text/javascript"><!-- 112.22 +document.getElementById("Loading").style.display="none"; 112.23 +document.getElementById("NoMatches").style.display="none"; 112.24 +var searchResults = new SearchResults("searchResults"); 112.25 +searchResults.Search(); 112.26 +--></script> 112.27 +</div> 112.28 +</body> 112.29 +</html>
113.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 113.2 +++ b/docs/api-2.1/search/defines_1.js Sat Feb 06 19:11:44 2021 +0100 113.3 @@ -0,0 +1,7 @@ 113.4 +var searchData= 113.5 +[ 113.6 + ['alcalloc',['alcalloc',['../allocator_8h.html#a8d71470816f88f78cb9a9686c57e1b10',1,'allocator.h']]], 113.7 + ['alfree',['alfree',['../allocator_8h.html#acd775785b54e97dc2b33a432c12c8fb2',1,'allocator.h']]], 113.8 + ['almalloc',['almalloc',['../allocator_8h.html#ae1bc218fea8a35f4a3706f0beefcfb19',1,'allocator.h']]], 113.9 + ['alrealloc',['alrealloc',['../allocator_8h.html#a029ee5c9bcbb3f873571553f788c5820',1,'allocator.h']]] 113.10 +];
114.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 114.2 +++ b/docs/api-2.1/search/defines_2.html Sat Feb 06 19:11:44 2021 +0100 114.3 @@ -0,0 +1,26 @@ 114.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 114.5 +<html><head><title></title> 114.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 114.7 +<meta name="generator" content="Doxygen 1.8.13"/> 114.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 114.9 +<script type="text/javascript" src="defines_2.js"></script> 114.10 +<script type="text/javascript" src="search.js"></script> 114.11 +</head> 114.12 +<body class="SRPage"> 114.13 +<div id="SRIndex"> 114.14 +<div class="SRStatus" id="Loading">Loading...</div> 114.15 +<div id="SRResults"></div> 114.16 +<script type="text/javascript"><!-- 114.17 +createResults(); 114.18 +--></script> 114.19 +<div class="SRStatus" id="Searching">Searching...</div> 114.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 114.21 +<script type="text/javascript"><!-- 114.22 +document.getElementById("Loading").style.display="none"; 114.23 +document.getElementById("NoMatches").style.display="none"; 114.24 +var searchResults = new SearchResults("searchResults"); 114.25 +searchResults.Search(); 114.26 +--></script> 114.27 +</div> 114.28 +</body> 114.29 +</html>
115.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 115.2 +++ b/docs/api-2.1/search/defines_2.js Sat Feb 06 19:11:44 2021 +0100 115.3 @@ -0,0 +1,4 @@ 115.4 +var searchData= 115.5 +[ 115.6 + ['prisstr',['PRIsstr',['../string_8h.html#a7d5bc48708405a28b23667e32dfcecae',1,'string.h']]] 115.7 +];
116.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 116.2 +++ b/docs/api-2.1/search/defines_3.html Sat Feb 06 19:11:44 2021 +0100 116.3 @@ -0,0 +1,26 @@ 116.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 116.5 +<html><head><title></title> 116.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 116.7 +<meta name="generator" content="Doxygen 1.8.13"/> 116.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 116.9 +<script type="text/javascript" src="defines_3.js"></script> 116.10 +<script type="text/javascript" src="search.js"></script> 116.11 +</head> 116.12 +<body class="SRPage"> 116.13 +<div id="SRIndex"> 116.14 +<div class="SRStatus" id="Loading">Loading...</div> 116.15 +<div id="SRResults"></div> 116.16 +<script type="text/javascript"><!-- 116.17 +createResults(); 116.18 +--></script> 116.19 +<div class="SRStatus" id="Searching">Searching...</div> 116.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 116.21 +<script type="text/javascript"><!-- 116.22 +document.getElementById("Loading").style.display="none"; 116.23 +document.getElementById("NoMatches").style.display="none"; 116.24 +var searchResults = new SearchResults("searchResults"); 116.25 +searchResults.Search(); 116.26 +--></script> 116.27 +</div> 116.28 +</body> 116.29 +</html>
117.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 117.2 +++ b/docs/api-2.1/search/defines_3.js Sat Feb 06 19:11:44 2021 +0100 117.3 @@ -0,0 +1,27 @@ 117.4 +var searchData= 117.5 +[ 117.6 + ['s',['S',['../string_8h.html#a8fa17c8cf4c36df48f4108c36da8573e',1,'string.h']]], 117.7 + ['sc',['SC',['../string_8h.html#a7d261dd0bc358c957a368bc058c1ce53',1,'string.h']]], 117.8 + ['scstr',['SCSTR',['../string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed',1,'string.h']]], 117.9 + ['sfmt',['SFMT',['../string_8h.html#a23ed51e87385886bb65e8cd19c839362',1,'string.h']]], 117.10 + ['sstrcasecmp',['sstrcasecmp',['../string_8h.html#a81b0f6df794152c2038703d4e9d0ad59',1,'string.h']]], 117.11 + ['sstrcaseprefix',['sstrcaseprefix',['../string_8h.html#acd3dc64e90db9b4046e14f115a815ff4',1,'string.h']]], 117.12 + ['sstrcasesuffix',['sstrcasesuffix',['../string_8h.html#a57eabd4862d531dd685bbf2feb8468bf',1,'string.h']]], 117.13 + ['sstrcat',['sstrcat',['../string_8h.html#a6af8a4c347c7fdb5980d4c4803be2759',1,'string.h']]], 117.14 + ['sstrcat_5fa',['sstrcat_a',['../string_8h.html#a6068d460f9bc05962666a917d26568b3',1,'string.h']]], 117.15 + ['sstrcmp',['sstrcmp',['../string_8h.html#a7ae7156c8de57454ca38d306100b8160',1,'string.h']]], 117.16 + ['sstrdup',['sstrdup',['../string_8h.html#accbfd2b459a028d7af9fb7df6f977d80',1,'string.h']]], 117.17 + ['sstrdup_5fa',['sstrdup_a',['../string_8h.html#a8d098baada4ea9ad5d8b6343b5aec007',1,'string.h']]], 117.18 + ['sstrlower',['sstrlower',['../string_8h.html#a89343ea3e719f00ee802b557db57b769',1,'string.h']]], 117.19 + ['sstrlower_5fa',['sstrlower_a',['../string_8h.html#a4bb4742fe71115f493991d307cb22b23',1,'string.h']]], 117.20 + ['sstrnlen',['sstrnlen',['../string_8h.html#a33fa945acc5ac2ce962e5ef13cf1638c',1,'string.h']]], 117.21 + ['sstrprefix',['sstrprefix',['../string_8h.html#a7d73b66256384b26927e787318fdefa2',1,'string.h']]], 117.22 + ['sstrscstr',['sstrscstr',['../string_8h.html#aa696932213265e10f864678686f4ccde',1,'string.h']]], 117.23 + ['sstrsplit',['sstrsplit',['../string_8h.html#aa929984004c3576bfafb95031aca8eb7',1,'string.h']]], 117.24 + ['sstrsplit_5fa',['sstrsplit_a',['../string_8h.html#ac9f69fa3a17e26a3a5f9d985b5844601',1,'string.h']]], 117.25 + ['sstrstr',['sstrstr',['../string_8h.html#a9d03be026afa9447c52bb34b9e3b895a',1,'string.h']]], 117.26 + ['sstrsuffix',['sstrsuffix',['../string_8h.html#ac6a5246f26be2e8a5f34d8995b7ec14e',1,'string.h']]], 117.27 + ['sstrupper',['sstrupper',['../string_8h.html#a084fe5a3a90d6fb6b15ecda03bb30824',1,'string.h']]], 117.28 + ['sstrupper_5fa',['sstrupper_a',['../string_8h.html#a5f0dd83c0176b812fb428004b2877a34',1,'string.h']]], 117.29 + ['st',['ST',['../string_8h.html#a9037956cca97a4e84b642f17f3d10378',1,'string.h']]] 117.30 +];
118.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 118.2 +++ b/docs/api-2.1/search/defines_4.html Sat Feb 06 19:11:44 2021 +0100 118.3 @@ -0,0 +1,26 @@ 118.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 118.5 +<html><head><title></title> 118.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 118.7 +<meta name="generator" content="Doxygen 1.8.13"/> 118.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 118.9 +<script type="text/javascript" src="defines_4.js"></script> 118.10 +<script type="text/javascript" src="search.js"></script> 118.11 +</head> 118.12 +<body class="SRPage"> 118.13 +<div id="SRIndex"> 118.14 +<div class="SRStatus" id="Loading">Loading...</div> 118.15 +<div id="SRResults"></div> 118.16 +<script type="text/javascript"><!-- 118.17 +createResults(); 118.18 +--></script> 118.19 +<div class="SRStatus" id="Searching">Searching...</div> 118.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 118.21 +<script type="text/javascript"><!-- 118.22 +document.getElementById("Loading").style.display="none"; 118.23 +document.getElementById("NoMatches").style.display="none"; 118.24 +var searchResults = new SearchResults("searchResults"); 118.25 +searchResults.Search(); 118.26 +--></script> 118.27 +</div> 118.28 +</body> 118.29 +</html>
119.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 119.2 +++ b/docs/api-2.1/search/defines_4.js Sat Feb 06 19:11:44 2021 +0100 119.3 @@ -0,0 +1,59 @@ 119.4 +var searchData= 119.5 +[ 119.6 + ['ucx_5fallocator_5fdefault',['UCX_ALLOCATOR_DEFAULT',['../allocator_8h.html#a1283a8f875f90a7af3aba5e031fc2e3f',1,'allocator.h']]], 119.7 + ['ucx_5farray_5futil_5fset',['ucx_array_util_set',['../array_8h.html#a1d959c29af3125bdd37cde3a554e729c',1,'array.h']]], 119.8 + ['ucx_5farray_5futil_5fsetptr',['ucx_array_util_setptr',['../array_8h.html#a59a5b342965e790945f9c7a3f86b99f9',1,'array.h']]], 119.9 + ['ucx_5favl_5fdefault_5fnew',['ucx_avl_default_new',['../avl_8h.html#ac2886d4b79b48c9fabf6408873f84cd2',1,'avl.h']]], 119.10 + ['ucx_5favl_5ffind_5fclosest',['UCX_AVL_FIND_CLOSEST',['../avl_8h.html#af16f24d74fd6af0154de041566c6603b',1,'avl.h']]], 119.11 + ['ucx_5favl_5ffind_5fexact',['UCX_AVL_FIND_EXACT',['../avl_8h.html#aaaf4a6f6f661cda7791db239212285d9',1,'avl.h']]], 119.12 + ['ucx_5favl_5ffind_5flower_5fbounded',['UCX_AVL_FIND_LOWER_BOUNDED',['../avl_8h.html#abd2446d544d5412b6997ee8a17bd368c',1,'avl.h']]], 119.13 + ['ucx_5favl_5ffind_5fupper_5fbounded',['UCX_AVL_FIND_UPPER_BOUNDED',['../avl_8h.html#ac74ee7649c1e206b08b31f37dd68ca5e',1,'avl.h']]], 119.14 + ['ucx_5fbprintf',['ucx_bprintf',['../utils_8h.html#a9d7d65a420f026fcb6982803d5120519',1,'utils.h']]], 119.15 + ['ucx_5fbuffer_5fautoextend',['UCX_BUFFER_AUTOEXTEND',['../buffer_8h.html#a05f9565f2d04399168c3b1c152a632be',1,'buffer.h']]], 119.16 + ['ucx_5fbuffer_5fautofree',['UCX_BUFFER_AUTOFREE',['../buffer_8h.html#a8bab11ad8a76719228b9ee91e2e45535',1,'buffer.h']]], 119.17 + ['ucx_5fbuffer_5fclear',['ucx_buffer_clear',['../buffer_8h.html#a374abd5aabfcc3ee0777a79d5fe651ab',1,'buffer.h']]], 119.18 + ['ucx_5fbuffer_5fclone',['ucx_buffer_clone',['../buffer_8h.html#a828353846428c2c2f695f9938f059e52',1,'buffer.h']]], 119.19 + ['ucx_5fbuffer_5fdefault',['UCX_BUFFER_DEFAULT',['../buffer_8h.html#acc77c8ed7b26854f555d4a5d11e49ea2',1,'buffer.h']]], 119.20 + ['ucx_5fbuffer_5fto_5fsstr',['ucx_buffer_to_sstr',['../buffer_8h.html#a0f4b64f1b3a74c4f6c5d9409d6b6086a',1,'buffer.h']]], 119.21 + ['ucx_5fforeach',['UCX_FOREACH',['../list_8h.html#a4b143b6526a410aa4d22cb3bb9365d70',1,'list.h']]], 119.22 + ['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']]], 119.23 + ['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']]], 119.24 + ['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']]], 119.25 + ['ucx_5flogger_5flevel',['UCX_LOGGER_LEVEL',['../logging_8h.html#aee18bc20e58ffb69910121512c350839',1,'logging.h']]], 119.26 + ['ucx_5flogger_5flog',['ucx_logger_log',['../logging_8h.html#aa0245325031d95799b28def177fd14ec',1,'logging.h']]], 119.27 + ['ucx_5flogger_5fregister_5flevel',['ucx_logger_register_level',['../logging_8h.html#a5cffc19502c4c90bfb3bd3bbcd18170a',1,'logging.h']]], 119.28 + ['ucx_5flogger_5fsource',['UCX_LOGGER_SOURCE',['../logging_8h.html#a0e0d72b12616c1e49ff8834eaf4cb8a2',1,'logging.h']]], 119.29 + ['ucx_5flogger_5ftimestamp',['UCX_LOGGER_TIMESTAMP',['../logging_8h.html#a38607008268b4f776ee500fb95d2e823',1,'logging.h']]], 119.30 + ['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']]], 119.31 + ['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']]], 119.32 + ['ucx_5fmap_5fcstr_5fget',['ucx_map_cstr_get',['../map_8h.html#a64e1fb55498fa502dd2ed8ed69062cdd',1,'map.h']]], 119.33 + ['ucx_5fmap_5fcstr_5fput',['ucx_map_cstr_put',['../map_8h.html#ad9356b01425b934ab237b52339ac0cc3',1,'map.h']]], 119.34 + ['ucx_5fmap_5fcstr_5fremove',['ucx_map_cstr_remove',['../map_8h.html#a9c4405a5a75ecf64e2ef3d0c6501a9fe',1,'map.h']]], 119.35 + ['ucx_5fmap_5fforeach',['UCX_MAP_FOREACH',['../map_8h.html#a940896c4aa1b13e54c55c04c3efc186b',1,'map.h']]], 119.36 + ['ucx_5fmap_5fint_5fget',['ucx_map_int_get',['../map_8h.html#aa1681bd2178553cd092fd24c4d681d3c',1,'map.h']]], 119.37 + ['ucx_5fmap_5fint_5fput',['ucx_map_int_put',['../map_8h.html#aaa30af79b4068c923895619e83f44367',1,'map.h']]], 119.38 + ['ucx_5fmap_5fint_5fremove',['ucx_map_int_remove',['../map_8h.html#aa767958b5468737755c09f7185b1770c',1,'map.h']]], 119.39 + ['ucx_5fmap_5fsstr_5fget',['ucx_map_sstr_get',['../map_8h.html#a14d385f6b7f371f0507861cabd2eab4e',1,'map.h']]], 119.40 + ['ucx_5fmap_5fsstr_5fput',['ucx_map_sstr_put',['../map_8h.html#ac26a8615bfc8f47ee9eaceb47645f98e',1,'map.h']]], 119.41 + ['ucx_5fmap_5fsstr_5fremove',['ucx_map_sstr_remove',['../map_8h.html#a48700ea86fadb9ea54d13010f9124df2',1,'map.h']]], 119.42 + ['ucx_5fmempool_5fnew_5fdefault',['ucx_mempool_new_default',['../mempool_8h.html#a49f7bd1da5ac201d0cf54dc0f0d82dd2',1,'mempool.h']]], 119.43 + ['ucx_5fsprintf',['ucx_sprintf',['../utils_8h.html#af9f333b66ecd639c347c7235f4992e2e',1,'utils.h']]], 119.44 + ['ucx_5fstack_5fdim',['ucx_stack_dim',['../stack_8h.html#a3b761343c6491222604341ebfa443226',1,'stack.h']]], 119.45 + ['ucx_5fstack_5fempty',['ucx_stack_empty',['../stack_8h.html#a4f7239dbd6c032c56812e370b71c1985',1,'stack.h']]], 119.46 + ['ucx_5fstack_5fpop',['ucx_stack_pop',['../stack_8h.html#a506b82374734ec476d086ddfb561174d',1,'stack.h']]], 119.47 + ['ucx_5fstack_5ftopsize',['ucx_stack_topsize',['../stack_8h.html#a030197051a803e87d5eeac5adb80b15a',1,'stack.h']]], 119.48 + ['ucx_5fstream_5fbcopy',['ucx_stream_bcopy',['../utils_8h.html#a6003a1750a66234169bd1f8cc84b297b',1,'utils.h']]], 119.49 + ['ucx_5fstream_5fcopy',['ucx_stream_copy',['../utils_8h.html#a41ca1344f781c0d3bf7a414a6e811392',1,'utils.h']]], 119.50 + ['ucx_5fstream_5fcopy_5fbufsize',['UCX_STREAM_COPY_BUFSIZE',['../utils_8h.html#a23efd74fa5f701d4cf26ccbfd138a439',1,'utils.h']]], 119.51 + ['ucx_5fstream_5fncopy',['ucx_stream_ncopy',['../utils_8h.html#add13f39a8af440b4f7e6f74339eaada2',1,'utils.h']]], 119.52 + ['ucx_5fszmul',['ucx_szmul',['../ucx_8h.html#a0b5ed6c1a0b15356f4f948acfd32a4cc',1,'ucx.h']]], 119.53 + ['ucx_5ftest',['UCX_TEST',['../test_8h.html#a66cfb29c329fc9eaef071f2449836659',1,'test.h']]], 119.54 + ['ucx_5ftest_5fassert',['UCX_TEST_ASSERT',['../test_8h.html#a08f477cd12fc3fe741a92493e5df58a9',1,'test.h']]], 119.55 + ['ucx_5ftest_5fbegin',['UCX_TEST_BEGIN',['../test_8h.html#a0547b8d4f3bcdb0633fdd8925e8aa5d4',1,'test.h']]], 119.56 + ['ucx_5ftest_5fcall_5fsubroutine',['UCX_TEST_CALL_SUBROUTINE',['../test_8h.html#a0efbab91c54f5237a2ab207f48cf0e51',1,'test.h']]], 119.57 + ['ucx_5ftest_5fend',['UCX_TEST_END',['../test_8h.html#a86e64857c04f0447f8b16fb9c2b3b639',1,'test.h']]], 119.58 + ['ucx_5ftest_5fsubroutine',['UCX_TEST_SUBROUTINE',['../test_8h.html#ae073cf5ead22cb27d662da048e16f44a',1,'test.h']]], 119.59 + ['ucx_5fversion',['UCX_VERSION',['../ucx_8h.html#af12001920ca2fc1405615684e4dea284',1,'ucx.h']]], 119.60 + ['ucx_5fversion_5fmajor',['UCX_VERSION_MAJOR',['../ucx_8h.html#aa57e5dd22d42387d748cc16777df1383',1,'ucx.h']]], 119.61 + ['ucx_5fversion_5fminor',['UCX_VERSION_MINOR',['../ucx_8h.html#a9ac10d6353e23d4615a87fc737c65eb0',1,'ucx.h']]] 119.62 +];
120.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 120.2 +++ b/docs/api-2.1/search/files_0.html Sat Feb 06 19:11:44 2021 +0100 120.3 @@ -0,0 +1,26 @@ 120.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 120.5 +<html><head><title></title> 120.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 120.7 +<meta name="generator" content="Doxygen 1.8.13"/> 120.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 120.9 +<script type="text/javascript" src="files_0.js"></script> 120.10 +<script type="text/javascript" src="search.js"></script> 120.11 +</head> 120.12 +<body class="SRPage"> 120.13 +<div id="SRIndex"> 120.14 +<div class="SRStatus" id="Loading">Loading...</div> 120.15 +<div id="SRResults"></div> 120.16 +<script type="text/javascript"><!-- 120.17 +createResults(); 120.18 +--></script> 120.19 +<div class="SRStatus" id="Searching">Searching...</div> 120.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 120.21 +<script type="text/javascript"><!-- 120.22 +document.getElementById("Loading").style.display="none"; 120.23 +document.getElementById("NoMatches").style.display="none"; 120.24 +var searchResults = new SearchResults("searchResults"); 120.25 +searchResults.Search(); 120.26 +--></script> 120.27 +</div> 120.28 +</body> 120.29 +</html>
121.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 121.2 +++ b/docs/api-2.1/search/files_0.js Sat Feb 06 19:11:44 2021 +0100 121.3 @@ -0,0 +1,6 @@ 121.4 +var searchData= 121.5 +[ 121.6 + ['allocator_2eh',['allocator.h',['../allocator_8h.html',1,'']]], 121.7 + ['array_2eh',['array.h',['../array_8h.html',1,'']]], 121.8 + ['avl_2eh',['avl.h',['../avl_8h.html',1,'']]] 121.9 +];
122.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 122.2 +++ b/docs/api-2.1/search/files_1.html Sat Feb 06 19:11:44 2021 +0100 122.3 @@ -0,0 +1,26 @@ 122.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 122.5 +<html><head><title></title> 122.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 122.7 +<meta name="generator" content="Doxygen 1.8.13"/> 122.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 122.9 +<script type="text/javascript" src="files_1.js"></script> 122.10 +<script type="text/javascript" src="search.js"></script> 122.11 +</head> 122.12 +<body class="SRPage"> 122.13 +<div id="SRIndex"> 122.14 +<div class="SRStatus" id="Loading">Loading...</div> 122.15 +<div id="SRResults"></div> 122.16 +<script type="text/javascript"><!-- 122.17 +createResults(); 122.18 +--></script> 122.19 +<div class="SRStatus" id="Searching">Searching...</div> 122.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 122.21 +<script type="text/javascript"><!-- 122.22 +document.getElementById("Loading").style.display="none"; 122.23 +document.getElementById("NoMatches").style.display="none"; 122.24 +var searchResults = new SearchResults("searchResults"); 122.25 +searchResults.Search(); 122.26 +--></script> 122.27 +</div> 122.28 +</body> 122.29 +</html>
123.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 123.2 +++ b/docs/api-2.1/search/files_1.js Sat Feb 06 19:11:44 2021 +0100 123.3 @@ -0,0 +1,4 @@ 123.4 +var searchData= 123.5 +[ 123.6 + ['buffer_2eh',['buffer.h',['../buffer_8h.html',1,'']]] 123.7 +];
124.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 124.2 +++ b/docs/api-2.1/search/files_2.html Sat Feb 06 19:11:44 2021 +0100 124.3 @@ -0,0 +1,26 @@ 124.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 124.5 +<html><head><title></title> 124.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 124.7 +<meta name="generator" content="Doxygen 1.8.13"/> 124.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 124.9 +<script type="text/javascript" src="files_2.js"></script> 124.10 +<script type="text/javascript" src="search.js"></script> 124.11 +</head> 124.12 +<body class="SRPage"> 124.13 +<div id="SRIndex"> 124.14 +<div class="SRStatus" id="Loading">Loading...</div> 124.15 +<div id="SRResults"></div> 124.16 +<script type="text/javascript"><!-- 124.17 +createResults(); 124.18 +--></script> 124.19 +<div class="SRStatus" id="Searching">Searching...</div> 124.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 124.21 +<script type="text/javascript"><!-- 124.22 +document.getElementById("Loading").style.display="none"; 124.23 +document.getElementById("NoMatches").style.display="none"; 124.24 +var searchResults = new SearchResults("searchResults"); 124.25 +searchResults.Search(); 124.26 +--></script> 124.27 +</div> 124.28 +</body> 124.29 +</html>
125.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 125.2 +++ b/docs/api-2.1/search/files_2.js Sat Feb 06 19:11:44 2021 +0100 125.3 @@ -0,0 +1,5 @@ 125.4 +var searchData= 125.5 +[ 125.6 + ['list_2eh',['list.h',['../list_8h.html',1,'']]], 125.7 + ['logging_2eh',['logging.h',['../logging_8h.html',1,'']]] 125.8 +];
126.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 126.2 +++ b/docs/api-2.1/search/files_3.html Sat Feb 06 19:11:44 2021 +0100 126.3 @@ -0,0 +1,26 @@ 126.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 126.5 +<html><head><title></title> 126.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 126.7 +<meta name="generator" content="Doxygen 1.8.13"/> 126.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 126.9 +<script type="text/javascript" src="files_3.js"></script> 126.10 +<script type="text/javascript" src="search.js"></script> 126.11 +</head> 126.12 +<body class="SRPage"> 126.13 +<div id="SRIndex"> 126.14 +<div class="SRStatus" id="Loading">Loading...</div> 126.15 +<div id="SRResults"></div> 126.16 +<script type="text/javascript"><!-- 126.17 +createResults(); 126.18 +--></script> 126.19 +<div class="SRStatus" id="Searching">Searching...</div> 126.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 126.21 +<script type="text/javascript"><!-- 126.22 +document.getElementById("Loading").style.display="none"; 126.23 +document.getElementById("NoMatches").style.display="none"; 126.24 +var searchResults = new SearchResults("searchResults"); 126.25 +searchResults.Search(); 126.26 +--></script> 126.27 +</div> 126.28 +</body> 126.29 +</html>
127.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 127.2 +++ b/docs/api-2.1/search/files_3.js Sat Feb 06 19:11:44 2021 +0100 127.3 @@ -0,0 +1,5 @@ 127.4 +var searchData= 127.5 +[ 127.6 + ['map_2eh',['map.h',['../map_8h.html',1,'']]], 127.7 + ['mempool_2eh',['mempool.h',['../mempool_8h.html',1,'']]] 127.8 +];
128.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 128.2 +++ b/docs/api-2.1/search/files_4.html Sat Feb 06 19:11:44 2021 +0100 128.3 @@ -0,0 +1,26 @@ 128.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 128.5 +<html><head><title></title> 128.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 128.7 +<meta name="generator" content="Doxygen 1.8.13"/> 128.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 128.9 +<script type="text/javascript" src="files_4.js"></script> 128.10 +<script type="text/javascript" src="search.js"></script> 128.11 +</head> 128.12 +<body class="SRPage"> 128.13 +<div id="SRIndex"> 128.14 +<div class="SRStatus" id="Loading">Loading...</div> 128.15 +<div id="SRResults"></div> 128.16 +<script type="text/javascript"><!-- 128.17 +createResults(); 128.18 +--></script> 128.19 +<div class="SRStatus" id="Searching">Searching...</div> 128.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 128.21 +<script type="text/javascript"><!-- 128.22 +document.getElementById("Loading").style.display="none"; 128.23 +document.getElementById("NoMatches").style.display="none"; 128.24 +var searchResults = new SearchResults("searchResults"); 128.25 +searchResults.Search(); 128.26 +--></script> 128.27 +</div> 128.28 +</body> 128.29 +</html>
129.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 129.2 +++ b/docs/api-2.1/search/files_4.js Sat Feb 06 19:11:44 2021 +0100 129.3 @@ -0,0 +1,4 @@ 129.4 +var searchData= 129.5 +[ 129.6 + ['properties_2eh',['properties.h',['../properties_8h.html',1,'']]] 129.7 +];
130.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 130.2 +++ b/docs/api-2.1/search/files_5.html Sat Feb 06 19:11:44 2021 +0100 130.3 @@ -0,0 +1,26 @@ 130.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 130.5 +<html><head><title></title> 130.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 130.7 +<meta name="generator" content="Doxygen 1.8.13"/> 130.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 130.9 +<script type="text/javascript" src="files_5.js"></script> 130.10 +<script type="text/javascript" src="search.js"></script> 130.11 +</head> 130.12 +<body class="SRPage"> 130.13 +<div id="SRIndex"> 130.14 +<div class="SRStatus" id="Loading">Loading...</div> 130.15 +<div id="SRResults"></div> 130.16 +<script type="text/javascript"><!-- 130.17 +createResults(); 130.18 +--></script> 130.19 +<div class="SRStatus" id="Searching">Searching...</div> 130.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 130.21 +<script type="text/javascript"><!-- 130.22 +document.getElementById("Loading").style.display="none"; 130.23 +document.getElementById("NoMatches").style.display="none"; 130.24 +var searchResults = new SearchResults("searchResults"); 130.25 +searchResults.Search(); 130.26 +--></script> 130.27 +</div> 130.28 +</body> 130.29 +</html>
131.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 131.2 +++ b/docs/api-2.1/search/files_5.js Sat Feb 06 19:11:44 2021 +0100 131.3 @@ -0,0 +1,5 @@ 131.4 +var searchData= 131.5 +[ 131.6 + ['stack_2eh',['stack.h',['../stack_8h.html',1,'']]], 131.7 + ['string_2eh',['string.h',['../string_8h.html',1,'']]] 131.8 +];
132.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 132.2 +++ b/docs/api-2.1/search/files_6.html Sat Feb 06 19:11:44 2021 +0100 132.3 @@ -0,0 +1,26 @@ 132.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 132.5 +<html><head><title></title> 132.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 132.7 +<meta name="generator" content="Doxygen 1.8.13"/> 132.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 132.9 +<script type="text/javascript" src="files_6.js"></script> 132.10 +<script type="text/javascript" src="search.js"></script> 132.11 +</head> 132.12 +<body class="SRPage"> 132.13 +<div id="SRIndex"> 132.14 +<div class="SRStatus" id="Loading">Loading...</div> 132.15 +<div id="SRResults"></div> 132.16 +<script type="text/javascript"><!-- 132.17 +createResults(); 132.18 +--></script> 132.19 +<div class="SRStatus" id="Searching">Searching...</div> 132.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 132.21 +<script type="text/javascript"><!-- 132.22 +document.getElementById("Loading").style.display="none"; 132.23 +document.getElementById("NoMatches").style.display="none"; 132.24 +var searchResults = new SearchResults("searchResults"); 132.25 +searchResults.Search(); 132.26 +--></script> 132.27 +</div> 132.28 +</body> 132.29 +</html>
133.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 133.2 +++ b/docs/api-2.1/search/files_6.js Sat Feb 06 19:11:44 2021 +0100 133.3 @@ -0,0 +1,4 @@ 133.4 +var searchData= 133.5 +[ 133.6 + ['test_2eh',['test.h',['../test_8h.html',1,'']]] 133.7 +];
134.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 134.2 +++ b/docs/api-2.1/search/files_7.html Sat Feb 06 19:11:44 2021 +0100 134.3 @@ -0,0 +1,26 @@ 134.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 134.5 +<html><head><title></title> 134.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 134.7 +<meta name="generator" content="Doxygen 1.8.13"/> 134.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 134.9 +<script type="text/javascript" src="files_7.js"></script> 134.10 +<script type="text/javascript" src="search.js"></script> 134.11 +</head> 134.12 +<body class="SRPage"> 134.13 +<div id="SRIndex"> 134.14 +<div class="SRStatus" id="Loading">Loading...</div> 134.15 +<div id="SRResults"></div> 134.16 +<script type="text/javascript"><!-- 134.17 +createResults(); 134.18 +--></script> 134.19 +<div class="SRStatus" id="Searching">Searching...</div> 134.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 134.21 +<script type="text/javascript"><!-- 134.22 +document.getElementById("Loading").style.display="none"; 134.23 +document.getElementById("NoMatches").style.display="none"; 134.24 +var searchResults = new SearchResults("searchResults"); 134.25 +searchResults.Search(); 134.26 +--></script> 134.27 +</div> 134.28 +</body> 134.29 +</html>
135.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 135.2 +++ b/docs/api-2.1/search/files_7.js Sat Feb 06 19:11:44 2021 +0100 135.3 @@ -0,0 +1,5 @@ 135.4 +var searchData= 135.5 +[ 135.6 + ['ucx_2eh',['ucx.h',['../ucx_8h.html',1,'']]], 135.7 + ['utils_2eh',['utils.h',['../utils_8h.html',1,'']]] 135.8 +];
136.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 136.2 +++ b/docs/api-2.1/search/functions_0.html Sat Feb 06 19:11:44 2021 +0100 136.3 @@ -0,0 +1,26 @@ 136.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 136.5 +<html><head><title></title> 136.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 136.7 +<meta name="generator" content="Doxygen 1.8.13"/> 136.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 136.9 +<script type="text/javascript" src="functions_0.js"></script> 136.10 +<script type="text/javascript" src="search.js"></script> 136.11 +</head> 136.12 +<body class="SRPage"> 136.13 +<div id="SRIndex"> 136.14 +<div class="SRStatus" id="Loading">Loading...</div> 136.15 +<div id="SRResults"></div> 136.16 +<script type="text/javascript"><!-- 136.17 +createResults(); 136.18 +--></script> 136.19 +<div class="SRStatus" id="Searching">Searching...</div> 136.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 136.21 +<script type="text/javascript"><!-- 136.22 +document.getElementById("Loading").style.display="none"; 136.23 +document.getElementById("NoMatches").style.display="none"; 136.24 +var searchResults = new SearchResults("searchResults"); 136.25 +searchResults.Search(); 136.26 +--></script> 136.27 +</div> 136.28 +</body> 136.29 +</html>
137.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 137.2 +++ b/docs/api-2.1/search/functions_0.js Sat Feb 06 19:11:44 2021 +0100 137.3 @@ -0,0 +1,36 @@ 137.4 +var searchData= 137.5 +[ 137.6 + ['scstr',['scstr',['../string_8h.html#a2b1d6f1eca1c1549f37107b9c026c5a6',1,'string.c']]], 137.7 + ['scstrcasecmp',['scstrcasecmp',['../string_8h.html#aca8142fb823d253054e17c17cfca05e0',1,'string.c']]], 137.8 + ['scstrcaseprefix',['scstrcaseprefix',['../string_8h.html#a3718ef4aa1e86cdb26bda2f07fb585df',1,'string.c']]], 137.9 + ['scstrcasesuffix',['scstrcasesuffix',['../string_8h.html#a6edb4b85f2b9efe79db7ffe6eccd7bc3',1,'string.c']]], 137.10 + ['scstrcat',['scstrcat',['../string_8h.html#a7376842c19e954b49215da81ef76ac0c',1,'string.c']]], 137.11 + ['scstrcat_5fa',['scstrcat_a',['../string_8h.html#abacce4cbd6f70fcb6453904ef08b02e9',1,'string.c']]], 137.12 + ['scstrchr',['scstrchr',['../string_8h.html#a5836d6a7a744791c35e5c17bdc394a87',1,'string.c']]], 137.13 + ['scstrcmp',['scstrcmp',['../string_8h.html#af35272a8e5408c88ed3e25a3a98f0a82',1,'string.c']]], 137.14 + ['scstrdup',['scstrdup',['../string_8h.html#a97dccce03af419596dbdd592ca46a164',1,'string.c']]], 137.15 + ['scstrdup_5fa',['scstrdup_a',['../string_8h.html#a8fe58921f51eb1fde038472377e63014',1,'string.c']]], 137.16 + ['scstrlower',['scstrlower',['../string_8h.html#abccf198bea3186ff2abb080cc88dcae6',1,'string.c']]], 137.17 + ['scstrlower_5fa',['scstrlower_a',['../string_8h.html#a3cf1e557df7ab58d03c78832c4060276',1,'string.c']]], 137.18 + ['scstrn',['scstrn',['../string_8h.html#ae594f6e222ea394cef6a26c0dfad000d',1,'string.c']]], 137.19 + ['scstrnlen',['scstrnlen',['../string_8h.html#ac1b000030d6d197eec48c15a182055d5',1,'string.c']]], 137.20 + ['scstrprefix',['scstrprefix',['../string_8h.html#a599ddc2f88dd1df68b72eefd91347393',1,'string.c']]], 137.21 + ['scstrrchr',['scstrrchr',['../string_8h.html#ae389835b97cd9382e7d6a6a075323376',1,'string.c']]], 137.22 + ['scstrscstr',['scstrscstr',['../string_8h.html#a54f256c3abe811c52d58b4ff1b23f051',1,'string.c']]], 137.23 + ['scstrsplit',['scstrsplit',['../string_8h.html#ae71cac352b00230848bde358f0fb05ea',1,'string.c']]], 137.24 + ['scstrsplit_5fa',['scstrsplit_a',['../string_8h.html#a52906455ae530c9cdc6812c8e6d9bdef',1,'string.c']]], 137.25 + ['scstrsstr',['scstrsstr',['../string_8h.html#aa4362cb36c6629f9d8484739fd827748',1,'string.c']]], 137.26 + ['scstrsubs',['scstrsubs',['../string_8h.html#a9a6c8d8db0dda0037c3c852cce1a5060',1,'string.c']]], 137.27 + ['scstrsubsl',['scstrsubsl',['../string_8h.html#ad50f0f67b906fad0744f46bcb51e144b',1,'string.c']]], 137.28 + ['scstrsuffix',['scstrsuffix',['../string_8h.html#a1f0ae316a2afe85d5b4655e6ece6721a',1,'string.c']]], 137.29 + ['scstrtrim',['scstrtrim',['../string_8h.html#ad374b16eb1be8b48019debad9b9f268c',1,'string.c']]], 137.30 + ['scstrupper',['scstrupper',['../string_8h.html#af3dd09ec9d11162fe0075f4e60f41240',1,'string.c']]], 137.31 + ['scstrupper_5fa',['scstrupper_a',['../string_8h.html#aea94613eb74668cc05d365803d32bfad',1,'string.c']]], 137.32 + ['sstr',['sstr',['../string_8h.html#a539eb7059251a051ee5d179526a23e9a',1,'string.c']]], 137.33 + ['sstrchr',['sstrchr',['../string_8h.html#af80898a0b75955eb2579298c3ae2c481',1,'string.c']]], 137.34 + ['sstrn',['sstrn',['../string_8h.html#a2744c38ac44abf3e01fa059056dcf36c',1,'string.c']]], 137.35 + ['sstrrchr',['sstrrchr',['../string_8h.html#adae3f59957ca328e1da5285cb8b02a72',1,'string.c']]], 137.36 + ['sstrsubs',['sstrsubs',['../string_8h.html#a5eb9e0e1f26cf7fbecc038cd90e8b258',1,'string.c']]], 137.37 + ['sstrsubsl',['sstrsubsl',['../string_8h.html#a78925c91af54f23cebd20ff99ef4331a',1,'string.c']]], 137.38 + ['sstrtrim',['sstrtrim',['../string_8h.html#ae2d6da564d3fce51f2e0cac580fdbc56',1,'string.c']]] 137.39 +];
138.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 138.2 +++ b/docs/api-2.1/search/functions_1.html Sat Feb 06 19:11:44 2021 +0100 138.3 @@ -0,0 +1,26 @@ 138.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 138.5 +<html><head><title></title> 138.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 138.7 +<meta name="generator" content="Doxygen 1.8.13"/> 138.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 138.9 +<script type="text/javascript" src="functions_1.js"></script> 138.10 +<script type="text/javascript" src="search.js"></script> 138.11 +</head> 138.12 +<body class="SRPage"> 138.13 +<div id="SRIndex"> 138.14 +<div class="SRStatus" id="Loading">Loading...</div> 138.15 +<div id="SRResults"></div> 138.16 +<script type="text/javascript"><!-- 138.17 +createResults(); 138.18 +--></script> 138.19 +<div class="SRStatus" id="Searching">Searching...</div> 138.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 138.21 +<script type="text/javascript"><!-- 138.22 +document.getElementById("Loading").style.display="none"; 138.23 +document.getElementById("NoMatches").style.display="none"; 138.24 +var searchResults = new SearchResults("searchResults"); 138.25 +searchResults.Search(); 138.26 +--></script> 138.27 +</div> 138.28 +</body> 138.29 +</html>
139.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 139.2 +++ b/docs/api-2.1/search/functions_1.js Sat Feb 06 19:11:44 2021 +0100 139.3 @@ -0,0 +1,185 @@ 139.4 +var searchData= 139.5 +[ 139.6 + ['ucx_5farray_5fappend_5ffrom',['ucx_array_append_from',['../array_8h.html#aea01731ad94ea73c0c8fb1d1b7a35fcf',1,'array.c']]], 139.7 + ['ucx_5farray_5fat',['ucx_array_at',['../array_8h.html#aa698085fd1a8b70d6b709999c51b49e8',1,'array.c']]], 139.8 + ['ucx_5farray_5fclone',['ucx_array_clone',['../array_8h.html#a4a8c273370e4a3a3e2624e364f5ab410',1,'array.c']]], 139.9 + ['ucx_5farray_5fconcat',['ucx_array_concat',['../array_8h.html#aa5a0bf3d3f0df6406beb0e569021cc28',1,'array.c']]], 139.10 + ['ucx_5farray_5fcontains',['ucx_array_contains',['../array_8h.html#a5241058cd2329147bc5b1593ae7e51dc',1,'array.c']]], 139.11 + ['ucx_5farray_5fdestroy',['ucx_array_destroy',['../array_8h.html#a8e83681d8d5d8cddbf10f63ce5be4c10',1,'array.c']]], 139.12 + ['ucx_5farray_5fequals',['ucx_array_equals',['../array_8h.html#a43292b448adb1741677aa8c578bcc201',1,'array.c']]], 139.13 + ['ucx_5farray_5ffind',['ucx_array_find',['../array_8h.html#ae7bdbed94afee9b20b38b95e3ab470f0',1,'array.c']]], 139.14 + ['ucx_5farray_5ffree',['ucx_array_free',['../array_8h.html#ac01ee914468a16f470bf3071fffbe438',1,'array.c']]], 139.15 + ['ucx_5farray_5fgrow',['ucx_array_grow',['../array_8h.html#ab0cbf243824aaebee48277315e03afce',1,'array.c']]], 139.16 + ['ucx_5farray_5finit',['ucx_array_init',['../array_8h.html#ad921e85c28ffae32230777a53c5037e5',1,'array.c']]], 139.17 + ['ucx_5farray_5finit_5fa',['ucx_array_init_a',['../array_8h.html#a2451e61ebb15a7ba1c1319267ba75b8c',1,'array.c']]], 139.18 + ['ucx_5farray_5fnew',['ucx_array_new',['../array_8h.html#a994a2fbf1c33a3833e2a70cd9a4352b7',1,'array.c']]], 139.19 + ['ucx_5farray_5fnew_5fa',['ucx_array_new_a',['../array_8h.html#a177170258c215eb2e4f5a32e59f0cb1b',1,'array.c']]], 139.20 + ['ucx_5farray_5fprepend_5ffrom',['ucx_array_prepend_from',['../array_8h.html#a95b52acc2193b5c33cf0eaa4f2082477',1,'array.c']]], 139.21 + ['ucx_5farray_5fremove',['ucx_array_remove',['../array_8h.html#aa45eac6b697f83adac81c0860cf306b8',1,'array.c']]], 139.22 + ['ucx_5farray_5fremove_5ffast',['ucx_array_remove_fast',['../array_8h.html#a548d81b07612bae3ba8c4c4b49104b8e',1,'array.c']]], 139.23 + ['ucx_5farray_5freserve',['ucx_array_reserve',['../array_8h.html#a1c3bf8433c1de3c933f3854ab297fe1d',1,'array.c']]], 139.24 + ['ucx_5farray_5fresize',['ucx_array_resize',['../array_8h.html#a27762e7c06a6c781015e3c8ceeee0ce3',1,'array.c']]], 139.25 + ['ucx_5farray_5fset_5ffrom',['ucx_array_set_from',['../array_8h.html#a1bb545d065358d265d80d815ba382a28',1,'array.c']]], 139.26 + ['ucx_5farray_5fshrink',['ucx_array_shrink',['../array_8h.html#a2daf50e80aee9bccebee876a7efd2dfc',1,'array.c']]], 139.27 + ['ucx_5farray_5fsort',['ucx_array_sort',['../array_8h.html#add773514569b872a6624381b4b6af52c',1,'array.c']]], 139.28 + ['ucx_5farray_5futil_5fset_5fa',['ucx_array_util_set_a',['../array_8h.html#ad0a8d76980cf1c1910e64a245803fb9a',1,'array.c']]], 139.29 + ['ucx_5farray_5futil_5fsetptr_5fa',['ucx_array_util_setptr_a',['../array_8h.html#ad708b333c0c1b02c998309a58ea65e31',1,'array.c']]], 139.30 + ['ucx_5fasprintf',['ucx_asprintf',['../utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5',1,'utils.c']]], 139.31 + ['ucx_5favl_5fcount',['ucx_avl_count',['../avl_8h.html#a92c1d41c2b22fe4a029a486ab2153e35',1,'avl.c']]], 139.32 + ['ucx_5favl_5ffind',['ucx_avl_find',['../avl_8h.html#a51770e1614b28d7d22dea096c3704f83',1,'avl.c']]], 139.33 + ['ucx_5favl_5ffind_5fnode',['ucx_avl_find_node',['../avl_8h.html#a664986f64d6865605199fbff06e19cd5',1,'avl.c']]], 139.34 + ['ucx_5favl_5ffree',['ucx_avl_free',['../avl_8h.html#a2f92db538f25fce908d2cb3e5590944c',1,'avl.c']]], 139.35 + ['ucx_5favl_5ffree_5fcontent',['ucx_avl_free_content',['../avl_8h.html#a31ad7fb196ca211f1fc39f4e15f72279',1,'avl.c']]], 139.36 + ['ucx_5favl_5fget',['ucx_avl_get',['../avl_8h.html#adbcf7ceb3f014a30c7214f7304519efe',1,'avl.c']]], 139.37 + ['ucx_5favl_5fget_5fnode',['ucx_avl_get_node',['../avl_8h.html#acf42da9a4168e47dc10b4ba0d27ceb4e',1,'avl.c']]], 139.38 + ['ucx_5favl_5fnew',['ucx_avl_new',['../avl_8h.html#a11b043d65a11b7092d5d98b298e5ede3',1,'avl.c']]], 139.39 + ['ucx_5favl_5fnew_5fa',['ucx_avl_new_a',['../avl_8h.html#af0f868d67e9dc08b4867c02a06c23ee2',1,'avl.c']]], 139.40 + ['ucx_5favl_5fpred',['ucx_avl_pred',['../avl_8h.html#a0e739aeb66dda6a6a3f6eb51b50cf346',1,'avl.c']]], 139.41 + ['ucx_5favl_5fput',['ucx_avl_put',['../avl_8h.html#aec401fab4a24a7edffa734f9baf88577',1,'avl.c']]], 139.42 + ['ucx_5favl_5fput_5fs',['ucx_avl_put_s',['../avl_8h.html#a32cf8955cc0226a82bacfc7b76d6474c',1,'avl.c']]], 139.43 + ['ucx_5favl_5fremove',['ucx_avl_remove',['../avl_8h.html#a1d821119c805d7fbb7e424bc3effeba9',1,'avl.c']]], 139.44 + ['ucx_5favl_5fremove_5fnode',['ucx_avl_remove_node',['../avl_8h.html#a9a792b7d9e58073deef74a341f8bc720',1,'avl.c']]], 139.45 + ['ucx_5favl_5fremove_5fs',['ucx_avl_remove_s',['../avl_8h.html#a01aeeecd6415f0cc2b623486eb28f254',1,'avl.c']]], 139.46 + ['ucx_5favl_5fsucc',['ucx_avl_succ',['../avl_8h.html#aab1ad9b027ff5e50671aa0ee84e2d541',1,'avl.c']]], 139.47 + ['ucx_5fbuffer_5feof',['ucx_buffer_eof',['../buffer_8h.html#abad7fd9ad5061224c780b8d1d4c55f09',1,'buffer.c']]], 139.48 + ['ucx_5fbuffer_5fextend',['ucx_buffer_extend',['../buffer_8h.html#afaf97d2cd7e9faad79a9d35fe33e30c6',1,'buffer.c']]], 139.49 + ['ucx_5fbuffer_5fextract',['ucx_buffer_extract',['../buffer_8h.html#a33fa7bb35fe08bbb3542f227514332ef',1,'buffer.c']]], 139.50 + ['ucx_5fbuffer_5ffree',['ucx_buffer_free',['../buffer_8h.html#a2af8646d8905c22c7322e7540b0440af',1,'buffer.c']]], 139.51 + ['ucx_5fbuffer_5fgetc',['ucx_buffer_getc',['../buffer_8h.html#a396339022159ce4ca6d069de9f9209b0',1,'buffer.c']]], 139.52 + ['ucx_5fbuffer_5fnew',['ucx_buffer_new',['../buffer_8h.html#aacea876d692193ec6f859ce98da7351c',1,'buffer.c']]], 139.53 + ['ucx_5fbuffer_5fputc',['ucx_buffer_putc',['../buffer_8h.html#a7d6f01b9d631b0123475dfb98fb849ac',1,'buffer.c']]], 139.54 + ['ucx_5fbuffer_5fputs',['ucx_buffer_puts',['../buffer_8h.html#af1d4b478e04b3ae0bf30e7c2ea964ea2',1,'buffer.c']]], 139.55 + ['ucx_5fbuffer_5fread',['ucx_buffer_read',['../buffer_8h.html#ae5c3430759f0059547b35d5a254d4da5',1,'buffer.c']]], 139.56 + ['ucx_5fbuffer_5fseek',['ucx_buffer_seek',['../buffer_8h.html#a47d98482662073c74f35deb0957d15d1',1,'buffer.c']]], 139.57 + ['ucx_5fbuffer_5fshift',['ucx_buffer_shift',['../buffer_8h.html#a12a0c6a2379ef080043e6286bb8bad69',1,'buffer.c']]], 139.58 + ['ucx_5fbuffer_5fshift_5fleft',['ucx_buffer_shift_left',['../buffer_8h.html#a20431dd0ed6a6fe9f15333bd72afe4db',1,'buffer.c']]], 139.59 + ['ucx_5fbuffer_5fshift_5fright',['ucx_buffer_shift_right',['../buffer_8h.html#a4fa10b6471495547eb981248fd4f1bc2',1,'buffer.c']]], 139.60 + ['ucx_5fbuffer_5fwrite',['ucx_buffer_write',['../buffer_8h.html#af8aacc7401814392b58c1b7b81bffc05',1,'buffer.c']]], 139.61 + ['ucx_5fcmp_5fdouble',['ucx_cmp_double',['../utils_8h.html#ab804b7c27d0bfcd7bf3a3583140825b6',1,'utils.c']]], 139.62 + ['ucx_5fcmp_5ffloat',['ucx_cmp_float',['../utils_8h.html#ad1196b561bcdad76c393885819769a97',1,'utils.c']]], 139.63 + ['ucx_5fcmp_5fint',['ucx_cmp_int',['../utils_8h.html#a8ce7e11e6b3deafe89a32a091fde7f16',1,'utils.c']]], 139.64 + ['ucx_5fcmp_5fint16',['ucx_cmp_int16',['../utils_8h.html#aa29e6e559946375e34113e34e0b0bd0d',1,'utils.c']]], 139.65 + ['ucx_5fcmp_5fint32',['ucx_cmp_int32',['../utils_8h.html#a858b2ac443fb202643b71f6a7e9218dd',1,'utils.c']]], 139.66 + ['ucx_5fcmp_5fint64',['ucx_cmp_int64',['../utils_8h.html#a54701aea6a89fed1402dfb0bf56bc7f6',1,'utils.c']]], 139.67 + ['ucx_5fcmp_5flongint',['ucx_cmp_longint',['../utils_8h.html#aeb57a2b9a6aaa0460c7a6bec29accf2c',1,'utils.c']]], 139.68 + ['ucx_5fcmp_5flonglong',['ucx_cmp_longlong',['../utils_8h.html#a366b57def20f86a41eaedf575eea5375',1,'utils.c']]], 139.69 + ['ucx_5fcmp_5fmem',['ucx_cmp_mem',['../utils_8h.html#aff7d2bcded71196831a8c0664333f8e7',1,'utils.c']]], 139.70 + ['ucx_5fcmp_5fptr',['ucx_cmp_ptr',['../utils_8h.html#aa174d539de3ea59be4f9640f17ce53d8',1,'utils.c']]], 139.71 + ['ucx_5fcmp_5fsstr',['ucx_cmp_sstr',['../utils_8h.html#adee0739589166d272f8cb7c23aabf8ba',1,'utils.c']]], 139.72 + ['ucx_5fcmp_5fstr',['ucx_cmp_str',['../utils_8h.html#aa6a37b9d172b6a5b2803d152f9e1b258',1,'utils.c']]], 139.73 + ['ucx_5fcmp_5fstrn',['ucx_cmp_strn',['../utils_8h.html#ac6b354a878f551a3a5b20a167db3f308',1,'utils.c']]], 139.74 + ['ucx_5fcmp_5fuint',['ucx_cmp_uint',['../utils_8h.html#abd83a5da91c3dd026a6931bd80c12f1e',1,'utils.c']]], 139.75 + ['ucx_5fcmp_5fuint16',['ucx_cmp_uint16',['../utils_8h.html#acde5366437e886a459b7468f7a9e11f0',1,'utils.c']]], 139.76 + ['ucx_5fcmp_5fuint32',['ucx_cmp_uint32',['../utils_8h.html#a5879d1722330355914d8c9146fa549d3',1,'utils.c']]], 139.77 + ['ucx_5fcmp_5fuint64',['ucx_cmp_uint64',['../utils_8h.html#a1572a78b5b42f7151a5b2a5a7283d62d',1,'utils.c']]], 139.78 + ['ucx_5fcmp_5fulongint',['ucx_cmp_ulongint',['../utils_8h.html#a3f3cbae2594d6f722bae29acb0408a24',1,'utils.c']]], 139.79 + ['ucx_5fcmp_5fulonglong',['ucx_cmp_ulonglong',['../utils_8h.html#a6acfc359421f21f9a042a654ff7faac5',1,'utils.c']]], 139.80 + ['ucx_5fdefault_5fallocator',['ucx_default_allocator',['../allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf',1,'allocator.c']]], 139.81 + ['ucx_5fdefault_5fcalloc',['ucx_default_calloc',['../allocator_8h.html#a3a0bfdd13d887012309c459b339f338f',1,'allocator.c']]], 139.82 + ['ucx_5fdefault_5ffree',['ucx_default_free',['../allocator_8h.html#a646d83aaaadfe33ae414c0fad8bfc52a',1,'allocator.c']]], 139.83 + ['ucx_5fdefault_5fmalloc',['ucx_default_malloc',['../allocator_8h.html#a96403ebf3d2312d95f2fe7627a1cdbc0',1,'allocator.c']]], 139.84 + ['ucx_5fdefault_5frealloc',['ucx_default_realloc',['../allocator_8h.html#a47cfc8af626a86fcb93a2b14b90498ed',1,'allocator.c']]], 139.85 + ['ucx_5fdist_5fint',['ucx_dist_int',['../utils_8h.html#a4ab6753739d56c09cdf6079fdcabf7c6',1,'utils.c']]], 139.86 + ['ucx_5fdist_5fint16',['ucx_dist_int16',['../utils_8h.html#a81fb8434b70ca11bf2c14abfa21d16a9',1,'utils.c']]], 139.87 + ['ucx_5fdist_5fint32',['ucx_dist_int32',['../utils_8h.html#ab4a659cc46096f0490c1dafa57726476',1,'utils.c']]], 139.88 + ['ucx_5fdist_5fint64',['ucx_dist_int64',['../utils_8h.html#a54e7d06585bad3a899befc4e9c13853f',1,'utils.c']]], 139.89 + ['ucx_5fdist_5flongint',['ucx_dist_longint',['../utils_8h.html#a43e73d288b1553a0078bf4c98dd341f5',1,'utils.c']]], 139.90 + ['ucx_5fdist_5flonglong',['ucx_dist_longlong',['../utils_8h.html#a306778414a2427951ea263be92368627',1,'utils.c']]], 139.91 + ['ucx_5fdist_5fuint',['ucx_dist_uint',['../utils_8h.html#a37b7d471ca1679992afc11a0deda45f4',1,'utils.c']]], 139.92 + ['ucx_5fdist_5fuint16',['ucx_dist_uint16',['../utils_8h.html#a66e00a0703cbcde050ec922578e2f080',1,'utils.c']]], 139.93 + ['ucx_5fdist_5fuint32',['ucx_dist_uint32',['../utils_8h.html#add2b5c5507caba59d894b84e056b079b',1,'utils.c']]], 139.94 + ['ucx_5fdist_5fuint64',['ucx_dist_uint64',['../utils_8h.html#a3ba75e2e0b2479eef2b22fb219b42da7',1,'utils.c']]], 139.95 + ['ucx_5fdist_5fulongint',['ucx_dist_ulongint',['../utils_8h.html#abb13476228d0c16bfaba08469adbae2d',1,'utils.c']]], 139.96 + ['ucx_5fdist_5fulonglong',['ucx_dist_ulonglong',['../utils_8h.html#a59a5859272cb4b43cbdd58208c41e32b',1,'utils.c']]], 139.97 + ['ucx_5ffprintf',['ucx_fprintf',['../utils_8h.html#aa0bec80e1c67f769ff5e112a7d4ce72a',1,'utils.c']]], 139.98 + ['ucx_5fhash',['ucx_hash',['../map_8h.html#aea3be97254c05595d986ef6a9faae87b',1,'map.c']]], 139.99 + ['ucx_5fkey',['ucx_key',['../map_8h.html#a3e540bb46b8ee19789aed63fd8919200',1,'map.c']]], 139.100 + ['ucx_5flist_5fappend',['ucx_list_append',['../list_8h.html#a00c122c8a26d35b60676939df4161621',1,'list.c']]], 139.101 + ['ucx_5flist_5fappend_5fa',['ucx_list_append_a',['../list_8h.html#adf3b3e2e0ff977d8928671d6bd82fc60',1,'list.c']]], 139.102 + ['ucx_5flist_5fclone',['ucx_list_clone',['../list_8h.html#ae7054a41c289b24e6caf5cb07ac850ed',1,'list.c']]], 139.103 + ['ucx_5flist_5fclone_5fa',['ucx_list_clone_a',['../list_8h.html#a08ca1ba0d2e82258b0408714c1f4c425',1,'list.c']]], 139.104 + ['ucx_5flist_5fconcat',['ucx_list_concat',['../list_8h.html#a77163a0cc82fae52bec26c8c0c3674d9',1,'list.c']]], 139.105 + ['ucx_5flist_5fcontains',['ucx_list_contains',['../list_8h.html#a8b0fa051fcfe12e1a82cca1087973852',1,'list.c']]], 139.106 + ['ucx_5flist_5fdifference',['ucx_list_difference',['../list_8h.html#a6c5db5d1d11ad28b6fe1a80ee1c1e449',1,'list.c']]], 139.107 + ['ucx_5flist_5fdifference_5fa',['ucx_list_difference_a',['../list_8h.html#a4a2a2fc5cc41073c516db6235bbc51d5',1,'list.c']]], 139.108 + ['ucx_5flist_5fequals',['ucx_list_equals',['../list_8h.html#adc435447cecf885bc63d232191085bbe',1,'list.c']]], 139.109 + ['ucx_5flist_5ffind',['ucx_list_find',['../list_8h.html#a9b3b6842d3be572e06a7f519e198cb83',1,'list.c']]], 139.110 + ['ucx_5flist_5ffirst',['ucx_list_first',['../list_8h.html#a6aa0e34ebc5f0dca6f52d0f7626b4bd5',1,'list.c']]], 139.111 + ['ucx_5flist_5ffree',['ucx_list_free',['../list_8h.html#a1a0fa2c5b1e478a96da19b0c3f013668',1,'list.c']]], 139.112 + ['ucx_5flist_5ffree_5fa',['ucx_list_free_a',['../list_8h.html#a944e11f76c38767cd1100d72a4e3b25b',1,'list.c']]], 139.113 + ['ucx_5flist_5ffree_5fcontent',['ucx_list_free_content',['../list_8h.html#a4ba6c96642f72ea046cc22627c72979c',1,'list.c']]], 139.114 + ['ucx_5flist_5fget',['ucx_list_get',['../list_8h.html#a2509ffe19bce6a8708c77f89480c75fb',1,'list.c']]], 139.115 + ['ucx_5flist_5findexof',['ucx_list_indexof',['../list_8h.html#ae2ff2974812ca185870f80bc4ed9337e',1,'list.c']]], 139.116 + ['ucx_5flist_5fintersection',['ucx_list_intersection',['../list_8h.html#a259f9b754978aeca23dfabba16e20f39',1,'list.c']]], 139.117 + ['ucx_5flist_5fintersection_5fa',['ucx_list_intersection_a',['../list_8h.html#a1d0b00514dbb81ba6270b58da0c5b9a8',1,'list.c']]], 139.118 + ['ucx_5flist_5flast',['ucx_list_last',['../list_8h.html#add5ec40c5006e29c629d23c2eb5a6553',1,'list.c']]], 139.119 + ['ucx_5flist_5fprepend',['ucx_list_prepend',['../list_8h.html#a8fcb68e4556395b15180eec2d0b77aa4',1,'list.c']]], 139.120 + ['ucx_5flist_5fprepend_5fa',['ucx_list_prepend_a',['../list_8h.html#a54654e6dc60e1c3de9e886c150e404ec',1,'list.c']]], 139.121 + ['ucx_5flist_5fremove',['ucx_list_remove',['../list_8h.html#a410cb3e8260037ba56c72d14b899b468',1,'list.c']]], 139.122 + ['ucx_5flist_5fremove_5fa',['ucx_list_remove_a',['../list_8h.html#aca687b7c4e7170175f447e549125aa52',1,'list.c']]], 139.123 + ['ucx_5flist_5fsize',['ucx_list_size',['../list_8h.html#ae88001cc8ae40b946560f31434abed8f',1,'list.c']]], 139.124 + ['ucx_5flist_5fsort',['ucx_list_sort',['../list_8h.html#ac74962d9bd7cfc9d3e2e09651469377b',1,'list.c']]], 139.125 + ['ucx_5flist_5funion',['ucx_list_union',['../list_8h.html#a94ecdb0cea1633ad7074f027fa8485fa',1,'list.c']]], 139.126 + ['ucx_5flist_5funion_5fa',['ucx_list_union_a',['../list_8h.html#a65b4355536f4ebc4130211b46469f4c1',1,'list.c']]], 139.127 + ['ucx_5flogger_5ffree',['ucx_logger_free',['../logging_8h.html#ac4697b784e01ec990d2acea192e21658',1,'logging.c']]], 139.128 + ['ucx_5flogger_5flogf',['ucx_logger_logf',['../logging_8h.html#ac337e5d02ebea565012d4c11bd643801',1,'logging.c']]], 139.129 + ['ucx_5flogger_5fnew',['ucx_logger_new',['../logging_8h.html#ac560f8517d2172794c9d2691735ec48c',1,'logging.c']]], 139.130 + ['ucx_5fmap_5fclear',['ucx_map_clear',['../map_8h.html#a285e90e40681c6d9631c935dda0967f2',1,'map.c']]], 139.131 + ['ucx_5fmap_5fclone',['ucx_map_clone',['../map_8h.html#a62c6c30cbb0d824ba710f5030ff9a4e4',1,'map.c']]], 139.132 + ['ucx_5fmap_5fclone_5fa',['ucx_map_clone_a',['../map_8h.html#a9aea9103703d5c168420bb6bf85549ea',1,'map.c']]], 139.133 + ['ucx_5fmap_5fcopy',['ucx_map_copy',['../map_8h.html#adfeb2d61003fd2896bcfdc9a57f36425',1,'map.c']]], 139.134 + ['ucx_5fmap_5fdifference',['ucx_map_difference',['../map_8h.html#a774fcff87d1e58b6c5af77dd19a8c3dc',1,'map.c']]], 139.135 + ['ucx_5fmap_5fdifference_5fa',['ucx_map_difference_a',['../map_8h.html#ad0ba103494247d798ac3037c50fc8831',1,'map.c']]], 139.136 + ['ucx_5fmap_5ffree',['ucx_map_free',['../map_8h.html#abe3d9688e4224bf7bb962abf25ff8c2e',1,'map.c']]], 139.137 + ['ucx_5fmap_5ffree_5fcontent',['ucx_map_free_content',['../map_8h.html#a750f3d9d83e2f3788a14c17a9d160618',1,'map.c']]], 139.138 + ['ucx_5fmap_5fget',['ucx_map_get',['../map_8h.html#ab61192c5af2e06ecb9ad73880d1c95a6',1,'map.c']]], 139.139 + ['ucx_5fmap_5fintersection',['ucx_map_intersection',['../map_8h.html#aa594d7a5afebc3bed6bb265348cf6b0d',1,'map.c']]], 139.140 + ['ucx_5fmap_5fintersection_5fa',['ucx_map_intersection_a',['../map_8h.html#a169e0470a20484dd76425fdf77e3651e',1,'map.c']]], 139.141 + ['ucx_5fmap_5fiter_5fnext',['ucx_map_iter_next',['../map_8h.html#aceb8675abf44860b4bbc301bbada5b91',1,'map.c']]], 139.142 + ['ucx_5fmap_5fiterator',['ucx_map_iterator',['../map_8h.html#a9150e9c64fdf4dfcc2cad106b91aa110',1,'map.c']]], 139.143 + ['ucx_5fmap_5fnew',['ucx_map_new',['../map_8h.html#a79f31de8b93814493759dbc8b940cf0c',1,'map.c']]], 139.144 + ['ucx_5fmap_5fnew_5fa',['ucx_map_new_a',['../map_8h.html#aed508a94c66cc15372503c64b70eb03e',1,'map.c']]], 139.145 + ['ucx_5fmap_5fput',['ucx_map_put',['../map_8h.html#ac04a08b604217070254d4c58f0e82498',1,'map.c']]], 139.146 + ['ucx_5fmap_5frehash',['ucx_map_rehash',['../map_8h.html#a174bce9fad554dd92b8da354e0d32512',1,'map.c']]], 139.147 + ['ucx_5fmap_5fremove',['ucx_map_remove',['../map_8h.html#a17248a4888eb8f9ae18be522d64632aa',1,'map.c']]], 139.148 + ['ucx_5fmap_5funion',['ucx_map_union',['../map_8h.html#a3f65978c481af7f637cad021d93522d5',1,'map.c']]], 139.149 + ['ucx_5fmap_5funion_5fa',['ucx_map_union_a',['../map_8h.html#ab6370c3fa8113fdad593ce4b0460c9c6',1,'map.c']]], 139.150 + ['ucx_5fmemcpy',['ucx_memcpy',['../utils_8h.html#ab2e184e6a744941aab6b8058116baf30',1,'utils.c']]], 139.151 + ['ucx_5fmempool_5fcalloc',['ucx_mempool_calloc',['../mempool_8h.html#a4b9142011824ae24f00fabe128417d69',1,'mempool.c']]], 139.152 + ['ucx_5fmempool_5fchcap',['ucx_mempool_chcap',['../mempool_8h.html#aaf75b5016098723a9280531ccc3a6d77',1,'mempool.c']]], 139.153 + ['ucx_5fmempool_5fdestroy',['ucx_mempool_destroy',['../mempool_8h.html#af096378da7e9bfbed3088497cf4c15bf',1,'mempool.c']]], 139.154 + ['ucx_5fmempool_5ffree',['ucx_mempool_free',['../mempool_8h.html#aefa26e3015f5aefadbfc74221bd246ac',1,'mempool.c']]], 139.155 + ['ucx_5fmempool_5fmalloc',['ucx_mempool_malloc',['../mempool_8h.html#a2ae492b8f2878ccc9837ac213dced11e',1,'mempool.c']]], 139.156 + ['ucx_5fmempool_5fnew',['ucx_mempool_new',['../mempool_8h.html#ad71cb8c3b6fdb30360376a8b372ef22a',1,'mempool.c']]], 139.157 + ['ucx_5fmempool_5frealloc',['ucx_mempool_realloc',['../mempool_8h.html#a660ef42520ed6737c2e77aae18e3a7a4',1,'mempool.c']]], 139.158 + ['ucx_5fmempool_5freg_5fdestr',['ucx_mempool_reg_destr',['../mempool_8h.html#af47b6b7c40f8f263dc28cc9a4e77b27c',1,'mempool.c']]], 139.159 + ['ucx_5fmempool_5fset_5fdestr',['ucx_mempool_set_destr',['../mempool_8h.html#adb788e7ec24cd7dbdea6381539c549f2',1,'mempool.c']]], 139.160 + ['ucx_5fproperties2map',['ucx_properties2map',['../properties_8h.html#a5c7ff8bc3139960a3f3dc92072b742f3',1,'properties.c']]], 139.161 + ['ucx_5fproperties_5ffill',['ucx_properties_fill',['../properties_8h.html#aaf8de121764a4d22c763ff2ab41f3a4d',1,'properties.c']]], 139.162 + ['ucx_5fproperties_5ffree',['ucx_properties_free',['../properties_8h.html#a38a2fe7bb2986bd87c7e69356ab05c05',1,'properties.c']]], 139.163 + ['ucx_5fproperties_5fload',['ucx_properties_load',['../properties_8h.html#ae1b600f839a6b2278b68fc314981a8a3',1,'properties.c']]], 139.164 + ['ucx_5fproperties_5fnew',['ucx_properties_new',['../properties_8h.html#a44d9dd12cab3aaa0084f1c8b89405796',1,'properties.c']]], 139.165 + ['ucx_5fproperties_5fnext',['ucx_properties_next',['../properties_8h.html#a7e03bc573d45d48c538cd721e810d33c',1,'properties.c']]], 139.166 + ['ucx_5fproperties_5fstore',['ucx_properties_store',['../properties_8h.html#a63c0c1b7648e675b21a1788917ff36fb',1,'properties.c']]], 139.167 + ['ucx_5fsc2sc',['ucx_sc2sc',['../string_8h.html#a69d5e3eeec783cc43314df71248768f5',1,'string.c']]], 139.168 + ['ucx_5fss2c_5fs',['ucx_ss2c_s',['../string_8h.html#aedeb5d7bddda54116101a8d68af8c56d',1,'string.h']]], 139.169 + ['ucx_5fss2sc',['ucx_ss2sc',['../string_8h.html#a9ce5ad1b2aa2dbeba204d452c2e64359',1,'string.c']]], 139.170 + ['ucx_5fstack_5favail',['ucx_stack_avail',['../stack_8h.html#a53cd2c7743dc8ad9cbd35ade0b4873e7',1,'stack.c']]], 139.171 + ['ucx_5fstack_5fcalloc',['ucx_stack_calloc',['../stack_8h.html#afdc467524b5e19a9a777c6bc03e17174',1,'stack.c']]], 139.172 + ['ucx_5fstack_5ffree',['ucx_stack_free',['../stack_8h.html#aabd55c14a3866b3782ba324f4d8b4c41',1,'stack.c']]], 139.173 + ['ucx_5fstack_5finit',['ucx_stack_init',['../stack_8h.html#abaef685df4e7ef95cd7218984a0618fe',1,'stack.c']]], 139.174 + ['ucx_5fstack_5fmalloc',['ucx_stack_malloc',['../stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac',1,'stack.c']]], 139.175 + ['ucx_5fstack_5fpopn',['ucx_stack_popn',['../stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81',1,'stack.c']]], 139.176 + ['ucx_5fstack_5fpush',['ucx_stack_push',['../stack_8h.html#af85e6f77a8341beb6188f9ae1a8e9f92',1,'stack.c']]], 139.177 + ['ucx_5fstack_5fpusharr',['ucx_stack_pusharr',['../stack_8h.html#a7bb138979191bba138e76ea37488fae2',1,'stack.c']]], 139.178 + ['ucx_5fstack_5frealloc',['ucx_stack_realloc',['../stack_8h.html#a0c678f96f6fabab49b2b034a1fe91c3a',1,'stack.c']]], 139.179 + ['ucx_5fstrcpy',['ucx_strcpy',['../utils_8h.html#adeb6e8d0a53a829207cfa0a979d01fff',1,'utils.c']]], 139.180 + ['ucx_5fstream_5fbncopy',['ucx_stream_bncopy',['../utils_8h.html#a114ee7f7da62656ffd35e2dc23394201',1,'utils.c']]], 139.181 + ['ucx_5fszmul_5fimpl',['ucx_szmul_impl',['../ucx_8h.html#a6637171cc0ec097b297f731a3036dd3b',1,'ucx.c']]], 139.182 + ['ucx_5ftest_5fregister',['ucx_test_register',['../test_8h.html#a8dfabc42f183d3a4d79379a5d17bf67d',1,'test.c']]], 139.183 + ['ucx_5ftest_5frun',['ucx_test_run',['../test_8h.html#a3721458deeecb43aa322428f007714c3',1,'test.c']]], 139.184 + ['ucx_5ftest_5fsuite_5ffree',['ucx_test_suite_free',['../test_8h.html#a4a6ac61a6f72722273f8eaa7a343edde',1,'test.c']]], 139.185 + ['ucx_5ftest_5fsuite_5fnew',['ucx_test_suite_new',['../test_8h.html#a531f0df90363e0befbe900878f65f09e',1,'test.c']]], 139.186 + ['ucx_5fvasprintf',['ucx_vasprintf',['../utils_8h.html#a3ea1dfb856c741f3e8ec6bfdc9ad427e',1,'utils.c']]], 139.187 + ['ucx_5fvfprintf',['ucx_vfprintf',['../utils_8h.html#a4907967beb92c3ae351dd239abbb6927',1,'utils.c']]] 139.188 +];
140.1 Binary file docs/api-2.1/search/mag_sel.png has changed
141.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 141.2 +++ b/docs/api-2.1/search/nomatches.html Sat Feb 06 19:11:44 2021 +0100 141.3 @@ -0,0 +1,12 @@ 141.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 141.5 +<html><head><title></title> 141.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 141.7 +<link rel="stylesheet" type="text/css" href="search.css"/> 141.8 +<script type="text/javascript" src="search.js"></script> 141.9 +</head> 141.10 +<body class="SRPage"> 141.11 +<div id="SRIndex"> 141.12 +<div class="SRStatus" id="NoMatches">No Matches</div> 141.13 +</div> 141.14 +</body> 141.15 +</html>
142.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 142.2 +++ b/docs/api-2.1/search/pages_0.html Sat Feb 06 19:11:44 2021 +0100 142.3 @@ -0,0 +1,26 @@ 142.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 142.5 +<html><head><title></title> 142.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 142.7 +<meta name="generator" content="Doxygen 1.8.13"/> 142.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 142.9 +<script type="text/javascript" src="pages_0.js"></script> 142.10 +<script type="text/javascript" src="search.js"></script> 142.11 +</head> 142.12 +<body class="SRPage"> 142.13 +<div id="SRIndex"> 142.14 +<div class="SRStatus" id="Loading">Loading...</div> 142.15 +<div id="SRResults"></div> 142.16 +<script type="text/javascript"><!-- 142.17 +createResults(); 142.18 +--></script> 142.19 +<div class="SRStatus" id="Searching">Searching...</div> 142.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 142.21 +<script type="text/javascript"><!-- 142.22 +document.getElementById("Loading").style.display="none"; 142.23 +document.getElementById("NoMatches").style.display="none"; 142.24 +var searchResults = new SearchResults("searchResults"); 142.25 +searchResults.Search(); 142.26 +--></script> 142.27 +</div> 142.28 +</body> 142.29 +</html>
143.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 143.2 +++ b/docs/api-2.1/search/pages_0.js Sat Feb 06 19:11:44 2021 +0100 143.3 @@ -0,0 +1,4 @@ 143.4 +var searchData= 143.5 +[ 143.6 + ['uap_20common_20extensions',['UAP Common Extensions',['../index.html',1,'']]] 143.7 +];
144.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 144.2 +++ b/docs/api-2.1/search/search.css Sat Feb 06 19:11:44 2021 +0100 144.3 @@ -0,0 +1,271 @@ 144.4 +/*---------------- Search Box */ 144.5 + 144.6 +#FSearchBox { 144.7 + float: left; 144.8 +} 144.9 + 144.10 +#MSearchBox { 144.11 + white-space : nowrap; 144.12 + float: none; 144.13 + margin-top: 8px; 144.14 + right: 0px; 144.15 + width: 170px; 144.16 + height: 24px; 144.17 + z-index: 102; 144.18 +} 144.19 + 144.20 +#MSearchBox .left 144.21 +{ 144.22 + display:block; 144.23 + position:absolute; 144.24 + left:10px; 144.25 + width:20px; 144.26 + height:19px; 144.27 + background:url('search_l.png') no-repeat; 144.28 + background-position:right; 144.29 +} 144.30 + 144.31 +#MSearchSelect { 144.32 + display:block; 144.33 + position:absolute; 144.34 + width:20px; 144.35 + height:19px; 144.36 +} 144.37 + 144.38 +.left #MSearchSelect { 144.39 + left:4px; 144.40 +} 144.41 + 144.42 +.right #MSearchSelect { 144.43 + right:5px; 144.44 +} 144.45 + 144.46 +#MSearchField { 144.47 + display:block; 144.48 + position:absolute; 144.49 + height:19px; 144.50 + background:url('search_m.png') repeat-x; 144.51 + border:none; 144.52 + width:115px; 144.53 + margin-left:20px; 144.54 + padding-left:4px; 144.55 + color: #909090; 144.56 + outline: none; 144.57 + font: 9pt Arial, Verdana, sans-serif; 144.58 + -webkit-border-radius: 0px; 144.59 +} 144.60 + 144.61 +#FSearchBox #MSearchField { 144.62 + margin-left:15px; 144.63 +} 144.64 + 144.65 +#MSearchBox .right { 144.66 + display:block; 144.67 + position:absolute; 144.68 + right:10px; 144.69 + top:8px; 144.70 + width:20px; 144.71 + height:19px; 144.72 + background:url('search_r.png') no-repeat; 144.73 + background-position:left; 144.74 +} 144.75 + 144.76 +#MSearchClose { 144.77 + display: none; 144.78 + position: absolute; 144.79 + top: 4px; 144.80 + background : none; 144.81 + border: none; 144.82 + margin: 0px 4px 0px 0px; 144.83 + padding: 0px 0px; 144.84 + outline: none; 144.85 +} 144.86 + 144.87 +.left #MSearchClose { 144.88 + left: 6px; 144.89 +} 144.90 + 144.91 +.right #MSearchClose { 144.92 + right: 2px; 144.93 +} 144.94 + 144.95 +.MSearchBoxActive #MSearchField { 144.96 + color: #000000; 144.97 +} 144.98 + 144.99 +/*---------------- Search filter selection */ 144.100 + 144.101 +#MSearchSelectWindow { 144.102 + display: none; 144.103 + position: absolute; 144.104 + left: 0; top: 0; 144.105 + border: 1px solid #90A5CE; 144.106 + background-color: #F9FAFC; 144.107 + z-index: 10001; 144.108 + padding-top: 4px; 144.109 + padding-bottom: 4px; 144.110 + -moz-border-radius: 4px; 144.111 + -webkit-border-top-left-radius: 4px; 144.112 + -webkit-border-top-right-radius: 4px; 144.113 + -webkit-border-bottom-left-radius: 4px; 144.114 + -webkit-border-bottom-right-radius: 4px; 144.115 + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); 144.116 +} 144.117 + 144.118 +.SelectItem { 144.119 + font: 8pt Arial, Verdana, sans-serif; 144.120 + padding-left: 2px; 144.121 + padding-right: 12px; 144.122 + border: 0px; 144.123 +} 144.124 + 144.125 +span.SelectionMark { 144.126 + margin-right: 4px; 144.127 + font-family: monospace; 144.128 + outline-style: none; 144.129 + text-decoration: none; 144.130 +} 144.131 + 144.132 +a.SelectItem { 144.133 + display: block; 144.134 + outline-style: none; 144.135 + color: #000000; 144.136 + text-decoration: none; 144.137 + padding-left: 6px; 144.138 + padding-right: 12px; 144.139 +} 144.140 + 144.141 +a.SelectItem:focus, 144.142 +a.SelectItem:active { 144.143 + color: #000000; 144.144 + outline-style: none; 144.145 + text-decoration: none; 144.146 +} 144.147 + 144.148 +a.SelectItem:hover { 144.149 + color: #FFFFFF; 144.150 + background-color: #3D578C; 144.151 + outline-style: none; 144.152 + text-decoration: none; 144.153 + cursor: pointer; 144.154 + display: block; 144.155 +} 144.156 + 144.157 +/*---------------- Search results window */ 144.158 + 144.159 +iframe#MSearchResults { 144.160 + width: 60ex; 144.161 + height: 15em; 144.162 +} 144.163 + 144.164 +#MSearchResultsWindow { 144.165 + display: none; 144.166 + position: absolute; 144.167 + left: 0; top: 0; 144.168 + border: 1px solid #000; 144.169 + background-color: #EEF1F7; 144.170 + z-index:10000; 144.171 +} 144.172 + 144.173 +/* ----------------------------------- */ 144.174 + 144.175 + 144.176 +#SRIndex { 144.177 + clear:both; 144.178 + padding-bottom: 15px; 144.179 +} 144.180 + 144.181 +.SREntry { 144.182 + font-size: 10pt; 144.183 + padding-left: 1ex; 144.184 +} 144.185 + 144.186 +.SRPage .SREntry { 144.187 + font-size: 8pt; 144.188 + padding: 1px 5px; 144.189 +} 144.190 + 144.191 +body.SRPage { 144.192 + margin: 5px 2px; 144.193 +} 144.194 + 144.195 +.SRChildren { 144.196 + padding-left: 3ex; padding-bottom: .5em 144.197 +} 144.198 + 144.199 +.SRPage .SRChildren { 144.200 + display: none; 144.201 +} 144.202 + 144.203 +.SRSymbol { 144.204 + font-weight: bold; 144.205 + color: #425E97; 144.206 + font-family: Arial, Verdana, sans-serif; 144.207 + text-decoration: none; 144.208 + outline: none; 144.209 +} 144.210 + 144.211 +a.SRScope { 144.212 + display: block; 144.213 + color: #425E97; 144.214 + font-family: Arial, Verdana, sans-serif; 144.215 + text-decoration: none; 144.216 + outline: none; 144.217 +} 144.218 + 144.219 +a.SRSymbol:focus, a.SRSymbol:active, 144.220 +a.SRScope:focus, a.SRScope:active { 144.221 + text-decoration: underline; 144.222 +} 144.223 + 144.224 +span.SRScope { 144.225 + padding-left: 4px; 144.226 +} 144.227 + 144.228 +.SRPage .SRStatus { 144.229 + padding: 2px 5px; 144.230 + font-size: 8pt; 144.231 + font-style: italic; 144.232 +} 144.233 + 144.234 +.SRResult { 144.235 + display: none; 144.236 +} 144.237 + 144.238 +DIV.searchresults { 144.239 + margin-left: 10px; 144.240 + margin-right: 10px; 144.241 +} 144.242 + 144.243 +/*---------------- External search page results */ 144.244 + 144.245 +.searchresult { 144.246 + background-color: #F0F3F8; 144.247 +} 144.248 + 144.249 +.pages b { 144.250 + color: white; 144.251 + padding: 5px 5px 3px 5px; 144.252 + background-image: url("../tab_a.png"); 144.253 + background-repeat: repeat-x; 144.254 + text-shadow: 0 1px 1px #000000; 144.255 +} 144.256 + 144.257 +.pages { 144.258 + line-height: 17px; 144.259 + margin-left: 4px; 144.260 + text-decoration: none; 144.261 +} 144.262 + 144.263 +.hl { 144.264 + font-weight: bold; 144.265 +} 144.266 + 144.267 +#searchresults { 144.268 + margin-bottom: 20px; 144.269 +} 144.270 + 144.271 +.searchpages { 144.272 + margin-top: 10px; 144.273 +} 144.274 +
145.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 145.2 +++ b/docs/api-2.1/search/search.js Sat Feb 06 19:11:44 2021 +0100 145.3 @@ -0,0 +1,791 @@ 145.4 +function convertToId(search) 145.5 +{ 145.6 + var result = ''; 145.7 + for (i=0;i<search.length;i++) 145.8 + { 145.9 + var c = search.charAt(i); 145.10 + var cn = c.charCodeAt(0); 145.11 + if (c.match(/[a-z0-9\u0080-\uFFFF]/)) 145.12 + { 145.13 + result+=c; 145.14 + } 145.15 + else if (cn<16) 145.16 + { 145.17 + result+="_0"+cn.toString(16); 145.18 + } 145.19 + else 145.20 + { 145.21 + result+="_"+cn.toString(16); 145.22 + } 145.23 + } 145.24 + return result; 145.25 +} 145.26 + 145.27 +function getXPos(item) 145.28 +{ 145.29 + var x = 0; 145.30 + if (item.offsetWidth) 145.31 + { 145.32 + while (item && item!=document.body) 145.33 + { 145.34 + x += item.offsetLeft; 145.35 + item = item.offsetParent; 145.36 + } 145.37 + } 145.38 + return x; 145.39 +} 145.40 + 145.41 +function getYPos(item) 145.42 +{ 145.43 + var y = 0; 145.44 + if (item.offsetWidth) 145.45 + { 145.46 + while (item && item!=document.body) 145.47 + { 145.48 + y += item.offsetTop; 145.49 + item = item.offsetParent; 145.50 + } 145.51 + } 145.52 + return y; 145.53 +} 145.54 + 145.55 +/* A class handling everything associated with the search panel. 145.56 + 145.57 + Parameters: 145.58 + name - The name of the global variable that will be 145.59 + storing this instance. Is needed to be able to set timeouts. 145.60 + resultPath - path to use for external files 145.61 +*/ 145.62 +function SearchBox(name, resultsPath, inFrame, label) 145.63 +{ 145.64 + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } 145.65 + 145.66 + // ---------- Instance variables 145.67 + this.name = name; 145.68 + this.resultsPath = resultsPath; 145.69 + this.keyTimeout = 0; 145.70 + this.keyTimeoutLength = 500; 145.71 + this.closeSelectionTimeout = 300; 145.72 + this.lastSearchValue = ""; 145.73 + this.lastResultsPage = ""; 145.74 + this.hideTimeout = 0; 145.75 + this.searchIndex = 0; 145.76 + this.searchActive = false; 145.77 + this.insideFrame = inFrame; 145.78 + this.searchLabel = label; 145.79 + 145.80 + // ----------- DOM Elements 145.81 + 145.82 + this.DOMSearchField = function() 145.83 + { return document.getElementById("MSearchField"); } 145.84 + 145.85 + this.DOMSearchSelect = function() 145.86 + { return document.getElementById("MSearchSelect"); } 145.87 + 145.88 + this.DOMSearchSelectWindow = function() 145.89 + { return document.getElementById("MSearchSelectWindow"); } 145.90 + 145.91 + this.DOMPopupSearchResults = function() 145.92 + { return document.getElementById("MSearchResults"); } 145.93 + 145.94 + this.DOMPopupSearchResultsWindow = function() 145.95 + { return document.getElementById("MSearchResultsWindow"); } 145.96 + 145.97 + this.DOMSearchClose = function() 145.98 + { return document.getElementById("MSearchClose"); } 145.99 + 145.100 + this.DOMSearchBox = function() 145.101 + { return document.getElementById("MSearchBox"); } 145.102 + 145.103 + // ------------ Event Handlers 145.104 + 145.105 + // Called when focus is added or removed from the search field. 145.106 + this.OnSearchFieldFocus = function(isActive) 145.107 + { 145.108 + this.Activate(isActive); 145.109 + } 145.110 + 145.111 + this.OnSearchSelectShow = function() 145.112 + { 145.113 + var searchSelectWindow = this.DOMSearchSelectWindow(); 145.114 + var searchField = this.DOMSearchSelect(); 145.115 + 145.116 + if (this.insideFrame) 145.117 + { 145.118 + var left = getXPos(searchField); 145.119 + var top = getYPos(searchField); 145.120 + left += searchField.offsetWidth + 6; 145.121 + top += searchField.offsetHeight; 145.122 + 145.123 + // show search selection popup 145.124 + searchSelectWindow.style.display='block'; 145.125 + left -= searchSelectWindow.offsetWidth; 145.126 + searchSelectWindow.style.left = left + 'px'; 145.127 + searchSelectWindow.style.top = top + 'px'; 145.128 + } 145.129 + else 145.130 + { 145.131 + var left = getXPos(searchField); 145.132 + var top = getYPos(searchField); 145.133 + top += searchField.offsetHeight; 145.134 + 145.135 + // show search selection popup 145.136 + searchSelectWindow.style.display='block'; 145.137 + searchSelectWindow.style.left = left + 'px'; 145.138 + searchSelectWindow.style.top = top + 'px'; 145.139 + } 145.140 + 145.141 + // stop selection hide timer 145.142 + if (this.hideTimeout) 145.143 + { 145.144 + clearTimeout(this.hideTimeout); 145.145 + this.hideTimeout=0; 145.146 + } 145.147 + return false; // to avoid "image drag" default event 145.148 + } 145.149 + 145.150 + this.OnSearchSelectHide = function() 145.151 + { 145.152 + this.hideTimeout = setTimeout(this.name +".CloseSelectionWindow()", 145.153 + this.closeSelectionTimeout); 145.154 + } 145.155 + 145.156 + // Called when the content of the search field is changed. 145.157 + this.OnSearchFieldChange = function(evt) 145.158 + { 145.159 + if (this.keyTimeout) // kill running timer 145.160 + { 145.161 + clearTimeout(this.keyTimeout); 145.162 + this.keyTimeout = 0; 145.163 + } 145.164 + 145.165 + var e = (evt) ? evt : window.event; // for IE 145.166 + if (e.keyCode==40 || e.keyCode==13) 145.167 + { 145.168 + if (e.shiftKey==1) 145.169 + { 145.170 + this.OnSearchSelectShow(); 145.171 + var win=this.DOMSearchSelectWindow(); 145.172 + for (i=0;i<win.childNodes.length;i++) 145.173 + { 145.174 + var child = win.childNodes[i]; // get span within a 145.175 + if (child.className=='SelectItem') 145.176 + { 145.177 + child.focus(); 145.178 + return; 145.179 + } 145.180 + } 145.181 + return; 145.182 + } 145.183 + else if (window.frames.MSearchResults.searchResults) 145.184 + { 145.185 + var elem = window.frames.MSearchResults.searchResults.NavNext(0); 145.186 + if (elem) elem.focus(); 145.187 + } 145.188 + } 145.189 + else if (e.keyCode==27) // Escape out of the search field 145.190 + { 145.191 + this.DOMSearchField().blur(); 145.192 + this.DOMPopupSearchResultsWindow().style.display = 'none'; 145.193 + this.DOMSearchClose().style.display = 'none'; 145.194 + this.lastSearchValue = ''; 145.195 + this.Activate(false); 145.196 + return; 145.197 + } 145.198 + 145.199 + // strip whitespaces 145.200 + var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); 145.201 + 145.202 + if (searchValue != this.lastSearchValue) // search value has changed 145.203 + { 145.204 + if (searchValue != "") // non-empty search 145.205 + { 145.206 + // set timer for search update 145.207 + this.keyTimeout = setTimeout(this.name + '.Search()', 145.208 + this.keyTimeoutLength); 145.209 + } 145.210 + else // empty search field 145.211 + { 145.212 + this.DOMPopupSearchResultsWindow().style.display = 'none'; 145.213 + this.DOMSearchClose().style.display = 'none'; 145.214 + this.lastSearchValue = ''; 145.215 + } 145.216 + } 145.217 + } 145.218 + 145.219 + this.SelectItemCount = function(id) 145.220 + { 145.221 + var count=0; 145.222 + var win=this.DOMSearchSelectWindow(); 145.223 + for (i=0;i<win.childNodes.length;i++) 145.224 + { 145.225 + var child = win.childNodes[i]; // get span within a 145.226 + if (child.className=='SelectItem') 145.227 + { 145.228 + count++; 145.229 + } 145.230 + } 145.231 + return count; 145.232 + } 145.233 + 145.234 + this.SelectItemSet = function(id) 145.235 + { 145.236 + var i,j=0; 145.237 + var win=this.DOMSearchSelectWindow(); 145.238 + for (i=0;i<win.childNodes.length;i++) 145.239 + { 145.240 + var child = win.childNodes[i]; // get span within a 145.241 + if (child.className=='SelectItem') 145.242 + { 145.243 + var node = child.firstChild; 145.244 + if (j==id) 145.245 + { 145.246 + node.innerHTML='•'; 145.247 + } 145.248 + else 145.249 + { 145.250 + node.innerHTML=' '; 145.251 + } 145.252 + j++; 145.253 + } 145.254 + } 145.255 + } 145.256 + 145.257 + // Called when an search filter selection is made. 145.258 + // set item with index id as the active item 145.259 + this.OnSelectItem = function(id) 145.260 + { 145.261 + this.searchIndex = id; 145.262 + this.SelectItemSet(id); 145.263 + var searchValue = this.DOMSearchField().value.replace(/ +/g, ""); 145.264 + if (searchValue!="" && this.searchActive) // something was found -> do a search 145.265 + { 145.266 + this.Search(); 145.267 + } 145.268 + } 145.269 + 145.270 + this.OnSearchSelectKey = function(evt) 145.271 + { 145.272 + var e = (evt) ? evt : window.event; // for IE 145.273 + if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down 145.274 + { 145.275 + this.searchIndex++; 145.276 + this.OnSelectItem(this.searchIndex); 145.277 + } 145.278 + else if (e.keyCode==38 && this.searchIndex>0) // Up 145.279 + { 145.280 + this.searchIndex--; 145.281 + this.OnSelectItem(this.searchIndex); 145.282 + } 145.283 + else if (e.keyCode==13 || e.keyCode==27) 145.284 + { 145.285 + this.OnSelectItem(this.searchIndex); 145.286 + this.CloseSelectionWindow(); 145.287 + this.DOMSearchField().focus(); 145.288 + } 145.289 + return false; 145.290 + } 145.291 + 145.292 + // --------- Actions 145.293 + 145.294 + // Closes the results window. 145.295 + this.CloseResultsWindow = function() 145.296 + { 145.297 + this.DOMPopupSearchResultsWindow().style.display = 'none'; 145.298 + this.DOMSearchClose().style.display = 'none'; 145.299 + this.Activate(false); 145.300 + } 145.301 + 145.302 + this.CloseSelectionWindow = function() 145.303 + { 145.304 + this.DOMSearchSelectWindow().style.display = 'none'; 145.305 + } 145.306 + 145.307 + // Performs a search. 145.308 + this.Search = function() 145.309 + { 145.310 + this.keyTimeout = 0; 145.311 + 145.312 + // strip leading whitespace 145.313 + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); 145.314 + 145.315 + var code = searchValue.toLowerCase().charCodeAt(0); 145.316 + var idxChar = searchValue.substr(0, 1).toLowerCase(); 145.317 + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair 145.318 + { 145.319 + idxChar = searchValue.substr(0, 2); 145.320 + } 145.321 + 145.322 + var resultsPage; 145.323 + var resultsPageWithSearch; 145.324 + var hasResultsPage; 145.325 + 145.326 + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); 145.327 + if (idx!=-1) 145.328 + { 145.329 + var hexCode=idx.toString(16); 145.330 + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; 145.331 + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); 145.332 + hasResultsPage = true; 145.333 + } 145.334 + else // nothing available for this search term 145.335 + { 145.336 + resultsPage = this.resultsPath + '/nomatches.html'; 145.337 + resultsPageWithSearch = resultsPage; 145.338 + hasResultsPage = false; 145.339 + } 145.340 + 145.341 + window.frames.MSearchResults.location = resultsPageWithSearch; 145.342 + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); 145.343 + 145.344 + if (domPopupSearchResultsWindow.style.display!='block') 145.345 + { 145.346 + var domSearchBox = this.DOMSearchBox(); 145.347 + this.DOMSearchClose().style.display = 'inline'; 145.348 + if (this.insideFrame) 145.349 + { 145.350 + var domPopupSearchResults = this.DOMPopupSearchResults(); 145.351 + domPopupSearchResultsWindow.style.position = 'relative'; 145.352 + domPopupSearchResultsWindow.style.display = 'block'; 145.353 + var width = document.body.clientWidth - 8; // the -8 is for IE :-( 145.354 + domPopupSearchResultsWindow.style.width = width + 'px'; 145.355 + domPopupSearchResults.style.width = width + 'px'; 145.356 + } 145.357 + else 145.358 + { 145.359 + var domPopupSearchResults = this.DOMPopupSearchResults(); 145.360 + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; 145.361 + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; 145.362 + domPopupSearchResultsWindow.style.display = 'block'; 145.363 + left -= domPopupSearchResults.offsetWidth; 145.364 + domPopupSearchResultsWindow.style.top = top + 'px'; 145.365 + domPopupSearchResultsWindow.style.left = left + 'px'; 145.366 + } 145.367 + } 145.368 + 145.369 + this.lastSearchValue = searchValue; 145.370 + this.lastResultsPage = resultsPage; 145.371 + } 145.372 + 145.373 + // -------- Activation Functions 145.374 + 145.375 + // Activates or deactivates the search panel, resetting things to 145.376 + // their default values if necessary. 145.377 + this.Activate = function(isActive) 145.378 + { 145.379 + if (isActive || // open it 145.380 + this.DOMPopupSearchResultsWindow().style.display == 'block' 145.381 + ) 145.382 + { 145.383 + this.DOMSearchBox().className = 'MSearchBoxActive'; 145.384 + 145.385 + var searchField = this.DOMSearchField(); 145.386 + 145.387 + if (searchField.value == this.searchLabel) // clear "Search" term upon entry 145.388 + { 145.389 + searchField.value = ''; 145.390 + this.searchActive = true; 145.391 + } 145.392 + } 145.393 + else if (!isActive) // directly remove the panel 145.394 + { 145.395 + this.DOMSearchBox().className = 'MSearchBoxInactive'; 145.396 + this.DOMSearchField().value = this.searchLabel; 145.397 + this.searchActive = false; 145.398 + this.lastSearchValue = '' 145.399 + this.lastResultsPage = ''; 145.400 + } 145.401 + } 145.402 +} 145.403 + 145.404 +// ----------------------------------------------------------------------- 145.405 + 145.406 +// The class that handles everything on the search results page. 145.407 +function SearchResults(name) 145.408 +{ 145.409 + // The number of matches from the last run of <Search()>. 145.410 + this.lastMatchCount = 0; 145.411 + this.lastKey = 0; 145.412 + this.repeatOn = false; 145.413 + 145.414 + // Toggles the visibility of the passed element ID. 145.415 + this.FindChildElement = function(id) 145.416 + { 145.417 + var parentElement = document.getElementById(id); 145.418 + var element = parentElement.firstChild; 145.419 + 145.420 + while (element && element!=parentElement) 145.421 + { 145.422 + if (element.nodeName == 'DIV' && element.className == 'SRChildren') 145.423 + { 145.424 + return element; 145.425 + } 145.426 + 145.427 + if (element.nodeName == 'DIV' && element.hasChildNodes()) 145.428 + { 145.429 + element = element.firstChild; 145.430 + } 145.431 + else if (element.nextSibling) 145.432 + { 145.433 + element = element.nextSibling; 145.434 + } 145.435 + else 145.436 + { 145.437 + do 145.438 + { 145.439 + element = element.parentNode; 145.440 + } 145.441 + while (element && element!=parentElement && !element.nextSibling); 145.442 + 145.443 + if (element && element!=parentElement) 145.444 + { 145.445 + element = element.nextSibling; 145.446 + } 145.447 + } 145.448 + } 145.449 + } 145.450 + 145.451 + this.Toggle = function(id) 145.452 + { 145.453 + var element = this.FindChildElement(id); 145.454 + if (element) 145.455 + { 145.456 + if (element.style.display == 'block') 145.457 + { 145.458 + element.style.display = 'none'; 145.459 + } 145.460 + else 145.461 + { 145.462 + element.style.display = 'block'; 145.463 + } 145.464 + } 145.465 + } 145.466 + 145.467 + // Searches for the passed string. If there is no parameter, 145.468 + // it takes it from the URL query. 145.469 + // 145.470 + // Always returns true, since other documents may try to call it 145.471 + // and that may or may not be possible. 145.472 + this.Search = function(search) 145.473 + { 145.474 + if (!search) // get search word from URL 145.475 + { 145.476 + search = window.location.search; 145.477 + search = search.substring(1); // Remove the leading '?' 145.478 + search = unescape(search); 145.479 + } 145.480 + 145.481 + search = search.replace(/^ +/, ""); // strip leading spaces 145.482 + search = search.replace(/ +$/, ""); // strip trailing spaces 145.483 + search = search.toLowerCase(); 145.484 + search = convertToId(search); 145.485 + 145.486 + var resultRows = document.getElementsByTagName("div"); 145.487 + var matches = 0; 145.488 + 145.489 + var i = 0; 145.490 + while (i < resultRows.length) 145.491 + { 145.492 + var row = resultRows.item(i); 145.493 + if (row.className == "SRResult") 145.494 + { 145.495 + var rowMatchName = row.id.toLowerCase(); 145.496 + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' 145.497 + 145.498 + if (search.length<=rowMatchName.length && 145.499 + rowMatchName.substr(0, search.length)==search) 145.500 + { 145.501 + row.style.display = 'block'; 145.502 + matches++; 145.503 + } 145.504 + else 145.505 + { 145.506 + row.style.display = 'none'; 145.507 + } 145.508 + } 145.509 + i++; 145.510 + } 145.511 + document.getElementById("Searching").style.display='none'; 145.512 + if (matches == 0) // no results 145.513 + { 145.514 + document.getElementById("NoMatches").style.display='block'; 145.515 + } 145.516 + else // at least one result 145.517 + { 145.518 + document.getElementById("NoMatches").style.display='none'; 145.519 + } 145.520 + this.lastMatchCount = matches; 145.521 + return true; 145.522 + } 145.523 + 145.524 + // return the first item with index index or higher that is visible 145.525 + this.NavNext = function(index) 145.526 + { 145.527 + var focusItem; 145.528 + while (1) 145.529 + { 145.530 + var focusName = 'Item'+index; 145.531 + focusItem = document.getElementById(focusName); 145.532 + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') 145.533 + { 145.534 + break; 145.535 + } 145.536 + else if (!focusItem) // last element 145.537 + { 145.538 + break; 145.539 + } 145.540 + focusItem=null; 145.541 + index++; 145.542 + } 145.543 + return focusItem; 145.544 + } 145.545 + 145.546 + this.NavPrev = function(index) 145.547 + { 145.548 + var focusItem; 145.549 + while (1) 145.550 + { 145.551 + var focusName = 'Item'+index; 145.552 + focusItem = document.getElementById(focusName); 145.553 + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') 145.554 + { 145.555 + break; 145.556 + } 145.557 + else if (!focusItem) // last element 145.558 + { 145.559 + break; 145.560 + } 145.561 + focusItem=null; 145.562 + index--; 145.563 + } 145.564 + return focusItem; 145.565 + } 145.566 + 145.567 + this.ProcessKeys = function(e) 145.568 + { 145.569 + if (e.type == "keydown") 145.570 + { 145.571 + this.repeatOn = false; 145.572 + this.lastKey = e.keyCode; 145.573 + } 145.574 + else if (e.type == "keypress") 145.575 + { 145.576 + if (!this.repeatOn) 145.577 + { 145.578 + if (this.lastKey) this.repeatOn = true; 145.579 + return false; // ignore first keypress after keydown 145.580 + } 145.581 + } 145.582 + else if (e.type == "keyup") 145.583 + { 145.584 + this.lastKey = 0; 145.585 + this.repeatOn = false; 145.586 + } 145.587 + return this.lastKey!=0; 145.588 + } 145.589 + 145.590 + this.Nav = function(evt,itemIndex) 145.591 + { 145.592 + var e = (evt) ? evt : window.event; // for IE 145.593 + if (e.keyCode==13) return true; 145.594 + if (!this.ProcessKeys(e)) return false; 145.595 + 145.596 + if (this.lastKey==38) // Up 145.597 + { 145.598 + var newIndex = itemIndex-1; 145.599 + var focusItem = this.NavPrev(newIndex); 145.600 + if (focusItem) 145.601 + { 145.602 + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); 145.603 + if (child && child.style.display == 'block') // children visible 145.604 + { 145.605 + var n=0; 145.606 + var tmpElem; 145.607 + while (1) // search for last child 145.608 + { 145.609 + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); 145.610 + if (tmpElem) 145.611 + { 145.612 + focusItem = tmpElem; 145.613 + } 145.614 + else // found it! 145.615 + { 145.616 + break; 145.617 + } 145.618 + n++; 145.619 + } 145.620 + } 145.621 + } 145.622 + if (focusItem) 145.623 + { 145.624 + focusItem.focus(); 145.625 + } 145.626 + else // return focus to search field 145.627 + { 145.628 + parent.document.getElementById("MSearchField").focus(); 145.629 + } 145.630 + } 145.631 + else if (this.lastKey==40) // Down 145.632 + { 145.633 + var newIndex = itemIndex+1; 145.634 + var focusItem; 145.635 + var item = document.getElementById('Item'+itemIndex); 145.636 + var elem = this.FindChildElement(item.parentNode.parentNode.id); 145.637 + if (elem && elem.style.display == 'block') // children visible 145.638 + { 145.639 + focusItem = document.getElementById('Item'+itemIndex+'_c0'); 145.640 + } 145.641 + if (!focusItem) focusItem = this.NavNext(newIndex); 145.642 + if (focusItem) focusItem.focus(); 145.643 + } 145.644 + else if (this.lastKey==39) // Right 145.645 + { 145.646 + var item = document.getElementById('Item'+itemIndex); 145.647 + var elem = this.FindChildElement(item.parentNode.parentNode.id); 145.648 + if (elem) elem.style.display = 'block'; 145.649 + } 145.650 + else if (this.lastKey==37) // Left 145.651 + { 145.652 + var item = document.getElementById('Item'+itemIndex); 145.653 + var elem = this.FindChildElement(item.parentNode.parentNode.id); 145.654 + if (elem) elem.style.display = 'none'; 145.655 + } 145.656 + else if (this.lastKey==27) // Escape 145.657 + { 145.658 + parent.searchBox.CloseResultsWindow(); 145.659 + parent.document.getElementById("MSearchField").focus(); 145.660 + } 145.661 + else if (this.lastKey==13) // Enter 145.662 + { 145.663 + return true; 145.664 + } 145.665 + return false; 145.666 + } 145.667 + 145.668 + this.NavChild = function(evt,itemIndex,childIndex) 145.669 + { 145.670 + var e = (evt) ? evt : window.event; // for IE 145.671 + if (e.keyCode==13) return true; 145.672 + if (!this.ProcessKeys(e)) return false; 145.673 + 145.674 + if (this.lastKey==38) // Up 145.675 + { 145.676 + if (childIndex>0) 145.677 + { 145.678 + var newIndex = childIndex-1; 145.679 + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); 145.680 + } 145.681 + else // already at first child, jump to parent 145.682 + { 145.683 + document.getElementById('Item'+itemIndex).focus(); 145.684 + } 145.685 + } 145.686 + else if (this.lastKey==40) // Down 145.687 + { 145.688 + var newIndex = childIndex+1; 145.689 + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); 145.690 + if (!elem) // last child, jump to parent next parent 145.691 + { 145.692 + elem = this.NavNext(itemIndex+1); 145.693 + } 145.694 + if (elem) 145.695 + { 145.696 + elem.focus(); 145.697 + } 145.698 + } 145.699 + else if (this.lastKey==27) // Escape 145.700 + { 145.701 + parent.searchBox.CloseResultsWindow(); 145.702 + parent.document.getElementById("MSearchField").focus(); 145.703 + } 145.704 + else if (this.lastKey==13) // Enter 145.705 + { 145.706 + return true; 145.707 + } 145.708 + return false; 145.709 + } 145.710 +} 145.711 + 145.712 +function setKeyActions(elem,action) 145.713 +{ 145.714 + elem.setAttribute('onkeydown',action); 145.715 + elem.setAttribute('onkeypress',action); 145.716 + elem.setAttribute('onkeyup',action); 145.717 +} 145.718 + 145.719 +function setClassAttr(elem,attr) 145.720 +{ 145.721 + elem.setAttribute('class',attr); 145.722 + elem.setAttribute('className',attr); 145.723 +} 145.724 + 145.725 +function createResults() 145.726 +{ 145.727 + var results = document.getElementById("SRResults"); 145.728 + for (var e=0; e<searchData.length; e++) 145.729 + { 145.730 + var id = searchData[e][0]; 145.731 + var srResult = document.createElement('div'); 145.732 + srResult.setAttribute('id','SR_'+id); 145.733 + setClassAttr(srResult,'SRResult'); 145.734 + var srEntry = document.createElement('div'); 145.735 + setClassAttr(srEntry,'SREntry'); 145.736 + var srLink = document.createElement('a'); 145.737 + srLink.setAttribute('id','Item'+e); 145.738 + setKeyActions(srLink,'return searchResults.Nav(event,'+e+')'); 145.739 + setClassAttr(srLink,'SRSymbol'); 145.740 + srLink.innerHTML = searchData[e][1][0]; 145.741 + srEntry.appendChild(srLink); 145.742 + if (searchData[e][1].length==2) // single result 145.743 + { 145.744 + srLink.setAttribute('href',searchData[e][1][1][0]); 145.745 + if (searchData[e][1][1][1]) 145.746 + { 145.747 + srLink.setAttribute('target','_parent'); 145.748 + } 145.749 + var srScope = document.createElement('span'); 145.750 + setClassAttr(srScope,'SRScope'); 145.751 + srScope.innerHTML = searchData[e][1][1][2]; 145.752 + srEntry.appendChild(srScope); 145.753 + } 145.754 + else // multiple results 145.755 + { 145.756 + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); 145.757 + var srChildren = document.createElement('div'); 145.758 + setClassAttr(srChildren,'SRChildren'); 145.759 + for (var c=0; c<searchData[e][1].length-1; c++) 145.760 + { 145.761 + var srChild = document.createElement('a'); 145.762 + srChild.setAttribute('id','Item'+e+'_c'+c); 145.763 + setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')'); 145.764 + setClassAttr(srChild,'SRScope'); 145.765 + srChild.setAttribute('href',searchData[e][1][c+1][0]); 145.766 + if (searchData[e][1][c+1][1]) 145.767 + { 145.768 + srChild.setAttribute('target','_parent'); 145.769 + } 145.770 + srChild.innerHTML = searchData[e][1][c+1][2]; 145.771 + srChildren.appendChild(srChild); 145.772 + } 145.773 + srEntry.appendChild(srChildren); 145.774 + } 145.775 + srResult.appendChild(srEntry); 145.776 + results.appendChild(srResult); 145.777 + } 145.778 +} 145.779 + 145.780 +function init_search() 145.781 +{ 145.782 + var results = document.getElementById("MSearchSelectWindow"); 145.783 + for (var key in indexSectionLabels) 145.784 + { 145.785 + var link = document.createElement('a'); 145.786 + link.setAttribute('class','SelectItem'); 145.787 + link.setAttribute('onclick','searchBox.OnSelectItem('+key+')'); 145.788 + link.href='javascript:void(0)'; 145.789 + link.innerHTML='<span class="SelectionMark"> </span>'+indexSectionLabels[key]; 145.790 + results.appendChild(link); 145.791 + } 145.792 + searchBox.OnSelectItem(0); 145.793 +} 145.794 +
146.1 Binary file docs/api-2.1/search/search_l.png has changed
147.1 Binary file docs/api-2.1/search/search_m.png has changed
148.1 Binary file docs/api-2.1/search/search_r.png has changed
149.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 149.2 +++ b/docs/api-2.1/search/searchdata.js Sat Feb 06 19:11:44 2021 +0100 149.3 @@ -0,0 +1,36 @@ 149.4 +var indexSectionsWithContent = 149.5 +{ 149.6 + 0: "_abcdefhiklmnprstuvw", 149.7 + 1: "su", 149.8 + 2: "ablmpstu", 149.9 + 3: "su", 149.10 + 4: "abcdefhiklmnprstuvw", 149.11 + 5: "cdruw", 149.12 + 6: "_apsu", 149.13 + 7: "u" 149.14 +}; 149.15 + 149.16 +var indexSectionNames = 149.17 +{ 149.18 + 0: "all", 149.19 + 1: "classes", 149.20 + 2: "files", 149.21 + 3: "functions", 149.22 + 4: "variables", 149.23 + 5: "typedefs", 149.24 + 6: "defines", 149.25 + 7: "pages" 149.26 +}; 149.27 + 149.28 +var indexSectionLabels = 149.29 +{ 149.30 + 0: "All", 149.31 + 1: "Data Structures", 149.32 + 2: "Files", 149.33 + 3: "Functions", 149.34 + 4: "Variables", 149.35 + 5: "Typedefs", 149.36 + 6: "Macros", 149.37 + 7: "Pages" 149.38 +}; 149.39 +
150.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 150.2 +++ b/docs/api-2.1/search/typedefs_0.html Sat Feb 06 19:11:44 2021 +0100 150.3 @@ -0,0 +1,26 @@ 150.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 150.5 +<html><head><title></title> 150.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 150.7 +<meta name="generator" content="Doxygen 1.8.13"/> 150.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 150.9 +<script type="text/javascript" src="typedefs_0.js"></script> 150.10 +<script type="text/javascript" src="search.js"></script> 150.11 +</head> 150.12 +<body class="SRPage"> 150.13 +<div id="SRIndex"> 150.14 +<div class="SRStatus" id="Loading">Loading...</div> 150.15 +<div id="SRResults"></div> 150.16 +<script type="text/javascript"><!-- 150.17 +createResults(); 150.18 +--></script> 150.19 +<div class="SRStatus" id="Searching">Searching...</div> 150.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 150.21 +<script type="text/javascript"><!-- 150.22 +document.getElementById("Loading").style.display="none"; 150.23 +document.getElementById("NoMatches").style.display="none"; 150.24 +var searchResults = new SearchResults("searchResults"); 150.25 +searchResults.Search(); 150.26 +--></script> 150.27 +</div> 150.28 +</body> 150.29 +</html>
151.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 151.2 +++ b/docs/api-2.1/search/typedefs_0.js Sat Feb 06 19:11:44 2021 +0100 151.3 @@ -0,0 +1,5 @@ 151.4 +var searchData= 151.5 +[ 151.6 + ['cmp_5ffunc',['cmp_func',['../ucx_8h.html#afe5e2d5dbf34778e0e97852051570791',1,'ucx.h']]], 151.7 + ['copy_5ffunc',['copy_func',['../ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967',1,'ucx.h']]] 151.8 +];
152.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 152.2 +++ b/docs/api-2.1/search/typedefs_1.html Sat Feb 06 19:11:44 2021 +0100 152.3 @@ -0,0 +1,26 @@ 152.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 152.5 +<html><head><title></title> 152.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 152.7 +<meta name="generator" content="Doxygen 1.8.13"/> 152.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 152.9 +<script type="text/javascript" src="typedefs_1.js"></script> 152.10 +<script type="text/javascript" src="search.js"></script> 152.11 +</head> 152.12 +<body class="SRPage"> 152.13 +<div id="SRIndex"> 152.14 +<div class="SRStatus" id="Loading">Loading...</div> 152.15 +<div id="SRResults"></div> 152.16 +<script type="text/javascript"><!-- 152.17 +createResults(); 152.18 +--></script> 152.19 +<div class="SRStatus" id="Searching">Searching...</div> 152.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 152.21 +<script type="text/javascript"><!-- 152.22 +document.getElementById("Loading").style.display="none"; 152.23 +document.getElementById("NoMatches").style.display="none"; 152.24 +var searchResults = new SearchResults("searchResults"); 152.25 +searchResults.Search(); 152.26 +--></script> 152.27 +</div> 152.28 +</body> 152.29 +</html>
153.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 153.2 +++ b/docs/api-2.1/search/typedefs_1.js Sat Feb 06 19:11:44 2021 +0100 153.3 @@ -0,0 +1,4 @@ 153.4 +var searchData= 153.5 +[ 153.6 + ['distance_5ffunc',['distance_func',['../ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9',1,'ucx.h']]] 153.7 +];
154.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 154.2 +++ b/docs/api-2.1/search/typedefs_2.html Sat Feb 06 19:11:44 2021 +0100 154.3 @@ -0,0 +1,26 @@ 154.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 154.5 +<html><head><title></title> 154.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 154.7 +<meta name="generator" content="Doxygen 1.8.13"/> 154.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 154.9 +<script type="text/javascript" src="typedefs_2.js"></script> 154.10 +<script type="text/javascript" src="search.js"></script> 154.11 +</head> 154.12 +<body class="SRPage"> 154.13 +<div id="SRIndex"> 154.14 +<div class="SRStatus" id="Loading">Loading...</div> 154.15 +<div id="SRResults"></div> 154.16 +<script type="text/javascript"><!-- 154.17 +createResults(); 154.18 +--></script> 154.19 +<div class="SRStatus" id="Searching">Searching...</div> 154.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 154.21 +<script type="text/javascript"><!-- 154.22 +document.getElementById("Loading").style.display="none"; 154.23 +document.getElementById("NoMatches").style.display="none"; 154.24 +var searchResults = new SearchResults("searchResults"); 154.25 +searchResults.Search(); 154.26 +--></script> 154.27 +</div> 154.28 +</body> 154.29 +</html>
155.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 155.2 +++ b/docs/api-2.1/search/typedefs_2.js Sat Feb 06 19:11:44 2021 +0100 155.3 @@ -0,0 +1,4 @@ 155.4 +var searchData= 155.5 +[ 155.6 + ['read_5ffunc',['read_func',['../ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5',1,'ucx.h']]] 155.7 +];
156.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 156.2 +++ b/docs/api-2.1/search/typedefs_3.html Sat Feb 06 19:11:44 2021 +0100 156.3 @@ -0,0 +1,26 @@ 156.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 156.5 +<html><head><title></title> 156.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 156.7 +<meta name="generator" content="Doxygen 1.8.13"/> 156.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 156.9 +<script type="text/javascript" src="typedefs_3.js"></script> 156.10 +<script type="text/javascript" src="search.js"></script> 156.11 +</head> 156.12 +<body class="SRPage"> 156.13 +<div id="SRIndex"> 156.14 +<div class="SRStatus" id="Loading">Loading...</div> 156.15 +<div id="SRResults"></div> 156.16 +<script type="text/javascript"><!-- 156.17 +createResults(); 156.18 +--></script> 156.19 +<div class="SRStatus" id="Searching">Searching...</div> 156.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 156.21 +<script type="text/javascript"><!-- 156.22 +document.getElementById("Loading").style.display="none"; 156.23 +document.getElementById("NoMatches").style.display="none"; 156.24 +var searchResults = new SearchResults("searchResults"); 156.25 +searchResults.Search(); 156.26 +--></script> 156.27 +</div> 156.28 +</body> 156.29 +</html>
157.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 157.2 +++ b/docs/api-2.1/search/typedefs_3.js Sat Feb 06 19:11:44 2021 +0100 157.3 @@ -0,0 +1,17 @@ 157.4 +var searchData= 157.5 +[ 157.6 + ['ucx_5fallocator_5fcalloc',['ucx_allocator_calloc',['../allocator_8h.html#a2c0aba4221c1ac6801f03ed799f15b12',1,'allocator.h']]], 157.7 + ['ucx_5fallocator_5ffree',['ucx_allocator_free',['../allocator_8h.html#aaf2387ddaddd8ab4b267e6b00e5d6f7e',1,'allocator.h']]], 157.8 + ['ucx_5fallocator_5fmalloc',['ucx_allocator_malloc',['../allocator_8h.html#a29f0f6a23a70db3b60635cd6dc384473',1,'allocator.h']]], 157.9 + ['ucx_5fallocator_5frealloc',['ucx_allocator_realloc',['../allocator_8h.html#a6d7cf038a806e327c5da37321d04e426',1,'allocator.h']]], 157.10 + ['ucx_5fdestructor',['ucx_destructor',['../ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3',1,'ucx.h']]], 157.11 + ['ucxavlnode',['UcxAVLNode',['../avl_8h.html#a08ba2496c2316df58548c3cc29712add',1,'avl.h']]], 157.12 + ['ucxkey',['UcxKey',['../map_8h.html#ad63828bb23123fc01a5315a2bac3b142',1,'map.h']]], 157.13 + ['ucxlist',['UcxList',['../list_8h.html#aa6f89f91c1081c9a7c6866c298f497a2',1,'list.h']]], 157.14 + ['ucxmap',['UcxMap',['../map_8h.html#a18e21948725b2da68c35da587a722033',1,'map.h']]], 157.15 + ['ucxmapelement',['UcxMapElement',['../map_8h.html#ad7d7a910a32113eb93eae11c3dc97b4b',1,'map.h']]], 157.16 + ['ucxmapiterator',['UcxMapIterator',['../map_8h.html#ae36aff5f645948c54f51578b11fd87fb',1,'map.h']]], 157.17 + ['ucxtest',['UcxTest',['../test_8h.html#ae906817354c010b83c2784260cce7a1c',1,'test.h']]], 157.18 + ['ucxtestlist',['UcxTestList',['../test_8h.html#a8048c50ae73ea690b776edfd63bd6a5d',1,'test.h']]], 157.19 + ['ucxtestsuite',['UcxTestSuite',['../test_8h.html#a52115d1d0f1c4a565ed6ef7c1bfd0363',1,'test.h']]] 157.20 +];
158.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 158.2 +++ b/docs/api-2.1/search/typedefs_4.html Sat Feb 06 19:11:44 2021 +0100 158.3 @@ -0,0 +1,26 @@ 158.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 158.5 +<html><head><title></title> 158.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 158.7 +<meta name="generator" content="Doxygen 1.8.13"/> 158.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 158.9 +<script type="text/javascript" src="typedefs_4.js"></script> 158.10 +<script type="text/javascript" src="search.js"></script> 158.11 +</head> 158.12 +<body class="SRPage"> 158.13 +<div id="SRIndex"> 158.14 +<div class="SRStatus" id="Loading">Loading...</div> 158.15 +<div id="SRResults"></div> 158.16 +<script type="text/javascript"><!-- 158.17 +createResults(); 158.18 +--></script> 158.19 +<div class="SRStatus" id="Searching">Searching...</div> 158.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 158.21 +<script type="text/javascript"><!-- 158.22 +document.getElementById("Loading").style.display="none"; 158.23 +document.getElementById("NoMatches").style.display="none"; 158.24 +var searchResults = new SearchResults("searchResults"); 158.25 +searchResults.Search(); 158.26 +--></script> 158.27 +</div> 158.28 +</body> 158.29 +</html>
159.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 159.2 +++ b/docs/api-2.1/search/typedefs_4.js Sat Feb 06 19:11:44 2021 +0100 159.3 @@ -0,0 +1,4 @@ 159.4 +var searchData= 159.5 +[ 159.6 + ['write_5ffunc',['write_func',['../ucx_8h.html#a989b3f0fa4d307d278378fde435641ed',1,'ucx.h']]] 159.7 +];
160.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 160.2 +++ b/docs/api-2.1/search/variables_0.html Sat Feb 06 19:11:44 2021 +0100 160.3 @@ -0,0 +1,26 @@ 160.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 160.5 +<html><head><title></title> 160.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 160.7 +<meta name="generator" content="Doxygen 1.8.13"/> 160.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 160.9 +<script type="text/javascript" src="variables_0.js"></script> 160.10 +<script type="text/javascript" src="search.js"></script> 160.11 +</head> 160.12 +<body class="SRPage"> 160.13 +<div id="SRIndex"> 160.14 +<div class="SRStatus" id="Loading">Loading...</div> 160.15 +<div id="SRResults"></div> 160.16 +<script type="text/javascript"><!-- 160.17 +createResults(); 160.18 +--></script> 160.19 +<div class="SRStatus" id="Searching">Searching...</div> 160.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 160.21 +<script type="text/javascript"><!-- 160.22 +document.getElementById("Loading").style.display="none"; 160.23 +document.getElementById("NoMatches").style.display="none"; 160.24 +var searchResults = new SearchResults("searchResults"); 160.25 +searchResults.Search(); 160.26 +--></script> 160.27 +</div> 160.28 +</body> 160.29 +</html>
161.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 161.2 +++ b/docs/api-2.1/search/variables_0.js Sat Feb 06 19:11:44 2021 +0100 161.3 @@ -0,0 +1,4 @@ 161.4 +var searchData= 161.5 +[ 161.6 + ['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()']]] 161.7 +];
162.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 162.2 +++ b/docs/api-2.1/search/variables_1.html Sat Feb 06 19:11:44 2021 +0100 162.3 @@ -0,0 +1,26 @@ 162.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 162.5 +<html><head><title></title> 162.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 162.7 +<meta name="generator" content="Doxygen 1.8.13"/> 162.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 162.9 +<script type="text/javascript" src="variables_1.js"></script> 162.10 +<script type="text/javascript" src="search.js"></script> 162.11 +</head> 162.12 +<body class="SRPage"> 162.13 +<div id="SRIndex"> 162.14 +<div class="SRStatus" id="Loading">Loading...</div> 162.15 +<div id="SRResults"></div> 162.16 +<script type="text/javascript"><!-- 162.17 +createResults(); 162.18 +--></script> 162.19 +<div class="SRStatus" id="Searching">Searching...</div> 162.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 162.21 +<script type="text/javascript"><!-- 162.22 +document.getElementById("Loading").style.display="none"; 162.23 +document.getElementById("NoMatches").style.display="none"; 162.24 +var searchResults = new SearchResults("searchResults"); 162.25 +searchResults.Search(); 162.26 +--></script> 162.27 +</div> 162.28 +</body> 162.29 +</html>
163.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 163.2 +++ b/docs/api-2.1/search/variables_1.js Sat Feb 06 19:11:44 2021 +0100 163.3 @@ -0,0 +1,5 @@ 163.4 +var searchData= 163.5 +[ 163.6 + ['buffer',['buffer',['../structUcxProperties.html#a6bb4d29686df41a0f42641ee15232bfd',1,'UcxProperties']]], 163.7 + ['buflen',['buflen',['../structUcxProperties.html#a4e7524434525267e29f493a25dcca6b5',1,'UcxProperties']]] 163.8 +];
164.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 164.2 +++ b/docs/api-2.1/search/variables_10.html Sat Feb 06 19:11:44 2021 +0100 164.3 @@ -0,0 +1,26 @@ 164.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 164.5 +<html><head><title></title> 164.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 164.7 +<meta name="generator" content="Doxygen 1.8.13"/> 164.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 164.9 +<script type="text/javascript" src="variables_10.js"></script> 164.10 +<script type="text/javascript" src="search.js"></script> 164.11 +</head> 164.12 +<body class="SRPage"> 164.13 +<div id="SRIndex"> 164.14 +<div class="SRStatus" id="Loading">Loading...</div> 164.15 +<div id="SRResults"></div> 164.16 +<script type="text/javascript"><!-- 164.17 +createResults(); 164.18 +--></script> 164.19 +<div class="SRStatus" id="Searching">Searching...</div> 164.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 164.21 +<script type="text/javascript"><!-- 164.22 +document.getElementById("Loading").style.display="none"; 164.23 +document.getElementById("NoMatches").style.display="none"; 164.24 +var searchResults = new SearchResults("searchResults"); 164.25 +searchResults.Search(); 164.26 +--></script> 164.27 +</div> 164.28 +</body> 164.29 +</html>
165.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 165.2 +++ b/docs/api-2.1/search/variables_10.js Sat Feb 06 19:11:44 2021 +0100 165.3 @@ -0,0 +1,4 @@ 165.4 +var searchData= 165.5 +[ 165.6 + ['userdata',['userdata',['../structUcxAVLTree.html#ae92a3bfad3fe33c8dcbdad85112f83fd',1,'UcxAVLTree']]] 165.7 +];
166.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 166.2 +++ b/docs/api-2.1/search/variables_11.html Sat Feb 06 19:11:44 2021 +0100 166.3 @@ -0,0 +1,26 @@ 166.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 166.5 +<html><head><title></title> 166.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 166.7 +<meta name="generator" content="Doxygen 1.8.13"/> 166.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 166.9 +<script type="text/javascript" src="variables_11.js"></script> 166.10 +<script type="text/javascript" src="search.js"></script> 166.11 +</head> 166.12 +<body class="SRPage"> 166.13 +<div id="SRIndex"> 166.14 +<div class="SRStatus" id="Loading">Loading...</div> 166.15 +<div id="SRResults"></div> 166.16 +<script type="text/javascript"><!-- 166.17 +createResults(); 166.18 +--></script> 166.19 +<div class="SRStatus" id="Searching">Searching...</div> 166.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 166.21 +<script type="text/javascript"><!-- 166.22 +document.getElementById("Loading").style.display="none"; 166.23 +document.getElementById("NoMatches").style.display="none"; 166.24 +var searchResults = new SearchResults("searchResults"); 166.25 +searchResults.Search(); 166.26 +--></script> 166.27 +</div> 166.28 +</body> 166.29 +</html>
167.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 167.2 +++ b/docs/api-2.1/search/variables_11.js Sat Feb 06 19:11:44 2021 +0100 167.3 @@ -0,0 +1,4 @@ 167.4 +var searchData= 167.5 +[ 167.6 + ['value',['value',['../structUcxAVLNode.html#a302501b8c04c3fde668fe72249871258',1,'UcxAVLNode']]] 167.7 +];
168.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 168.2 +++ b/docs/api-2.1/search/variables_12.html Sat Feb 06 19:11:44 2021 +0100 168.3 @@ -0,0 +1,26 @@ 168.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 168.5 +<html><head><title></title> 168.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 168.7 +<meta name="generator" content="Doxygen 1.8.13"/> 168.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 168.9 +<script type="text/javascript" src="variables_12.js"></script> 168.10 +<script type="text/javascript" src="search.js"></script> 168.11 +</head> 168.12 +<body class="SRPage"> 168.13 +<div id="SRIndex"> 168.14 +<div class="SRStatus" id="Loading">Loading...</div> 168.15 +<div id="SRResults"></div> 168.16 +<script type="text/javascript"><!-- 168.17 +createResults(); 168.18 +--></script> 168.19 +<div class="SRStatus" id="Searching">Searching...</div> 168.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 168.21 +<script type="text/javascript"><!-- 168.22 +document.getElementById("Loading").style.display="none"; 168.23 +document.getElementById("NoMatches").style.display="none"; 168.24 +var searchResults = new SearchResults("searchResults"); 168.25 +searchResults.Search(); 168.26 +--></script> 168.27 +</div> 168.28 +</body> 168.29 +</html>
169.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 169.2 +++ b/docs/api-2.1/search/variables_12.js Sat Feb 06 19:11:44 2021 +0100 169.3 @@ -0,0 +1,4 @@ 169.4 +var searchData= 169.5 +[ 169.6 + ['writer',['writer',['../structUcxLogger.html#ada13bba090a9dc4f8d6cd9be73c60930',1,'UcxLogger']]] 169.7 +];
170.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 170.2 +++ b/docs/api-2.1/search/variables_2.html Sat Feb 06 19:11:44 2021 +0100 170.3 @@ -0,0 +1,26 @@ 170.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 170.5 +<html><head><title></title> 170.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 170.7 +<meta name="generator" content="Doxygen 1.8.13"/> 170.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 170.9 +<script type="text/javascript" src="variables_2.js"></script> 170.10 +<script type="text/javascript" src="search.js"></script> 170.11 +</head> 170.12 +<body class="SRPage"> 170.13 +<div id="SRIndex"> 170.14 +<div class="SRStatus" id="Loading">Loading...</div> 170.15 +<div id="SRResults"></div> 170.16 +<script type="text/javascript"><!-- 170.17 +createResults(); 170.18 +--></script> 170.19 +<div class="SRStatus" id="Searching">Searching...</div> 170.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 170.21 +<script type="text/javascript"><!-- 170.22 +document.getElementById("Loading").style.display="none"; 170.23 +document.getElementById("NoMatches").style.display="none"; 170.24 +var searchResults = new SearchResults("searchResults"); 170.25 +searchResults.Search(); 170.26 +--></script> 170.27 +</div> 170.28 +</body> 170.29 +</html>
171.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 171.2 +++ b/docs/api-2.1/search/variables_2.js Sat Feb 06 19:11:44 2021 +0100 171.3 @@ -0,0 +1,12 @@ 171.4 +var searchData= 171.5 +[ 171.6 + ['c',['c',['../structucx__memchunk.html#ab86550503e5f019bfa61a1e91f1c40da',1,'ucx_memchunk']]], 171.7 + ['calloc',['calloc',['../structUcxAllocator.html#ab94ec1cba45cc4e7d81e1588a11cbb62',1,'UcxAllocator']]], 171.8 + ['capacity',['capacity',['../structUcxArray.html#a7ed074887908e45bde7e1fbc67b31c18',1,'UcxArray::capacity()'],['../structUcxBuffer.html#a385661894f3cee9c549bfe07a8b316bf',1,'UcxBuffer::capacity()']]], 171.9 + ['cmpfunc',['cmpfunc',['../structUcxAVLTree.html#a87aff25cb726cb9eb88eb815a10d1004',1,'UcxAVLTree']]], 171.10 + ['comment1',['comment1',['../structUcxProperties.html#afaa2e6a289fa6949b7b01df35fa5def8',1,'UcxProperties']]], 171.11 + ['comment2',['comment2',['../structUcxProperties.html#a9ea7ecb414ca8bc7bef62cdd19cc6363',1,'UcxProperties']]], 171.12 + ['comment3',['comment3',['../structUcxProperties.html#a5f3e561e32bac03e36a191a6940cca92',1,'UcxProperties']]], 171.13 + ['count',['count',['../structUcxMap.html#a14e9163f71f6c014dfa2103de70ae9cd',1,'UcxMap']]], 171.14 + ['cur',['cur',['../structUcxMapIterator.html#af1fc40f899f37280adb5b85acf6e742f',1,'UcxMapIterator']]] 171.15 +];
172.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 172.2 +++ b/docs/api-2.1/search/variables_3.html Sat Feb 06 19:11:44 2021 +0100 172.3 @@ -0,0 +1,26 @@ 172.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 172.5 +<html><head><title></title> 172.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 172.7 +<meta name="generator" content="Doxygen 1.8.13"/> 172.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 172.9 +<script type="text/javascript" src="variables_3.js"></script> 172.10 +<script type="text/javascript" src="search.js"></script> 172.11 +</head> 172.12 +<body class="SRPage"> 172.13 +<div id="SRIndex"> 172.14 +<div class="SRStatus" id="Loading">Loading...</div> 172.15 +<div id="SRResults"></div> 172.16 +<script type="text/javascript"><!-- 172.17 +createResults(); 172.18 +--></script> 172.19 +<div class="SRStatus" id="Searching">Searching...</div> 172.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 172.21 +<script type="text/javascript"><!-- 172.22 +document.getElementById("Loading").style.display="none"; 172.23 +document.getElementById("NoMatches").style.display="none"; 172.24 +var searchResults = new SearchResults("searchResults"); 172.25 +searchResults.Search(); 172.26 +--></script> 172.27 +</div> 172.28 +</body> 172.29 +</html>
173.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 173.2 +++ b/docs/api-2.1/search/variables_3.js Sat Feb 06 19:11:44 2021 +0100 173.3 @@ -0,0 +1,7 @@ 173.4 +var searchData= 173.5 +[ 173.6 + ['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()']]], 173.7 + ['dateformat',['dateformat',['../structUcxLogger.html#a086f75df0f6c81ec491f25c0a4d9262b',1,'UcxLogger']]], 173.8 + ['delimiter',['delimiter',['../structUcxProperties.html#af6adb3f69616cf9d2bb5ea7b4d837ca5',1,'UcxProperties']]], 173.9 + ['destructor',['destructor',['../structucx__memchunk.html#ac7b5e3fda47b917d6fb2a1d7ea28447b',1,'ucx_memchunk::destructor()'],['../structucx__regdestr.html#acea2a3bb66909aa800a931ac8b0cce56',1,'ucx_regdestr::destructor()']]] 173.10 +];
174.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 174.2 +++ b/docs/api-2.1/search/variables_4.html Sat Feb 06 19:11:44 2021 +0100 174.3 @@ -0,0 +1,26 @@ 174.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 174.5 +<html><head><title></title> 174.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 174.7 +<meta name="generator" content="Doxygen 1.8.13"/> 174.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 174.9 +<script type="text/javascript" src="variables_4.js"></script> 174.10 +<script type="text/javascript" src="search.js"></script> 174.11 +</head> 174.12 +<body class="SRPage"> 174.13 +<div id="SRIndex"> 174.14 +<div class="SRStatus" id="Loading">Loading...</div> 174.15 +<div id="SRResults"></div> 174.16 +<script type="text/javascript"><!-- 174.17 +createResults(); 174.18 +--></script> 174.19 +<div class="SRStatus" id="Searching">Searching...</div> 174.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 174.21 +<script type="text/javascript"><!-- 174.22 +document.getElementById("Loading").style.display="none"; 174.23 +document.getElementById("NoMatches").style.display="none"; 174.24 +var searchResults = new SearchResults("searchResults"); 174.25 +searchResults.Search(); 174.26 +--></script> 174.27 +</div> 174.28 +</body> 174.29 +</html>
175.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 175.2 +++ b/docs/api-2.1/search/variables_4.js Sat Feb 06 19:11:44 2021 +0100 175.3 @@ -0,0 +1,5 @@ 175.4 +var searchData= 175.5 +[ 175.6 + ['elemsize',['elemsize',['../structUcxArray.html#ac4e9ecdf8a8d010644f6e44dfef8190f',1,'UcxArray']]], 175.7 + ['error',['error',['../structUcxProperties.html#a34f71a6ab6dcb6892e3b4eb802e75bff',1,'UcxProperties']]] 175.8 +];
176.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 176.2 +++ b/docs/api-2.1/search/variables_5.html Sat Feb 06 19:11:44 2021 +0100 176.3 @@ -0,0 +1,26 @@ 176.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 176.5 +<html><head><title></title> 176.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 176.7 +<meta name="generator" content="Doxygen 1.8.13"/> 176.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 176.9 +<script type="text/javascript" src="variables_5.js"></script> 176.10 +<script type="text/javascript" src="search.js"></script> 176.11 +</head> 176.12 +<body class="SRPage"> 176.13 +<div id="SRIndex"> 176.14 +<div class="SRStatus" id="Loading">Loading...</div> 176.15 +<div id="SRResults"></div> 176.16 +<script type="text/javascript"><!-- 176.17 +createResults(); 176.18 +--></script> 176.19 +<div class="SRStatus" id="Searching">Searching...</div> 176.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 176.21 +<script type="text/javascript"><!-- 176.22 +document.getElementById("Loading").style.display="none"; 176.23 +document.getElementById("NoMatches").style.display="none"; 176.24 +var searchResults = new SearchResults("searchResults"); 176.25 +searchResults.Search(); 176.26 +--></script> 176.27 +</div> 176.28 +</body> 176.29 +</html>
177.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 177.2 +++ b/docs/api-2.1/search/variables_5.js Sat Feb 06 19:11:44 2021 +0100 177.3 @@ -0,0 +1,6 @@ 177.4 +var searchData= 177.5 +[ 177.6 + ['failure',['failure',['../structUcxTestSuite.html#abfd240541d1e956e49cde0ac36286951',1,'UcxTestSuite']]], 177.7 + ['flags',['flags',['../structUcxBuffer.html#ac642e07b0a03be5aac48eb4aa5bec2f7',1,'UcxBuffer']]], 177.8 + ['free',['free',['../structUcxAllocator.html#aecce1840378ed53f1002190f4f87026f',1,'UcxAllocator']]] 177.9 +];
178.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 178.2 +++ b/docs/api-2.1/search/variables_6.html Sat Feb 06 19:11:44 2021 +0100 178.3 @@ -0,0 +1,26 @@ 178.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 178.5 +<html><head><title></title> 178.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 178.7 +<meta name="generator" content="Doxygen 1.8.13"/> 178.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 178.9 +<script type="text/javascript" src="variables_6.js"></script> 178.10 +<script type="text/javascript" src="search.js"></script> 178.11 +</head> 178.12 +<body class="SRPage"> 178.13 +<div id="SRIndex"> 178.14 +<div class="SRStatus" id="Loading">Loading...</div> 178.15 +<div id="SRResults"></div> 178.16 +<script type="text/javascript"><!-- 178.17 +createResults(); 178.18 +--></script> 178.19 +<div class="SRStatus" id="Searching">Searching...</div> 178.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 178.21 +<script type="text/javascript"><!-- 178.22 +document.getElementById("Loading").style.display="none"; 178.23 +document.getElementById("NoMatches").style.display="none"; 178.24 +var searchResults = new SearchResults("searchResults"); 178.25 +searchResults.Search(); 178.26 +--></script> 178.27 +</div> 178.28 +</body> 178.29 +</html>
179.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 179.2 +++ b/docs/api-2.1/search/variables_6.js Sat Feb 06 19:11:44 2021 +0100 179.3 @@ -0,0 +1,5 @@ 179.4 +var searchData= 179.5 +[ 179.6 + ['hash',['hash',['../structUcxKey.html#aac9d372ac34a4cbd8459e2b04e505752',1,'UcxKey::hash()'],['../structUcxMapKey.html#a34c1f8fec98174583944fffd30e7c913',1,'UcxMapKey::hash()']]], 179.7 + ['height',['height',['../structUcxAVLNode.html#af129fd32863a7c35e82c5cd9d11dc95a',1,'UcxAVLNode']]] 179.8 +];
180.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 180.2 +++ b/docs/api-2.1/search/variables_7.html Sat Feb 06 19:11:44 2021 +0100 180.3 @@ -0,0 +1,26 @@ 180.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 180.5 +<html><head><title></title> 180.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 180.7 +<meta name="generator" content="Doxygen 1.8.13"/> 180.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 180.9 +<script type="text/javascript" src="variables_7.js"></script> 180.10 +<script type="text/javascript" src="search.js"></script> 180.11 +</head> 180.12 +<body class="SRPage"> 180.13 +<div id="SRIndex"> 180.14 +<div class="SRStatus" id="Loading">Loading...</div> 180.15 +<div id="SRResults"></div> 180.16 +<script type="text/javascript"><!-- 180.17 +createResults(); 180.18 +--></script> 180.19 +<div class="SRStatus" id="Searching">Searching...</div> 180.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 180.21 +<script type="text/javascript"><!-- 180.22 +document.getElementById("Loading").style.display="none"; 180.23 +document.getElementById("NoMatches").style.display="none"; 180.24 +var searchResults = new SearchResults("searchResults"); 180.25 +searchResults.Search(); 180.26 +--></script> 180.27 +</div> 180.28 +</body> 180.29 +</html>
181.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 181.2 +++ b/docs/api-2.1/search/variables_7.js Sat Feb 06 19:11:44 2021 +0100 181.3 @@ -0,0 +1,4 @@ 181.4 +var searchData= 181.5 +[ 181.6 + ['index',['index',['../structUcxMapIterator.html#ac2376545c8816dd6895de4995e558c65',1,'UcxMapIterator']]] 181.7 +];
182.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 182.2 +++ b/docs/api-2.1/search/variables_8.html Sat Feb 06 19:11:44 2021 +0100 182.3 @@ -0,0 +1,26 @@ 182.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 182.5 +<html><head><title></title> 182.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 182.7 +<meta name="generator" content="Doxygen 1.8.13"/> 182.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 182.9 +<script type="text/javascript" src="variables_8.js"></script> 182.10 +<script type="text/javascript" src="search.js"></script> 182.11 +</head> 182.12 +<body class="SRPage"> 182.13 +<div id="SRIndex"> 182.14 +<div class="SRStatus" id="Loading">Loading...</div> 182.15 +<div id="SRResults"></div> 182.16 +<script type="text/javascript"><!-- 182.17 +createResults(); 182.18 +--></script> 182.19 +<div class="SRStatus" id="Searching">Searching...</div> 182.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 182.21 +<script type="text/javascript"><!-- 182.22 +document.getElementById("Loading").style.display="none"; 182.23 +document.getElementById("NoMatches").style.display="none"; 182.24 +var searchResults = new SearchResults("searchResults"); 182.25 +searchResults.Search(); 182.26 +--></script> 182.27 +</div> 182.28 +</body> 182.29 +</html>
183.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 183.2 +++ b/docs/api-2.1/search/variables_8.js Sat Feb 06 19:11:44 2021 +0100 183.3 @@ -0,0 +1,4 @@ 183.4 +var searchData= 183.5 +[ 183.6 + ['key',['key',['../structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6',1,'UcxAVLNode::key()'],['../structUcxMapElement.html#aa446141b708e106e2c8de1303318187c',1,'UcxMapElement::key()']]] 183.7 +];
184.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 184.2 +++ b/docs/api-2.1/search/variables_9.html Sat Feb 06 19:11:44 2021 +0100 184.3 @@ -0,0 +1,26 @@ 184.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 184.5 +<html><head><title></title> 184.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 184.7 +<meta name="generator" content="Doxygen 1.8.13"/> 184.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 184.9 +<script type="text/javascript" src="variables_9.js"></script> 184.10 +<script type="text/javascript" src="search.js"></script> 184.11 +</head> 184.12 +<body class="SRPage"> 184.13 +<div id="SRIndex"> 184.14 +<div class="SRStatus" id="Loading">Loading...</div> 184.15 +<div id="SRResults"></div> 184.16 +<script type="text/javascript"><!-- 184.17 +createResults(); 184.18 +--></script> 184.19 +<div class="SRStatus" id="Searching">Searching...</div> 184.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 184.21 +<script type="text/javascript"><!-- 184.22 +document.getElementById("Loading").style.display="none"; 184.23 +document.getElementById("NoMatches").style.display="none"; 184.24 +var searchResults = new SearchResults("searchResults"); 184.25 +searchResults.Search(); 184.26 +--></script> 184.27 +</div> 184.28 +</body> 184.29 +</html>
185.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 185.2 +++ b/docs/api-2.1/search/variables_9.js Sat Feb 06 19:11:44 2021 +0100 185.3 @@ -0,0 +1,8 @@ 185.4 +var searchData= 185.5 +[ 185.6 + ['left',['left',['../structUcxAVLNode.html#ad3a1c733f2c1cc81ac527f846fc24b9c',1,'UcxAVLNode']]], 185.7 + ['len',['len',['../structUcxKey.html#abef01de37f355688f2ac797d2c280683',1,'UcxKey::len()'],['../structUcxMapKey.html#a504d46caa45c79cd87ff8cd835654270',1,'UcxMapKey::len()']]], 185.8 + ['length',['length',['../structsstr__t.html#a5cf571708cdff92e45f08458f2b98229',1,'sstr_t::length()'],['../structscstr__t.html#aaa0229f64f1057b6f65adededaa5a172',1,'scstr_t::length()']]], 185.9 + ['level',['level',['../structUcxLogger.html#a2e0ee94c25b2307096c7970280d189cd',1,'UcxLogger']]], 185.10 + ['levels',['levels',['../structUcxLogger.html#a187129f7bc6e5064b3d92a5f1217f396',1,'UcxLogger']]] 185.11 +];
186.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 186.2 +++ b/docs/api-2.1/search/variables_a.html Sat Feb 06 19:11:44 2021 +0100 186.3 @@ -0,0 +1,26 @@ 186.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 186.5 +<html><head><title></title> 186.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 186.7 +<meta name="generator" content="Doxygen 1.8.13"/> 186.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 186.9 +<script type="text/javascript" src="variables_a.js"></script> 186.10 +<script type="text/javascript" src="search.js"></script> 186.11 +</head> 186.12 +<body class="SRPage"> 186.13 +<div id="SRIndex"> 186.14 +<div class="SRStatus" id="Loading">Loading...</div> 186.15 +<div id="SRResults"></div> 186.16 +<script type="text/javascript"><!-- 186.17 +createResults(); 186.18 +--></script> 186.19 +<div class="SRStatus" id="Searching">Searching...</div> 186.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 186.21 +<script type="text/javascript"><!-- 186.22 +document.getElementById("Loading").style.display="none"; 186.23 +document.getElementById("NoMatches").style.display="none"; 186.24 +var searchResults = new SearchResults("searchResults"); 186.25 +searchResults.Search(); 186.26 +--></script> 186.27 +</div> 186.28 +</body> 186.29 +</html>
187.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 187.2 +++ b/docs/api-2.1/search/variables_a.js Sat Feb 06 19:11:44 2021 +0100 187.3 @@ -0,0 +1,6 @@ 187.4 +var searchData= 187.5 +[ 187.6 + ['malloc',['malloc',['../structUcxAllocator.html#a013376172be39ed54f77c4be6898845a',1,'UcxAllocator']]], 187.7 + ['map',['map',['../structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790',1,'UcxMap::map()'],['../structUcxMapIterator.html#af88d6e22547d09fe1d665dd650dcdb95',1,'UcxMapIterator::map()']]], 187.8 + ['mask',['mask',['../structUcxLogger.html#a1de0db2e02dcf03366268f6943f8b97c',1,'UcxLogger']]] 187.9 +];
188.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 188.2 +++ b/docs/api-2.1/search/variables_b.html Sat Feb 06 19:11:44 2021 +0100 188.3 @@ -0,0 +1,26 @@ 188.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 188.5 +<html><head><title></title> 188.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 188.7 +<meta name="generator" content="Doxygen 1.8.13"/> 188.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 188.9 +<script type="text/javascript" src="variables_b.js"></script> 188.10 +<script type="text/javascript" src="search.js"></script> 188.11 +</head> 188.12 +<body class="SRPage"> 188.13 +<div id="SRIndex"> 188.14 +<div class="SRStatus" id="Loading">Loading...</div> 188.15 +<div id="SRResults"></div> 188.16 +<script type="text/javascript"><!-- 188.17 +createResults(); 188.18 +--></script> 188.19 +<div class="SRStatus" id="Searching">Searching...</div> 188.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 188.21 +<script type="text/javascript"><!-- 188.22 +document.getElementById("Loading").style.display="none"; 188.23 +document.getElementById("NoMatches").style.display="none"; 188.24 +var searchResults = new SearchResults("searchResults"); 188.25 +searchResults.Search(); 188.26 +--></script> 188.27 +</div> 188.28 +</body> 188.29 +</html>
189.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 189.2 +++ b/docs/api-2.1/search/variables_b.js Sat Feb 06 19:11:44 2021 +0100 189.3 @@ -0,0 +1,5 @@ 189.4 +var searchData= 189.5 +[ 189.6 + ['ndata',['ndata',['../structUcxMempool.html#aa3a73ab231e1bc207d526f46f1c1e23a',1,'UcxMempool']]], 189.7 + ['next',['next',['../structUcxList.html#a82a1818f1abf765b026fa91478569a8f',1,'UcxList::next()'],['../structUcxMapElement.html#a99fe8188b0889201d70ff5f922deef51',1,'UcxMapElement::next()'],['../structUcxTestList.html#aeebb80ff75d9f6f82ab6dc2641a3c74e',1,'UcxTestList::next()']]] 189.8 +];
190.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 190.2 +++ b/docs/api-2.1/search/variables_c.html Sat Feb 06 19:11:44 2021 +0100 190.3 @@ -0,0 +1,26 @@ 190.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 190.5 +<html><head><title></title> 190.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 190.7 +<meta name="generator" content="Doxygen 1.8.13"/> 190.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 190.9 +<script type="text/javascript" src="variables_c.js"></script> 190.10 +<script type="text/javascript" src="search.js"></script> 190.11 +</head> 190.12 +<body class="SRPage"> 190.13 +<div id="SRIndex"> 190.14 +<div class="SRStatus" id="Loading">Loading...</div> 190.15 +<div id="SRResults"></div> 190.16 +<script type="text/javascript"><!-- 190.17 +createResults(); 190.18 +--></script> 190.19 +<div class="SRStatus" id="Searching">Searching...</div> 190.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 190.21 +<script type="text/javascript"><!-- 190.22 +document.getElementById("Loading").style.display="none"; 190.23 +document.getElementById("NoMatches").style.display="none"; 190.24 +var searchResults = new SearchResults("searchResults"); 190.25 +searchResults.Search(); 190.26 +--></script> 190.27 +</div> 190.28 +</body> 190.29 +</html>
191.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 191.2 +++ b/docs/api-2.1/search/variables_c.js Sat Feb 06 19:11:44 2021 +0100 191.3 @@ -0,0 +1,8 @@ 191.4 +var searchData= 191.5 +[ 191.6 + ['parent',['parent',['../structUcxAVLNode.html#afc4e3b4f452aa2d91cabb2135b9d42f7',1,'UcxAVLNode']]], 191.7 + ['pool',['pool',['../structUcxAllocator.html#a1b78012998d1c28be86dc595f8f0aac9',1,'UcxAllocator']]], 191.8 + ['pos',['pos',['../structUcxBuffer.html#a7a64288f002cf62b492e2ea49c79615c',1,'UcxBuffer::pos()'],['../structUcxProperties.html#addd36ac8e5e42241c0a57453633970db',1,'UcxProperties::pos()']]], 191.9 + ['prev',['prev',['../structUcxList.html#a0f1fddce9088b9c1414745d0b1b5c08b',1,'UcxList::prev()'],['../structucx__stack__metadata.html#ad46d2e8e5b0acf05f2def41d451c5579',1,'ucx_stack_metadata::prev()']]], 191.10 + ['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()']]] 191.11 +];
192.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 192.2 +++ b/docs/api-2.1/search/variables_d.html Sat Feb 06 19:11:44 2021 +0100 192.3 @@ -0,0 +1,26 @@ 192.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 192.5 +<html><head><title></title> 192.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 192.7 +<meta name="generator" content="Doxygen 1.8.13"/> 192.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 192.9 +<script type="text/javascript" src="variables_d.js"></script> 192.10 +<script type="text/javascript" src="search.js"></script> 192.11 +</head> 192.12 +<body class="SRPage"> 192.13 +<div id="SRIndex"> 192.14 +<div class="SRStatus" id="Loading">Loading...</div> 192.15 +<div id="SRResults"></div> 192.16 +<script type="text/javascript"><!-- 192.17 +createResults(); 192.18 +--></script> 192.19 +<div class="SRStatus" id="Searching">Searching...</div> 192.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 192.21 +<script type="text/javascript"><!-- 192.22 +document.getElementById("Loading").style.display="none"; 192.23 +document.getElementById("NoMatches").style.display="none"; 192.24 +var searchResults = new SearchResults("searchResults"); 192.25 +searchResults.Search(); 192.26 +--></script> 192.27 +</div> 192.28 +</body> 192.29 +</html>
193.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 193.2 +++ b/docs/api-2.1/search/variables_d.js Sat Feb 06 19:11:44 2021 +0100 193.3 @@ -0,0 +1,6 @@ 193.4 +var searchData= 193.5 +[ 193.6 + ['realloc',['realloc',['../structUcxAllocator.html#a3550e3847f31d9e9ce3ffcb0d3440c15',1,'UcxAllocator']]], 193.7 + ['right',['right',['../structUcxAVLNode.html#a7cbaa31dba8c7a89f4f8f7905f6fd238',1,'UcxAVLNode']]], 193.8 + ['root',['root',['../structUcxAVLTree.html#a393a8fc99eb2c290d3cb67170081d742',1,'UcxAVLTree']]] 193.9 +];
194.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 194.2 +++ b/docs/api-2.1/search/variables_e.html Sat Feb 06 19:11:44 2021 +0100 194.3 @@ -0,0 +1,26 @@ 194.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 194.5 +<html><head><title></title> 194.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 194.7 +<meta name="generator" content="Doxygen 1.8.13"/> 194.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 194.9 +<script type="text/javascript" src="variables_e.js"></script> 194.10 +<script type="text/javascript" src="search.js"></script> 194.11 +</head> 194.12 +<body class="SRPage"> 194.13 +<div id="SRIndex"> 194.14 +<div class="SRStatus" id="Loading">Loading...</div> 194.15 +<div id="SRResults"></div> 194.16 +<script type="text/javascript"><!-- 194.17 +createResults(); 194.18 +--></script> 194.19 +<div class="SRStatus" id="Searching">Searching...</div> 194.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 194.21 +<script type="text/javascript"><!-- 194.22 +document.getElementById("Loading").style.display="none"; 194.23 +document.getElementById("NoMatches").style.display="none"; 194.24 +var searchResults = new SearchResults("searchResults"); 194.25 +searchResults.Search(); 194.26 +--></script> 194.27 +</div> 194.28 +</body> 194.29 +</html>
195.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 195.2 +++ b/docs/api-2.1/search/variables_e.js Sat Feb 06 19:11:44 2021 +0100 195.3 @@ -0,0 +1,7 @@ 195.4 +var searchData= 195.5 +[ 195.6 + ['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()']]], 195.7 + ['space',['space',['../structUcxBuffer.html#a1a5076e85acb84b715a53bc0f37fb721',1,'UcxBuffer::space()'],['../structUcxStack.html#af64d528744bf3a47fec87d2e45d2992f',1,'UcxStack::space()']]], 195.8 + ['stream',['stream',['../structUcxLogger.html#a33fddf4791e8d49e479ecc78bf5d1b9e',1,'UcxLogger']]], 195.9 + ['success',['success',['../structUcxTestSuite.html#a6cefa870a3c2e38d6ee682e38643dbbb',1,'UcxTestSuite']]] 195.10 +];
196.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 196.2 +++ b/docs/api-2.1/search/variables_f.html Sat Feb 06 19:11:44 2021 +0100 196.3 @@ -0,0 +1,26 @@ 196.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 196.5 +<html><head><title></title> 196.6 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 196.7 +<meta name="generator" content="Doxygen 1.8.13"/> 196.8 +<link rel="stylesheet" type="text/css" href="search.css"/> 196.9 +<script type="text/javascript" src="variables_f.js"></script> 196.10 +<script type="text/javascript" src="search.js"></script> 196.11 +</head> 196.12 +<body class="SRPage"> 196.13 +<div id="SRIndex"> 196.14 +<div class="SRStatus" id="Loading">Loading...</div> 196.15 +<div id="SRResults"></div> 196.16 +<script type="text/javascript"><!-- 196.17 +createResults(); 196.18 +--></script> 196.19 +<div class="SRStatus" id="Searching">Searching...</div> 196.20 +<div class="SRStatus" id="NoMatches">No Matches</div> 196.21 +<script type="text/javascript"><!-- 196.22 +document.getElementById("Loading").style.display="none"; 196.23 +document.getElementById("NoMatches").style.display="none"; 196.24 +var searchResults = new SearchResults("searchResults"); 196.25 +searchResults.Search(); 196.26 +--></script> 196.27 +</div> 196.28 +</body> 196.29 +</html>
197.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 197.2 +++ b/docs/api-2.1/search/variables_f.js Sat Feb 06 19:11:44 2021 +0100 197.3 @@ -0,0 +1,9 @@ 197.4 +var searchData= 197.5 +[ 197.6 + ['test',['test',['../structUcxTestList.html#a6022faa52e772b073141ca0a2f5a56c9',1,'UcxTestList']]], 197.7 + ['tests',['tests',['../structUcxTestSuite.html#a630677a70ebc2c3296704cda3196492b',1,'UcxTestSuite']]], 197.8 + ['tmp',['tmp',['../structUcxProperties.html#a68556d4260153f58dde44e4c365edce6',1,'UcxProperties']]], 197.9 + ['tmpcap',['tmpcap',['../structUcxProperties.html#a5af10131ea9f679b4ee174499f92e210',1,'UcxProperties']]], 197.10 + ['tmplen',['tmplen',['../structUcxProperties.html#a8a81853d5903bee2f4e1fa53fdffae6e',1,'UcxProperties']]], 197.11 + ['top',['top',['../structUcxStack.html#af0ff6f58edce469f17683013b86ade27',1,'UcxStack']]] 197.12 +];
198.1 Binary file docs/api-2.1/splitbar.png has changed
199.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 199.2 +++ b/docs/api-2.1/stack_8h.html Sat Feb 06 19:11:44 2021 +0100 199.3 @@ -0,0 +1,677 @@ 199.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 199.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 199.6 +<head> 199.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 199.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 199.9 +<meta name="generator" content="Doxygen 1.8.13"/> 199.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 199.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/stack.h File Reference</title> 199.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 199.13 +<script type="text/javascript" src="jquery.js"></script> 199.14 +<script type="text/javascript" src="dynsections.js"></script> 199.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 199.16 +<script type="text/javascript" src="search/searchdata.js"></script> 199.17 +<script type="text/javascript" src="search/search.js"></script> 199.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 199.19 +</head> 199.20 +<body> 199.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 199.22 +<div id="titlearea"> 199.23 +<table cellspacing="0" cellpadding="0"> 199.24 + <tbody> 199.25 + <tr style="height: 56px;"> 199.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 199.27 + <td id="projectalign" style="padding-left: 0.5em;"> 199.28 + <div id="projectname">ucx 199.29 + </div> 199.30 + <div id="projectbrief">UAP Common Extensions</div> 199.31 + </td> 199.32 + </tr> 199.33 + </tbody> 199.34 +</table> 199.35 +</div> 199.36 +<!-- end header part --> 199.37 +<!-- Generated by Doxygen 1.8.13 --> 199.38 +<script type="text/javascript"> 199.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 199.40 +</script> 199.41 +<script type="text/javascript" src="menudata.js"></script> 199.42 +<script type="text/javascript" src="menu.js"></script> 199.43 +<script type="text/javascript"> 199.44 +$(function() { 199.45 + initMenu('',true,false,'search.php','Search'); 199.46 + $(document).ready(function() { init_search(); }); 199.47 +}); 199.48 +</script> 199.49 +<div id="main-nav"></div> 199.50 +<!-- window showing the filter options --> 199.51 +<div id="MSearchSelectWindow" 199.52 + onmouseover="return searchBox.OnSearchSelectShow()" 199.53 + onmouseout="return searchBox.OnSearchSelectHide()" 199.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 199.55 +</div> 199.56 + 199.57 +<!-- iframe showing the search results (closed by default) --> 199.58 +<div id="MSearchResultsWindow"> 199.59 +<iframe src="javascript:void(0)" frameborder="0" 199.60 + name="MSearchResults" id="MSearchResults"> 199.61 +</iframe> 199.62 +</div> 199.63 + 199.64 +<div id="nav-path" class="navpath"> 199.65 + <ul> 199.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 199.67 +</div> 199.68 +</div><!-- top --> 199.69 +<div class="header"> 199.70 + <div class="summary"> 199.71 +<a href="#nested-classes">Data Structures</a> | 199.72 +<a href="#define-members">Macros</a> | 199.73 +<a href="#func-members">Functions</a> </div> 199.74 + <div class="headertitle"> 199.75 +<div class="title">stack.h File Reference</div> </div> 199.76 +</div><!--header--> 199.77 +<div class="contents"> 199.78 + 199.79 +<p>Default stack memory allocation implementation. 199.80 +<a href="#details">More...</a></p> 199.81 +<div class="textblock"><code>#include "<a class="el" href="ucx_8h_source.html">ucx.h</a>"</code><br /> 199.82 +<code>#include "<a class="el" href="allocator_8h_source.html">allocator.h</a>"</code><br /> 199.83 +</div> 199.84 +<p><a href="stack_8h_source.html">Go to the source code of this file.</a></p> 199.85 +<table class="memberdecls"> 199.86 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> 199.87 +Data Structures</h2></td></tr> 199.88 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxStack.html">UcxStack</a></td></tr> 199.89 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">UCX stack structure. <a href="structUcxStack.html#details">More...</a><br /></td></tr> 199.90 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 199.91 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structucx__stack__metadata.html">ucx_stack_metadata</a></td></tr> 199.92 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Metadata for each UCX stack element. <a href="structucx__stack__metadata.html#details">More...</a><br /></td></tr> 199.93 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 199.94 +</table><table class="memberdecls"> 199.95 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> 199.96 +Macros</h2></td></tr> 199.97 +<tr class="memitem:a030197051a803e87d5eeac5adb80b15a"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a030197051a803e87d5eeac5adb80b15a">ucx_stack_topsize</a>(stack)</td></tr> 199.98 +<tr class="memdesc:a030197051a803e87d5eeac5adb80b15a"><td class="mdescLeft"> </td><td class="mdescRight">Returns the size of the top most element. <a href="#a030197051a803e87d5eeac5adb80b15a">More...</a><br /></td></tr> 199.99 +<tr class="separator:a030197051a803e87d5eeac5adb80b15a"><td class="memSeparator" colspan="2"> </td></tr> 199.100 +<tr class="memitem:a506b82374734ec476d086ddfb561174d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a506b82374734ec476d086ddfb561174d">ucx_stack_pop</a>(stack, dest)   <a class="el" href="stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81">ucx_stack_popn</a>(stack, dest, (size_t)-1)</td></tr> 199.101 +<tr class="memdesc:a506b82374734ec476d086ddfb561174d"><td class="mdescLeft"> </td><td class="mdescRight">Removes the top most element from the stack and copies the content to <code> dest</code>, if specified. <a href="#a506b82374734ec476d086ddfb561174d">More...</a><br /></td></tr> 199.102 +<tr class="separator:a506b82374734ec476d086ddfb561174d"><td class="memSeparator" colspan="2"> </td></tr> 199.103 +<tr class="memitem:a4f7239dbd6c032c56812e370b71c1985"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a4f7239dbd6c032c56812e370b71c1985">ucx_stack_empty</a>(stack)   (!(stack)->top)</td></tr> 199.104 +<tr class="memdesc:a4f7239dbd6c032c56812e370b71c1985"><td class="mdescLeft"> </td><td class="mdescRight">Checks, if the stack is empty. <a href="#a4f7239dbd6c032c56812e370b71c1985">More...</a><br /></td></tr> 199.105 +<tr class="separator:a4f7239dbd6c032c56812e370b71c1985"><td class="memSeparator" colspan="2"> </td></tr> 199.106 +<tr class="memitem:a3b761343c6491222604341ebfa443226"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a3b761343c6491222604341ebfa443226">ucx_stack_dim</a>(size, elems)</td></tr> 199.107 +<tr class="memdesc:a3b761343c6491222604341ebfa443226"><td class="mdescLeft"> </td><td class="mdescRight">Computes a recommended size for the stack memory area. <a href="#a3b761343c6491222604341ebfa443226">More...</a><br /></td></tr> 199.108 +<tr class="separator:a3b761343c6491222604341ebfa443226"><td class="memSeparator" colspan="2"> </td></tr> 199.109 +</table><table class="memberdecls"> 199.110 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 199.111 +Functions</h2></td></tr> 199.112 +<tr class="memitem:abaef685df4e7ef95cd7218984a0618fe"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#abaef685df4e7ef95cd7218984a0618fe">ucx_stack_init</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, char *space, size_t size)</td></tr> 199.113 +<tr class="memdesc:abaef685df4e7ef95cd7218984a0618fe"><td class="mdescLeft"> </td><td class="mdescRight">Initializes <a class="el" href="structUcxStack.html" title="UCX stack structure. ">UcxStack</a> structure with memory. <a href="#abaef685df4e7ef95cd7218984a0618fe">More...</a><br /></td></tr> 199.114 +<tr class="separator:abaef685df4e7ef95cd7218984a0618fe"><td class="memSeparator" colspan="2"> </td></tr> 199.115 +<tr class="memitem:af865b416802140f6b6e8ab3626d7d1ac"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac">ucx_stack_malloc</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, size_t n)</td></tr> 199.116 +<tr class="memdesc:af865b416802140f6b6e8ab3626d7d1ac"><td class="mdescLeft"> </td><td class="mdescRight">Allocates stack memory. <a href="#af865b416802140f6b6e8ab3626d7d1ac">More...</a><br /></td></tr> 199.117 +<tr class="separator:af865b416802140f6b6e8ab3626d7d1ac"><td class="memSeparator" colspan="2"> </td></tr> 199.118 +<tr class="memitem:af85e6f77a8341beb6188f9ae1a8e9f92"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#af85e6f77a8341beb6188f9ae1a8e9f92">ucx_stack_push</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, size_t n, const void *data)</td></tr> 199.119 +<tr class="memdesc:af85e6f77a8341beb6188f9ae1a8e9f92"><td class="mdescLeft"> </td><td class="mdescRight">Allocates memory with <a class="el" href="stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac" title="Allocates stack memory. ">ucx_stack_malloc()</a> and copies the specified data if the allocation was successful. <a href="#af85e6f77a8341beb6188f9ae1a8e9f92">More...</a><br /></td></tr> 199.120 +<tr class="separator:af85e6f77a8341beb6188f9ae1a8e9f92"><td class="memSeparator" colspan="2"> </td></tr> 199.121 +<tr class="memitem:afdc467524b5e19a9a777c6bc03e17174"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#afdc467524b5e19a9a777c6bc03e17174">ucx_stack_calloc</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, size_t nelem, size_t elsize)</td></tr> 199.122 +<tr class="memdesc:afdc467524b5e19a9a777c6bc03e17174"><td class="mdescLeft"> </td><td class="mdescRight">Allocates an array of stack memory. <a href="#afdc467524b5e19a9a777c6bc03e17174">More...</a><br /></td></tr> 199.123 +<tr class="separator:afdc467524b5e19a9a777c6bc03e17174"><td class="memSeparator" colspan="2"> </td></tr> 199.124 +<tr class="memitem:a7bb138979191bba138e76ea37488fae2"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a7bb138979191bba138e76ea37488fae2">ucx_stack_pusharr</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, size_t nelem, size_t elsize, const void *data)</td></tr> 199.125 +<tr class="memdesc:a7bb138979191bba138e76ea37488fae2"><td class="mdescLeft"> </td><td class="mdescRight">Allocates memory with <a class="el" href="stack_8h.html#afdc467524b5e19a9a777c6bc03e17174" title="Allocates an array of stack memory. ">ucx_stack_calloc()</a> and copies the specified data if the allocation was successful. <a href="#a7bb138979191bba138e76ea37488fae2">More...</a><br /></td></tr> 199.126 +<tr class="separator:a7bb138979191bba138e76ea37488fae2"><td class="memSeparator" colspan="2"> </td></tr> 199.127 +<tr class="memitem:a0c678f96f6fabab49b2b034a1fe91c3a"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a0c678f96f6fabab49b2b034a1fe91c3a">ucx_stack_realloc</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, void *ptr, size_t n)</td></tr> 199.128 +<tr class="memdesc:a0c678f96f6fabab49b2b034a1fe91c3a"><td class="mdescLeft"> </td><td class="mdescRight">Reallocates memory on the stack. <a href="#a0c678f96f6fabab49b2b034a1fe91c3a">More...</a><br /></td></tr> 199.129 +<tr class="separator:a0c678f96f6fabab49b2b034a1fe91c3a"><td class="memSeparator" colspan="2"> </td></tr> 199.130 +<tr class="memitem:aabd55c14a3866b3782ba324f4d8b4c41"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#aabd55c14a3866b3782ba324f4d8b4c41">ucx_stack_free</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, void *ptr)</td></tr> 199.131 +<tr class="memdesc:aabd55c14a3866b3782ba324f4d8b4c41"><td class="mdescLeft"> </td><td class="mdescRight">Frees memory on the stack. <a href="#aabd55c14a3866b3782ba324f4d8b4c41">More...</a><br /></td></tr> 199.132 +<tr class="separator:aabd55c14a3866b3782ba324f4d8b4c41"><td class="memSeparator" colspan="2"> </td></tr> 199.133 +<tr class="memitem:a07ea48f28eab474dcfefbb86fa66ef81"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81">ucx_stack_popn</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack, void *dest, size_t n)</td></tr> 199.134 +<tr class="memdesc:a07ea48f28eab474dcfefbb86fa66ef81"><td class="mdescLeft"> </td><td class="mdescRight">Removes the top most element from the stack and copies the content to <code> dest</code>. <a href="#a07ea48f28eab474dcfefbb86fa66ef81">More...</a><br /></td></tr> 199.135 +<tr class="separator:a07ea48f28eab474dcfefbb86fa66ef81"><td class="memSeparator" colspan="2"> </td></tr> 199.136 +<tr class="memitem:a53cd2c7743dc8ad9cbd35ade0b4873e7"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="stack_8h.html#a53cd2c7743dc8ad9cbd35ade0b4873e7">ucx_stack_avail</a> (<a class="el" href="structUcxStack.html">UcxStack</a> *stack)</td></tr> 199.137 +<tr class="memdesc:a53cd2c7743dc8ad9cbd35ade0b4873e7"><td class="mdescLeft"> </td><td class="mdescRight">Returns the remaining available memory on the specified stack. <a href="#a53cd2c7743dc8ad9cbd35ade0b4873e7">More...</a><br /></td></tr> 199.138 +<tr class="separator:a53cd2c7743dc8ad9cbd35ade0b4873e7"><td class="memSeparator" colspan="2"> </td></tr> 199.139 +</table> 199.140 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 199.141 +<div class="textblock"><p>Default stack memory allocation implementation. </p> 199.142 +<dl class="section author"><dt>Author</dt><dd>Mike Becker </dd> 199.143 +<dd> 199.144 +Olaf Wintermann </dd></dl> 199.145 +</div><h2 class="groupheader">Macro Definition Documentation</h2> 199.146 +<a id="a3b761343c6491222604341ebfa443226"></a> 199.147 +<h2 class="memtitle"><span class="permalink"><a href="#a3b761343c6491222604341ebfa443226">◆ </a></span>ucx_stack_dim</h2> 199.148 + 199.149 +<div class="memitem"> 199.150 +<div class="memproto"> 199.151 + <table class="memname"> 199.152 + <tr> 199.153 + <td class="memname">#define ucx_stack_dim</td> 199.154 + <td>(</td> 199.155 + <td class="paramtype"> </td> 199.156 + <td class="paramname">size, </td> 199.157 + </tr> 199.158 + <tr> 199.159 + <td class="paramkey"></td> 199.160 + <td></td> 199.161 + <td class="paramtype"> </td> 199.162 + <td class="paramname">elems </td> 199.163 + </tr> 199.164 + <tr> 199.165 + <td></td> 199.166 + <td>)</td> 199.167 + <td></td><td></td> 199.168 + </tr> 199.169 + </table> 199.170 +</div><div class="memdoc"> 199.171 +<b>Value:</b><div class="fragment"><div class="line">(size+<span class="keyword">sizeof</span>(<span class="keyword">struct </span><a class="code" href="structucx__stack__metadata.html">ucx_stack_metadata</a>) * \</div><div class="line"> (elems + 1))</div><div class="ttc" id="structucx__stack__metadata_html"><div class="ttname"><a href="structucx__stack__metadata.html">ucx_stack_metadata</a></div><div class="ttdoc">Metadata for each UCX stack element. </div><div class="ttdef"><b>Definition:</b> stack.h:69</div></div> 199.172 +</div><!-- fragment --> 199.173 +<p>Computes a recommended size for the stack memory area. </p> 199.174 +<p>Note, that reallocations have not been taken into account, so you might need to reserve twice as much memory to allow many reallocations.</p> 199.175 +<dl class="params"><dt>Parameters</dt><dd> 199.176 + <table class="params"> 199.177 + <tr><td class="paramname">size</td><td>the approximate payload </td></tr> 199.178 + <tr><td class="paramname">elems</td><td>the approximate count of element allocations </td></tr> 199.179 + </table> 199.180 + </dd> 199.181 +</dl> 199.182 +<dl class="section return"><dt>Returns</dt><dd>a recommended size for the stack space based on the information provided </dd></dl> 199.183 + 199.184 +</div> 199.185 +</div> 199.186 +<a id="a4f7239dbd6c032c56812e370b71c1985"></a> 199.187 +<h2 class="memtitle"><span class="permalink"><a href="#a4f7239dbd6c032c56812e370b71c1985">◆ </a></span>ucx_stack_empty</h2> 199.188 + 199.189 +<div class="memitem"> 199.190 +<div class="memproto"> 199.191 + <table class="memname"> 199.192 + <tr> 199.193 + <td class="memname">#define ucx_stack_empty</td> 199.194 + <td>(</td> 199.195 + <td class="paramtype"> </td> 199.196 + <td class="paramname">stack</td><td>)</td> 199.197 + <td>   (!(stack)->top)</td> 199.198 + </tr> 199.199 + </table> 199.200 +</div><div class="memdoc"> 199.201 + 199.202 +<p>Checks, if the stack is empty. </p> 199.203 +<dl class="params"><dt>Parameters</dt><dd> 199.204 + <table class="params"> 199.205 + <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 199.206 + </table> 199.207 + </dd> 199.208 +</dl> 199.209 +<dl class="section return"><dt>Returns</dt><dd>nonzero, if the stack is empty, zero otherwise </dd></dl> 199.210 + 199.211 +</div> 199.212 +</div> 199.213 +<a id="a506b82374734ec476d086ddfb561174d"></a> 199.214 +<h2 class="memtitle"><span class="permalink"><a href="#a506b82374734ec476d086ddfb561174d">◆ </a></span>ucx_stack_pop</h2> 199.215 + 199.216 +<div class="memitem"> 199.217 +<div class="memproto"> 199.218 + <table class="memname"> 199.219 + <tr> 199.220 + <td class="memname">#define ucx_stack_pop</td> 199.221 + <td>(</td> 199.222 + <td class="paramtype"> </td> 199.223 + <td class="paramname">stack, </td> 199.224 + </tr> 199.225 + <tr> 199.226 + <td class="paramkey"></td> 199.227 + <td></td> 199.228 + <td class="paramtype"> </td> 199.229 + <td class="paramname">dest </td> 199.230 + </tr> 199.231 + <tr> 199.232 + <td></td> 199.233 + <td>)</td> 199.234 + <td></td><td>   <a class="el" href="stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81">ucx_stack_popn</a>(stack, dest, (size_t)-1)</td> 199.235 + </tr> 199.236 + </table> 199.237 +</div><div class="memdoc"> 199.238 + 199.239 +<p>Removes the top most element from the stack and copies the content to <code> dest</code>, if specified. </p> 199.240 +<p>Use <a class="el" href="stack_8h.html#a030197051a803e87d5eeac5adb80b15a" title="Returns the size of the top most element. ">ucx_stack_topsize()</a># to get the amount of memory that must be available at the location of <code>dest</code>.</p> 199.241 +<dl class="params"><dt>Parameters</dt><dd> 199.242 + <table class="params"> 199.243 + <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 199.244 + <tr><td class="paramname">dest</td><td>the location where the contents shall be written to, or <code> NULL</code>, if the element shall only be removed. </td></tr> 199.245 + </table> 199.246 + </dd> 199.247 +</dl> 199.248 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="stack_8h.html#aabd55c14a3866b3782ba324f4d8b4c41" title="Frees memory on the stack. ">ucx_stack_free</a> </dd> 199.249 +<dd> 199.250 +<a class="el" href="stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81" title="Removes the top most element from the stack and copies the content to dest. ">ucx_stack_popn</a> </dd></dl> 199.251 + 199.252 +</div> 199.253 +</div> 199.254 +<a id="a030197051a803e87d5eeac5adb80b15a"></a> 199.255 +<h2 class="memtitle"><span class="permalink"><a href="#a030197051a803e87d5eeac5adb80b15a">◆ </a></span>ucx_stack_topsize</h2> 199.256 + 199.257 +<div class="memitem"> 199.258 +<div class="memproto"> 199.259 + <table class="memname"> 199.260 + <tr> 199.261 + <td class="memname">#define ucx_stack_topsize</td> 199.262 + <td>(</td> 199.263 + <td class="paramtype"> </td> 199.264 + <td class="paramname">stack</td><td>)</td> 199.265 + <td></td> 199.266 + </tr> 199.267 + </table> 199.268 +</div><div class="memdoc"> 199.269 +<b>Value:</b><div class="fragment"><div class="line">((stack)->top ? ((<span class="keyword">struct</span> <a class="code" href="structucx__stack__metadata.html">ucx_stack_metadata</a>*)\</div><div class="line"> (stack)->top - 1)->size : 0)</div><div class="ttc" id="structucx__stack__metadata_html"><div class="ttname"><a href="structucx__stack__metadata.html">ucx_stack_metadata</a></div><div class="ttdoc">Metadata for each UCX stack element. </div><div class="ttdef"><b>Definition:</b> stack.h:69</div></div> 199.270 +</div><!-- fragment --> 199.271 +<p>Returns the size of the top most element. </p> 199.272 +<dl class="params"><dt>Parameters</dt><dd> 199.273 + <table class="params"> 199.274 + <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 199.275 + </table> 199.276 + </dd> 199.277 +</dl> 199.278 +<dl class="section return"><dt>Returns</dt><dd>the size of the top most element </dd></dl> 199.279 + 199.280 +</div> 199.281 +</div> 199.282 +<h2 class="groupheader">Function Documentation</h2> 199.283 +<a id="a53cd2c7743dc8ad9cbd35ade0b4873e7"></a> 199.284 +<h2 class="memtitle"><span class="permalink"><a href="#a53cd2c7743dc8ad9cbd35ade0b4873e7">◆ </a></span>ucx_stack_avail()</h2> 199.285 + 199.286 +<div class="memitem"> 199.287 +<div class="memproto"> 199.288 + <table class="memname"> 199.289 + <tr> 199.290 + <td class="memname">size_t ucx_stack_avail </td> 199.291 + <td>(</td> 199.292 + <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> * </td> 199.293 + <td class="paramname"><em>stack</em></td><td>)</td> 199.294 + <td></td> 199.295 + </tr> 199.296 + </table> 199.297 +</div><div class="memdoc"> 199.298 + 199.299 +<p>Returns the remaining available memory on the specified stack. </p> 199.300 +<dl class="params"><dt>Parameters</dt><dd> 199.301 + <table class="params"> 199.302 + <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 199.303 + </table> 199.304 + </dd> 199.305 +</dl> 199.306 +<dl class="section return"><dt>Returns</dt><dd>the remaining available memory </dd></dl> 199.307 + 199.308 +</div> 199.309 +</div> 199.310 +<a id="afdc467524b5e19a9a777c6bc03e17174"></a> 199.311 +<h2 class="memtitle"><span class="permalink"><a href="#afdc467524b5e19a9a777c6bc03e17174">◆ </a></span>ucx_stack_calloc()</h2> 199.312 + 199.313 +<div class="memitem"> 199.314 +<div class="memproto"> 199.315 + <table class="memname"> 199.316 + <tr> 199.317 + <td class="memname">void* ucx_stack_calloc </td> 199.318 + <td>(</td> 199.319 + <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> * </td> 199.320 + <td class="paramname"><em>stack</em>, </td> 199.321 + </tr> 199.322 + <tr> 199.323 + <td class="paramkey"></td> 199.324 + <td></td> 199.325 + <td class="paramtype">size_t </td> 199.326 + <td class="paramname"><em>nelem</em>, </td> 199.327 + </tr> 199.328 + <tr> 199.329 + <td class="paramkey"></td> 199.330 + <td></td> 199.331 + <td class="paramtype">size_t </td> 199.332 + <td class="paramname"><em>elsize</em> </td> 199.333 + </tr> 199.334 + <tr> 199.335 + <td></td> 199.336 + <td>)</td> 199.337 + <td></td><td></td> 199.338 + </tr> 199.339 + </table> 199.340 +</div><div class="memdoc"> 199.341 + 199.342 +<p>Allocates an array of stack memory. </p> 199.343 +<p>The content of the allocated memory is set to zero.</p> 199.344 +<dl class="params"><dt>Parameters</dt><dd> 199.345 + <table class="params"> 199.346 + <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 199.347 + <tr><td class="paramname">nelem</td><td>amount of elements to allocate </td></tr> 199.348 + <tr><td class="paramname">elsize</td><td>amount of memory per element </td></tr> 199.349 + </table> 199.350 + </dd> 199.351 +</dl> 199.352 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the allocated memory </dd></dl> 199.353 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="allocator_8h.html#a2c0aba4221c1ac6801f03ed799f15b12" title="A function pointer to the allocators calloc() function. ">ucx_allocator_calloc()</a> </dd></dl> 199.354 + 199.355 +</div> 199.356 +</div> 199.357 +<a id="aabd55c14a3866b3782ba324f4d8b4c41"></a> 199.358 +<h2 class="memtitle"><span class="permalink"><a href="#aabd55c14a3866b3782ba324f4d8b4c41">◆ </a></span>ucx_stack_free()</h2> 199.359 + 199.360 +<div class="memitem"> 199.361 +<div class="memproto"> 199.362 + <table class="memname"> 199.363 + <tr> 199.364 + <td class="memname">void ucx_stack_free </td> 199.365 + <td>(</td> 199.366 + <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> * </td> 199.367 + <td class="paramname"><em>stack</em>, </td> 199.368 + </tr> 199.369 + <tr> 199.370 + <td class="paramkey"></td> 199.371 + <td></td> 199.372 + <td class="paramtype">void * </td> 199.373 + <td class="paramname"><em>ptr</em> </td> 199.374 + </tr> 199.375 + <tr> 199.376 + <td></td> 199.377 + <td>)</td> 199.378 + <td></td><td></td> 199.379 + </tr> 199.380 + </table> 199.381 +</div><div class="memdoc"> 199.382 + 199.383 +<p>Frees memory on the stack. </p> 199.384 +<p>Freeing stack memory behaves in a special way.</p> 199.385 +<p>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.</p> 199.386 +<dl class="params"><dt>Parameters</dt><dd> 199.387 + <table class="params"> 199.388 + <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 199.389 + <tr><td class="paramname">ptr</td><td>a pointer to the memory that shall be freed </td></tr> 199.390 + </table> 199.391 + </dd> 199.392 +</dl> 199.393 + 199.394 +</div> 199.395 +</div> 199.396 +<a id="abaef685df4e7ef95cd7218984a0618fe"></a> 199.397 +<h2 class="memtitle"><span class="permalink"><a href="#abaef685df4e7ef95cd7218984a0618fe">◆ </a></span>ucx_stack_init()</h2> 199.398 + 199.399 +<div class="memitem"> 199.400 +<div class="memproto"> 199.401 + <table class="memname"> 199.402 + <tr> 199.403 + <td class="memname">void ucx_stack_init </td> 199.404 + <td>(</td> 199.405 + <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> * </td> 199.406 + <td class="paramname"><em>stack</em>, </td> 199.407 + </tr> 199.408 + <tr> 199.409 + <td class="paramkey"></td> 199.410 + <td></td> 199.411 + <td class="paramtype">char * </td> 199.412 + <td class="paramname"><em>space</em>, </td> 199.413 + </tr> 199.414 + <tr> 199.415 + <td class="paramkey"></td> 199.416 + <td></td> 199.417 + <td class="paramtype">size_t </td> 199.418 + <td class="paramname"><em>size</em> </td> 199.419 + </tr> 199.420 + <tr> 199.421 + <td></td> 199.422 + <td>)</td> 199.423 + <td></td><td></td> 199.424 + </tr> 199.425 + </table> 199.426 +</div><div class="memdoc"> 199.427 + 199.428 +<p>Initializes <a class="el" href="structUcxStack.html" title="UCX stack structure. ">UcxStack</a> structure with memory. </p> 199.429 +<dl class="params"><dt>Parameters</dt><dd> 199.430 + <table class="params"> 199.431 + <tr><td class="paramname">stack</td><td>a pointer to an uninitialized stack structure </td></tr> 199.432 + <tr><td class="paramname">space</td><td>the memory area that shall be managed </td></tr> 199.433 + <tr><td class="paramname">size</td><td>size of the memory area </td></tr> 199.434 + </table> 199.435 + </dd> 199.436 +</dl> 199.437 +<dl class="section return"><dt>Returns</dt><dd>a new <a class="el" href="structUcxStack.html" title="UCX stack structure. ">UcxStack</a> structure </dd></dl> 199.438 + 199.439 +</div> 199.440 +</div> 199.441 +<a id="af865b416802140f6b6e8ab3626d7d1ac"></a> 199.442 +<h2 class="memtitle"><span class="permalink"><a href="#af865b416802140f6b6e8ab3626d7d1ac">◆ </a></span>ucx_stack_malloc()</h2> 199.443 + 199.444 +<div class="memitem"> 199.445 +<div class="memproto"> 199.446 + <table class="memname"> 199.447 + <tr> 199.448 + <td class="memname">void* ucx_stack_malloc </td> 199.449 + <td>(</td> 199.450 + <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> * </td> 199.451 + <td class="paramname"><em>stack</em>, </td> 199.452 + </tr> 199.453 + <tr> 199.454 + <td class="paramkey"></td> 199.455 + <td></td> 199.456 + <td class="paramtype">size_t </td> 199.457 + <td class="paramname"><em>n</em> </td> 199.458 + </tr> 199.459 + <tr> 199.460 + <td></td> 199.461 + <td>)</td> 199.462 + <td></td><td></td> 199.463 + </tr> 199.464 + </table> 199.465 +</div><div class="memdoc"> 199.466 + 199.467 +<p>Allocates stack memory. </p> 199.468 +<dl class="params"><dt>Parameters</dt><dd> 199.469 + <table class="params"> 199.470 + <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 199.471 + <tr><td class="paramname">n</td><td>amount of memory to allocate </td></tr> 199.472 + </table> 199.473 + </dd> 199.474 +</dl> 199.475 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the allocated memory or <code>NULL</code> on stack overflow </dd></dl> 199.476 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="allocator_8h.html#a29f0f6a23a70db3b60635cd6dc384473" title="A function pointer to the allocators malloc() function. ">ucx_allocator_malloc()</a> </dd></dl> 199.477 + 199.478 +</div> 199.479 +</div> 199.480 +<a id="a07ea48f28eab474dcfefbb86fa66ef81"></a> 199.481 +<h2 class="memtitle"><span class="permalink"><a href="#a07ea48f28eab474dcfefbb86fa66ef81">◆ </a></span>ucx_stack_popn()</h2> 199.482 + 199.483 +<div class="memitem"> 199.484 +<div class="memproto"> 199.485 + <table class="memname"> 199.486 + <tr> 199.487 + <td class="memname">void ucx_stack_popn </td> 199.488 + <td>(</td> 199.489 + <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> * </td> 199.490 + <td class="paramname"><em>stack</em>, </td> 199.491 + </tr> 199.492 + <tr> 199.493 + <td class="paramkey"></td> 199.494 + <td></td> 199.495 + <td class="paramtype">void * </td> 199.496 + <td class="paramname"><em>dest</em>, </td> 199.497 + </tr> 199.498 + <tr> 199.499 + <td class="paramkey"></td> 199.500 + <td></td> 199.501 + <td class="paramtype">size_t </td> 199.502 + <td class="paramname"><em>n</em> </td> 199.503 + </tr> 199.504 + <tr> 199.505 + <td></td> 199.506 + <td>)</td> 199.507 + <td></td><td></td> 199.508 + </tr> 199.509 + </table> 199.510 +</div><div class="memdoc"> 199.511 + 199.512 +<p>Removes the top most element from the stack and copies the content to <code> dest</code>. </p> 199.513 +<p>This function copies at most <code>n</code> bytes to the destination, but the element is always freed as a whole. If the element was larger than <code>n</code>, the remaining data is lost.</p> 199.514 +<dl class="params"><dt>Parameters</dt><dd> 199.515 + <table class="params"> 199.516 + <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 199.517 + <tr><td class="paramname">dest</td><td>the location where the contents shall be written to </td></tr> 199.518 + <tr><td class="paramname">n</td><td>copies at most n bytes to <code>dest</code> </td></tr> 199.519 + </table> 199.520 + </dd> 199.521 +</dl> 199.522 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="stack_8h.html#a506b82374734ec476d086ddfb561174d" title="Removes the top most element from the stack and copies the content to dest, if specified. ">ucx_stack_pop</a> </dd></dl> 199.523 + 199.524 +</div> 199.525 +</div> 199.526 +<a id="af85e6f77a8341beb6188f9ae1a8e9f92"></a> 199.527 +<h2 class="memtitle"><span class="permalink"><a href="#af85e6f77a8341beb6188f9ae1a8e9f92">◆ </a></span>ucx_stack_push()</h2> 199.528 + 199.529 +<div class="memitem"> 199.530 +<div class="memproto"> 199.531 + <table class="memname"> 199.532 + <tr> 199.533 + <td class="memname">void* ucx_stack_push </td> 199.534 + <td>(</td> 199.535 + <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> * </td> 199.536 + <td class="paramname"><em>stack</em>, </td> 199.537 + </tr> 199.538 + <tr> 199.539 + <td class="paramkey"></td> 199.540 + <td></td> 199.541 + <td class="paramtype">size_t </td> 199.542 + <td class="paramname"><em>n</em>, </td> 199.543 + </tr> 199.544 + <tr> 199.545 + <td class="paramkey"></td> 199.546 + <td></td> 199.547 + <td class="paramtype">const void * </td> 199.548 + <td class="paramname"><em>data</em> </td> 199.549 + </tr> 199.550 + <tr> 199.551 + <td></td> 199.552 + <td>)</td> 199.553 + <td></td><td></td> 199.554 + </tr> 199.555 + </table> 199.556 +</div><div class="memdoc"> 199.557 + 199.558 +<p>Allocates memory with <a class="el" href="stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac" title="Allocates stack memory. ">ucx_stack_malloc()</a> and copies the specified data if the allocation was successful. </p> 199.559 +<dl class="params"><dt>Parameters</dt><dd> 199.560 + <table class="params"> 199.561 + <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 199.562 + <tr><td class="paramname">n</td><td>amount of memory to allocate </td></tr> 199.563 + <tr><td class="paramname">data</td><td>a pointer to the data to copy </td></tr> 199.564 + </table> 199.565 + </dd> 199.566 +</dl> 199.567 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the allocated memory </dd></dl> 199.568 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac" title="Allocates stack memory. ">ucx_stack_malloc</a> </dd></dl> 199.569 + 199.570 +</div> 199.571 +</div> 199.572 +<a id="a7bb138979191bba138e76ea37488fae2"></a> 199.573 +<h2 class="memtitle"><span class="permalink"><a href="#a7bb138979191bba138e76ea37488fae2">◆ </a></span>ucx_stack_pusharr()</h2> 199.574 + 199.575 +<div class="memitem"> 199.576 +<div class="memproto"> 199.577 + <table class="memname"> 199.578 + <tr> 199.579 + <td class="memname">void* ucx_stack_pusharr </td> 199.580 + <td>(</td> 199.581 + <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> * </td> 199.582 + <td class="paramname"><em>stack</em>, </td> 199.583 + </tr> 199.584 + <tr> 199.585 + <td class="paramkey"></td> 199.586 + <td></td> 199.587 + <td class="paramtype">size_t </td> 199.588 + <td class="paramname"><em>nelem</em>, </td> 199.589 + </tr> 199.590 + <tr> 199.591 + <td class="paramkey"></td> 199.592 + <td></td> 199.593 + <td class="paramtype">size_t </td> 199.594 + <td class="paramname"><em>elsize</em>, </td> 199.595 + </tr> 199.596 + <tr> 199.597 + <td class="paramkey"></td> 199.598 + <td></td> 199.599 + <td class="paramtype">const void * </td> 199.600 + <td class="paramname"><em>data</em> </td> 199.601 + </tr> 199.602 + <tr> 199.603 + <td></td> 199.604 + <td>)</td> 199.605 + <td></td><td></td> 199.606 + </tr> 199.607 + </table> 199.608 +</div><div class="memdoc"> 199.609 + 199.610 +<p>Allocates memory with <a class="el" href="stack_8h.html#afdc467524b5e19a9a777c6bc03e17174" title="Allocates an array of stack memory. ">ucx_stack_calloc()</a> and copies the specified data if the allocation was successful. </p> 199.611 +<dl class="params"><dt>Parameters</dt><dd> 199.612 + <table class="params"> 199.613 + <tr><td class="paramname">stack</td><td>a pointer to the stack </td></tr> 199.614 + <tr><td class="paramname">nelem</td><td>amount of elements to allocate </td></tr> 199.615 + <tr><td class="paramname">elsize</td><td>amount of memory per element </td></tr> 199.616 + <tr><td class="paramname">data</td><td>a pointer to the data </td></tr> 199.617 + </table> 199.618 + </dd> 199.619 +</dl> 199.620 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the allocated memory </dd></dl> 199.621 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="stack_8h.html#afdc467524b5e19a9a777c6bc03e17174" title="Allocates an array of stack memory. ">ucx_stack_calloc</a> </dd></dl> 199.622 + 199.623 +</div> 199.624 +</div> 199.625 +<a id="a0c678f96f6fabab49b2b034a1fe91c3a"></a> 199.626 +<h2 class="memtitle"><span class="permalink"><a href="#a0c678f96f6fabab49b2b034a1fe91c3a">◆ </a></span>ucx_stack_realloc()</h2> 199.627 + 199.628 +<div class="memitem"> 199.629 +<div class="memproto"> 199.630 + <table class="memname"> 199.631 + <tr> 199.632 + <td class="memname">void* ucx_stack_realloc </td> 199.633 + <td>(</td> 199.634 + <td class="paramtype"><a class="el" href="structUcxStack.html">UcxStack</a> * </td> 199.635 + <td class="paramname"><em>stack</em>, </td> 199.636 + </tr> 199.637 + <tr> 199.638 + <td class="paramkey"></td> 199.639 + <td></td> 199.640 + <td class="paramtype">void * </td> 199.641 + <td class="paramname"><em>ptr</em>, </td> 199.642 + </tr> 199.643 + <tr> 199.644 + <td class="paramkey"></td> 199.645 + <td></td> 199.646 + <td class="paramtype">size_t </td> 199.647 + <td class="paramname"><em>n</em> </td> 199.648 + </tr> 199.649 + <tr> 199.650 + <td></td> 199.651 + <td>)</td> 199.652 + <td></td><td></td> 199.653 + </tr> 199.654 + </table> 199.655 +</div><div class="memdoc"> 199.656 + 199.657 +<p>Reallocates memory on the stack. </p> 199.658 +<p>Shrinking memory is always safe. Extending memory can be very expensive.</p> 199.659 +<dl class="params"><dt>Parameters</dt><dd> 199.660 + <table class="params"> 199.661 + <tr><td class="paramname">stack</td><td>the stack </td></tr> 199.662 + <tr><td class="paramname">ptr</td><td>a pointer to the memory that shall be reallocated </td></tr> 199.663 + <tr><td class="paramname">n</td><td>the new size of the memory </td></tr> 199.664 + </table> 199.665 + </dd> 199.666 +</dl> 199.667 +<dl class="section return"><dt>Returns</dt><dd>a pointer to the new location of the memory </dd></dl> 199.668 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="allocator_8h.html#a6d7cf038a806e327c5da37321d04e426" title="A function pointer to the allocators realloc() function. ">ucx_allocator_realloc()</a> </dd></dl> 199.669 + 199.670 +</div> 199.671 +</div> 199.672 +</div><!-- contents --> 199.673 +<!-- start footer part --> 199.674 +<hr class="footer"/><address class="footer"><small> 199.675 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 199.676 +<img class="footer" src="doxygen.png" alt="doxygen"/> 199.677 +</a> 1.8.13 199.678 +</small></address> 199.679 +</body> 199.680 +</html>
200.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 200.2 +++ b/docs/api-2.1/stack_8h_source.html Sat Feb 06 19:11:44 2021 +0100 200.3 @@ -0,0 +1,99 @@ 200.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 200.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 200.6 +<head> 200.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 200.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 200.9 +<meta name="generator" content="Doxygen 1.8.13"/> 200.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 200.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/stack.h Source File</title> 200.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 200.13 +<script type="text/javascript" src="jquery.js"></script> 200.14 +<script type="text/javascript" src="dynsections.js"></script> 200.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 200.16 +<script type="text/javascript" src="search/searchdata.js"></script> 200.17 +<script type="text/javascript" src="search/search.js"></script> 200.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 200.19 +</head> 200.20 +<body> 200.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 200.22 +<div id="titlearea"> 200.23 +<table cellspacing="0" cellpadding="0"> 200.24 + <tbody> 200.25 + <tr style="height: 56px;"> 200.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 200.27 + <td id="projectalign" style="padding-left: 0.5em;"> 200.28 + <div id="projectname">ucx 200.29 + </div> 200.30 + <div id="projectbrief">UAP Common Extensions</div> 200.31 + </td> 200.32 + </tr> 200.33 + </tbody> 200.34 +</table> 200.35 +</div> 200.36 +<!-- end header part --> 200.37 +<!-- Generated by Doxygen 1.8.13 --> 200.38 +<script type="text/javascript"> 200.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 200.40 +</script> 200.41 +<script type="text/javascript" src="menudata.js"></script> 200.42 +<script type="text/javascript" src="menu.js"></script> 200.43 +<script type="text/javascript"> 200.44 +$(function() { 200.45 + initMenu('',true,false,'search.php','Search'); 200.46 + $(document).ready(function() { init_search(); }); 200.47 +}); 200.48 +</script> 200.49 +<div id="main-nav"></div> 200.50 +<!-- window showing the filter options --> 200.51 +<div id="MSearchSelectWindow" 200.52 + onmouseover="return searchBox.OnSearchSelectShow()" 200.53 + onmouseout="return searchBox.OnSearchSelectHide()" 200.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 200.55 +</div> 200.56 + 200.57 +<!-- iframe showing the search results (closed by default) --> 200.58 +<div id="MSearchResultsWindow"> 200.59 +<iframe src="javascript:void(0)" frameborder="0" 200.60 + name="MSearchResults" id="MSearchResults"> 200.61 +</iframe> 200.62 +</div> 200.63 + 200.64 +<div id="nav-path" class="navpath"> 200.65 + <ul> 200.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 200.67 +</div> 200.68 +</div><!-- top --> 200.69 +<div class="header"> 200.70 + <div class="headertitle"> 200.71 +<div class="title">stack.h</div> </div> 200.72 +</div><!--header--> 200.73 +<div class="contents"> 200.74 +<a href="stack_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are met:</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * documentation and/or other materials provided with the distribution.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#ifndef UCX_STACK_H</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#define UCX_STACK_H</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="ucx_8h.html">ucx.h</a>"</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="allocator_8h.html">allocator.h</a>"</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="structUcxStack.html"> 52</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="structUcxStack.html#a33cda4f6890ac56ab31701598bc1ae10"> 54</a></span>  <a class="code" href="structUcxAllocator.html">UcxAllocator</a> <a class="code" href="structUcxStack.html#a33cda4f6890ac56ab31701598bc1ae10">allocator</a>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  </div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="structUcxStack.html#a4df86b1917bfc3bbf760220870638143"> 57</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structUcxStack.html#a4df86b1917bfc3bbf760220870638143">size</a>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  </div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="structUcxStack.html#af64d528744bf3a47fec87d2e45d2992f"> 60</a></span>  <span class="keywordtype">char</span> *<a class="code" href="structUcxStack.html#af64d528744bf3a47fec87d2e45d2992f">space</a>;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  </div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="structUcxStack.html#af0ff6f58edce469f17683013b86ade27"> 63</a></span>  <span class="keywordtype">char</span> *<a class="code" href="structUcxStack.html#af0ff6f58edce469f17683013b86ade27">top</a>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> } <a class="code" href="structUcxStack.html">UcxStack</a>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="structucx__stack__metadata.html"> 69</a></span> <span class="keyword">struct </span><a class="code" href="structucx__stack__metadata.html">ucx_stack_metadata</a> {</div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="structucx__stack__metadata.html#ad46d2e8e5b0acf05f2def41d451c5579"> 73</a></span>  <span class="keywordtype">char</span> *<a class="code" href="structucx__stack__metadata.html#ad46d2e8e5b0acf05f2def41d451c5579">prev</a>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  </div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="structucx__stack__metadata.html#ae2a2848b721cfa44a7e963484c5e4b28"> 76</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structucx__stack__metadata.html#ae2a2848b721cfa44a7e963484c5e4b28">size</a>;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> };</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">void</span> <a class="code" href="stack_8h.html#abaef685df4e7ef95cd7218984a0618fe">ucx_stack_init</a>(<a class="code" href="structUcxStack.html">UcxStack</a> *stack, <span class="keywordtype">char</span>* space, <span class="keywordtype">size_t</span> <a class="code" href="structucx__stack__metadata.html#ae2a2848b721cfa44a7e963484c5e4b28">size</a>);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="keywordtype">void</span> *<a class="code" href="stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac">ucx_stack_malloc</a>(<a class="code" href="structUcxStack.html">UcxStack</a> *stack, <span class="keywordtype">size_t</span> n);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keywordtype">void</span> *<a class="code" href="stack_8h.html#af85e6f77a8341beb6188f9ae1a8e9f92">ucx_stack_push</a>(<a class="code" href="structUcxStack.html">UcxStack</a> *stack, <span class="keywordtype">size_t</span> n, <span class="keyword">const</span> <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="keywordtype">void</span> *<a class="code" href="stack_8h.html#afdc467524b5e19a9a777c6bc03e17174">ucx_stack_calloc</a>(<a class="code" href="structUcxStack.html">UcxStack</a> *stack, <span class="keywordtype">size_t</span> nelem, <span class="keywordtype">size_t</span> elsize);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keywordtype">void</span> *<a class="code" href="stack_8h.html#a7bb138979191bba138e76ea37488fae2">ucx_stack_pusharr</a>(<a class="code" href="structUcxStack.html">UcxStack</a> *stack,</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordtype">size_t</span> nelem, <span class="keywordtype">size_t</span> elsize, <span class="keyword">const</span> <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="keywordtype">void</span> *<a class="code" href="stack_8h.html#a0c678f96f6fabab49b2b034a1fe91c3a">ucx_stack_realloc</a>(<a class="code" href="structUcxStack.html">UcxStack</a> *stack, <span class="keywordtype">void</span> *ptr, <span class="keywordtype">size_t</span> n);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> <span class="keywordtype">void</span> <a class="code" href="stack_8h.html#aabd55c14a3866b3782ba324f4d8b4c41">ucx_stack_free</a>(<a class="code" href="structUcxStack.html">UcxStack</a> *stack, <span class="keywordtype">void</span> *ptr);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="stack_8h.html#a030197051a803e87d5eeac5adb80b15a"> 172</a></span> <span class="preprocessor">#define ucx_stack_topsize(stack) ((stack)->top ? ((struct ucx_stack_metadata*)\</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span> <span class="preprocessor"> (stack)->top - 1)->size : 0)</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> </div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="stack_8h.html#a506b82374734ec476d086ddfb561174d"> 188</a></span> <span class="preprocessor">#define ucx_stack_pop(stack, dest) ucx_stack_popn(stack, dest, (size_t)-1)</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="keywordtype">void</span> <a class="code" href="stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81">ucx_stack_popn</a>(<a class="code" href="structUcxStack.html">UcxStack</a> *stack, <span class="keywordtype">void</span> *dest, <span class="keywordtype">size_t</span> n);</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="keywordtype">size_t</span> <a class="code" href="stack_8h.html#a53cd2c7743dc8ad9cbd35ade0b4873e7">ucx_stack_avail</a>(<a class="code" href="structUcxStack.html">UcxStack</a> *stack);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div><div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="stack_8h.html#a4f7239dbd6c032c56812e370b71c1985"> 219</a></span> <span class="preprocessor">#define ucx_stack_empty(stack) (!(stack)->top)</span></div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="stack_8h.html#a3b761343c6491222604341ebfa443226"> 231</a></span> <span class="preprocessor">#define ucx_stack_dim(size, elems) (size+sizeof(struct ucx_stack_metadata) * \</span></div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> <span class="preprocessor"> (elems + 1))</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> </div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> }</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_STACK_H */</span><span class="preprocessor"></span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> </div><div class="ttc" id="structUcxStack_html_a4df86b1917bfc3bbf760220870638143"><div class="ttname"><a href="structUcxStack.html#a4df86b1917bfc3bbf760220870638143">UcxStack::size</a></div><div class="ttdeci">size_t size</div><div class="ttdoc">Stack size. </div><div class="ttdef"><b>Definition:</b> stack.h:57</div></div> 200.75 +<div class="ttc" id="structUcxStack_html"><div class="ttname"><a href="structUcxStack.html">UcxStack</a></div><div class="ttdoc">UCX stack structure. </div><div class="ttdef"><b>Definition:</b> stack.h:52</div></div> 200.76 +<div class="ttc" id="stack_8h_html_aabd55c14a3866b3782ba324f4d8b4c41"><div class="ttname"><a href="stack_8h.html#aabd55c14a3866b3782ba324f4d8b4c41">ucx_stack_free</a></div><div class="ttdeci">void ucx_stack_free(UcxStack *stack, void *ptr)</div><div class="ttdoc">Frees memory on the stack. </div><div class="ttdef"><b>Definition:</b> stack.c:106</div></div> 200.77 +<div class="ttc" id="ucx_8h_html"><div class="ttname"><a href="ucx_8h.html">ucx.h</a></div><div class="ttdoc">Main UCX Header providing most common definitions. </div></div> 200.78 +<div class="ttc" id="stack_8h_html_af865b416802140f6b6e8ab3626d7d1ac"><div class="ttname"><a href="stack_8h.html#af865b416802140f6b6e8ab3626d7d1ac">ucx_stack_malloc</a></div><div class="ttdeci">void * ucx_stack_malloc(UcxStack *stack, size_t n)</div><div class="ttdoc">Allocates stack memory. </div><div class="ttdef"><b>Definition:</b> stack.c:53</div></div> 200.79 +<div class="ttc" id="stack_8h_html_af85e6f77a8341beb6188f9ae1a8e9f92"><div class="ttname"><a href="stack_8h.html#af85e6f77a8341beb6188f9ae1a8e9f92">ucx_stack_push</a></div><div class="ttdeci">void * ucx_stack_push(UcxStack *stack, size_t n, const void *data)</div><div class="ttdoc">Allocates memory with ucx_stack_malloc() and copies the specified data if the allocation was successf...</div><div class="ttdef"><b>Definition:</b> stack.c:148</div></div> 200.80 +<div class="ttc" id="structucx__stack__metadata_html"><div class="ttname"><a href="structucx__stack__metadata.html">ucx_stack_metadata</a></div><div class="ttdoc">Metadata for each UCX stack element. </div><div class="ttdef"><b>Definition:</b> stack.h:69</div></div> 200.81 +<div class="ttc" id="stack_8h_html_a0c678f96f6fabab49b2b034a1fe91c3a"><div class="ttname"><a href="stack_8h.html#a0c678f96f6fabab49b2b034a1fe91c3a">ucx_stack_realloc</a></div><div class="ttdeci">void * ucx_stack_realloc(UcxStack *stack, void *ptr, size_t n)</div><div class="ttdoc">Reallocates memory on the stack. </div><div class="ttdef"><b>Definition:</b> stack.c:79</div></div> 200.82 +<div class="ttc" id="structucx__stack__metadata_html_ad46d2e8e5b0acf05f2def41d451c5579"><div class="ttname"><a href="structucx__stack__metadata.html#ad46d2e8e5b0acf05f2def41d451c5579">ucx_stack_metadata::prev</a></div><div class="ttdeci">char * prev</div><div class="ttdoc">Location of the previous element (NULL if this is the first) </div><div class="ttdef"><b>Definition:</b> stack.h:73</div></div> 200.83 +<div class="ttc" id="stack_8h_html_a53cd2c7743dc8ad9cbd35ade0b4873e7"><div class="ttname"><a href="stack_8h.html#a53cd2c7743dc8ad9cbd35ade0b4873e7">ucx_stack_avail</a></div><div class="ttdeci">size_t ucx_stack_avail(UcxStack *stack)</div><div class="ttdoc">Returns the remaining available memory on the specified stack. </div><div class="ttdef"><b>Definition:</b> stack.c:135</div></div> 200.84 +<div class="ttc" id="structUcxAllocator_html"><div class="ttname"><a href="structUcxAllocator.html">UcxAllocator</a></div><div class="ttdoc">UCX allocator data structure containing memory management functions. </div><div class="ttdef"><b>Definition:</b> allocator.h:88</div></div> 200.85 +<div class="ttc" id="structUcxStack_html_af64d528744bf3a47fec87d2e45d2992f"><div class="ttname"><a href="structUcxStack.html#af64d528744bf3a47fec87d2e45d2992f">UcxStack::space</a></div><div class="ttdeci">char * space</div><div class="ttdoc">Pointer to the bottom of the stack. </div><div class="ttdef"><b>Definition:</b> stack.h:60</div></div> 200.86 +<div class="ttc" id="stack_8h_html_a07ea48f28eab474dcfefbb86fa66ef81"><div class="ttname"><a href="stack_8h.html#a07ea48f28eab474dcfefbb86fa66ef81">ucx_stack_popn</a></div><div class="ttdeci">void ucx_stack_popn(UcxStack *stack, void *dest, size_t n)</div><div class="ttdoc">Removes the top most element from the stack and copies the content to dest. </div><div class="ttdef"><b>Definition:</b> stack.c:118</div></div> 200.87 +<div class="ttc" id="allocator_8h_html"><div class="ttname"><a href="allocator_8h.html">allocator.h</a></div><div class="ttdoc">Allocator for custom memory management. </div></div> 200.88 +<div class="ttc" id="stack_8h_html_abaef685df4e7ef95cd7218984a0618fe"><div class="ttname"><a href="stack_8h.html#abaef685df4e7ef95cd7218984a0618fe">ucx_stack_init</a></div><div class="ttdeci">void ucx_stack_init(UcxStack *stack, char *space, size_t size)</div><div class="ttdoc">Initializes UcxStack structure with memory. </div><div class="ttdef"><b>Definition:</b> stack.c:41</div></div> 200.89 +<div class="ttc" id="structucx__stack__metadata_html_ae2a2848b721cfa44a7e963484c5e4b28"><div class="ttname"><a href="structucx__stack__metadata.html#ae2a2848b721cfa44a7e963484c5e4b28">ucx_stack_metadata::size</a></div><div class="ttdeci">size_t size</div><div class="ttdoc">Size of this element. </div><div class="ttdef"><b>Definition:</b> stack.h:76</div></div> 200.90 +<div class="ttc" id="stack_8h_html_a7bb138979191bba138e76ea37488fae2"><div class="ttname"><a href="stack_8h.html#a7bb138979191bba138e76ea37488fae2">ucx_stack_pusharr</a></div><div class="ttdeci">void * ucx_stack_pusharr(UcxStack *stack, size_t nelem, size_t elsize, const void *data)</div><div class="ttdoc">Allocates memory with ucx_stack_calloc() and copies the specified data if the allocation was successf...</div><div class="ttdef"><b>Definition:</b> stack.c:156</div></div> 200.91 +<div class="ttc" id="stack_8h_html_afdc467524b5e19a9a777c6bc03e17174"><div class="ttname"><a href="stack_8h.html#afdc467524b5e19a9a777c6bc03e17174">ucx_stack_calloc</a></div><div class="ttdeci">void * ucx_stack_calloc(UcxStack *stack, size_t nelem, size_t elsize)</div><div class="ttdoc">Allocates an array of stack memory. </div><div class="ttdef"><b>Definition:</b> stack.c:73</div></div> 200.92 +<div class="ttc" id="structUcxStack_html_af0ff6f58edce469f17683013b86ade27"><div class="ttname"><a href="structUcxStack.html#af0ff6f58edce469f17683013b86ade27">UcxStack::top</a></div><div class="ttdeci">char * top</div><div class="ttdoc">Pointer to the top of the stack. </div><div class="ttdef"><b>Definition:</b> stack.h:63</div></div> 200.93 +<div class="ttc" id="structUcxStack_html_a33cda4f6890ac56ab31701598bc1ae10"><div class="ttname"><a href="structUcxStack.html#a33cda4f6890ac56ab31701598bc1ae10">UcxStack::allocator</a></div><div class="ttdeci">UcxAllocator allocator</div><div class="ttdoc">UcxAllocator based on this stack. </div><div class="ttdef"><b>Definition:</b> stack.h:54</div></div> 200.94 +</div><!-- fragment --></div><!-- contents --> 200.95 +<!-- start footer part --> 200.96 +<hr class="footer"/><address class="footer"><small> 200.97 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 200.98 +<img class="footer" src="doxygen.png" alt="doxygen"/> 200.99 +</a> 1.8.13 200.100 +</small></address> 200.101 +</body> 200.102 +</html>
201.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 201.2 +++ b/docs/api-2.1/string_8h.html Sat Feb 06 19:11:44 2021 +0100 201.3 @@ -0,0 +1,2598 @@ 201.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 201.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 201.6 +<head> 201.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 201.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 201.9 +<meta name="generator" content="Doxygen 1.8.13"/> 201.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 201.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/string.h File Reference</title> 201.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 201.13 +<script type="text/javascript" src="jquery.js"></script> 201.14 +<script type="text/javascript" src="dynsections.js"></script> 201.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 201.16 +<script type="text/javascript" src="search/searchdata.js"></script> 201.17 +<script type="text/javascript" src="search/search.js"></script> 201.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 201.19 +</head> 201.20 +<body> 201.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 201.22 +<div id="titlearea"> 201.23 +<table cellspacing="0" cellpadding="0"> 201.24 + <tbody> 201.25 + <tr style="height: 56px;"> 201.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 201.27 + <td id="projectalign" style="padding-left: 0.5em;"> 201.28 + <div id="projectname">ucx 201.29 + </div> 201.30 + <div id="projectbrief">UAP Common Extensions</div> 201.31 + </td> 201.32 + </tr> 201.33 + </tbody> 201.34 +</table> 201.35 +</div> 201.36 +<!-- end header part --> 201.37 +<!-- Generated by Doxygen 1.8.13 --> 201.38 +<script type="text/javascript"> 201.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 201.40 +</script> 201.41 +<script type="text/javascript" src="menudata.js"></script> 201.42 +<script type="text/javascript" src="menu.js"></script> 201.43 +<script type="text/javascript"> 201.44 +$(function() { 201.45 + initMenu('',true,false,'search.php','Search'); 201.46 + $(document).ready(function() { init_search(); }); 201.47 +}); 201.48 +</script> 201.49 +<div id="main-nav"></div> 201.50 +<!-- window showing the filter options --> 201.51 +<div id="MSearchSelectWindow" 201.52 + onmouseover="return searchBox.OnSearchSelectShow()" 201.53 + onmouseout="return searchBox.OnSearchSelectHide()" 201.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 201.55 +</div> 201.56 + 201.57 +<!-- iframe showing the search results (closed by default) --> 201.58 +<div id="MSearchResultsWindow"> 201.59 +<iframe src="javascript:void(0)" frameborder="0" 201.60 + name="MSearchResults" id="MSearchResults"> 201.61 +</iframe> 201.62 +</div> 201.63 + 201.64 +<div id="nav-path" class="navpath"> 201.65 + <ul> 201.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 201.67 +</div> 201.68 +</div><!-- top --> 201.69 +<div class="header"> 201.70 + <div class="summary"> 201.71 +<a href="#nested-classes">Data Structures</a> | 201.72 +<a href="#define-members">Macros</a> | 201.73 +<a href="#func-members">Functions</a> </div> 201.74 + <div class="headertitle"> 201.75 +<div class="title">string.h File Reference</div> </div> 201.76 +</div><!--header--> 201.77 +<div class="contents"> 201.78 + 201.79 +<p>Bounded string implementation. 201.80 +<a href="#details">More...</a></p> 201.81 +<div class="textblock"><code>#include "<a class="el" href="ucx_8h_source.html">ucx.h</a>"</code><br /> 201.82 +<code>#include "<a class="el" href="allocator_8h_source.html">allocator.h</a>"</code><br /> 201.83 +<code>#include <stddef.h></code><br /> 201.84 +</div> 201.85 +<p><a href="string_8h_source.html">Go to the source code of this file.</a></p> 201.86 +<table class="memberdecls"> 201.87 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> 201.88 +Data Structures</h2></td></tr> 201.89 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structsstr__t.html">sstr_t</a></td></tr> 201.90 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The UCX string structure. <a href="structsstr__t.html#details">More...</a><br /></td></tr> 201.91 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 201.92 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structscstr__t.html">scstr_t</a></td></tr> 201.93 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">The UCX string structure for immutable (constant) strings. <a href="structscstr__t.html#details">More...</a><br /></td></tr> 201.94 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 201.95 +</table><table class="memberdecls"> 201.96 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> 201.97 +Macros</h2></td></tr> 201.98 +<tr class="memitem:a9037956cca97a4e84b642f17f3d10378"><td class="memItemLeft" align="right" valign="top"><a id="a9037956cca97a4e84b642f17f3d10378"></a> 201.99 +#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a9037956cca97a4e84b642f17f3d10378">ST</a>(s)   { s, sizeof(s)-1 }</td></tr> 201.100 +<tr class="memdesc:a9037956cca97a4e84b642f17f3d10378"><td class="mdescLeft"> </td><td class="mdescRight">Shortcut for a <code><a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> struct</code> or <code><a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> struct</code> literal. <br /></td></tr> 201.101 +<tr class="separator:a9037956cca97a4e84b642f17f3d10378"><td class="memSeparator" colspan="2"> </td></tr> 201.102 +<tr class="memitem:a8fa17c8cf4c36df48f4108c36da8573e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a8fa17c8cf4c36df48f4108c36da8573e">S</a>(s)   <a class="el" href="string_8h.html#a2744c38ac44abf3e01fa059056dcf36c">sstrn</a>(s, sizeof(s)-1)</td></tr> 201.103 +<tr class="memdesc:a8fa17c8cf4c36df48f4108c36da8573e"><td class="mdescLeft"> </td><td class="mdescRight">Shortcut for the conversion of a C string to a <code><a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a></code>. <a href="#a8fa17c8cf4c36df48f4108c36da8573e">More...</a><br /></td></tr> 201.104 +<tr class="separator:a8fa17c8cf4c36df48f4108c36da8573e"><td class="memSeparator" colspan="2"> </td></tr> 201.105 +<tr class="memitem:a7d261dd0bc358c957a368bc058c1ce53"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a7d261dd0bc358c957a368bc058c1ce53">SC</a>(s)   <a class="el" href="string_8h.html#ae594f6e222ea394cef6a26c0dfad000d">scstrn</a>(s, sizeof(s)-1)</td></tr> 201.106 +<tr class="memdesc:a7d261dd0bc358c957a368bc058c1ce53"><td class="mdescLeft"> </td><td class="mdescRight">Shortcut for the conversion of a C string to a <code><a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a></code>. <a href="#a7d261dd0bc358c957a368bc058c1ce53">More...</a><br /></td></tr> 201.107 +<tr class="separator:a7d261dd0bc358c957a368bc058c1ce53"><td class="memSeparator" colspan="2"> </td></tr> 201.108 +<tr class="memitem:a23ed51e87385886bb65e8cd19c839362"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a23ed51e87385886bb65e8cd19c839362">SFMT</a>(s)   (int) (s).length, (s).ptr</td></tr> 201.109 +<tr class="memdesc:a23ed51e87385886bb65e8cd19c839362"><td class="mdescLeft"> </td><td class="mdescRight">Expands a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> or <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> to printf arguments. <a href="#a23ed51e87385886bb65e8cd19c839362">More...</a><br /></td></tr> 201.110 +<tr class="separator:a23ed51e87385886bb65e8cd19c839362"><td class="memSeparator" colspan="2"> </td></tr> 201.111 +<tr class="memitem:a7d5bc48708405a28b23667e32dfcecae"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a7d5bc48708405a28b23667e32dfcecae">PRIsstr</a>   ".*s"</td></tr> 201.112 +<tr class="memdesc:a7d5bc48708405a28b23667e32dfcecae"><td class="mdescLeft"> </td><td class="mdescRight">Format specifier for a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> or <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a>. <a href="#a7d5bc48708405a28b23667e32dfcecae">More...</a><br /></td></tr> 201.113 +<tr class="separator:a7d5bc48708405a28b23667e32dfcecae"><td class="memSeparator" colspan="2"> </td></tr> 201.114 +<tr class="memitem:ad4293350a9b39a23a6546bd0fef2aeed"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(str)   <a class="el" href="string_8h.html#aedeb5d7bddda54116101a8d68af8c56d">ucx_ss2c_s</a>(str)</td></tr> 201.115 +<tr class="memdesc:ad4293350a9b39a23a6546bd0fef2aeed"><td class="mdescLeft"> </td><td class="mdescRight">Converts a UCX string to an immutable UCX string (<a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a>). <a href="#ad4293350a9b39a23a6546bd0fef2aeed">More...</a><br /></td></tr> 201.116 +<tr class="separator:ad4293350a9b39a23a6546bd0fef2aeed"><td class="memSeparator" colspan="2"> </td></tr> 201.117 +<tr class="memitem:a33fa945acc5ac2ce962e5ef13cf1638c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a33fa945acc5ac2ce962e5ef13cf1638c">sstrnlen</a>(count, ...)   <a class="el" href="string_8h.html#ac1b000030d6d197eec48c15a182055d5">scstrnlen</a>(count, __VA_ARGS__)</td></tr> 201.118 +<tr class="memdesc:a33fa945acc5ac2ce962e5ef13cf1638c"><td class="mdescLeft"> </td><td class="mdescRight">Returns the accumulated length of all specified strings. <a href="#a33fa945acc5ac2ce962e5ef13cf1638c">More...</a><br /></td></tr> 201.119 +<tr class="separator:a33fa945acc5ac2ce962e5ef13cf1638c"><td class="memSeparator" colspan="2"> </td></tr> 201.120 +<tr class="memitem:a6af8a4c347c7fdb5980d4c4803be2759"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a6af8a4c347c7fdb5980d4c4803be2759">sstrcat</a>(count, s1, ...)   <a class="el" href="string_8h.html#a7376842c19e954b49215da81ef76ac0c">scstrcat</a>(count, <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(s1), __VA_ARGS__)</td></tr> 201.121 +<tr class="memdesc:a6af8a4c347c7fdb5980d4c4803be2759"><td class="mdescLeft"> </td><td class="mdescRight">Concatenates two or more strings. <a href="#a6af8a4c347c7fdb5980d4c4803be2759">More...</a><br /></td></tr> 201.122 +<tr class="separator:a6af8a4c347c7fdb5980d4c4803be2759"><td class="memSeparator" colspan="2"> </td></tr> 201.123 +<tr class="memitem:a6068d460f9bc05962666a917d26568b3"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a6068d460f9bc05962666a917d26568b3">sstrcat_a</a>(alloc, count, s1, ...)   <a class="el" href="string_8h.html#abacce4cbd6f70fcb6453904ef08b02e9">scstrcat_a</a>(alloc, count, <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(s1), __VA_ARGS__)</td></tr> 201.124 +<tr class="memdesc:a6068d460f9bc05962666a917d26568b3"><td class="mdescLeft"> </td><td class="mdescRight">Concatenates two or more strings using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. <a href="#a6068d460f9bc05962666a917d26568b3">More...</a><br /></td></tr> 201.125 +<tr class="separator:a6068d460f9bc05962666a917d26568b3"><td class="memSeparator" colspan="2"> </td></tr> 201.126 +<tr class="memitem:a9d03be026afa9447c52bb34b9e3b895a"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a9d03be026afa9447c52bb34b9e3b895a">sstrstr</a>(string, match)   <a class="el" href="string_8h.html#aa4362cb36c6629f9d8484739fd827748">scstrsstr</a>(string, <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(match))</td></tr> 201.127 +<tr class="memdesc:a9d03be026afa9447c52bb34b9e3b895a"><td class="mdescLeft"> </td><td class="mdescRight">Returns a substring starting at the location of the first occurrence of the specified string. <a href="#a9d03be026afa9447c52bb34b9e3b895a">More...</a><br /></td></tr> 201.128 +<tr class="separator:a9d03be026afa9447c52bb34b9e3b895a"><td class="memSeparator" colspan="2"> </td></tr> 201.129 +<tr class="memitem:aa696932213265e10f864678686f4ccde"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#aa696932213265e10f864678686f4ccde">sstrscstr</a>(string, match)   <a class="el" href="string_8h.html#a54f256c3abe811c52d58b4ff1b23f051">scstrscstr</a>(string, <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(match))</td></tr> 201.130 +<tr class="memdesc:aa696932213265e10f864678686f4ccde"><td class="mdescLeft"> </td><td class="mdescRight">Returns an immutable substring starting at the location of the first occurrence of the specified immutable string. <a href="#aa696932213265e10f864678686f4ccde">More...</a><br /></td></tr> 201.131 +<tr class="separator:aa696932213265e10f864678686f4ccde"><td class="memSeparator" colspan="2"> </td></tr> 201.132 +<tr class="memitem:aa929984004c3576bfafb95031aca8eb7"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#aa929984004c3576bfafb95031aca8eb7">sstrsplit</a>(string, delim, count)   <a class="el" href="string_8h.html#ae71cac352b00230848bde358f0fb05ea">scstrsplit</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(delim), count)</td></tr> 201.133 +<tr class="memdesc:aa929984004c3576bfafb95031aca8eb7"><td class="mdescLeft"> </td><td class="mdescRight">Splits a string into parts by using a delimiter string. <a href="#aa929984004c3576bfafb95031aca8eb7">More...</a><br /></td></tr> 201.134 +<tr class="separator:aa929984004c3576bfafb95031aca8eb7"><td class="memSeparator" colspan="2"> </td></tr> 201.135 +<tr class="memitem:ac9f69fa3a17e26a3a5f9d985b5844601"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#ac9f69fa3a17e26a3a5f9d985b5844601">sstrsplit_a</a>(allocator, string, delim, count)   <a class="el" href="string_8h.html#a52906455ae530c9cdc6812c8e6d9bdef">scstrsplit_a</a>(allocator, <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(delim), count)</td></tr> 201.136 +<tr class="memdesc:ac9f69fa3a17e26a3a5f9d985b5844601"><td class="mdescLeft"> </td><td class="mdescRight">Performing <a class="el" href="string_8h.html#aa929984004c3576bfafb95031aca8eb7" title="Splits a string into parts by using a delimiter string. ">sstrsplit()</a> using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. <a href="#ac9f69fa3a17e26a3a5f9d985b5844601">More...</a><br /></td></tr> 201.137 +<tr class="separator:ac9f69fa3a17e26a3a5f9d985b5844601"><td class="memSeparator" colspan="2"> </td></tr> 201.138 +<tr class="memitem:a7ae7156c8de57454ca38d306100b8160"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a7ae7156c8de57454ca38d306100b8160">sstrcmp</a>(s1, s2)   <a class="el" href="string_8h.html#af35272a8e5408c88ed3e25a3a98f0a82">scstrcmp</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(s1), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(s2))</td></tr> 201.139 +<tr class="memdesc:a7ae7156c8de57454ca38d306100b8160"><td class="mdescLeft"> </td><td class="mdescRight">Compares two UCX strings with standard <code>memcmp()</code>. <a href="#a7ae7156c8de57454ca38d306100b8160">More...</a><br /></td></tr> 201.140 +<tr class="separator:a7ae7156c8de57454ca38d306100b8160"><td class="memSeparator" colspan="2"> </td></tr> 201.141 +<tr class="memitem:a81b0f6df794152c2038703d4e9d0ad59"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a81b0f6df794152c2038703d4e9d0ad59">sstrcasecmp</a>(s1, s2)   <a class="el" href="string_8h.html#aca8142fb823d253054e17c17cfca05e0">scstrcasecmp</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(s1), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(s2))</td></tr> 201.142 +<tr class="memdesc:a81b0f6df794152c2038703d4e9d0ad59"><td class="mdescLeft"> </td><td class="mdescRight">Compares two UCX strings ignoring the case. <a href="#a81b0f6df794152c2038703d4e9d0ad59">More...</a><br /></td></tr> 201.143 +<tr class="separator:a81b0f6df794152c2038703d4e9d0ad59"><td class="memSeparator" colspan="2"> </td></tr> 201.144 +<tr class="memitem:accbfd2b459a028d7af9fb7df6f977d80"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#accbfd2b459a028d7af9fb7df6f977d80">sstrdup</a>(string)   <a class="el" href="string_8h.html#a97dccce03af419596dbdd592ca46a164">scstrdup</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string))</td></tr> 201.145 +<tr class="memdesc:accbfd2b459a028d7af9fb7df6f977d80"><td class="mdescLeft"> </td><td class="mdescRight">Creates a duplicate of the specified string. <a href="#accbfd2b459a028d7af9fb7df6f977d80">More...</a><br /></td></tr> 201.146 +<tr class="separator:accbfd2b459a028d7af9fb7df6f977d80"><td class="memSeparator" colspan="2"> </td></tr> 201.147 +<tr class="memitem:a8d098baada4ea9ad5d8b6343b5aec007"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a8d098baada4ea9ad5d8b6343b5aec007">sstrdup_a</a>(allocator, string)   <a class="el" href="string_8h.html#a8fe58921f51eb1fde038472377e63014">scstrdup_a</a>(allocator, <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string))</td></tr> 201.148 +<tr class="memdesc:a8d098baada4ea9ad5d8b6343b5aec007"><td class="mdescLeft"> </td><td class="mdescRight">Creates a duplicate of the specified string using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. <a href="#a8d098baada4ea9ad5d8b6343b5aec007">More...</a><br /></td></tr> 201.149 +<tr class="separator:a8d098baada4ea9ad5d8b6343b5aec007"><td class="memSeparator" colspan="2"> </td></tr> 201.150 +<tr class="memitem:a7d73b66256384b26927e787318fdefa2"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a7d73b66256384b26927e787318fdefa2">sstrprefix</a>(string, prefix)   <a class="el" href="string_8h.html#a599ddc2f88dd1df68b72eefd91347393">scstrprefix</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(prefix))</td></tr> 201.151 +<tr class="memdesc:a7d73b66256384b26927e787318fdefa2"><td class="mdescLeft"> </td><td class="mdescRight">Checks, if a string has a specific prefix. <a href="#a7d73b66256384b26927e787318fdefa2">More...</a><br /></td></tr> 201.152 +<tr class="separator:a7d73b66256384b26927e787318fdefa2"><td class="memSeparator" colspan="2"> </td></tr> 201.153 +<tr class="memitem:ac6a5246f26be2e8a5f34d8995b7ec14e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#ac6a5246f26be2e8a5f34d8995b7ec14e">sstrsuffix</a>(string, suffix)   <a class="el" href="string_8h.html#a1f0ae316a2afe85d5b4655e6ece6721a">scstrsuffix</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(suffix))</td></tr> 201.154 +<tr class="memdesc:ac6a5246f26be2e8a5f34d8995b7ec14e"><td class="mdescLeft"> </td><td class="mdescRight">Checks, if a string has a specific suffix. <a href="#ac6a5246f26be2e8a5f34d8995b7ec14e">More...</a><br /></td></tr> 201.155 +<tr class="separator:ac6a5246f26be2e8a5f34d8995b7ec14e"><td class="memSeparator" colspan="2"> </td></tr> 201.156 +<tr class="memitem:acd3dc64e90db9b4046e14f115a815ff4"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#acd3dc64e90db9b4046e14f115a815ff4">sstrcaseprefix</a>(string, prefix)   <a class="el" href="string_8h.html#a3718ef4aa1e86cdb26bda2f07fb585df">scstrcaseprefix</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(prefix))</td></tr> 201.157 +<tr class="memdesc:acd3dc64e90db9b4046e14f115a815ff4"><td class="mdescLeft"> </td><td class="mdescRight">Checks, if a string has a specific prefix, ignoring the case. <a href="#acd3dc64e90db9b4046e14f115a815ff4">More...</a><br /></td></tr> 201.158 +<tr class="separator:acd3dc64e90db9b4046e14f115a815ff4"><td class="memSeparator" colspan="2"> </td></tr> 201.159 +<tr class="memitem:a57eabd4862d531dd685bbf2feb8468bf"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a57eabd4862d531dd685bbf2feb8468bf">sstrcasesuffix</a>(string, suffix)   <a class="el" href="string_8h.html#a6edb4b85f2b9efe79db7ffe6eccd7bc3">scstrcasesuffix</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(suffix))</td></tr> 201.160 +<tr class="memdesc:a57eabd4862d531dd685bbf2feb8468bf"><td class="mdescLeft"> </td><td class="mdescRight">Checks, if a string has a specific suffix, ignoring the case. <a href="#a57eabd4862d531dd685bbf2feb8468bf">More...</a><br /></td></tr> 201.161 +<tr class="separator:a57eabd4862d531dd685bbf2feb8468bf"><td class="memSeparator" colspan="2"> </td></tr> 201.162 +<tr class="memitem:a89343ea3e719f00ee802b557db57b769"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a89343ea3e719f00ee802b557db57b769">sstrlower</a>(string)   <a class="el" href="string_8h.html#abccf198bea3186ff2abb080cc88dcae6">scstrlower</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string))</td></tr> 201.163 +<tr class="memdesc:a89343ea3e719f00ee802b557db57b769"><td class="mdescLeft"> </td><td class="mdescRight">Returns a lower case version of a string. <a href="#a89343ea3e719f00ee802b557db57b769">More...</a><br /></td></tr> 201.164 +<tr class="separator:a89343ea3e719f00ee802b557db57b769"><td class="memSeparator" colspan="2"> </td></tr> 201.165 +<tr class="memitem:a4bb4742fe71115f493991d307cb22b23"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a4bb4742fe71115f493991d307cb22b23">sstrlower_a</a>(allocator, string)   <a class="el" href="string_8h.html#a3cf1e557df7ab58d03c78832c4060276">scstrlower_a</a>(allocator, <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string))</td></tr> 201.166 +<tr class="memdesc:a4bb4742fe71115f493991d307cb22b23"><td class="mdescLeft"> </td><td class="mdescRight">Returns a lower case version of a string. <a href="#a4bb4742fe71115f493991d307cb22b23">More...</a><br /></td></tr> 201.167 +<tr class="separator:a4bb4742fe71115f493991d307cb22b23"><td class="memSeparator" colspan="2"> </td></tr> 201.168 +<tr class="memitem:a084fe5a3a90d6fb6b15ecda03bb30824"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a084fe5a3a90d6fb6b15ecda03bb30824">sstrupper</a>(string)   <a class="el" href="string_8h.html#af3dd09ec9d11162fe0075f4e60f41240">scstrupper</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string))</td></tr> 201.169 +<tr class="memdesc:a084fe5a3a90d6fb6b15ecda03bb30824"><td class="mdescLeft"> </td><td class="mdescRight">Returns a upper case version of a string. <a href="#a084fe5a3a90d6fb6b15ecda03bb30824">More...</a><br /></td></tr> 201.170 +<tr class="separator:a084fe5a3a90d6fb6b15ecda03bb30824"><td class="memSeparator" colspan="2"> </td></tr> 201.171 +<tr class="memitem:a5f0dd83c0176b812fb428004b2877a34"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a5f0dd83c0176b812fb428004b2877a34">sstrupper_a</a>(allocator, string)   <a class="el" href="string_8h.html#aea94613eb74668cc05d365803d32bfad">scstrupper_a</a>(allocator, string)</td></tr> 201.172 +<tr class="memdesc:a5f0dd83c0176b812fb428004b2877a34"><td class="mdescLeft"> </td><td class="mdescRight">Returns a upper case version of a string. <a href="#a5f0dd83c0176b812fb428004b2877a34">More...</a><br /></td></tr> 201.173 +<tr class="separator:a5f0dd83c0176b812fb428004b2877a34"><td class="memSeparator" colspan="2"> </td></tr> 201.174 +</table><table class="memberdecls"> 201.175 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 201.176 +Functions</h2></td></tr> 201.177 +<tr class="memitem:a69d5e3eeec783cc43314df71248768f5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structscstr__t.html">scstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a69d5e3eeec783cc43314df71248768f5">ucx_sc2sc</a> (<a class="el" href="structscstr__t.html">scstr_t</a> str)</td></tr> 201.178 +<tr class="memdesc:a69d5e3eeec783cc43314df71248768f5"><td class="mdescLeft"> </td><td class="mdescRight">One of two type adjustment functions that return an <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a>. <a href="#a69d5e3eeec783cc43314df71248768f5">More...</a><br /></td></tr> 201.179 +<tr class="separator:a69d5e3eeec783cc43314df71248768f5"><td class="memSeparator" colspan="2"> </td></tr> 201.180 +<tr class="memitem:a9ce5ad1b2aa2dbeba204d452c2e64359"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structscstr__t.html">scstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a9ce5ad1b2aa2dbeba204d452c2e64359">ucx_ss2sc</a> (<a class="el" href="structsstr__t.html">sstr_t</a> str)</td></tr> 201.181 +<tr class="memdesc:a9ce5ad1b2aa2dbeba204d452c2e64359"><td class="mdescLeft"> </td><td class="mdescRight">One of two type adjustment functions that return an <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a>. <a href="#a9ce5ad1b2aa2dbeba204d452c2e64359">More...</a><br /></td></tr> 201.182 +<tr class="separator:a9ce5ad1b2aa2dbeba204d452c2e64359"><td class="memSeparator" colspan="2"> </td></tr> 201.183 +<tr class="memitem:aedeb5d7bddda54116101a8d68af8c56d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structscstr__t.html">scstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#aedeb5d7bddda54116101a8d68af8c56d">ucx_ss2c_s</a> ()</td></tr> 201.184 +<tr class="memdesc:aedeb5d7bddda54116101a8d68af8c56d"><td class="mdescLeft"> </td><td class="mdescRight">Converts a UCX string to an immutable UCX string (<a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a>). <a href="#aedeb5d7bddda54116101a8d68af8c56d">More...</a><br /></td></tr> 201.185 +<tr class="separator:aedeb5d7bddda54116101a8d68af8c56d"><td class="memSeparator" colspan="2"> </td></tr> 201.186 +<tr class="memitem:a539eb7059251a051ee5d179526a23e9a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a539eb7059251a051ee5d179526a23e9a">sstr</a> (char *cstring)</td></tr> 201.187 +<tr class="memdesc:a539eb7059251a051ee5d179526a23e9a"><td class="mdescLeft"> </td><td class="mdescRight">Creates a new <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> based on a C string. <a href="#a539eb7059251a051ee5d179526a23e9a">More...</a><br /></td></tr> 201.188 +<tr class="separator:a539eb7059251a051ee5d179526a23e9a"><td class="memSeparator" colspan="2"> </td></tr> 201.189 +<tr class="memitem:a2744c38ac44abf3e01fa059056dcf36c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a2744c38ac44abf3e01fa059056dcf36c">sstrn</a> (char *cstring, size_t length)</td></tr> 201.190 +<tr class="memdesc:a2744c38ac44abf3e01fa059056dcf36c"><td class="mdescLeft"> </td><td class="mdescRight">Creates a new <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> of the specified length based on a C string. <a href="#a2744c38ac44abf3e01fa059056dcf36c">More...</a><br /></td></tr> 201.191 +<tr class="separator:a2744c38ac44abf3e01fa059056dcf36c"><td class="memSeparator" colspan="2"> </td></tr> 201.192 +<tr class="memitem:a2b1d6f1eca1c1549f37107b9c026c5a6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structscstr__t.html">scstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a2b1d6f1eca1c1549f37107b9c026c5a6">scstr</a> (const char *cstring)</td></tr> 201.193 +<tr class="memdesc:a2b1d6f1eca1c1549f37107b9c026c5a6"><td class="mdescLeft"> </td><td class="mdescRight">Creates a new <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> based on a constant C string. <a href="#a2b1d6f1eca1c1549f37107b9c026c5a6">More...</a><br /></td></tr> 201.194 +<tr class="separator:a2b1d6f1eca1c1549f37107b9c026c5a6"><td class="memSeparator" colspan="2"> </td></tr> 201.195 +<tr class="memitem:ae594f6e222ea394cef6a26c0dfad000d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structscstr__t.html">scstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#ae594f6e222ea394cef6a26c0dfad000d">scstrn</a> (const char *cstring, size_t length)</td></tr> 201.196 +<tr class="memdesc:ae594f6e222ea394cef6a26c0dfad000d"><td class="mdescLeft"> </td><td class="mdescRight">Creates a new <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> of the specified length based on a constant C string. <a href="#ae594f6e222ea394cef6a26c0dfad000d">More...</a><br /></td></tr> 201.197 +<tr class="separator:ae594f6e222ea394cef6a26c0dfad000d"><td class="memSeparator" colspan="2"> </td></tr> 201.198 +<tr class="memitem:ac1b000030d6d197eec48c15a182055d5"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#ac1b000030d6d197eec48c15a182055d5">scstrnlen</a> (size_t count,...)</td></tr> 201.199 +<tr class="memdesc:ac1b000030d6d197eec48c15a182055d5"><td class="mdescLeft"> </td><td class="mdescRight">Returns the accumulated length of all specified strings. <a href="#ac1b000030d6d197eec48c15a182055d5">More...</a><br /></td></tr> 201.200 +<tr class="separator:ac1b000030d6d197eec48c15a182055d5"><td class="memSeparator" colspan="2"> </td></tr> 201.201 +<tr class="memitem:a7376842c19e954b49215da81ef76ac0c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a7376842c19e954b49215da81ef76ac0c">scstrcat</a> (size_t count, <a class="el" href="structscstr__t.html">scstr_t</a> s1,...)</td></tr> 201.202 +<tr class="memdesc:a7376842c19e954b49215da81ef76ac0c"><td class="mdescLeft"> </td><td class="mdescRight">Concatenates two or more strings. <a href="#a7376842c19e954b49215da81ef76ac0c">More...</a><br /></td></tr> 201.203 +<tr class="separator:a7376842c19e954b49215da81ef76ac0c"><td class="memSeparator" colspan="2"> </td></tr> 201.204 +<tr class="memitem:abacce4cbd6f70fcb6453904ef08b02e9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#abacce4cbd6f70fcb6453904ef08b02e9">scstrcat_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *alloc, size_t count, <a class="el" href="structscstr__t.html">scstr_t</a> s1,...)</td></tr> 201.205 +<tr class="memdesc:abacce4cbd6f70fcb6453904ef08b02e9"><td class="mdescLeft"> </td><td class="mdescRight">Concatenates two or more strings using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. <a href="#abacce4cbd6f70fcb6453904ef08b02e9">More...</a><br /></td></tr> 201.206 +<tr class="separator:abacce4cbd6f70fcb6453904ef08b02e9"><td class="memSeparator" colspan="2"> </td></tr> 201.207 +<tr class="memitem:a5eb9e0e1f26cf7fbecc038cd90e8b258"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a5eb9e0e1f26cf7fbecc038cd90e8b258">sstrsubs</a> (<a class="el" href="structsstr__t.html">sstr_t</a> string, size_t start)</td></tr> 201.208 +<tr class="memdesc:a5eb9e0e1f26cf7fbecc038cd90e8b258"><td class="mdescLeft"> </td><td class="mdescRight">Returns a substring starting at the specified location. <a href="#a5eb9e0e1f26cf7fbecc038cd90e8b258">More...</a><br /></td></tr> 201.209 +<tr class="separator:a5eb9e0e1f26cf7fbecc038cd90e8b258"><td class="memSeparator" colspan="2"> </td></tr> 201.210 +<tr class="memitem:a78925c91af54f23cebd20ff99ef4331a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a78925c91af54f23cebd20ff99ef4331a">sstrsubsl</a> (<a class="el" href="structsstr__t.html">sstr_t</a> string, size_t start, size_t length)</td></tr> 201.211 +<tr class="memdesc:a78925c91af54f23cebd20ff99ef4331a"><td class="mdescLeft"> </td><td class="mdescRight">Returns a substring with the given length starting at the specified location. <a href="#a78925c91af54f23cebd20ff99ef4331a">More...</a><br /></td></tr> 201.212 +<tr class="separator:a78925c91af54f23cebd20ff99ef4331a"><td class="memSeparator" colspan="2"> </td></tr> 201.213 +<tr class="memitem:a9a6c8d8db0dda0037c3c852cce1a5060"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structscstr__t.html">scstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a9a6c8d8db0dda0037c3c852cce1a5060">scstrsubs</a> (<a class="el" href="structscstr__t.html">scstr_t</a> string, size_t start)</td></tr> 201.214 +<tr class="memdesc:a9a6c8d8db0dda0037c3c852cce1a5060"><td class="mdescLeft"> </td><td class="mdescRight">Returns a substring of an immutable string starting at the specified location. <a href="#a9a6c8d8db0dda0037c3c852cce1a5060">More...</a><br /></td></tr> 201.215 +<tr class="separator:a9a6c8d8db0dda0037c3c852cce1a5060"><td class="memSeparator" colspan="2"> </td></tr> 201.216 +<tr class="memitem:ad50f0f67b906fad0744f46bcb51e144b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structscstr__t.html">scstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#ad50f0f67b906fad0744f46bcb51e144b">scstrsubsl</a> (<a class="el" href="structscstr__t.html">scstr_t</a> string, size_t start, size_t length)</td></tr> 201.217 +<tr class="memdesc:ad50f0f67b906fad0744f46bcb51e144b"><td class="mdescLeft"> </td><td class="mdescRight">Returns a substring of an immutable string with a maximum length starting at the specified location. <a href="#ad50f0f67b906fad0744f46bcb51e144b">More...</a><br /></td></tr> 201.218 +<tr class="separator:ad50f0f67b906fad0744f46bcb51e144b"><td class="memSeparator" colspan="2"> </td></tr> 201.219 +<tr class="memitem:af80898a0b75955eb2579298c3ae2c481"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#af80898a0b75955eb2579298c3ae2c481">sstrchr</a> (<a class="el" href="structsstr__t.html">sstr_t</a> string, int chr)</td></tr> 201.220 +<tr class="memdesc:af80898a0b75955eb2579298c3ae2c481"><td class="mdescLeft"> </td><td class="mdescRight">Returns a substring starting at the location of the first occurrence of the specified character. <a href="#af80898a0b75955eb2579298c3ae2c481">More...</a><br /></td></tr> 201.221 +<tr class="separator:af80898a0b75955eb2579298c3ae2c481"><td class="memSeparator" colspan="2"> </td></tr> 201.222 +<tr class="memitem:adae3f59957ca328e1da5285cb8b02a72"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#adae3f59957ca328e1da5285cb8b02a72">sstrrchr</a> (<a class="el" href="structsstr__t.html">sstr_t</a> string, int chr)</td></tr> 201.223 +<tr class="memdesc:adae3f59957ca328e1da5285cb8b02a72"><td class="mdescLeft"> </td><td class="mdescRight">Returns a substring starting at the location of the last occurrence of the specified character. <a href="#adae3f59957ca328e1da5285cb8b02a72">More...</a><br /></td></tr> 201.224 +<tr class="separator:adae3f59957ca328e1da5285cb8b02a72"><td class="memSeparator" colspan="2"> </td></tr> 201.225 +<tr class="memitem:a5836d6a7a744791c35e5c17bdc394a87"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structscstr__t.html">scstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a5836d6a7a744791c35e5c17bdc394a87">scstrchr</a> (<a class="el" href="structscstr__t.html">scstr_t</a> string, int chr)</td></tr> 201.226 +<tr class="memdesc:a5836d6a7a744791c35e5c17bdc394a87"><td class="mdescLeft"> </td><td class="mdescRight">Returns an immutable substring starting at the location of the first occurrence of the specified character. <a href="#a5836d6a7a744791c35e5c17bdc394a87">More...</a><br /></td></tr> 201.227 +<tr class="separator:a5836d6a7a744791c35e5c17bdc394a87"><td class="memSeparator" colspan="2"> </td></tr> 201.228 +<tr class="memitem:ae389835b97cd9382e7d6a6a075323376"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structscstr__t.html">scstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#ae389835b97cd9382e7d6a6a075323376">scstrrchr</a> (<a class="el" href="structscstr__t.html">scstr_t</a> string, int chr)</td></tr> 201.229 +<tr class="memdesc:ae389835b97cd9382e7d6a6a075323376"><td class="mdescLeft"> </td><td class="mdescRight">Returns an immutable substring starting at the location of the last occurrence of the specified character. <a href="#ae389835b97cd9382e7d6a6a075323376">More...</a><br /></td></tr> 201.230 +<tr class="separator:ae389835b97cd9382e7d6a6a075323376"><td class="memSeparator" colspan="2"> </td></tr> 201.231 +<tr class="memitem:aa4362cb36c6629f9d8484739fd827748"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#aa4362cb36c6629f9d8484739fd827748">scstrsstr</a> (<a class="el" href="structsstr__t.html">sstr_t</a> string, <a class="el" href="structscstr__t.html">scstr_t</a> match)</td></tr> 201.232 +<tr class="memdesc:aa4362cb36c6629f9d8484739fd827748"><td class="mdescLeft"> </td><td class="mdescRight">Returns a substring starting at the location of the first occurrence of the specified string. <a href="#aa4362cb36c6629f9d8484739fd827748">More...</a><br /></td></tr> 201.233 +<tr class="separator:aa4362cb36c6629f9d8484739fd827748"><td class="memSeparator" colspan="2"> </td></tr> 201.234 +<tr class="memitem:a54f256c3abe811c52d58b4ff1b23f051"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structscstr__t.html">scstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a54f256c3abe811c52d58b4ff1b23f051">scstrscstr</a> (<a class="el" href="structscstr__t.html">scstr_t</a> string, <a class="el" href="structscstr__t.html">scstr_t</a> match)</td></tr> 201.235 +<tr class="memdesc:a54f256c3abe811c52d58b4ff1b23f051"><td class="mdescLeft"> </td><td class="mdescRight">Returns an immutable substring starting at the location of the first occurrence of the specified immutable string. <a href="#a54f256c3abe811c52d58b4ff1b23f051">More...</a><br /></td></tr> 201.236 +<tr class="separator:a54f256c3abe811c52d58b4ff1b23f051"><td class="memSeparator" colspan="2"> </td></tr> 201.237 +<tr class="memitem:ae71cac352b00230848bde358f0fb05ea"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#ae71cac352b00230848bde358f0fb05ea">scstrsplit</a> (<a class="el" href="structscstr__t.html">scstr_t</a> string, <a class="el" href="structscstr__t.html">scstr_t</a> delim, ssize_t *count)</td></tr> 201.238 +<tr class="memdesc:ae71cac352b00230848bde358f0fb05ea"><td class="mdescLeft"> </td><td class="mdescRight">Splits a string into parts by using a delimiter string. <a href="#ae71cac352b00230848bde358f0fb05ea">More...</a><br /></td></tr> 201.239 +<tr class="separator:ae71cac352b00230848bde358f0fb05ea"><td class="memSeparator" colspan="2"> </td></tr> 201.240 +<tr class="memitem:a52906455ae530c9cdc6812c8e6d9bdef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a52906455ae530c9cdc6812c8e6d9bdef">scstrsplit_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="el" href="structscstr__t.html">scstr_t</a> string, <a class="el" href="structscstr__t.html">scstr_t</a> delim, ssize_t *count)</td></tr> 201.241 +<tr class="memdesc:a52906455ae530c9cdc6812c8e6d9bdef"><td class="mdescLeft"> </td><td class="mdescRight">Performing <a class="el" href="string_8h.html#ae71cac352b00230848bde358f0fb05ea" title="Splits a string into parts by using a delimiter string. ">scstrsplit()</a> using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. <a href="#a52906455ae530c9cdc6812c8e6d9bdef">More...</a><br /></td></tr> 201.242 +<tr class="separator:a52906455ae530c9cdc6812c8e6d9bdef"><td class="memSeparator" colspan="2"> </td></tr> 201.243 +<tr class="memitem:af35272a8e5408c88ed3e25a3a98f0a82"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#af35272a8e5408c88ed3e25a3a98f0a82">scstrcmp</a> (<a class="el" href="structscstr__t.html">scstr_t</a> s1, <a class="el" href="structscstr__t.html">scstr_t</a> s2)</td></tr> 201.244 +<tr class="memdesc:af35272a8e5408c88ed3e25a3a98f0a82"><td class="mdescLeft"> </td><td class="mdescRight">Compares two UCX strings with standard <code>memcmp()</code>. <a href="#af35272a8e5408c88ed3e25a3a98f0a82">More...</a><br /></td></tr> 201.245 +<tr class="separator:af35272a8e5408c88ed3e25a3a98f0a82"><td class="memSeparator" colspan="2"> </td></tr> 201.246 +<tr class="memitem:aca8142fb823d253054e17c17cfca05e0"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#aca8142fb823d253054e17c17cfca05e0">scstrcasecmp</a> (<a class="el" href="structscstr__t.html">scstr_t</a> s1, <a class="el" href="structscstr__t.html">scstr_t</a> s2)</td></tr> 201.247 +<tr class="memdesc:aca8142fb823d253054e17c17cfca05e0"><td class="mdescLeft"> </td><td class="mdescRight">Compares two UCX strings ignoring the case. <a href="#aca8142fb823d253054e17c17cfca05e0">More...</a><br /></td></tr> 201.248 +<tr class="separator:aca8142fb823d253054e17c17cfca05e0"><td class="memSeparator" colspan="2"> </td></tr> 201.249 +<tr class="memitem:a97dccce03af419596dbdd592ca46a164"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a97dccce03af419596dbdd592ca46a164">scstrdup</a> (<a class="el" href="structscstr__t.html">scstr_t</a> string)</td></tr> 201.250 +<tr class="memdesc:a97dccce03af419596dbdd592ca46a164"><td class="mdescLeft"> </td><td class="mdescRight">Creates a duplicate of the specified string. <a href="#a97dccce03af419596dbdd592ca46a164">More...</a><br /></td></tr> 201.251 +<tr class="separator:a97dccce03af419596dbdd592ca46a164"><td class="memSeparator" colspan="2"> </td></tr> 201.252 +<tr class="memitem:a8fe58921f51eb1fde038472377e63014"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a8fe58921f51eb1fde038472377e63014">scstrdup_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="el" href="structscstr__t.html">scstr_t</a> string)</td></tr> 201.253 +<tr class="memdesc:a8fe58921f51eb1fde038472377e63014"><td class="mdescLeft"> </td><td class="mdescRight">Creates a duplicate of the specified string using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. <a href="#a8fe58921f51eb1fde038472377e63014">More...</a><br /></td></tr> 201.254 +<tr class="separator:a8fe58921f51eb1fde038472377e63014"><td class="memSeparator" colspan="2"> </td></tr> 201.255 +<tr class="memitem:ae2d6da564d3fce51f2e0cac580fdbc56"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#ae2d6da564d3fce51f2e0cac580fdbc56">sstrtrim</a> (<a class="el" href="structsstr__t.html">sstr_t</a> string)</td></tr> 201.256 +<tr class="memdesc:ae2d6da564d3fce51f2e0cac580fdbc56"><td class="mdescLeft"> </td><td class="mdescRight">Omits leading and trailing spaces. <a href="#ae2d6da564d3fce51f2e0cac580fdbc56">More...</a><br /></td></tr> 201.257 +<tr class="separator:ae2d6da564d3fce51f2e0cac580fdbc56"><td class="memSeparator" colspan="2"> </td></tr> 201.258 +<tr class="memitem:ad374b16eb1be8b48019debad9b9f268c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structscstr__t.html">scstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#ad374b16eb1be8b48019debad9b9f268c">scstrtrim</a> (<a class="el" href="structscstr__t.html">scstr_t</a> string)</td></tr> 201.259 +<tr class="memdesc:ad374b16eb1be8b48019debad9b9f268c"><td class="mdescLeft"> </td><td class="mdescRight">Omits leading and trailing spaces. <a href="#ad374b16eb1be8b48019debad9b9f268c">More...</a><br /></td></tr> 201.260 +<tr class="separator:ad374b16eb1be8b48019debad9b9f268c"><td class="memSeparator" colspan="2"> </td></tr> 201.261 +<tr class="memitem:a599ddc2f88dd1df68b72eefd91347393"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a599ddc2f88dd1df68b72eefd91347393">scstrprefix</a> (<a class="el" href="structscstr__t.html">scstr_t</a> string, <a class="el" href="structscstr__t.html">scstr_t</a> prefix)</td></tr> 201.262 +<tr class="memdesc:a599ddc2f88dd1df68b72eefd91347393"><td class="mdescLeft"> </td><td class="mdescRight">Checks, if a string has a specific prefix. <a href="#a599ddc2f88dd1df68b72eefd91347393">More...</a><br /></td></tr> 201.263 +<tr class="separator:a599ddc2f88dd1df68b72eefd91347393"><td class="memSeparator" colspan="2"> </td></tr> 201.264 +<tr class="memitem:a1f0ae316a2afe85d5b4655e6ece6721a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a1f0ae316a2afe85d5b4655e6ece6721a">scstrsuffix</a> (<a class="el" href="structscstr__t.html">scstr_t</a> string, <a class="el" href="structscstr__t.html">scstr_t</a> suffix)</td></tr> 201.265 +<tr class="memdesc:a1f0ae316a2afe85d5b4655e6ece6721a"><td class="mdescLeft"> </td><td class="mdescRight">Checks, if a string has a specific suffix. <a href="#a1f0ae316a2afe85d5b4655e6ece6721a">More...</a><br /></td></tr> 201.266 +<tr class="separator:a1f0ae316a2afe85d5b4655e6ece6721a"><td class="memSeparator" colspan="2"> </td></tr> 201.267 +<tr class="memitem:a3718ef4aa1e86cdb26bda2f07fb585df"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a3718ef4aa1e86cdb26bda2f07fb585df">scstrcaseprefix</a> (<a class="el" href="structscstr__t.html">scstr_t</a> string, <a class="el" href="structscstr__t.html">scstr_t</a> prefix)</td></tr> 201.268 +<tr class="memdesc:a3718ef4aa1e86cdb26bda2f07fb585df"><td class="mdescLeft"> </td><td class="mdescRight">Checks, if a string has a specific prefix, ignoring the case. <a href="#a3718ef4aa1e86cdb26bda2f07fb585df">More...</a><br /></td></tr> 201.269 +<tr class="separator:a3718ef4aa1e86cdb26bda2f07fb585df"><td class="memSeparator" colspan="2"> </td></tr> 201.270 +<tr class="memitem:a6edb4b85f2b9efe79db7ffe6eccd7bc3"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a6edb4b85f2b9efe79db7ffe6eccd7bc3">scstrcasesuffix</a> (<a class="el" href="structscstr__t.html">scstr_t</a> string, <a class="el" href="structscstr__t.html">scstr_t</a> suffix)</td></tr> 201.271 +<tr class="memdesc:a6edb4b85f2b9efe79db7ffe6eccd7bc3"><td class="mdescLeft"> </td><td class="mdescRight">Checks, if a string has a specific suffix, ignoring the case. <a href="#a6edb4b85f2b9efe79db7ffe6eccd7bc3">More...</a><br /></td></tr> 201.272 +<tr class="separator:a6edb4b85f2b9efe79db7ffe6eccd7bc3"><td class="memSeparator" colspan="2"> </td></tr> 201.273 +<tr class="memitem:abccf198bea3186ff2abb080cc88dcae6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#abccf198bea3186ff2abb080cc88dcae6">scstrlower</a> (<a class="el" href="structscstr__t.html">scstr_t</a> string)</td></tr> 201.274 +<tr class="memdesc:abccf198bea3186ff2abb080cc88dcae6"><td class="mdescLeft"> </td><td class="mdescRight">Returns a lower case version of a string. <a href="#abccf198bea3186ff2abb080cc88dcae6">More...</a><br /></td></tr> 201.275 +<tr class="separator:abccf198bea3186ff2abb080cc88dcae6"><td class="memSeparator" colspan="2"> </td></tr> 201.276 +<tr class="memitem:a3cf1e557df7ab58d03c78832c4060276"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#a3cf1e557df7ab58d03c78832c4060276">scstrlower_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="el" href="structscstr__t.html">scstr_t</a> string)</td></tr> 201.277 +<tr class="memdesc:a3cf1e557df7ab58d03c78832c4060276"><td class="mdescLeft"> </td><td class="mdescRight">Returns a lower case version of a string. <a href="#a3cf1e557df7ab58d03c78832c4060276">More...</a><br /></td></tr> 201.278 +<tr class="separator:a3cf1e557df7ab58d03c78832c4060276"><td class="memSeparator" colspan="2"> </td></tr> 201.279 +<tr class="memitem:af3dd09ec9d11162fe0075f4e60f41240"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#af3dd09ec9d11162fe0075f4e60f41240">scstrupper</a> (<a class="el" href="structscstr__t.html">scstr_t</a> string)</td></tr> 201.280 +<tr class="memdesc:af3dd09ec9d11162fe0075f4e60f41240"><td class="mdescLeft"> </td><td class="mdescRight">Returns a upper case version of a string. <a href="#af3dd09ec9d11162fe0075f4e60f41240">More...</a><br /></td></tr> 201.281 +<tr class="separator:af3dd09ec9d11162fe0075f4e60f41240"><td class="memSeparator" colspan="2"> </td></tr> 201.282 +<tr class="memitem:aea94613eb74668cc05d365803d32bfad"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="string_8h.html#aea94613eb74668cc05d365803d32bfad">scstrupper_a</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="el" href="structscstr__t.html">scstr_t</a> string)</td></tr> 201.283 +<tr class="memdesc:aea94613eb74668cc05d365803d32bfad"><td class="mdescLeft"> </td><td class="mdescRight">Returns a upper case version of a string. <a href="#aea94613eb74668cc05d365803d32bfad">More...</a><br /></td></tr> 201.284 +<tr class="separator:aea94613eb74668cc05d365803d32bfad"><td class="memSeparator" colspan="2"> </td></tr> 201.285 +</table> 201.286 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 201.287 +<div class="textblock"><p>Bounded string implementation. </p> 201.288 +<p>The UCX strings (<code><a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a></code>) provide an alternative to C strings. The main difference to C strings is, that <code><a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a></code> does <b>not need to be <code>NULL</code>-terminated</b>. Instead the length is stored within the structure.</p> 201.289 +<p>When using <code><a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a></code>, developers must be full aware of what type of string (<code>NULL</code>-terminated) or not) they are using, when accessing the <code>char* ptr</code> directly.</p> 201.290 +<p>The UCX string module provides some common string functions, known from standard libc, working with <code><a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a></code>.</p> 201.291 +<dl class="section author"><dt>Author</dt><dd>Mike Becker </dd> 201.292 +<dd> 201.293 +Olaf Wintermann </dd></dl> 201.294 +</div><h2 class="groupheader">Macro Definition Documentation</h2> 201.295 +<a id="a7d5bc48708405a28b23667e32dfcecae"></a> 201.296 +<h2 class="memtitle"><span class="permalink"><a href="#a7d5bc48708405a28b23667e32dfcecae">◆ </a></span>PRIsstr</h2> 201.297 + 201.298 +<div class="memitem"> 201.299 +<div class="memproto"> 201.300 + <table class="memname"> 201.301 + <tr> 201.302 + <td class="memname">#define PRIsstr   ".*s"</td> 201.303 + </tr> 201.304 + </table> 201.305 +</div><div class="memdoc"> 201.306 + 201.307 +<p>Format specifier for a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> or <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a>. </p> 201.308 + 201.309 +</div> 201.310 +</div> 201.311 +<a id="a8fa17c8cf4c36df48f4108c36da8573e"></a> 201.312 +<h2 class="memtitle"><span class="permalink"><a href="#a8fa17c8cf4c36df48f4108c36da8573e">◆ </a></span>S</h2> 201.313 + 201.314 +<div class="memitem"> 201.315 +<div class="memproto"> 201.316 + <table class="memname"> 201.317 + <tr> 201.318 + <td class="memname">#define S</td> 201.319 + <td>(</td> 201.320 + <td class="paramtype"> </td> 201.321 + <td class="paramname">s</td><td>)</td> 201.322 + <td>   <a class="el" href="string_8h.html#a2744c38ac44abf3e01fa059056dcf36c">sstrn</a>(s, sizeof(s)-1)</td> 201.323 + </tr> 201.324 + </table> 201.325 +</div><div class="memdoc"> 201.326 + 201.327 +<p>Shortcut for the conversion of a C string to a <code><a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a></code>. </p> 201.328 + 201.329 +</div> 201.330 +</div> 201.331 +<a id="a7d261dd0bc358c957a368bc058c1ce53"></a> 201.332 +<h2 class="memtitle"><span class="permalink"><a href="#a7d261dd0bc358c957a368bc058c1ce53">◆ </a></span>SC</h2> 201.333 + 201.334 +<div class="memitem"> 201.335 +<div class="memproto"> 201.336 + <table class="memname"> 201.337 + <tr> 201.338 + <td class="memname">#define SC</td> 201.339 + <td>(</td> 201.340 + <td class="paramtype"> </td> 201.341 + <td class="paramname">s</td><td>)</td> 201.342 + <td>   <a class="el" href="string_8h.html#ae594f6e222ea394cef6a26c0dfad000d">scstrn</a>(s, sizeof(s)-1)</td> 201.343 + </tr> 201.344 + </table> 201.345 +</div><div class="memdoc"> 201.346 + 201.347 +<p>Shortcut for the conversion of a C string to a <code><a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a></code>. </p> 201.348 + 201.349 +</div> 201.350 +</div> 201.351 +<a id="ad4293350a9b39a23a6546bd0fef2aeed"></a> 201.352 +<h2 class="memtitle"><span class="permalink"><a href="#ad4293350a9b39a23a6546bd0fef2aeed">◆ </a></span>SCSTR</h2> 201.353 + 201.354 +<div class="memitem"> 201.355 +<div class="memproto"> 201.356 + <table class="memname"> 201.357 + <tr> 201.358 + <td class="memname">#define SCSTR</td> 201.359 + <td>(</td> 201.360 + <td class="paramtype"> </td> 201.361 + <td class="paramname">str</td><td>)</td> 201.362 + <td>   <a class="el" href="string_8h.html#aedeb5d7bddda54116101a8d68af8c56d">ucx_ss2c_s</a>(str)</td> 201.363 + </tr> 201.364 + </table> 201.365 +</div><div class="memdoc"> 201.366 + 201.367 +<p>Converts a UCX string to an immutable UCX string (<a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a>). </p> 201.368 +<dl class="params"><dt>Parameters</dt><dd> 201.369 + <table class="params"> 201.370 + <tr><td class="paramname">str</td><td>some UCX string </td></tr> 201.371 + </table> 201.372 + </dd> 201.373 +</dl> 201.374 +<dl class="section return"><dt>Returns</dt><dd>the an immutable version of the provided string </dd></dl> 201.375 + 201.376 +</div> 201.377 +</div> 201.378 +<a id="a23ed51e87385886bb65e8cd19c839362"></a> 201.379 +<h2 class="memtitle"><span class="permalink"><a href="#a23ed51e87385886bb65e8cd19c839362">◆ </a></span>SFMT</h2> 201.380 + 201.381 +<div class="memitem"> 201.382 +<div class="memproto"> 201.383 + <table class="memname"> 201.384 + <tr> 201.385 + <td class="memname">#define SFMT</td> 201.386 + <td>(</td> 201.387 + <td class="paramtype"> </td> 201.388 + <td class="paramname">s</td><td>)</td> 201.389 + <td>   (int) (s).length, (s).ptr</td> 201.390 + </tr> 201.391 + </table> 201.392 +</div><div class="memdoc"> 201.393 + 201.394 +<p>Expands a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> or <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> to printf arguments. </p> 201.395 + 201.396 +</div> 201.397 +</div> 201.398 +<a id="a81b0f6df794152c2038703d4e9d0ad59"></a> 201.399 +<h2 class="memtitle"><span class="permalink"><a href="#a81b0f6df794152c2038703d4e9d0ad59">◆ </a></span>sstrcasecmp</h2> 201.400 + 201.401 +<div class="memitem"> 201.402 +<div class="memproto"> 201.403 + <table class="memname"> 201.404 + <tr> 201.405 + <td class="memname">#define sstrcasecmp</td> 201.406 + <td>(</td> 201.407 + <td class="paramtype"> </td> 201.408 + <td class="paramname">s1, </td> 201.409 + </tr> 201.410 + <tr> 201.411 + <td class="paramkey"></td> 201.412 + <td></td> 201.413 + <td class="paramtype"> </td> 201.414 + <td class="paramname">s2 </td> 201.415 + </tr> 201.416 + <tr> 201.417 + <td></td> 201.418 + <td>)</td> 201.419 + <td></td><td>   <a class="el" href="string_8h.html#aca8142fb823d253054e17c17cfca05e0">scstrcasecmp</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(s1), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(s2))</td> 201.420 + </tr> 201.421 + </table> 201.422 +</div><div class="memdoc"> 201.423 + 201.424 +<p>Compares two UCX strings ignoring the case. </p> 201.425 +<p>At first it compares the <a class="el" href="structsstr__t.html#a5cf571708cdff92e45f08458f2b98229" title="The length of the string. ">sstr_t.length</a> attribute of the two strings. If and only if the lengths match, both strings are compared char by char ignoring the case.</p> 201.426 +<dl class="params"><dt>Parameters</dt><dd> 201.427 + <table class="params"> 201.428 + <tr><td class="paramname">s1</td><td>the first string </td></tr> 201.429 + <tr><td class="paramname">s2</td><td>the second string </td></tr> 201.430 + </table> 201.431 + </dd> 201.432 +</dl> 201.433 +<dl class="section return"><dt>Returns</dt><dd>-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. </dd></dl> 201.434 + 201.435 +</div> 201.436 +</div> 201.437 +<a id="acd3dc64e90db9b4046e14f115a815ff4"></a> 201.438 +<h2 class="memtitle"><span class="permalink"><a href="#acd3dc64e90db9b4046e14f115a815ff4">◆ </a></span>sstrcaseprefix</h2> 201.439 + 201.440 +<div class="memitem"> 201.441 +<div class="memproto"> 201.442 + <table class="memname"> 201.443 + <tr> 201.444 + <td class="memname">#define sstrcaseprefix</td> 201.445 + <td>(</td> 201.446 + <td class="paramtype"> </td> 201.447 + <td class="paramname">string, </td> 201.448 + </tr> 201.449 + <tr> 201.450 + <td class="paramkey"></td> 201.451 + <td></td> 201.452 + <td class="paramtype"> </td> 201.453 + <td class="paramname">prefix </td> 201.454 + </tr> 201.455 + <tr> 201.456 + <td></td> 201.457 + <td>)</td> 201.458 + <td></td><td>   <a class="el" href="string_8h.html#a3718ef4aa1e86cdb26bda2f07fb585df">scstrcaseprefix</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(prefix))</td> 201.459 + </tr> 201.460 + </table> 201.461 +</div><div class="memdoc"> 201.462 + 201.463 +<p>Checks, if a string has a specific prefix, ignoring the case. </p> 201.464 +<dl class="params"><dt>Parameters</dt><dd> 201.465 + <table class="params"> 201.466 + <tr><td class="paramname">string</td><td>the string to check </td></tr> 201.467 + <tr><td class="paramname">prefix</td><td>the prefix the string should have </td></tr> 201.468 + </table> 201.469 + </dd> 201.470 +</dl> 201.471 +<dl class="section return"><dt>Returns</dt><dd>1, if and only if the string has the specified prefix, 0 otherwise </dd></dl> 201.472 + 201.473 +</div> 201.474 +</div> 201.475 +<a id="a57eabd4862d531dd685bbf2feb8468bf"></a> 201.476 +<h2 class="memtitle"><span class="permalink"><a href="#a57eabd4862d531dd685bbf2feb8468bf">◆ </a></span>sstrcasesuffix</h2> 201.477 + 201.478 +<div class="memitem"> 201.479 +<div class="memproto"> 201.480 + <table class="memname"> 201.481 + <tr> 201.482 + <td class="memname">#define sstrcasesuffix</td> 201.483 + <td>(</td> 201.484 + <td class="paramtype"> </td> 201.485 + <td class="paramname">string, </td> 201.486 + </tr> 201.487 + <tr> 201.488 + <td class="paramkey"></td> 201.489 + <td></td> 201.490 + <td class="paramtype"> </td> 201.491 + <td class="paramname">suffix </td> 201.492 + </tr> 201.493 + <tr> 201.494 + <td></td> 201.495 + <td>)</td> 201.496 + <td></td><td>   <a class="el" href="string_8h.html#a6edb4b85f2b9efe79db7ffe6eccd7bc3">scstrcasesuffix</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(suffix))</td> 201.497 + </tr> 201.498 + </table> 201.499 +</div><div class="memdoc"> 201.500 + 201.501 +<p>Checks, if a string has a specific suffix, ignoring the case. </p> 201.502 +<dl class="params"><dt>Parameters</dt><dd> 201.503 + <table class="params"> 201.504 + <tr><td class="paramname">string</td><td>the string to check </td></tr> 201.505 + <tr><td class="paramname">suffix</td><td>the suffix the string should have </td></tr> 201.506 + </table> 201.507 + </dd> 201.508 +</dl> 201.509 +<dl class="section return"><dt>Returns</dt><dd>1, if and only if the string has the specified suffix, 0 otherwise </dd></dl> 201.510 + 201.511 +</div> 201.512 +</div> 201.513 +<a id="a6af8a4c347c7fdb5980d4c4803be2759"></a> 201.514 +<h2 class="memtitle"><span class="permalink"><a href="#a6af8a4c347c7fdb5980d4c4803be2759">◆ </a></span>sstrcat</h2> 201.515 + 201.516 +<div class="memitem"> 201.517 +<div class="memproto"> 201.518 + <table class="memname"> 201.519 + <tr> 201.520 + <td class="memname">#define sstrcat</td> 201.521 + <td>(</td> 201.522 + <td class="paramtype"> </td> 201.523 + <td class="paramname">count, </td> 201.524 + </tr> 201.525 + <tr> 201.526 + <td class="paramkey"></td> 201.527 + <td></td> 201.528 + <td class="paramtype"> </td> 201.529 + <td class="paramname">s1, </td> 201.530 + </tr> 201.531 + <tr> 201.532 + <td class="paramkey"></td> 201.533 + <td></td> 201.534 + <td class="paramtype"> </td> 201.535 + <td class="paramname"><em>...</em> </td> 201.536 + </tr> 201.537 + <tr> 201.538 + <td></td> 201.539 + <td>)</td> 201.540 + <td></td><td>   <a class="el" href="string_8h.html#a7376842c19e954b49215da81ef76ac0c">scstrcat</a>(count, <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(s1), __VA_ARGS__)</td> 201.541 + </tr> 201.542 + </table> 201.543 +</div><div class="memdoc"> 201.544 + 201.545 +<p>Concatenates two or more strings. </p> 201.546 +<p>The resulting string will be allocated by standard <code>malloc()</code>. So developers <b>MUST</b> pass the <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> to <code>free()</code>.</p> 201.547 +<p>The <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> of the return value will <em>always</em> be <code>NULL</code>- terminated.</p> 201.548 +<dl class="params"><dt>Parameters</dt><dd> 201.549 + <table class="params"> 201.550 + <tr><td class="paramname">count</td><td>the total number of strings to concatenate </td></tr> 201.551 + <tr><td class="paramname">s1</td><td>first string </td></tr> 201.552 + <tr><td class="paramname">...</td><td>all remaining strings </td></tr> 201.553 + </table> 201.554 + </dd> 201.555 +</dl> 201.556 +<dl class="section return"><dt>Returns</dt><dd>the concatenated string </dd></dl> 201.557 + 201.558 +</div> 201.559 +</div> 201.560 +<a id="a6068d460f9bc05962666a917d26568b3"></a> 201.561 +<h2 class="memtitle"><span class="permalink"><a href="#a6068d460f9bc05962666a917d26568b3">◆ </a></span>sstrcat_a</h2> 201.562 + 201.563 +<div class="memitem"> 201.564 +<div class="memproto"> 201.565 + <table class="memname"> 201.566 + <tr> 201.567 + <td class="memname">#define sstrcat_a</td> 201.568 + <td>(</td> 201.569 + <td class="paramtype"> </td> 201.570 + <td class="paramname">alloc, </td> 201.571 + </tr> 201.572 + <tr> 201.573 + <td class="paramkey"></td> 201.574 + <td></td> 201.575 + <td class="paramtype"> </td> 201.576 + <td class="paramname">count, </td> 201.577 + </tr> 201.578 + <tr> 201.579 + <td class="paramkey"></td> 201.580 + <td></td> 201.581 + <td class="paramtype"> </td> 201.582 + <td class="paramname">s1, </td> 201.583 + </tr> 201.584 + <tr> 201.585 + <td class="paramkey"></td> 201.586 + <td></td> 201.587 + <td class="paramtype"> </td> 201.588 + <td class="paramname"><em>...</em> </td> 201.589 + </tr> 201.590 + <tr> 201.591 + <td></td> 201.592 + <td>)</td> 201.593 + <td></td><td>   <a class="el" href="string_8h.html#abacce4cbd6f70fcb6453904ef08b02e9">scstrcat_a</a>(alloc, count, <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(s1), __VA_ARGS__)</td> 201.594 + </tr> 201.595 + </table> 201.596 +</div><div class="memdoc"> 201.597 + 201.598 +<p>Concatenates two or more strings using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. </p> 201.599 +<p>The resulting string must be freed by the allocators <code>free()</code> implementation.</p> 201.600 +<p>The <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> of the return value will <em>always</em> be <code>NULL</code>- terminated.</p> 201.601 +<dl class="params"><dt>Parameters</dt><dd> 201.602 + <table class="params"> 201.603 + <tr><td class="paramname">alloc</td><td>the allocator to use </td></tr> 201.604 + <tr><td class="paramname">count</td><td>the total number of strings to concatenate </td></tr> 201.605 + <tr><td class="paramname">s1</td><td>first string </td></tr> 201.606 + <tr><td class="paramname">...</td><td>all remaining strings </td></tr> 201.607 + </table> 201.608 + </dd> 201.609 +</dl> 201.610 +<dl class="section return"><dt>Returns</dt><dd>the concatenated string</dd></dl> 201.611 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a6af8a4c347c7fdb5980d4c4803be2759" title="Concatenates two or more strings. ">sstrcat()</a> </dd></dl> 201.612 + 201.613 +</div> 201.614 +</div> 201.615 +<a id="a7ae7156c8de57454ca38d306100b8160"></a> 201.616 +<h2 class="memtitle"><span class="permalink"><a href="#a7ae7156c8de57454ca38d306100b8160">◆ </a></span>sstrcmp</h2> 201.617 + 201.618 +<div class="memitem"> 201.619 +<div class="memproto"> 201.620 + <table class="memname"> 201.621 + <tr> 201.622 + <td class="memname">#define sstrcmp</td> 201.623 + <td>(</td> 201.624 + <td class="paramtype"> </td> 201.625 + <td class="paramname">s1, </td> 201.626 + </tr> 201.627 + <tr> 201.628 + <td class="paramkey"></td> 201.629 + <td></td> 201.630 + <td class="paramtype"> </td> 201.631 + <td class="paramname">s2 </td> 201.632 + </tr> 201.633 + <tr> 201.634 + <td></td> 201.635 + <td>)</td> 201.636 + <td></td><td>   <a class="el" href="string_8h.html#af35272a8e5408c88ed3e25a3a98f0a82">scstrcmp</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(s1), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(s2))</td> 201.637 + </tr> 201.638 + </table> 201.639 +</div><div class="memdoc"> 201.640 + 201.641 +<p>Compares two UCX strings with standard <code>memcmp()</code>. </p> 201.642 +<p>At first it compares the <a class="el" href="structsstr__t.html#a5cf571708cdff92e45f08458f2b98229" title="The length of the string. ">sstr_t.length</a> attribute of the two strings. The <code>memcmp()</code> function is called, if and only if the lengths match.</p> 201.643 +<dl class="params"><dt>Parameters</dt><dd> 201.644 + <table class="params"> 201.645 + <tr><td class="paramname">s1</td><td>the first string </td></tr> 201.646 + <tr><td class="paramname">s2</td><td>the second string </td></tr> 201.647 + </table> 201.648 + </dd> 201.649 +</dl> 201.650 +<dl class="section return"><dt>Returns</dt><dd>-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 <code>memcmp()</code> otherwise (i.e. 0 if the strings match) </dd></dl> 201.651 + 201.652 +</div> 201.653 +</div> 201.654 +<a id="accbfd2b459a028d7af9fb7df6f977d80"></a> 201.655 +<h2 class="memtitle"><span class="permalink"><a href="#accbfd2b459a028d7af9fb7df6f977d80">◆ </a></span>sstrdup</h2> 201.656 + 201.657 +<div class="memitem"> 201.658 +<div class="memproto"> 201.659 + <table class="memname"> 201.660 + <tr> 201.661 + <td class="memname">#define sstrdup</td> 201.662 + <td>(</td> 201.663 + <td class="paramtype"> </td> 201.664 + <td class="paramname">string</td><td>)</td> 201.665 + <td>   <a class="el" href="string_8h.html#a97dccce03af419596dbdd592ca46a164">scstrdup</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string))</td> 201.666 + </tr> 201.667 + </table> 201.668 +</div><div class="memdoc"> 201.669 + 201.670 +<p>Creates a duplicate of the specified string. </p> 201.671 +<p>The new <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> will contain a copy allocated by standard <code>malloc()</code>. So developers <b>MUST</b> pass the <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> to <code>free()</code>.</p> 201.672 +<p>The <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> of the return value will <em>always</em> be <code>NULL</code>- terminated, regardless of the argument.</p> 201.673 +<dl class="params"><dt>Parameters</dt><dd> 201.674 + <table class="params"> 201.675 + <tr><td class="paramname">string</td><td>the string to duplicate </td></tr> 201.676 + </table> 201.677 + </dd> 201.678 +</dl> 201.679 +<dl class="section return"><dt>Returns</dt><dd>a duplicate of the string </dd></dl> 201.680 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a8d098baada4ea9ad5d8b6343b5aec007" title="Creates a duplicate of the specified string using a UcxAllocator. ">sstrdup_a()</a> </dd></dl> 201.681 + 201.682 +</div> 201.683 +</div> 201.684 +<a id="a8d098baada4ea9ad5d8b6343b5aec007"></a> 201.685 +<h2 class="memtitle"><span class="permalink"><a href="#a8d098baada4ea9ad5d8b6343b5aec007">◆ </a></span>sstrdup_a</h2> 201.686 + 201.687 +<div class="memitem"> 201.688 +<div class="memproto"> 201.689 + <table class="memname"> 201.690 + <tr> 201.691 + <td class="memname">#define sstrdup_a</td> 201.692 + <td>(</td> 201.693 + <td class="paramtype"> </td> 201.694 + <td class="paramname">allocator, </td> 201.695 + </tr> 201.696 + <tr> 201.697 + <td class="paramkey"></td> 201.698 + <td></td> 201.699 + <td class="paramtype"> </td> 201.700 + <td class="paramname">string </td> 201.701 + </tr> 201.702 + <tr> 201.703 + <td></td> 201.704 + <td>)</td> 201.705 + <td></td><td>   <a class="el" href="string_8h.html#a8fe58921f51eb1fde038472377e63014">scstrdup_a</a>(allocator, <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string))</td> 201.706 + </tr> 201.707 + </table> 201.708 +</div><div class="memdoc"> 201.709 + 201.710 +<p>Creates a duplicate of the specified string using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. </p> 201.711 +<p>The new <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> will contain a copy allocated by the allocators <a class="el" href="structUcxAllocator.html#a013376172be39ed54f77c4be6898845a" title="The malloc() function for this allocator. ">UcxAllocator.malloc()</a> function. So it is implementation depended, whether the returned <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> pointer must be passed to the allocators <a class="el" href="structUcxAllocator.html#aecce1840378ed53f1002190f4f87026f" title="The free() function for this allocator. ">UcxAllocator.free()</a> function manually.</p> 201.712 +<p>The <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> of the return value will <em>always</em> be <code>NULL</code>- terminated, regardless of the argument.</p> 201.713 +<dl class="params"><dt>Parameters</dt><dd> 201.714 + <table class="params"> 201.715 + <tr><td class="paramname">allocator</td><td>a valid instance of a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> </td></tr> 201.716 + <tr><td class="paramname">string</td><td>the string to duplicate </td></tr> 201.717 + </table> 201.718 + </dd> 201.719 +</dl> 201.720 +<dl class="section return"><dt>Returns</dt><dd>a duplicate of the string </dd></dl> 201.721 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a97dccce03af419596dbdd592ca46a164" title="Creates a duplicate of the specified string. ">scstrdup()</a> </dd></dl> 201.722 + 201.723 +</div> 201.724 +</div> 201.725 +<a id="a89343ea3e719f00ee802b557db57b769"></a> 201.726 +<h2 class="memtitle"><span class="permalink"><a href="#a89343ea3e719f00ee802b557db57b769">◆ </a></span>sstrlower</h2> 201.727 + 201.728 +<div class="memitem"> 201.729 +<div class="memproto"> 201.730 + <table class="memname"> 201.731 + <tr> 201.732 + <td class="memname">#define sstrlower</td> 201.733 + <td>(</td> 201.734 + <td class="paramtype"> </td> 201.735 + <td class="paramname">string</td><td>)</td> 201.736 + <td>   <a class="el" href="string_8h.html#abccf198bea3186ff2abb080cc88dcae6">scstrlower</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string))</td> 201.737 + </tr> 201.738 + </table> 201.739 +</div><div class="memdoc"> 201.740 + 201.741 +<p>Returns a lower case version of a string. </p> 201.742 +<p>This function creates a duplicate of the input string, first (see <a class="el" href="string_8h.html#accbfd2b459a028d7af9fb7df6f977d80" title="Creates a duplicate of the specified string. ">sstrdup()</a>).</p> 201.743 +<dl class="params"><dt>Parameters</dt><dd> 201.744 + <table class="params"> 201.745 + <tr><td class="paramname">string</td><td>the input string </td></tr> 201.746 + </table> 201.747 + </dd> 201.748 +</dl> 201.749 +<dl class="section return"><dt>Returns</dt><dd>the resulting lower case string </dd></dl> 201.750 + 201.751 +</div> 201.752 +</div> 201.753 +<a id="a4bb4742fe71115f493991d307cb22b23"></a> 201.754 +<h2 class="memtitle"><span class="permalink"><a href="#a4bb4742fe71115f493991d307cb22b23">◆ </a></span>sstrlower_a</h2> 201.755 + 201.756 +<div class="memitem"> 201.757 +<div class="memproto"> 201.758 + <table class="memname"> 201.759 + <tr> 201.760 + <td class="memname">#define sstrlower_a</td> 201.761 + <td>(</td> 201.762 + <td class="paramtype"> </td> 201.763 + <td class="paramname">allocator, </td> 201.764 + </tr> 201.765 + <tr> 201.766 + <td class="paramkey"></td> 201.767 + <td></td> 201.768 + <td class="paramtype"> </td> 201.769 + <td class="paramname">string </td> 201.770 + </tr> 201.771 + <tr> 201.772 + <td></td> 201.773 + <td>)</td> 201.774 + <td></td><td>   <a class="el" href="string_8h.html#a3cf1e557df7ab58d03c78832c4060276">scstrlower_a</a>(allocator, <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string))</td> 201.775 + </tr> 201.776 + </table> 201.777 +</div><div class="memdoc"> 201.778 + 201.779 +<p>Returns a lower case version of a string. </p> 201.780 +<p>This function creates a duplicate of the input string, first (see <a class="el" href="string_8h.html#a8d098baada4ea9ad5d8b6343b5aec007" title="Creates a duplicate of the specified string using a UcxAllocator. ">sstrdup_a()</a>).</p> 201.781 +<dl class="params"><dt>Parameters</dt><dd> 201.782 + <table class="params"> 201.783 + <tr><td class="paramname">allocator</td><td>the allocator used for duplicating the string </td></tr> 201.784 + <tr><td class="paramname">string</td><td>the input string </td></tr> 201.785 + </table> 201.786 + </dd> 201.787 +</dl> 201.788 +<dl class="section return"><dt>Returns</dt><dd>the resulting lower case string </dd></dl> 201.789 + 201.790 +</div> 201.791 +</div> 201.792 +<a id="a33fa945acc5ac2ce962e5ef13cf1638c"></a> 201.793 +<h2 class="memtitle"><span class="permalink"><a href="#a33fa945acc5ac2ce962e5ef13cf1638c">◆ </a></span>sstrnlen</h2> 201.794 + 201.795 +<div class="memitem"> 201.796 +<div class="memproto"> 201.797 + <table class="memname"> 201.798 + <tr> 201.799 + <td class="memname">#define sstrnlen</td> 201.800 + <td>(</td> 201.801 + <td class="paramtype"> </td> 201.802 + <td class="paramname">count, </td> 201.803 + </tr> 201.804 + <tr> 201.805 + <td class="paramkey"></td> 201.806 + <td></td> 201.807 + <td class="paramtype"> </td> 201.808 + <td class="paramname"><em>...</em> </td> 201.809 + </tr> 201.810 + <tr> 201.811 + <td></td> 201.812 + <td>)</td> 201.813 + <td></td><td>   <a class="el" href="string_8h.html#ac1b000030d6d197eec48c15a182055d5">scstrnlen</a>(count, __VA_ARGS__)</td> 201.814 + </tr> 201.815 + </table> 201.816 +</div><div class="memdoc"> 201.817 + 201.818 +<p>Returns the accumulated length of all specified strings. </p> 201.819 +<p><b>Attention:</b> if the count argument is larger than the count of the specified strings, the behavior is undefined.</p> 201.820 +<dl class="params"><dt>Parameters</dt><dd> 201.821 + <table class="params"> 201.822 + <tr><td class="paramname">count</td><td>the total number of specified strings </td></tr> 201.823 + <tr><td class="paramname">...</td><td>all strings </td></tr> 201.824 + </table> 201.825 + </dd> 201.826 +</dl> 201.827 +<dl class="section return"><dt>Returns</dt><dd>the cumulated length of all strings </dd></dl> 201.828 + 201.829 +</div> 201.830 +</div> 201.831 +<a id="a7d73b66256384b26927e787318fdefa2"></a> 201.832 +<h2 class="memtitle"><span class="permalink"><a href="#a7d73b66256384b26927e787318fdefa2">◆ </a></span>sstrprefix</h2> 201.833 + 201.834 +<div class="memitem"> 201.835 +<div class="memproto"> 201.836 + <table class="memname"> 201.837 + <tr> 201.838 + <td class="memname">#define sstrprefix</td> 201.839 + <td>(</td> 201.840 + <td class="paramtype"> </td> 201.841 + <td class="paramname">string, </td> 201.842 + </tr> 201.843 + <tr> 201.844 + <td class="paramkey"></td> 201.845 + <td></td> 201.846 + <td class="paramtype"> </td> 201.847 + <td class="paramname">prefix </td> 201.848 + </tr> 201.849 + <tr> 201.850 + <td></td> 201.851 + <td>)</td> 201.852 + <td></td><td>   <a class="el" href="string_8h.html#a599ddc2f88dd1df68b72eefd91347393">scstrprefix</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(prefix))</td> 201.853 + </tr> 201.854 + </table> 201.855 +</div><div class="memdoc"> 201.856 + 201.857 +<p>Checks, if a string has a specific prefix. </p> 201.858 +<dl class="params"><dt>Parameters</dt><dd> 201.859 + <table class="params"> 201.860 + <tr><td class="paramname">string</td><td>the string to check </td></tr> 201.861 + <tr><td class="paramname">prefix</td><td>the prefix the string should have </td></tr> 201.862 + </table> 201.863 + </dd> 201.864 +</dl> 201.865 +<dl class="section return"><dt>Returns</dt><dd>1, if and only if the string has the specified prefix, 0 otherwise </dd></dl> 201.866 + 201.867 +</div> 201.868 +</div> 201.869 +<a id="aa696932213265e10f864678686f4ccde"></a> 201.870 +<h2 class="memtitle"><span class="permalink"><a href="#aa696932213265e10f864678686f4ccde">◆ </a></span>sstrscstr</h2> 201.871 + 201.872 +<div class="memitem"> 201.873 +<div class="memproto"> 201.874 + <table class="memname"> 201.875 + <tr> 201.876 + <td class="memname">#define sstrscstr</td> 201.877 + <td>(</td> 201.878 + <td class="paramtype"> </td> 201.879 + <td class="paramname">string, </td> 201.880 + </tr> 201.881 + <tr> 201.882 + <td class="paramkey"></td> 201.883 + <td></td> 201.884 + <td class="paramtype"> </td> 201.885 + <td class="paramname">match </td> 201.886 + </tr> 201.887 + <tr> 201.888 + <td></td> 201.889 + <td>)</td> 201.890 + <td></td><td>   <a class="el" href="string_8h.html#a54f256c3abe811c52d58b4ff1b23f051">scstrscstr</a>(string, <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(match))</td> 201.891 + </tr> 201.892 + </table> 201.893 +</div><div class="memdoc"> 201.894 + 201.895 +<p>Returns an immutable substring starting at the location of the first occurrence of the specified immutable string. </p> 201.896 +<p>If the string does not contain the other string, an empty string is returned.</p> 201.897 +<p>If <code>match</code> is an empty string, the complete <code>string</code> is returned.</p> 201.898 +<dl class="params"><dt>Parameters</dt><dd> 201.899 + <table class="params"> 201.900 + <tr><td class="paramname">string</td><td>the string to be scanned </td></tr> 201.901 + <tr><td class="paramname">match</td><td>string containing the sequence of characters to match </td></tr> 201.902 + </table> 201.903 + </dd> 201.904 +</dl> 201.905 +<dl class="section return"><dt>Returns</dt><dd>a substring starting at the first occurrence of <code>match</code>, or an empty string, if the sequence is not present in <code>string</code> </dd></dl> 201.906 + 201.907 +</div> 201.908 +</div> 201.909 +<a id="aa929984004c3576bfafb95031aca8eb7"></a> 201.910 +<h2 class="memtitle"><span class="permalink"><a href="#aa929984004c3576bfafb95031aca8eb7">◆ </a></span>sstrsplit</h2> 201.911 + 201.912 +<div class="memitem"> 201.913 +<div class="memproto"> 201.914 + <table class="memname"> 201.915 + <tr> 201.916 + <td class="memname">#define sstrsplit</td> 201.917 + <td>(</td> 201.918 + <td class="paramtype"> </td> 201.919 + <td class="paramname">string, </td> 201.920 + </tr> 201.921 + <tr> 201.922 + <td class="paramkey"></td> 201.923 + <td></td> 201.924 + <td class="paramtype"> </td> 201.925 + <td class="paramname">delim, </td> 201.926 + </tr> 201.927 + <tr> 201.928 + <td class="paramkey"></td> 201.929 + <td></td> 201.930 + <td class="paramtype"> </td> 201.931 + <td class="paramname">count </td> 201.932 + </tr> 201.933 + <tr> 201.934 + <td></td> 201.935 + <td>)</td> 201.936 + <td></td><td>   <a class="el" href="string_8h.html#ae71cac352b00230848bde358f0fb05ea">scstrsplit</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(delim), count)</td> 201.937 + </tr> 201.938 + </table> 201.939 +</div><div class="memdoc"> 201.940 + 201.941 +<p>Splits a string into parts by using a delimiter string. </p> 201.942 +<p>This function will return <code>NULL</code>, if one of the following happens: </p><ul> 201.943 +<li> 201.944 +the string length is zero </li> 201.945 +<li> 201.946 +the delimeter length is zero </li> 201.947 +<li> 201.948 +the string equals the delimeter </li> 201.949 +<li> 201.950 +memory allocation fails </li> 201.951 +</ul> 201.952 +<p>The integer referenced by <code>count</code> is used as input and determines the maximum size of the resulting array, i.e. the maximum count of splits to perform + 1.</p> 201.953 +<p>The integer referenced by <code>count</code> is also used as output and is set to </p><ul> 201.954 +<li> 201.955 +-2, on memory allocation errors </li> 201.956 +<li> 201.957 +-1, if either the string or the delimiter is an empty string </li> 201.958 +<li> 201.959 +0, if the string equals the delimiter </li> 201.960 +<li> 201.961 +1, if the string does not contain the delimiter </li> 201.962 +<li> 201.963 +the count of array items, otherwise </li> 201.964 +</ul> 201.965 +<p>If the string starts with the delimiter, the first item of the resulting array will be an empty string.</p> 201.966 +<p>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, <em>including</em> the terminating delimiter.</p> 201.967 +<p><b>Attention:</b> The array pointer <b>AND</b> all <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> of the array items must be manually passed to <code>free()</code>. Use <a class="el" href="string_8h.html#ac9f69fa3a17e26a3a5f9d985b5844601" title="Performing sstrsplit() using a UcxAllocator. ">sstrsplit_a()</a> with an allocator to managed memory, to avoid this.</p> 201.968 +<dl class="params"><dt>Parameters</dt><dd> 201.969 + <table class="params"> 201.970 + <tr><td class="paramname">string</td><td>the string to split </td></tr> 201.971 + <tr><td class="paramname">delim</td><td>the delimiter string </td></tr> 201.972 + <tr><td class="paramname">count</td><td>IN: the maximum size of the resulting array (0 = no limit), OUT: the actual size of the array </td></tr> 201.973 + </table> 201.974 + </dd> 201.975 +</dl> 201.976 +<dl class="section return"><dt>Returns</dt><dd>a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> array containing the split strings or <code>NULL</code> on error</dd></dl> 201.977 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#ac9f69fa3a17e26a3a5f9d985b5844601" title="Performing sstrsplit() using a UcxAllocator. ">sstrsplit_a()</a> </dd></dl> 201.978 + 201.979 +</div> 201.980 +</div> 201.981 +<a id="ac9f69fa3a17e26a3a5f9d985b5844601"></a> 201.982 +<h2 class="memtitle"><span class="permalink"><a href="#ac9f69fa3a17e26a3a5f9d985b5844601">◆ </a></span>sstrsplit_a</h2> 201.983 + 201.984 +<div class="memitem"> 201.985 +<div class="memproto"> 201.986 + <table class="memname"> 201.987 + <tr> 201.988 + <td class="memname">#define sstrsplit_a</td> 201.989 + <td>(</td> 201.990 + <td class="paramtype"> </td> 201.991 + <td class="paramname">allocator, </td> 201.992 + </tr> 201.993 + <tr> 201.994 + <td class="paramkey"></td> 201.995 + <td></td> 201.996 + <td class="paramtype"> </td> 201.997 + <td class="paramname">string, </td> 201.998 + </tr> 201.999 + <tr> 201.1000 + <td class="paramkey"></td> 201.1001 + <td></td> 201.1002 + <td class="paramtype"> </td> 201.1003 + <td class="paramname">delim, </td> 201.1004 + </tr> 201.1005 + <tr> 201.1006 + <td class="paramkey"></td> 201.1007 + <td></td> 201.1008 + <td class="paramtype"> </td> 201.1009 + <td class="paramname">count </td> 201.1010 + </tr> 201.1011 + <tr> 201.1012 + <td></td> 201.1013 + <td>)</td> 201.1014 + <td></td><td>   <a class="el" href="string_8h.html#a52906455ae530c9cdc6812c8e6d9bdef">scstrsplit_a</a>(allocator, <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(delim), count)</td> 201.1015 + </tr> 201.1016 + </table> 201.1017 +</div><div class="memdoc"> 201.1018 + 201.1019 +<p>Performing <a class="el" href="string_8h.html#aa929984004c3576bfafb95031aca8eb7" title="Splits a string into parts by using a delimiter string. ">sstrsplit()</a> using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. </p> 201.1020 +<p><em>Read the description of <a class="el" href="string_8h.html#aa929984004c3576bfafb95031aca8eb7" title="Splits a string into parts by using a delimiter string. ">sstrsplit()</a> for details.</em></p> 201.1021 +<p>The memory for the <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> pointers of the array items and the memory for the <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> array itself are allocated by using the <a class="el" href="structUcxAllocator.html#a013376172be39ed54f77c4be6898845a" title="The malloc() function for this allocator. ">UcxAllocator.malloc()</a> function.</p> 201.1022 +<dl class="params"><dt>Parameters</dt><dd> 201.1023 + <table class="params"> 201.1024 + <tr><td class="paramname">allocator</td><td>the <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> used for allocating memory </td></tr> 201.1025 + <tr><td class="paramname">string</td><td>the string to split </td></tr> 201.1026 + <tr><td class="paramname">delim</td><td>the delimiter string </td></tr> 201.1027 + <tr><td class="paramname">count</td><td>IN: the maximum size of the resulting array (0 = no limit), OUT: the actual size of the array </td></tr> 201.1028 + </table> 201.1029 + </dd> 201.1030 +</dl> 201.1031 +<dl class="section return"><dt>Returns</dt><dd>a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> array containing the split strings or <code>NULL</code> on error</dd></dl> 201.1032 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#aa929984004c3576bfafb95031aca8eb7" title="Splits a string into parts by using a delimiter string. ">sstrsplit()</a> </dd></dl> 201.1033 + 201.1034 +</div> 201.1035 +</div> 201.1036 +<a id="a9d03be026afa9447c52bb34b9e3b895a"></a> 201.1037 +<h2 class="memtitle"><span class="permalink"><a href="#a9d03be026afa9447c52bb34b9e3b895a">◆ </a></span>sstrstr</h2> 201.1038 + 201.1039 +<div class="memitem"> 201.1040 +<div class="memproto"> 201.1041 + <table class="memname"> 201.1042 + <tr> 201.1043 + <td class="memname">#define sstrstr</td> 201.1044 + <td>(</td> 201.1045 + <td class="paramtype"> </td> 201.1046 + <td class="paramname">string, </td> 201.1047 + </tr> 201.1048 + <tr> 201.1049 + <td class="paramkey"></td> 201.1050 + <td></td> 201.1051 + <td class="paramtype"> </td> 201.1052 + <td class="paramname">match </td> 201.1053 + </tr> 201.1054 + <tr> 201.1055 + <td></td> 201.1056 + <td>)</td> 201.1057 + <td></td><td>   <a class="el" href="string_8h.html#aa4362cb36c6629f9d8484739fd827748">scstrsstr</a>(string, <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(match))</td> 201.1058 + </tr> 201.1059 + </table> 201.1060 +</div><div class="memdoc"> 201.1061 + 201.1062 +<p>Returns a substring starting at the location of the first occurrence of the specified string. </p> 201.1063 +<p>If the string does not contain the other string, an empty string is returned.</p> 201.1064 +<p>If <code>match</code> is an empty string, the complete <code>string</code> is returned.</p> 201.1065 +<dl class="params"><dt>Parameters</dt><dd> 201.1066 + <table class="params"> 201.1067 + <tr><td class="paramname">string</td><td>the string to be scanned </td></tr> 201.1068 + <tr><td class="paramname">match</td><td>string containing the sequence of characters to match </td></tr> 201.1069 + </table> 201.1070 + </dd> 201.1071 +</dl> 201.1072 +<dl class="section return"><dt>Returns</dt><dd>a substring starting at the first occurrence of <code>match</code>, or an empty string, if the sequence is not present in <code>string</code> </dd></dl> 201.1073 + 201.1074 +</div> 201.1075 +</div> 201.1076 +<a id="ac6a5246f26be2e8a5f34d8995b7ec14e"></a> 201.1077 +<h2 class="memtitle"><span class="permalink"><a href="#ac6a5246f26be2e8a5f34d8995b7ec14e">◆ </a></span>sstrsuffix</h2> 201.1078 + 201.1079 +<div class="memitem"> 201.1080 +<div class="memproto"> 201.1081 + <table class="memname"> 201.1082 + <tr> 201.1083 + <td class="memname">#define sstrsuffix</td> 201.1084 + <td>(</td> 201.1085 + <td class="paramtype"> </td> 201.1086 + <td class="paramname">string, </td> 201.1087 + </tr> 201.1088 + <tr> 201.1089 + <td class="paramkey"></td> 201.1090 + <td></td> 201.1091 + <td class="paramtype"> </td> 201.1092 + <td class="paramname">suffix </td> 201.1093 + </tr> 201.1094 + <tr> 201.1095 + <td></td> 201.1096 + <td>)</td> 201.1097 + <td></td><td>   <a class="el" href="string_8h.html#a1f0ae316a2afe85d5b4655e6ece6721a">scstrsuffix</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string), <a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(suffix))</td> 201.1098 + </tr> 201.1099 + </table> 201.1100 +</div><div class="memdoc"> 201.1101 + 201.1102 +<p>Checks, if a string has a specific suffix. </p> 201.1103 +<dl class="params"><dt>Parameters</dt><dd> 201.1104 + <table class="params"> 201.1105 + <tr><td class="paramname">string</td><td>the string to check </td></tr> 201.1106 + <tr><td class="paramname">suffix</td><td>the suffix the string should have </td></tr> 201.1107 + </table> 201.1108 + </dd> 201.1109 +</dl> 201.1110 +<dl class="section return"><dt>Returns</dt><dd>1, if and only if the string has the specified suffix, 0 otherwise </dd></dl> 201.1111 + 201.1112 +</div> 201.1113 +</div> 201.1114 +<a id="a084fe5a3a90d6fb6b15ecda03bb30824"></a> 201.1115 +<h2 class="memtitle"><span class="permalink"><a href="#a084fe5a3a90d6fb6b15ecda03bb30824">◆ </a></span>sstrupper</h2> 201.1116 + 201.1117 +<div class="memitem"> 201.1118 +<div class="memproto"> 201.1119 + <table class="memname"> 201.1120 + <tr> 201.1121 + <td class="memname">#define sstrupper</td> 201.1122 + <td>(</td> 201.1123 + <td class="paramtype"> </td> 201.1124 + <td class="paramname">string</td><td>)</td> 201.1125 + <td>   <a class="el" href="string_8h.html#af3dd09ec9d11162fe0075f4e60f41240">scstrupper</a>(<a class="el" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed">SCSTR</a>(string))</td> 201.1126 + </tr> 201.1127 + </table> 201.1128 +</div><div class="memdoc"> 201.1129 + 201.1130 +<p>Returns a upper case version of a string. </p> 201.1131 +<p>This function creates a duplicate of the input string, first (see <a class="el" href="string_8h.html#accbfd2b459a028d7af9fb7df6f977d80" title="Creates a duplicate of the specified string. ">sstrdup()</a>).</p> 201.1132 +<dl class="params"><dt>Parameters</dt><dd> 201.1133 + <table class="params"> 201.1134 + <tr><td class="paramname">string</td><td>the input string </td></tr> 201.1135 + </table> 201.1136 + </dd> 201.1137 +</dl> 201.1138 +<dl class="section return"><dt>Returns</dt><dd>the resulting upper case string </dd></dl> 201.1139 + 201.1140 +</div> 201.1141 +</div> 201.1142 +<a id="a5f0dd83c0176b812fb428004b2877a34"></a> 201.1143 +<h2 class="memtitle"><span class="permalink"><a href="#a5f0dd83c0176b812fb428004b2877a34">◆ </a></span>sstrupper_a</h2> 201.1144 + 201.1145 +<div class="memitem"> 201.1146 +<div class="memproto"> 201.1147 + <table class="memname"> 201.1148 + <tr> 201.1149 + <td class="memname">#define sstrupper_a</td> 201.1150 + <td>(</td> 201.1151 + <td class="paramtype"> </td> 201.1152 + <td class="paramname">allocator, </td> 201.1153 + </tr> 201.1154 + <tr> 201.1155 + <td class="paramkey"></td> 201.1156 + <td></td> 201.1157 + <td class="paramtype"> </td> 201.1158 + <td class="paramname">string </td> 201.1159 + </tr> 201.1160 + <tr> 201.1161 + <td></td> 201.1162 + <td>)</td> 201.1163 + <td></td><td>   <a class="el" href="string_8h.html#aea94613eb74668cc05d365803d32bfad">scstrupper_a</a>(allocator, string)</td> 201.1164 + </tr> 201.1165 + </table> 201.1166 +</div><div class="memdoc"> 201.1167 + 201.1168 +<p>Returns a upper case version of a string. </p> 201.1169 +<p>This function creates a duplicate of the input string, first (see <a class="el" href="string_8h.html#a8d098baada4ea9ad5d8b6343b5aec007" title="Creates a duplicate of the specified string using a UcxAllocator. ">sstrdup_a()</a>).</p> 201.1170 +<dl class="params"><dt>Parameters</dt><dd> 201.1171 + <table class="params"> 201.1172 + <tr><td class="paramname">allocator</td><td>the allocator used for duplicating the string </td></tr> 201.1173 + <tr><td class="paramname">string</td><td>the input string </td></tr> 201.1174 + </table> 201.1175 + </dd> 201.1176 +</dl> 201.1177 +<dl class="section return"><dt>Returns</dt><dd>the resulting upper case string </dd></dl> 201.1178 + 201.1179 +</div> 201.1180 +</div> 201.1181 +<h2 class="groupheader">Function Documentation</h2> 201.1182 +<a id="a2b1d6f1eca1c1549f37107b9c026c5a6"></a> 201.1183 +<h2 class="memtitle"><span class="permalink"><a href="#a2b1d6f1eca1c1549f37107b9c026c5a6">◆ </a></span>scstr()</h2> 201.1184 + 201.1185 +<div class="memitem"> 201.1186 +<div class="memproto"> 201.1187 + <table class="memname"> 201.1188 + <tr> 201.1189 + <td class="memname"><a class="el" href="structscstr__t.html">scstr_t</a> scstr </td> 201.1190 + <td>(</td> 201.1191 + <td class="paramtype">const char * </td> 201.1192 + <td class="paramname"><em>cstring</em></td><td>)</td> 201.1193 + <td></td> 201.1194 + </tr> 201.1195 + </table> 201.1196 +</div><div class="memdoc"> 201.1197 + 201.1198 +<p>Creates a new <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> based on a constant C string. </p> 201.1199 +<p>The length is implicitly inferred by using a call to <code>strlen()</code>.</p> 201.1200 +<p><b>Note:</b> the <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> will share the specified pointer to the C string. If you do want a copy, use <a class="el" href="string_8h.html#a97dccce03af419596dbdd592ca46a164" title="Creates a duplicate of the specified string. ">scstrdup()</a> on the return value of this function.</p> 201.1201 +<dl class="params"><dt>Parameters</dt><dd> 201.1202 + <table class="params"> 201.1203 + <tr><td class="paramname">cstring</td><td>the C string to wrap </td></tr> 201.1204 + </table> 201.1205 + </dd> 201.1206 +</dl> 201.1207 +<dl class="section return"><dt>Returns</dt><dd>a new <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> containing the C string</dd></dl> 201.1208 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#ae594f6e222ea394cef6a26c0dfad000d" title="Creates a new scstr_t of the specified length based on a constant C string. ">scstrn()</a> </dd></dl> 201.1209 + 201.1210 +</div> 201.1211 +</div> 201.1212 +<a id="aca8142fb823d253054e17c17cfca05e0"></a> 201.1213 +<h2 class="memtitle"><span class="permalink"><a href="#aca8142fb823d253054e17c17cfca05e0">◆ </a></span>scstrcasecmp()</h2> 201.1214 + 201.1215 +<div class="memitem"> 201.1216 +<div class="memproto"> 201.1217 + <table class="memname"> 201.1218 + <tr> 201.1219 + <td class="memname">int scstrcasecmp </td> 201.1220 + <td>(</td> 201.1221 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1222 + <td class="paramname"><em>s1</em>, </td> 201.1223 + </tr> 201.1224 + <tr> 201.1225 + <td class="paramkey"></td> 201.1226 + <td></td> 201.1227 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1228 + <td class="paramname"><em>s2</em> </td> 201.1229 + </tr> 201.1230 + <tr> 201.1231 + <td></td> 201.1232 + <td>)</td> 201.1233 + <td></td><td></td> 201.1234 + </tr> 201.1235 + </table> 201.1236 +</div><div class="memdoc"> 201.1237 + 201.1238 +<p>Compares two UCX strings ignoring the case. </p> 201.1239 +<p>At first it compares the <a class="el" href="structscstr__t.html#aaa0229f64f1057b6f65adededaa5a172" title="The length of the string. ">scstr_t.length</a> attribute of the two strings. If and only if the lengths match, both strings are compared char by char ignoring the case.</p> 201.1240 +<dl class="params"><dt>Parameters</dt><dd> 201.1241 + <table class="params"> 201.1242 + <tr><td class="paramname">s1</td><td>the first string </td></tr> 201.1243 + <tr><td class="paramname">s2</td><td>the second string </td></tr> 201.1244 + </table> 201.1245 + </dd> 201.1246 +</dl> 201.1247 +<dl class="section return"><dt>Returns</dt><dd>-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. </dd></dl> 201.1248 + 201.1249 +</div> 201.1250 +</div> 201.1251 +<a id="a3718ef4aa1e86cdb26bda2f07fb585df"></a> 201.1252 +<h2 class="memtitle"><span class="permalink"><a href="#a3718ef4aa1e86cdb26bda2f07fb585df">◆ </a></span>scstrcaseprefix()</h2> 201.1253 + 201.1254 +<div class="memitem"> 201.1255 +<div class="memproto"> 201.1256 + <table class="memname"> 201.1257 + <tr> 201.1258 + <td class="memname">int scstrcaseprefix </td> 201.1259 + <td>(</td> 201.1260 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1261 + <td class="paramname"><em>string</em>, </td> 201.1262 + </tr> 201.1263 + <tr> 201.1264 + <td class="paramkey"></td> 201.1265 + <td></td> 201.1266 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1267 + <td class="paramname"><em>prefix</em> </td> 201.1268 + </tr> 201.1269 + <tr> 201.1270 + <td></td> 201.1271 + <td>)</td> 201.1272 + <td></td><td></td> 201.1273 + </tr> 201.1274 + </table> 201.1275 +</div><div class="memdoc"> 201.1276 + 201.1277 +<p>Checks, if a string has a specific prefix, ignoring the case. </p> 201.1278 +<dl class="params"><dt>Parameters</dt><dd> 201.1279 + <table class="params"> 201.1280 + <tr><td class="paramname">string</td><td>the string to check </td></tr> 201.1281 + <tr><td class="paramname">prefix</td><td>the prefix the string should have </td></tr> 201.1282 + </table> 201.1283 + </dd> 201.1284 +</dl> 201.1285 +<dl class="section return"><dt>Returns</dt><dd>1, if and only if the string has the specified prefix, 0 otherwise </dd></dl> 201.1286 + 201.1287 +</div> 201.1288 +</div> 201.1289 +<a id="a6edb4b85f2b9efe79db7ffe6eccd7bc3"></a> 201.1290 +<h2 class="memtitle"><span class="permalink"><a href="#a6edb4b85f2b9efe79db7ffe6eccd7bc3">◆ </a></span>scstrcasesuffix()</h2> 201.1291 + 201.1292 +<div class="memitem"> 201.1293 +<div class="memproto"> 201.1294 + <table class="memname"> 201.1295 + <tr> 201.1296 + <td class="memname">int scstrcasesuffix </td> 201.1297 + <td>(</td> 201.1298 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1299 + <td class="paramname"><em>string</em>, </td> 201.1300 + </tr> 201.1301 + <tr> 201.1302 + <td class="paramkey"></td> 201.1303 + <td></td> 201.1304 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1305 + <td class="paramname"><em>suffix</em> </td> 201.1306 + </tr> 201.1307 + <tr> 201.1308 + <td></td> 201.1309 + <td>)</td> 201.1310 + <td></td><td></td> 201.1311 + </tr> 201.1312 + </table> 201.1313 +</div><div class="memdoc"> 201.1314 + 201.1315 +<p>Checks, if a string has a specific suffix, ignoring the case. </p> 201.1316 +<dl class="params"><dt>Parameters</dt><dd> 201.1317 + <table class="params"> 201.1318 + <tr><td class="paramname">string</td><td>the string to check </td></tr> 201.1319 + <tr><td class="paramname">suffix</td><td>the suffix the string should have </td></tr> 201.1320 + </table> 201.1321 + </dd> 201.1322 +</dl> 201.1323 +<dl class="section return"><dt>Returns</dt><dd>1, if and only if the string has the specified suffix, 0 otherwise </dd></dl> 201.1324 + 201.1325 +</div> 201.1326 +</div> 201.1327 +<a id="a7376842c19e954b49215da81ef76ac0c"></a> 201.1328 +<h2 class="memtitle"><span class="permalink"><a href="#a7376842c19e954b49215da81ef76ac0c">◆ </a></span>scstrcat()</h2> 201.1329 + 201.1330 +<div class="memitem"> 201.1331 +<div class="memproto"> 201.1332 + <table class="memname"> 201.1333 + <tr> 201.1334 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> scstrcat </td> 201.1335 + <td>(</td> 201.1336 + <td class="paramtype">size_t </td> 201.1337 + <td class="paramname"><em>count</em>, </td> 201.1338 + </tr> 201.1339 + <tr> 201.1340 + <td class="paramkey"></td> 201.1341 + <td></td> 201.1342 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1343 + <td class="paramname"><em>s1</em>, </td> 201.1344 + </tr> 201.1345 + <tr> 201.1346 + <td class="paramkey"></td> 201.1347 + <td></td> 201.1348 + <td class="paramtype"> </td> 201.1349 + <td class="paramname"><em>...</em> </td> 201.1350 + </tr> 201.1351 + <tr> 201.1352 + <td></td> 201.1353 + <td>)</td> 201.1354 + <td></td><td></td> 201.1355 + </tr> 201.1356 + </table> 201.1357 +</div><div class="memdoc"> 201.1358 + 201.1359 +<p>Concatenates two or more strings. </p> 201.1360 +<p>The resulting string will be allocated by standard <code>malloc()</code>. So developers <b>MUST</b> pass the <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> to <code>free()</code>.</p> 201.1361 +<p>The <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> of the return value will <em>always</em> be <code>NULL</code>- terminated.</p> 201.1362 +<dl class="params"><dt>Parameters</dt><dd> 201.1363 + <table class="params"> 201.1364 + <tr><td class="paramname">count</td><td>the total number of strings to concatenate </td></tr> 201.1365 + <tr><td class="paramname">s1</td><td>first string </td></tr> 201.1366 + <tr><td class="paramname">...</td><td>all remaining strings </td></tr> 201.1367 + </table> 201.1368 + </dd> 201.1369 +</dl> 201.1370 +<dl class="section return"><dt>Returns</dt><dd>the concatenated string </dd></dl> 201.1371 + 201.1372 +</div> 201.1373 +</div> 201.1374 +<a id="abacce4cbd6f70fcb6453904ef08b02e9"></a> 201.1375 +<h2 class="memtitle"><span class="permalink"><a href="#abacce4cbd6f70fcb6453904ef08b02e9">◆ </a></span>scstrcat_a()</h2> 201.1376 + 201.1377 +<div class="memitem"> 201.1378 +<div class="memproto"> 201.1379 + <table class="memname"> 201.1380 + <tr> 201.1381 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> scstrcat_a </td> 201.1382 + <td>(</td> 201.1383 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 201.1384 + <td class="paramname"><em>alloc</em>, </td> 201.1385 + </tr> 201.1386 + <tr> 201.1387 + <td class="paramkey"></td> 201.1388 + <td></td> 201.1389 + <td class="paramtype">size_t </td> 201.1390 + <td class="paramname"><em>count</em>, </td> 201.1391 + </tr> 201.1392 + <tr> 201.1393 + <td class="paramkey"></td> 201.1394 + <td></td> 201.1395 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1396 + <td class="paramname"><em>s1</em>, </td> 201.1397 + </tr> 201.1398 + <tr> 201.1399 + <td class="paramkey"></td> 201.1400 + <td></td> 201.1401 + <td class="paramtype"> </td> 201.1402 + <td class="paramname"><em>...</em> </td> 201.1403 + </tr> 201.1404 + <tr> 201.1405 + <td></td> 201.1406 + <td>)</td> 201.1407 + <td></td><td></td> 201.1408 + </tr> 201.1409 + </table> 201.1410 +</div><div class="memdoc"> 201.1411 + 201.1412 +<p>Concatenates two or more strings using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. </p> 201.1413 +<p>The resulting string must be freed by the allocators <code>free()</code> implementation.</p> 201.1414 +<p>The <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> of the return value will <em>always</em> be <code>NULL</code>- terminated.</p> 201.1415 +<dl class="params"><dt>Parameters</dt><dd> 201.1416 + <table class="params"> 201.1417 + <tr><td class="paramname">alloc</td><td>the allocator to use </td></tr> 201.1418 + <tr><td class="paramname">count</td><td>the total number of strings to concatenate </td></tr> 201.1419 + <tr><td class="paramname">s1</td><td>first string </td></tr> 201.1420 + <tr><td class="paramname">...</td><td>all remaining strings </td></tr> 201.1421 + </table> 201.1422 + </dd> 201.1423 +</dl> 201.1424 +<dl class="section return"><dt>Returns</dt><dd>the concatenated string</dd></dl> 201.1425 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a7376842c19e954b49215da81ef76ac0c" title="Concatenates two or more strings. ">scstrcat()</a> </dd></dl> 201.1426 + 201.1427 +</div> 201.1428 +</div> 201.1429 +<a id="a5836d6a7a744791c35e5c17bdc394a87"></a> 201.1430 +<h2 class="memtitle"><span class="permalink"><a href="#a5836d6a7a744791c35e5c17bdc394a87">◆ </a></span>scstrchr()</h2> 201.1431 + 201.1432 +<div class="memitem"> 201.1433 +<div class="memproto"> 201.1434 + <table class="memname"> 201.1435 + <tr> 201.1436 + <td class="memname"><a class="el" href="structscstr__t.html">scstr_t</a> scstrchr </td> 201.1437 + <td>(</td> 201.1438 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1439 + <td class="paramname"><em>string</em>, </td> 201.1440 + </tr> 201.1441 + <tr> 201.1442 + <td class="paramkey"></td> 201.1443 + <td></td> 201.1444 + <td class="paramtype">int </td> 201.1445 + <td class="paramname"><em>chr</em> </td> 201.1446 + </tr> 201.1447 + <tr> 201.1448 + <td></td> 201.1449 + <td>)</td> 201.1450 + <td></td><td></td> 201.1451 + </tr> 201.1452 + </table> 201.1453 +</div><div class="memdoc"> 201.1454 + 201.1455 +<p>Returns an immutable substring starting at the location of the first occurrence of the specified character. </p> 201.1456 +<p>If the string does not contain the character, an empty string is returned.</p> 201.1457 +<dl class="params"><dt>Parameters</dt><dd> 201.1458 + <table class="params"> 201.1459 + <tr><td class="paramname">string</td><td>the string where to locate the character </td></tr> 201.1460 + <tr><td class="paramname">chr</td><td>the character to locate </td></tr> 201.1461 + </table> 201.1462 + </dd> 201.1463 +</dl> 201.1464 +<dl class="section return"><dt>Returns</dt><dd>a substring starting at the first location of <code>chr</code></dd></dl> 201.1465 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a9a6c8d8db0dda0037c3c852cce1a5060" title="Returns a substring of an immutable string starting at the specified location. ">scstrsubs()</a> </dd></dl> 201.1466 + 201.1467 +</div> 201.1468 +</div> 201.1469 +<a id="af35272a8e5408c88ed3e25a3a98f0a82"></a> 201.1470 +<h2 class="memtitle"><span class="permalink"><a href="#af35272a8e5408c88ed3e25a3a98f0a82">◆ </a></span>scstrcmp()</h2> 201.1471 + 201.1472 +<div class="memitem"> 201.1473 +<div class="memproto"> 201.1474 + <table class="memname"> 201.1475 + <tr> 201.1476 + <td class="memname">int scstrcmp </td> 201.1477 + <td>(</td> 201.1478 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1479 + <td class="paramname"><em>s1</em>, </td> 201.1480 + </tr> 201.1481 + <tr> 201.1482 + <td class="paramkey"></td> 201.1483 + <td></td> 201.1484 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1485 + <td class="paramname"><em>s2</em> </td> 201.1486 + </tr> 201.1487 + <tr> 201.1488 + <td></td> 201.1489 + <td>)</td> 201.1490 + <td></td><td></td> 201.1491 + </tr> 201.1492 + </table> 201.1493 +</div><div class="memdoc"> 201.1494 + 201.1495 +<p>Compares two UCX strings with standard <code>memcmp()</code>. </p> 201.1496 +<p>At first it compares the <a class="el" href="structscstr__t.html#aaa0229f64f1057b6f65adededaa5a172" title="The length of the string. ">scstr_t.length</a> attribute of the two strings. The <code>memcmp()</code> function is called, if and only if the lengths match.</p> 201.1497 +<dl class="params"><dt>Parameters</dt><dd> 201.1498 + <table class="params"> 201.1499 + <tr><td class="paramname">s1</td><td>the first string </td></tr> 201.1500 + <tr><td class="paramname">s2</td><td>the second string </td></tr> 201.1501 + </table> 201.1502 + </dd> 201.1503 +</dl> 201.1504 +<dl class="section return"><dt>Returns</dt><dd>-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 <code>memcmp()</code> otherwise (i.e. 0 if the strings match) </dd></dl> 201.1505 + 201.1506 +</div> 201.1507 +</div> 201.1508 +<a id="a97dccce03af419596dbdd592ca46a164"></a> 201.1509 +<h2 class="memtitle"><span class="permalink"><a href="#a97dccce03af419596dbdd592ca46a164">◆ </a></span>scstrdup()</h2> 201.1510 + 201.1511 +<div class="memitem"> 201.1512 +<div class="memproto"> 201.1513 + <table class="memname"> 201.1514 + <tr> 201.1515 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> scstrdup </td> 201.1516 + <td>(</td> 201.1517 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1518 + <td class="paramname"><em>string</em></td><td>)</td> 201.1519 + <td></td> 201.1520 + </tr> 201.1521 + </table> 201.1522 +</div><div class="memdoc"> 201.1523 + 201.1524 +<p>Creates a duplicate of the specified string. </p> 201.1525 +<p>The new <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> will contain a copy allocated by standard <code>malloc()</code>. So developers <b>MUST</b> pass the <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> to <code>free()</code>.</p> 201.1526 +<p>The <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> of the return value will <em>always</em> be <code>NULL</code>- terminated and mutable, regardless of the argument.</p> 201.1527 +<dl class="params"><dt>Parameters</dt><dd> 201.1528 + <table class="params"> 201.1529 + <tr><td class="paramname">string</td><td>the string to duplicate </td></tr> 201.1530 + </table> 201.1531 + </dd> 201.1532 +</dl> 201.1533 +<dl class="section return"><dt>Returns</dt><dd>a duplicate of the string </dd></dl> 201.1534 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a8fe58921f51eb1fde038472377e63014" title="Creates a duplicate of the specified string using a UcxAllocator. ">scstrdup_a()</a> </dd></dl> 201.1535 + 201.1536 +</div> 201.1537 +</div> 201.1538 +<a id="a8fe58921f51eb1fde038472377e63014"></a> 201.1539 +<h2 class="memtitle"><span class="permalink"><a href="#a8fe58921f51eb1fde038472377e63014">◆ </a></span>scstrdup_a()</h2> 201.1540 + 201.1541 +<div class="memitem"> 201.1542 +<div class="memproto"> 201.1543 + <table class="memname"> 201.1544 + <tr> 201.1545 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> scstrdup_a </td> 201.1546 + <td>(</td> 201.1547 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 201.1548 + <td class="paramname"><em>allocator</em>, </td> 201.1549 + </tr> 201.1550 + <tr> 201.1551 + <td class="paramkey"></td> 201.1552 + <td></td> 201.1553 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1554 + <td class="paramname"><em>string</em> </td> 201.1555 + </tr> 201.1556 + <tr> 201.1557 + <td></td> 201.1558 + <td>)</td> 201.1559 + <td></td><td></td> 201.1560 + </tr> 201.1561 + </table> 201.1562 +</div><div class="memdoc"> 201.1563 + 201.1564 +<p>Creates a duplicate of the specified string using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. </p> 201.1565 +<p>The new <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> will contain a copy allocated by the allocators <a class="el" href="structUcxAllocator.html#a013376172be39ed54f77c4be6898845a" title="The malloc() function for this allocator. ">UcxAllocator.malloc()</a> function. So it is implementation depended, whether the returned <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> pointer must be passed to the allocators <a class="el" href="structUcxAllocator.html#aecce1840378ed53f1002190f4f87026f" title="The free() function for this allocator. ">UcxAllocator.free()</a> function manually.</p> 201.1566 +<p>The <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> of the return value will <em>always</em> be <code>NULL</code>- terminated and mutable, regardless of the argument.</p> 201.1567 +<dl class="params"><dt>Parameters</dt><dd> 201.1568 + <table class="params"> 201.1569 + <tr><td class="paramname">allocator</td><td>a valid instance of a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> </td></tr> 201.1570 + <tr><td class="paramname">string</td><td>the string to duplicate </td></tr> 201.1571 + </table> 201.1572 + </dd> 201.1573 +</dl> 201.1574 +<dl class="section return"><dt>Returns</dt><dd>a duplicate of the string </dd></dl> 201.1575 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a97dccce03af419596dbdd592ca46a164" title="Creates a duplicate of the specified string. ">scstrdup()</a> </dd></dl> 201.1576 + 201.1577 +</div> 201.1578 +</div> 201.1579 +<a id="abccf198bea3186ff2abb080cc88dcae6"></a> 201.1580 +<h2 class="memtitle"><span class="permalink"><a href="#abccf198bea3186ff2abb080cc88dcae6">◆ </a></span>scstrlower()</h2> 201.1581 + 201.1582 +<div class="memitem"> 201.1583 +<div class="memproto"> 201.1584 + <table class="memname"> 201.1585 + <tr> 201.1586 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> scstrlower </td> 201.1587 + <td>(</td> 201.1588 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1589 + <td class="paramname"><em>string</em></td><td>)</td> 201.1590 + <td></td> 201.1591 + </tr> 201.1592 + </table> 201.1593 +</div><div class="memdoc"> 201.1594 + 201.1595 +<p>Returns a lower case version of a string. </p> 201.1596 +<p>This function creates a duplicate of the input string, first (see <a class="el" href="string_8h.html#a97dccce03af419596dbdd592ca46a164" title="Creates a duplicate of the specified string. ">scstrdup()</a>).</p> 201.1597 +<dl class="params"><dt>Parameters</dt><dd> 201.1598 + <table class="params"> 201.1599 + <tr><td class="paramname">string</td><td>the input string </td></tr> 201.1600 + </table> 201.1601 + </dd> 201.1602 +</dl> 201.1603 +<dl class="section return"><dt>Returns</dt><dd>the resulting lower case string </dd></dl> 201.1604 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a97dccce03af419596dbdd592ca46a164" title="Creates a duplicate of the specified string. ">scstrdup()</a> </dd></dl> 201.1605 + 201.1606 +</div> 201.1607 +</div> 201.1608 +<a id="a3cf1e557df7ab58d03c78832c4060276"></a> 201.1609 +<h2 class="memtitle"><span class="permalink"><a href="#a3cf1e557df7ab58d03c78832c4060276">◆ </a></span>scstrlower_a()</h2> 201.1610 + 201.1611 +<div class="memitem"> 201.1612 +<div class="memproto"> 201.1613 + <table class="memname"> 201.1614 + <tr> 201.1615 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> scstrlower_a </td> 201.1616 + <td>(</td> 201.1617 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 201.1618 + <td class="paramname"><em>allocator</em>, </td> 201.1619 + </tr> 201.1620 + <tr> 201.1621 + <td class="paramkey"></td> 201.1622 + <td></td> 201.1623 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1624 + <td class="paramname"><em>string</em> </td> 201.1625 + </tr> 201.1626 + <tr> 201.1627 + <td></td> 201.1628 + <td>)</td> 201.1629 + <td></td><td></td> 201.1630 + </tr> 201.1631 + </table> 201.1632 +</div><div class="memdoc"> 201.1633 + 201.1634 +<p>Returns a lower case version of a string. </p> 201.1635 +<p>This function creates a duplicate of the input string, first (see <a class="el" href="string_8h.html#a8fe58921f51eb1fde038472377e63014" title="Creates a duplicate of the specified string using a UcxAllocator. ">scstrdup_a()</a>).</p> 201.1636 +<dl class="params"><dt>Parameters</dt><dd> 201.1637 + <table class="params"> 201.1638 + <tr><td class="paramname">allocator</td><td>the allocator used for duplicating the string </td></tr> 201.1639 + <tr><td class="paramname">string</td><td>the input string </td></tr> 201.1640 + </table> 201.1641 + </dd> 201.1642 +</dl> 201.1643 +<dl class="section return"><dt>Returns</dt><dd>the resulting lower case string </dd></dl> 201.1644 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a8fe58921f51eb1fde038472377e63014" title="Creates a duplicate of the specified string using a UcxAllocator. ">scstrdup_a()</a> </dd></dl> 201.1645 + 201.1646 +</div> 201.1647 +</div> 201.1648 +<a id="ae594f6e222ea394cef6a26c0dfad000d"></a> 201.1649 +<h2 class="memtitle"><span class="permalink"><a href="#ae594f6e222ea394cef6a26c0dfad000d">◆ </a></span>scstrn()</h2> 201.1650 + 201.1651 +<div class="memitem"> 201.1652 +<div class="memproto"> 201.1653 + <table class="memname"> 201.1654 + <tr> 201.1655 + <td class="memname"><a class="el" href="structscstr__t.html">scstr_t</a> scstrn </td> 201.1656 + <td>(</td> 201.1657 + <td class="paramtype">const char * </td> 201.1658 + <td class="paramname"><em>cstring</em>, </td> 201.1659 + </tr> 201.1660 + <tr> 201.1661 + <td class="paramkey"></td> 201.1662 + <td></td> 201.1663 + <td class="paramtype">size_t </td> 201.1664 + <td class="paramname"><em>length</em> </td> 201.1665 + </tr> 201.1666 + <tr> 201.1667 + <td></td> 201.1668 + <td>)</td> 201.1669 + <td></td><td></td> 201.1670 + </tr> 201.1671 + </table> 201.1672 +</div><div class="memdoc"> 201.1673 + 201.1674 +<p>Creates a new <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> of the specified length based on a constant C string. </p> 201.1675 +<p><b>Note:</b> the <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> will share the specified pointer to the C string. If you do want a copy, use <a class="el" href="string_8h.html#a97dccce03af419596dbdd592ca46a164" title="Creates a duplicate of the specified string. ">scstrdup()</a> on the return value of this function. *</p> 201.1676 +<dl class="params"><dt>Parameters</dt><dd> 201.1677 + <table class="params"> 201.1678 + <tr><td class="paramname">cstring</td><td>the C string to wrap </td></tr> 201.1679 + <tr><td class="paramname">length</td><td>the length of the string </td></tr> 201.1680 + </table> 201.1681 + </dd> 201.1682 +</dl> 201.1683 +<dl class="section return"><dt>Returns</dt><dd>a new <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> containing the C string</dd></dl> 201.1684 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a2b1d6f1eca1c1549f37107b9c026c5a6" title="Creates a new scstr_t based on a constant C string. ">scstr()</a> </dd></dl> 201.1685 + 201.1686 +</div> 201.1687 +</div> 201.1688 +<a id="ac1b000030d6d197eec48c15a182055d5"></a> 201.1689 +<h2 class="memtitle"><span class="permalink"><a href="#ac1b000030d6d197eec48c15a182055d5">◆ </a></span>scstrnlen()</h2> 201.1690 + 201.1691 +<div class="memitem"> 201.1692 +<div class="memproto"> 201.1693 + <table class="memname"> 201.1694 + <tr> 201.1695 + <td class="memname">size_t scstrnlen </td> 201.1696 + <td>(</td> 201.1697 + <td class="paramtype">size_t </td> 201.1698 + <td class="paramname"><em>count</em>, </td> 201.1699 + </tr> 201.1700 + <tr> 201.1701 + <td class="paramkey"></td> 201.1702 + <td></td> 201.1703 + <td class="paramtype"> </td> 201.1704 + <td class="paramname"><em>...</em> </td> 201.1705 + </tr> 201.1706 + <tr> 201.1707 + <td></td> 201.1708 + <td>)</td> 201.1709 + <td></td><td></td> 201.1710 + </tr> 201.1711 + </table> 201.1712 +</div><div class="memdoc"> 201.1713 + 201.1714 +<p>Returns the accumulated length of all specified strings. </p> 201.1715 +<p><b>Attention:</b> if the count argument is larger than the count of the specified strings, the behavior is undefined.</p> 201.1716 +<dl class="params"><dt>Parameters</dt><dd> 201.1717 + <table class="params"> 201.1718 + <tr><td class="paramname">count</td><td>the total number of specified strings </td></tr> 201.1719 + <tr><td class="paramname">...</td><td>all strings </td></tr> 201.1720 + </table> 201.1721 + </dd> 201.1722 +</dl> 201.1723 +<dl class="section return"><dt>Returns</dt><dd>the accumulated length of all strings </dd></dl> 201.1724 + 201.1725 +</div> 201.1726 +</div> 201.1727 +<a id="a599ddc2f88dd1df68b72eefd91347393"></a> 201.1728 +<h2 class="memtitle"><span class="permalink"><a href="#a599ddc2f88dd1df68b72eefd91347393">◆ </a></span>scstrprefix()</h2> 201.1729 + 201.1730 +<div class="memitem"> 201.1731 +<div class="memproto"> 201.1732 + <table class="memname"> 201.1733 + <tr> 201.1734 + <td class="memname">int scstrprefix </td> 201.1735 + <td>(</td> 201.1736 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1737 + <td class="paramname"><em>string</em>, </td> 201.1738 + </tr> 201.1739 + <tr> 201.1740 + <td class="paramkey"></td> 201.1741 + <td></td> 201.1742 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1743 + <td class="paramname"><em>prefix</em> </td> 201.1744 + </tr> 201.1745 + <tr> 201.1746 + <td></td> 201.1747 + <td>)</td> 201.1748 + <td></td><td></td> 201.1749 + </tr> 201.1750 + </table> 201.1751 +</div><div class="memdoc"> 201.1752 + 201.1753 +<p>Checks, if a string has a specific prefix. </p> 201.1754 +<dl class="params"><dt>Parameters</dt><dd> 201.1755 + <table class="params"> 201.1756 + <tr><td class="paramname">string</td><td>the string to check </td></tr> 201.1757 + <tr><td class="paramname">prefix</td><td>the prefix the string should have </td></tr> 201.1758 + </table> 201.1759 + </dd> 201.1760 +</dl> 201.1761 +<dl class="section return"><dt>Returns</dt><dd>1, if and only if the string has the specified prefix, 0 otherwise </dd></dl> 201.1762 + 201.1763 +</div> 201.1764 +</div> 201.1765 +<a id="ae389835b97cd9382e7d6a6a075323376"></a> 201.1766 +<h2 class="memtitle"><span class="permalink"><a href="#ae389835b97cd9382e7d6a6a075323376">◆ </a></span>scstrrchr()</h2> 201.1767 + 201.1768 +<div class="memitem"> 201.1769 +<div class="memproto"> 201.1770 + <table class="memname"> 201.1771 + <tr> 201.1772 + <td class="memname"><a class="el" href="structscstr__t.html">scstr_t</a> scstrrchr </td> 201.1773 + <td>(</td> 201.1774 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1775 + <td class="paramname"><em>string</em>, </td> 201.1776 + </tr> 201.1777 + <tr> 201.1778 + <td class="paramkey"></td> 201.1779 + <td></td> 201.1780 + <td class="paramtype">int </td> 201.1781 + <td class="paramname"><em>chr</em> </td> 201.1782 + </tr> 201.1783 + <tr> 201.1784 + <td></td> 201.1785 + <td>)</td> 201.1786 + <td></td><td></td> 201.1787 + </tr> 201.1788 + </table> 201.1789 +</div><div class="memdoc"> 201.1790 + 201.1791 +<p>Returns an immutable substring starting at the location of the last occurrence of the specified character. </p> 201.1792 +<p>If the string does not contain the character, an empty string is returned.</p> 201.1793 +<dl class="params"><dt>Parameters</dt><dd> 201.1794 + <table class="params"> 201.1795 + <tr><td class="paramname">string</td><td>the string where to locate the character </td></tr> 201.1796 + <tr><td class="paramname">chr</td><td>the character to locate </td></tr> 201.1797 + </table> 201.1798 + </dd> 201.1799 +</dl> 201.1800 +<dl class="section return"><dt>Returns</dt><dd>a substring starting at the last location of <code>chr</code></dd></dl> 201.1801 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a9a6c8d8db0dda0037c3c852cce1a5060" title="Returns a substring of an immutable string starting at the specified location. ">scstrsubs()</a> </dd></dl> 201.1802 + 201.1803 +</div> 201.1804 +</div> 201.1805 +<a id="a54f256c3abe811c52d58b4ff1b23f051"></a> 201.1806 +<h2 class="memtitle"><span class="permalink"><a href="#a54f256c3abe811c52d58b4ff1b23f051">◆ </a></span>scstrscstr()</h2> 201.1807 + 201.1808 +<div class="memitem"> 201.1809 +<div class="memproto"> 201.1810 + <table class="memname"> 201.1811 + <tr> 201.1812 + <td class="memname"><a class="el" href="structscstr__t.html">scstr_t</a> scstrscstr </td> 201.1813 + <td>(</td> 201.1814 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1815 + <td class="paramname"><em>string</em>, </td> 201.1816 + </tr> 201.1817 + <tr> 201.1818 + <td class="paramkey"></td> 201.1819 + <td></td> 201.1820 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1821 + <td class="paramname"><em>match</em> </td> 201.1822 + </tr> 201.1823 + <tr> 201.1824 + <td></td> 201.1825 + <td>)</td> 201.1826 + <td></td><td></td> 201.1827 + </tr> 201.1828 + </table> 201.1829 +</div><div class="memdoc"> 201.1830 + 201.1831 +<p>Returns an immutable substring starting at the location of the first occurrence of the specified immutable string. </p> 201.1832 +<p>If the string does not contain the other string, an empty string is returned.</p> 201.1833 +<p>If <code>match</code> is an empty string, the complete <code>string</code> is returned.</p> 201.1834 +<dl class="params"><dt>Parameters</dt><dd> 201.1835 + <table class="params"> 201.1836 + <tr><td class="paramname">string</td><td>the string to be scanned </td></tr> 201.1837 + <tr><td class="paramname">match</td><td>string containing the sequence of characters to match </td></tr> 201.1838 + </table> 201.1839 + </dd> 201.1840 +</dl> 201.1841 +<dl class="section return"><dt>Returns</dt><dd>a substring starting at the first occurrence of <code>match</code>, or an empty string, if the sequence is not present in <code>string</code> </dd></dl> 201.1842 + 201.1843 +</div> 201.1844 +</div> 201.1845 +<a id="ae71cac352b00230848bde358f0fb05ea"></a> 201.1846 +<h2 class="memtitle"><span class="permalink"><a href="#ae71cac352b00230848bde358f0fb05ea">◆ </a></span>scstrsplit()</h2> 201.1847 + 201.1848 +<div class="memitem"> 201.1849 +<div class="memproto"> 201.1850 + <table class="memname"> 201.1851 + <tr> 201.1852 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a>* scstrsplit </td> 201.1853 + <td>(</td> 201.1854 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1855 + <td class="paramname"><em>string</em>, </td> 201.1856 + </tr> 201.1857 + <tr> 201.1858 + <td class="paramkey"></td> 201.1859 + <td></td> 201.1860 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1861 + <td class="paramname"><em>delim</em>, </td> 201.1862 + </tr> 201.1863 + <tr> 201.1864 + <td class="paramkey"></td> 201.1865 + <td></td> 201.1866 + <td class="paramtype">ssize_t * </td> 201.1867 + <td class="paramname"><em>count</em> </td> 201.1868 + </tr> 201.1869 + <tr> 201.1870 + <td></td> 201.1871 + <td>)</td> 201.1872 + <td></td><td></td> 201.1873 + </tr> 201.1874 + </table> 201.1875 +</div><div class="memdoc"> 201.1876 + 201.1877 +<p>Splits a string into parts by using a delimiter string. </p> 201.1878 +<p>This function will return <code>NULL</code>, if one of the following happens: </p><ul> 201.1879 +<li> 201.1880 +the string length is zero </li> 201.1881 +<li> 201.1882 +the delimeter length is zero </li> 201.1883 +<li> 201.1884 +the string equals the delimeter </li> 201.1885 +<li> 201.1886 +memory allocation fails </li> 201.1887 +</ul> 201.1888 +<p>The integer referenced by <code>count</code> is used as input and determines the maximum size of the resulting array, i.e. the maximum count of splits to perform + 1.</p> 201.1889 +<p>The integer referenced by <code>count</code> is also used as output and is set to </p><ul> 201.1890 +<li> 201.1891 +-2, on memory allocation errors </li> 201.1892 +<li> 201.1893 +-1, if either the string or the delimiter is an empty string </li> 201.1894 +<li> 201.1895 +0, if the string equals the delimiter </li> 201.1896 +<li> 201.1897 +1, if the string does not contain the delimiter </li> 201.1898 +<li> 201.1899 +the count of array items, otherwise </li> 201.1900 +</ul> 201.1901 +<p>If the string starts with the delimiter, the first item of the resulting array will be an empty string.</p> 201.1902 +<p>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, <em>including</em> the terminating delimiter.</p> 201.1903 +<p><b>Attention:</b> The array pointer <b>AND</b> all <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> of the array items must be manually passed to <code>free()</code>. Use <a class="el" href="string_8h.html#a52906455ae530c9cdc6812c8e6d9bdef" title="Performing scstrsplit() using a UcxAllocator. ">scstrsplit_a()</a> with an allocator to managed memory, to avoid this.</p> 201.1904 +<dl class="params"><dt>Parameters</dt><dd> 201.1905 + <table class="params"> 201.1906 + <tr><td class="paramname">string</td><td>the string to split </td></tr> 201.1907 + <tr><td class="paramname">delim</td><td>the delimiter string </td></tr> 201.1908 + <tr><td class="paramname">count</td><td>IN: the maximum size of the resulting array (0 = no limit), OUT: the actual size of the array </td></tr> 201.1909 + </table> 201.1910 + </dd> 201.1911 +</dl> 201.1912 +<dl class="section return"><dt>Returns</dt><dd>a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> array containing the split strings or <code>NULL</code> on error</dd></dl> 201.1913 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a52906455ae530c9cdc6812c8e6d9bdef" title="Performing scstrsplit() using a UcxAllocator. ">scstrsplit_a()</a> </dd></dl> 201.1914 + 201.1915 +</div> 201.1916 +</div> 201.1917 +<a id="a52906455ae530c9cdc6812c8e6d9bdef"></a> 201.1918 +<h2 class="memtitle"><span class="permalink"><a href="#a52906455ae530c9cdc6812c8e6d9bdef">◆ </a></span>scstrsplit_a()</h2> 201.1919 + 201.1920 +<div class="memitem"> 201.1921 +<div class="memproto"> 201.1922 + <table class="memname"> 201.1923 + <tr> 201.1924 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a>* scstrsplit_a </td> 201.1925 + <td>(</td> 201.1926 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 201.1927 + <td class="paramname"><em>allocator</em>, </td> 201.1928 + </tr> 201.1929 + <tr> 201.1930 + <td class="paramkey"></td> 201.1931 + <td></td> 201.1932 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1933 + <td class="paramname"><em>string</em>, </td> 201.1934 + </tr> 201.1935 + <tr> 201.1936 + <td class="paramkey"></td> 201.1937 + <td></td> 201.1938 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1939 + <td class="paramname"><em>delim</em>, </td> 201.1940 + </tr> 201.1941 + <tr> 201.1942 + <td class="paramkey"></td> 201.1943 + <td></td> 201.1944 + <td class="paramtype">ssize_t * </td> 201.1945 + <td class="paramname"><em>count</em> </td> 201.1946 + </tr> 201.1947 + <tr> 201.1948 + <td></td> 201.1949 + <td>)</td> 201.1950 + <td></td><td></td> 201.1951 + </tr> 201.1952 + </table> 201.1953 +</div><div class="memdoc"> 201.1954 + 201.1955 +<p>Performing <a class="el" href="string_8h.html#ae71cac352b00230848bde358f0fb05ea" title="Splits a string into parts by using a delimiter string. ">scstrsplit()</a> using a <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a>. </p> 201.1956 +<p><em>Read the description of <a class="el" href="string_8h.html#ae71cac352b00230848bde358f0fb05ea" title="Splits a string into parts by using a delimiter string. ">scstrsplit()</a> for details.</em></p> 201.1957 +<p>The memory for the <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> pointers of the array items and the memory for the <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> array itself are allocated by using the <a class="el" href="structUcxAllocator.html#a013376172be39ed54f77c4be6898845a" title="The malloc() function for this allocator. ">UcxAllocator.malloc()</a> function.</p> 201.1958 +<dl class="params"><dt>Parameters</dt><dd> 201.1959 + <table class="params"> 201.1960 + <tr><td class="paramname">allocator</td><td>the <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> used for allocating memory </td></tr> 201.1961 + <tr><td class="paramname">string</td><td>the string to split </td></tr> 201.1962 + <tr><td class="paramname">delim</td><td>the delimiter string </td></tr> 201.1963 + <tr><td class="paramname">count</td><td>IN: the maximum size of the resulting array (0 = no limit), OUT: the actual size of the array </td></tr> 201.1964 + </table> 201.1965 + </dd> 201.1966 +</dl> 201.1967 +<dl class="section return"><dt>Returns</dt><dd>a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> array containing the split strings or <code>NULL</code> on error</dd></dl> 201.1968 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#ae71cac352b00230848bde358f0fb05ea" title="Splits a string into parts by using a delimiter string. ">scstrsplit()</a> </dd></dl> 201.1969 + 201.1970 +</div> 201.1971 +</div> 201.1972 +<a id="aa4362cb36c6629f9d8484739fd827748"></a> 201.1973 +<h2 class="memtitle"><span class="permalink"><a href="#aa4362cb36c6629f9d8484739fd827748">◆ </a></span>scstrsstr()</h2> 201.1974 + 201.1975 +<div class="memitem"> 201.1976 +<div class="memproto"> 201.1977 + <table class="memname"> 201.1978 + <tr> 201.1979 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> scstrsstr </td> 201.1980 + <td>(</td> 201.1981 + <td class="paramtype"><a class="el" href="structsstr__t.html">sstr_t</a> </td> 201.1982 + <td class="paramname"><em>string</em>, </td> 201.1983 + </tr> 201.1984 + <tr> 201.1985 + <td class="paramkey"></td> 201.1986 + <td></td> 201.1987 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.1988 + <td class="paramname"><em>match</em> </td> 201.1989 + </tr> 201.1990 + <tr> 201.1991 + <td></td> 201.1992 + <td>)</td> 201.1993 + <td></td><td></td> 201.1994 + </tr> 201.1995 + </table> 201.1996 +</div><div class="memdoc"> 201.1997 + 201.1998 +<p>Returns a substring starting at the location of the first occurrence of the specified string. </p> 201.1999 +<p>If the string does not contain the other string, an empty string is returned.</p> 201.2000 +<p>If <code>match</code> is an empty string, the complete <code>string</code> is returned.</p> 201.2001 +<dl class="params"><dt>Parameters</dt><dd> 201.2002 + <table class="params"> 201.2003 + <tr><td class="paramname">string</td><td>the string to be scanned </td></tr> 201.2004 + <tr><td class="paramname">match</td><td>string containing the sequence of characters to match </td></tr> 201.2005 + </table> 201.2006 + </dd> 201.2007 +</dl> 201.2008 +<dl class="section return"><dt>Returns</dt><dd>a substring starting at the first occurrence of <code>match</code>, or an empty string, if the sequence is not present in <code>string</code> </dd></dl> 201.2009 + 201.2010 +</div> 201.2011 +</div> 201.2012 +<a id="a9a6c8d8db0dda0037c3c852cce1a5060"></a> 201.2013 +<h2 class="memtitle"><span class="permalink"><a href="#a9a6c8d8db0dda0037c3c852cce1a5060">◆ </a></span>scstrsubs()</h2> 201.2014 + 201.2015 +<div class="memitem"> 201.2016 +<div class="memproto"> 201.2017 + <table class="memname"> 201.2018 + <tr> 201.2019 + <td class="memname"><a class="el" href="structscstr__t.html">scstr_t</a> scstrsubs </td> 201.2020 + <td>(</td> 201.2021 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.2022 + <td class="paramname"><em>string</em>, </td> 201.2023 + </tr> 201.2024 + <tr> 201.2025 + <td class="paramkey"></td> 201.2026 + <td></td> 201.2027 + <td class="paramtype">size_t </td> 201.2028 + <td class="paramname"><em>start</em> </td> 201.2029 + </tr> 201.2030 + <tr> 201.2031 + <td></td> 201.2032 + <td>)</td> 201.2033 + <td></td><td></td> 201.2034 + </tr> 201.2035 + </table> 201.2036 +</div><div class="memdoc"> 201.2037 + 201.2038 +<p>Returns a substring of an immutable string starting at the specified location. </p> 201.2039 +<p><b>Attention:</b> the new string references the same memory area as the input string and is <b>NOT</b> required to be <code>NULL</code>-terminated. Use <a class="el" href="string_8h.html#a97dccce03af419596dbdd592ca46a164" title="Creates a duplicate of the specified string. ">scstrdup()</a> to get a copy.</p> 201.2040 +<dl class="params"><dt>Parameters</dt><dd> 201.2041 + <table class="params"> 201.2042 + <tr><td class="paramname">string</td><td>input string </td></tr> 201.2043 + <tr><td class="paramname">start</td><td>start location of the substring </td></tr> 201.2044 + </table> 201.2045 + </dd> 201.2046 +</dl> 201.2047 +<dl class="section return"><dt>Returns</dt><dd>a substring of <code>string</code> starting at <code>start</code></dd></dl> 201.2048 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#ad50f0f67b906fad0744f46bcb51e144b" title="Returns a substring of an immutable string with a maximum length starting at the specified location...">scstrsubsl()</a> </dd> 201.2049 +<dd> 201.2050 +<a class="el" href="string_8h.html#a5836d6a7a744791c35e5c17bdc394a87" title="Returns an immutable substring starting at the location of the first occurrence of the specified char...">scstrchr()</a> </dd></dl> 201.2051 + 201.2052 +</div> 201.2053 +</div> 201.2054 +<a id="ad50f0f67b906fad0744f46bcb51e144b"></a> 201.2055 +<h2 class="memtitle"><span class="permalink"><a href="#ad50f0f67b906fad0744f46bcb51e144b">◆ </a></span>scstrsubsl()</h2> 201.2056 + 201.2057 +<div class="memitem"> 201.2058 +<div class="memproto"> 201.2059 + <table class="memname"> 201.2060 + <tr> 201.2061 + <td class="memname"><a class="el" href="structscstr__t.html">scstr_t</a> scstrsubsl </td> 201.2062 + <td>(</td> 201.2063 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.2064 + <td class="paramname"><em>string</em>, </td> 201.2065 + </tr> 201.2066 + <tr> 201.2067 + <td class="paramkey"></td> 201.2068 + <td></td> 201.2069 + <td class="paramtype">size_t </td> 201.2070 + <td class="paramname"><em>start</em>, </td> 201.2071 + </tr> 201.2072 + <tr> 201.2073 + <td class="paramkey"></td> 201.2074 + <td></td> 201.2075 + <td class="paramtype">size_t </td> 201.2076 + <td class="paramname"><em>length</em> </td> 201.2077 + </tr> 201.2078 + <tr> 201.2079 + <td></td> 201.2080 + <td>)</td> 201.2081 + <td></td><td></td> 201.2082 + </tr> 201.2083 + </table> 201.2084 +</div><div class="memdoc"> 201.2085 + 201.2086 +<p>Returns a substring of an immutable string with a maximum length starting at the specified location. </p> 201.2087 +<p><b>Attention:</b> the new string references the same memory area as the input string and is <b>NOT</b> required to be <code>NULL</code>-terminated. Use <a class="el" href="string_8h.html#a97dccce03af419596dbdd592ca46a164" title="Creates a duplicate of the specified string. ">scstrdup()</a> to get a copy.</p> 201.2088 +<dl class="params"><dt>Parameters</dt><dd> 201.2089 + <table class="params"> 201.2090 + <tr><td class="paramname">string</td><td>input string </td></tr> 201.2091 + <tr><td class="paramname">start</td><td>start location of the substring </td></tr> 201.2092 + <tr><td class="paramname">length</td><td>the maximum length of the substring </td></tr> 201.2093 + </table> 201.2094 + </dd> 201.2095 +</dl> 201.2096 +<dl class="section return"><dt>Returns</dt><dd>a substring of <code>string</code> starting at <code>start</code> with a maximum length of <code>length</code></dd></dl> 201.2097 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a9a6c8d8db0dda0037c3c852cce1a5060" title="Returns a substring of an immutable string starting at the specified location. ">scstrsubs()</a> </dd> 201.2098 +<dd> 201.2099 +<a class="el" href="string_8h.html#a5836d6a7a744791c35e5c17bdc394a87" title="Returns an immutable substring starting at the location of the first occurrence of the specified char...">scstrchr()</a> </dd></dl> 201.2100 + 201.2101 +</div> 201.2102 +</div> 201.2103 +<a id="a1f0ae316a2afe85d5b4655e6ece6721a"></a> 201.2104 +<h2 class="memtitle"><span class="permalink"><a href="#a1f0ae316a2afe85d5b4655e6ece6721a">◆ </a></span>scstrsuffix()</h2> 201.2105 + 201.2106 +<div class="memitem"> 201.2107 +<div class="memproto"> 201.2108 + <table class="memname"> 201.2109 + <tr> 201.2110 + <td class="memname">int scstrsuffix </td> 201.2111 + <td>(</td> 201.2112 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.2113 + <td class="paramname"><em>string</em>, </td> 201.2114 + </tr> 201.2115 + <tr> 201.2116 + <td class="paramkey"></td> 201.2117 + <td></td> 201.2118 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.2119 + <td class="paramname"><em>suffix</em> </td> 201.2120 + </tr> 201.2121 + <tr> 201.2122 + <td></td> 201.2123 + <td>)</td> 201.2124 + <td></td><td></td> 201.2125 + </tr> 201.2126 + </table> 201.2127 +</div><div class="memdoc"> 201.2128 + 201.2129 +<p>Checks, if a string has a specific suffix. </p> 201.2130 +<dl class="params"><dt>Parameters</dt><dd> 201.2131 + <table class="params"> 201.2132 + <tr><td class="paramname">string</td><td>the string to check </td></tr> 201.2133 + <tr><td class="paramname">suffix</td><td>the suffix the string should have </td></tr> 201.2134 + </table> 201.2135 + </dd> 201.2136 +</dl> 201.2137 +<dl class="section return"><dt>Returns</dt><dd>1, if and only if the string has the specified suffix, 0 otherwise </dd></dl> 201.2138 + 201.2139 +</div> 201.2140 +</div> 201.2141 +<a id="ad374b16eb1be8b48019debad9b9f268c"></a> 201.2142 +<h2 class="memtitle"><span class="permalink"><a href="#ad374b16eb1be8b48019debad9b9f268c">◆ </a></span>scstrtrim()</h2> 201.2143 + 201.2144 +<div class="memitem"> 201.2145 +<div class="memproto"> 201.2146 + <table class="memname"> 201.2147 + <tr> 201.2148 + <td class="memname"><a class="el" href="structscstr__t.html">scstr_t</a> scstrtrim </td> 201.2149 + <td>(</td> 201.2150 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.2151 + <td class="paramname"><em>string</em></td><td>)</td> 201.2152 + <td></td> 201.2153 + </tr> 201.2154 + </table> 201.2155 +</div><div class="memdoc"> 201.2156 + 201.2157 +<p>Omits leading and trailing spaces. </p> 201.2158 +<p>This function returns a new <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> containing a trimmed version of the specified string.</p> 201.2159 +<p><b>Note:</b> the new <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> references the same memory, thus you <b>MUST NOT</b> pass the <a class="el" href="structscstr__t.html#a305fd48934b474a9bf4a40869030e391" title="A constant pointer to the immutable string (not necessarily NULL-terminated) ">scstr_t.ptr</a> of the return value to <code>free()</code>. It is also highly recommended to avoid assignments like <code>mystr = scstrtrim(mystr);</code> as you lose the reference to the source string. Assignments of this type are only permitted, if the <a class="el" href="structscstr__t.html#a305fd48934b474a9bf4a40869030e391" title="A constant pointer to the immutable string (not necessarily NULL-terminated) ">scstr_t.ptr</a> of the source string does not need to be freed or if another reference to the source string exists.</p> 201.2160 +<dl class="params"><dt>Parameters</dt><dd> 201.2161 + <table class="params"> 201.2162 + <tr><td class="paramname">string</td><td>the string that shall be trimmed </td></tr> 201.2163 + </table> 201.2164 + </dd> 201.2165 +</dl> 201.2166 +<dl class="section return"><dt>Returns</dt><dd>a new <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> containing the trimmed string </dd></dl> 201.2167 + 201.2168 +</div> 201.2169 +</div> 201.2170 +<a id="af3dd09ec9d11162fe0075f4e60f41240"></a> 201.2171 +<h2 class="memtitle"><span class="permalink"><a href="#af3dd09ec9d11162fe0075f4e60f41240">◆ </a></span>scstrupper()</h2> 201.2172 + 201.2173 +<div class="memitem"> 201.2174 +<div class="memproto"> 201.2175 + <table class="memname"> 201.2176 + <tr> 201.2177 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> scstrupper </td> 201.2178 + <td>(</td> 201.2179 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.2180 + <td class="paramname"><em>string</em></td><td>)</td> 201.2181 + <td></td> 201.2182 + </tr> 201.2183 + </table> 201.2184 +</div><div class="memdoc"> 201.2185 + 201.2186 +<p>Returns a upper case version of a string. </p> 201.2187 +<p>This function creates a duplicate of the input string, first (see <a class="el" href="string_8h.html#a97dccce03af419596dbdd592ca46a164" title="Creates a duplicate of the specified string. ">scstrdup()</a>).</p> 201.2188 +<dl class="params"><dt>Parameters</dt><dd> 201.2189 + <table class="params"> 201.2190 + <tr><td class="paramname">string</td><td>the input string </td></tr> 201.2191 + </table> 201.2192 + </dd> 201.2193 +</dl> 201.2194 +<dl class="section return"><dt>Returns</dt><dd>the resulting upper case string </dd></dl> 201.2195 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a97dccce03af419596dbdd592ca46a164" title="Creates a duplicate of the specified string. ">scstrdup()</a> </dd></dl> 201.2196 + 201.2197 +</div> 201.2198 +</div> 201.2199 +<a id="aea94613eb74668cc05d365803d32bfad"></a> 201.2200 +<h2 class="memtitle"><span class="permalink"><a href="#aea94613eb74668cc05d365803d32bfad">◆ </a></span>scstrupper_a()</h2> 201.2201 + 201.2202 +<div class="memitem"> 201.2203 +<div class="memproto"> 201.2204 + <table class="memname"> 201.2205 + <tr> 201.2206 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> scstrupper_a </td> 201.2207 + <td>(</td> 201.2208 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 201.2209 + <td class="paramname"><em>allocator</em>, </td> 201.2210 + </tr> 201.2211 + <tr> 201.2212 + <td class="paramkey"></td> 201.2213 + <td></td> 201.2214 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.2215 + <td class="paramname"><em>string</em> </td> 201.2216 + </tr> 201.2217 + <tr> 201.2218 + <td></td> 201.2219 + <td>)</td> 201.2220 + <td></td><td></td> 201.2221 + </tr> 201.2222 + </table> 201.2223 +</div><div class="memdoc"> 201.2224 + 201.2225 +<p>Returns a upper case version of a string. </p> 201.2226 +<p>This function creates a duplicate of the input string, first (see <a class="el" href="string_8h.html#a8fe58921f51eb1fde038472377e63014" title="Creates a duplicate of the specified string using a UcxAllocator. ">scstrdup_a()</a>).</p> 201.2227 +<dl class="params"><dt>Parameters</dt><dd> 201.2228 + <table class="params"> 201.2229 + <tr><td class="paramname">allocator</td><td>the allocator used for duplicating the string </td></tr> 201.2230 + <tr><td class="paramname">string</td><td>the input string </td></tr> 201.2231 + </table> 201.2232 + </dd> 201.2233 +</dl> 201.2234 +<dl class="section return"><dt>Returns</dt><dd>the resulting upper case string </dd></dl> 201.2235 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a8fe58921f51eb1fde038472377e63014" title="Creates a duplicate of the specified string using a UcxAllocator. ">scstrdup_a()</a> </dd></dl> 201.2236 + 201.2237 +</div> 201.2238 +</div> 201.2239 +<a id="a539eb7059251a051ee5d179526a23e9a"></a> 201.2240 +<h2 class="memtitle"><span class="permalink"><a href="#a539eb7059251a051ee5d179526a23e9a">◆ </a></span>sstr()</h2> 201.2241 + 201.2242 +<div class="memitem"> 201.2243 +<div class="memproto"> 201.2244 + <table class="memname"> 201.2245 + <tr> 201.2246 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> sstr </td> 201.2247 + <td>(</td> 201.2248 + <td class="paramtype">char * </td> 201.2249 + <td class="paramname"><em>cstring</em></td><td>)</td> 201.2250 + <td></td> 201.2251 + </tr> 201.2252 + </table> 201.2253 +</div><div class="memdoc"> 201.2254 + 201.2255 +<p>Creates a new <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> based on a C string. </p> 201.2256 +<p>The length is implicitly inferred by using a call to <code>strlen()</code>.</p> 201.2257 +<p><b>Note:</b> the <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> will share the specified pointer to the C string. If you do want a copy, use <a class="el" href="string_8h.html#accbfd2b459a028d7af9fb7df6f977d80" title="Creates a duplicate of the specified string. ">sstrdup()</a> on the return value of this function.</p> 201.2258 +<p>If you need to wrap a constant string, use <a class="el" href="string_8h.html#a2b1d6f1eca1c1549f37107b9c026c5a6" title="Creates a new scstr_t based on a constant C string. ">scstr()</a>.</p> 201.2259 +<dl class="params"><dt>Parameters</dt><dd> 201.2260 + <table class="params"> 201.2261 + <tr><td class="paramname">cstring</td><td>the C string to wrap </td></tr> 201.2262 + </table> 201.2263 + </dd> 201.2264 +</dl> 201.2265 +<dl class="section return"><dt>Returns</dt><dd>a new <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> containing the C string</dd></dl> 201.2266 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a2744c38ac44abf3e01fa059056dcf36c" title="Creates a new sstr_t of the specified length based on a C string. ">sstrn()</a> </dd></dl> 201.2267 + 201.2268 +</div> 201.2269 +</div> 201.2270 +<a id="af80898a0b75955eb2579298c3ae2c481"></a> 201.2271 +<h2 class="memtitle"><span class="permalink"><a href="#af80898a0b75955eb2579298c3ae2c481">◆ </a></span>sstrchr()</h2> 201.2272 + 201.2273 +<div class="memitem"> 201.2274 +<div class="memproto"> 201.2275 + <table class="memname"> 201.2276 + <tr> 201.2277 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> sstrchr </td> 201.2278 + <td>(</td> 201.2279 + <td class="paramtype"><a class="el" href="structsstr__t.html">sstr_t</a> </td> 201.2280 + <td class="paramname"><em>string</em>, </td> 201.2281 + </tr> 201.2282 + <tr> 201.2283 + <td class="paramkey"></td> 201.2284 + <td></td> 201.2285 + <td class="paramtype">int </td> 201.2286 + <td class="paramname"><em>chr</em> </td> 201.2287 + </tr> 201.2288 + <tr> 201.2289 + <td></td> 201.2290 + <td>)</td> 201.2291 + <td></td><td></td> 201.2292 + </tr> 201.2293 + </table> 201.2294 +</div><div class="memdoc"> 201.2295 + 201.2296 +<p>Returns a substring starting at the location of the first occurrence of the specified character. </p> 201.2297 +<p>If the string does not contain the character, an empty string is returned.</p> 201.2298 +<dl class="params"><dt>Parameters</dt><dd> 201.2299 + <table class="params"> 201.2300 + <tr><td class="paramname">string</td><td>the string where to locate the character </td></tr> 201.2301 + <tr><td class="paramname">chr</td><td>the character to locate </td></tr> 201.2302 + </table> 201.2303 + </dd> 201.2304 +</dl> 201.2305 +<dl class="section return"><dt>Returns</dt><dd>a substring starting at the first location of <code>chr</code></dd></dl> 201.2306 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a5eb9e0e1f26cf7fbecc038cd90e8b258" title="Returns a substring starting at the specified location. ">sstrsubs()</a> </dd></dl> 201.2307 + 201.2308 +</div> 201.2309 +</div> 201.2310 +<a id="a2744c38ac44abf3e01fa059056dcf36c"></a> 201.2311 +<h2 class="memtitle"><span class="permalink"><a href="#a2744c38ac44abf3e01fa059056dcf36c">◆ </a></span>sstrn()</h2> 201.2312 + 201.2313 +<div class="memitem"> 201.2314 +<div class="memproto"> 201.2315 + <table class="memname"> 201.2316 + <tr> 201.2317 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> sstrn </td> 201.2318 + <td>(</td> 201.2319 + <td class="paramtype">char * </td> 201.2320 + <td class="paramname"><em>cstring</em>, </td> 201.2321 + </tr> 201.2322 + <tr> 201.2323 + <td class="paramkey"></td> 201.2324 + <td></td> 201.2325 + <td class="paramtype">size_t </td> 201.2326 + <td class="paramname"><em>length</em> </td> 201.2327 + </tr> 201.2328 + <tr> 201.2329 + <td></td> 201.2330 + <td>)</td> 201.2331 + <td></td><td></td> 201.2332 + </tr> 201.2333 + </table> 201.2334 +</div><div class="memdoc"> 201.2335 + 201.2336 +<p>Creates a new <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> of the specified length based on a C string. </p> 201.2337 +<p><b>Note:</b> the <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> will share the specified pointer to the C string. If you do want a copy, use <a class="el" href="string_8h.html#accbfd2b459a028d7af9fb7df6f977d80" title="Creates a duplicate of the specified string. ">sstrdup()</a> on the return value of this function.</p> 201.2338 +<p>If you need to wrap a constant string, use <a class="el" href="string_8h.html#ae594f6e222ea394cef6a26c0dfad000d" title="Creates a new scstr_t of the specified length based on a constant C string. ">scstrn()</a>.</p> 201.2339 +<dl class="params"><dt>Parameters</dt><dd> 201.2340 + <table class="params"> 201.2341 + <tr><td class="paramname">cstring</td><td>the C string to wrap </td></tr> 201.2342 + <tr><td class="paramname">length</td><td>the length of the string </td></tr> 201.2343 + </table> 201.2344 + </dd> 201.2345 +</dl> 201.2346 +<dl class="section return"><dt>Returns</dt><dd>a new <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> containing the C string</dd></dl> 201.2347 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a539eb7059251a051ee5d179526a23e9a" title="Creates a new sstr_t based on a C string. ">sstr()</a> </dd> 201.2348 +<dd> 201.2349 +<a class="el" href="string_8h.html#a8fa17c8cf4c36df48f4108c36da8573e" title="Shortcut for the conversion of a C string to a sstr_t. ">S()</a> </dd></dl> 201.2350 + 201.2351 +</div> 201.2352 +</div> 201.2353 +<a id="adae3f59957ca328e1da5285cb8b02a72"></a> 201.2354 +<h2 class="memtitle"><span class="permalink"><a href="#adae3f59957ca328e1da5285cb8b02a72">◆ </a></span>sstrrchr()</h2> 201.2355 + 201.2356 +<div class="memitem"> 201.2357 +<div class="memproto"> 201.2358 + <table class="memname"> 201.2359 + <tr> 201.2360 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> sstrrchr </td> 201.2361 + <td>(</td> 201.2362 + <td class="paramtype"><a class="el" href="structsstr__t.html">sstr_t</a> </td> 201.2363 + <td class="paramname"><em>string</em>, </td> 201.2364 + </tr> 201.2365 + <tr> 201.2366 + <td class="paramkey"></td> 201.2367 + <td></td> 201.2368 + <td class="paramtype">int </td> 201.2369 + <td class="paramname"><em>chr</em> </td> 201.2370 + </tr> 201.2371 + <tr> 201.2372 + <td></td> 201.2373 + <td>)</td> 201.2374 + <td></td><td></td> 201.2375 + </tr> 201.2376 + </table> 201.2377 +</div><div class="memdoc"> 201.2378 + 201.2379 +<p>Returns a substring starting at the location of the last occurrence of the specified character. </p> 201.2380 +<p>If the string does not contain the character, an empty string is returned.</p> 201.2381 +<dl class="params"><dt>Parameters</dt><dd> 201.2382 + <table class="params"> 201.2383 + <tr><td class="paramname">string</td><td>the string where to locate the character </td></tr> 201.2384 + <tr><td class="paramname">chr</td><td>the character to locate </td></tr> 201.2385 + </table> 201.2386 + </dd> 201.2387 +</dl> 201.2388 +<dl class="section return"><dt>Returns</dt><dd>a substring starting at the last location of <code>chr</code></dd></dl> 201.2389 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a5eb9e0e1f26cf7fbecc038cd90e8b258" title="Returns a substring starting at the specified location. ">sstrsubs()</a> </dd></dl> 201.2390 + 201.2391 +</div> 201.2392 +</div> 201.2393 +<a id="a5eb9e0e1f26cf7fbecc038cd90e8b258"></a> 201.2394 +<h2 class="memtitle"><span class="permalink"><a href="#a5eb9e0e1f26cf7fbecc038cd90e8b258">◆ </a></span>sstrsubs()</h2> 201.2395 + 201.2396 +<div class="memitem"> 201.2397 +<div class="memproto"> 201.2398 + <table class="memname"> 201.2399 + <tr> 201.2400 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> sstrsubs </td> 201.2401 + <td>(</td> 201.2402 + <td class="paramtype"><a class="el" href="structsstr__t.html">sstr_t</a> </td> 201.2403 + <td class="paramname"><em>string</em>, </td> 201.2404 + </tr> 201.2405 + <tr> 201.2406 + <td class="paramkey"></td> 201.2407 + <td></td> 201.2408 + <td class="paramtype">size_t </td> 201.2409 + <td class="paramname"><em>start</em> </td> 201.2410 + </tr> 201.2411 + <tr> 201.2412 + <td></td> 201.2413 + <td>)</td> 201.2414 + <td></td><td></td> 201.2415 + </tr> 201.2416 + </table> 201.2417 +</div><div class="memdoc"> 201.2418 + 201.2419 +<p>Returns a substring starting at the specified location. </p> 201.2420 +<p><b>Attention:</b> the new string references the same memory area as the input string and is <b>NOT</b> required to be <code>NULL</code>-terminated. Use <a class="el" href="string_8h.html#accbfd2b459a028d7af9fb7df6f977d80" title="Creates a duplicate of the specified string. ">sstrdup()</a> to get a copy.</p> 201.2421 +<dl class="params"><dt>Parameters</dt><dd> 201.2422 + <table class="params"> 201.2423 + <tr><td class="paramname">string</td><td>input string </td></tr> 201.2424 + <tr><td class="paramname">start</td><td>start location of the substring </td></tr> 201.2425 + </table> 201.2426 + </dd> 201.2427 +</dl> 201.2428 +<dl class="section return"><dt>Returns</dt><dd>a substring of <code>string</code> starting at <code>start</code></dd></dl> 201.2429 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a78925c91af54f23cebd20ff99ef4331a" title="Returns a substring with the given length starting at the specified location. ">sstrsubsl()</a> </dd> 201.2430 +<dd> 201.2431 +<a class="el" href="string_8h.html#af80898a0b75955eb2579298c3ae2c481" title="Returns a substring starting at the location of the first occurrence of the specified character...">sstrchr()</a> </dd></dl> 201.2432 + 201.2433 +</div> 201.2434 +</div> 201.2435 +<a id="a78925c91af54f23cebd20ff99ef4331a"></a> 201.2436 +<h2 class="memtitle"><span class="permalink"><a href="#a78925c91af54f23cebd20ff99ef4331a">◆ </a></span>sstrsubsl()</h2> 201.2437 + 201.2438 +<div class="memitem"> 201.2439 +<div class="memproto"> 201.2440 + <table class="memname"> 201.2441 + <tr> 201.2442 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> sstrsubsl </td> 201.2443 + <td>(</td> 201.2444 + <td class="paramtype"><a class="el" href="structsstr__t.html">sstr_t</a> </td> 201.2445 + <td class="paramname"><em>string</em>, </td> 201.2446 + </tr> 201.2447 + <tr> 201.2448 + <td class="paramkey"></td> 201.2449 + <td></td> 201.2450 + <td class="paramtype">size_t </td> 201.2451 + <td class="paramname"><em>start</em>, </td> 201.2452 + </tr> 201.2453 + <tr> 201.2454 + <td class="paramkey"></td> 201.2455 + <td></td> 201.2456 + <td class="paramtype">size_t </td> 201.2457 + <td class="paramname"><em>length</em> </td> 201.2458 + </tr> 201.2459 + <tr> 201.2460 + <td></td> 201.2461 + <td>)</td> 201.2462 + <td></td><td></td> 201.2463 + </tr> 201.2464 + </table> 201.2465 +</div><div class="memdoc"> 201.2466 + 201.2467 +<p>Returns a substring with the given length starting at the specified location. </p> 201.2468 +<p><b>Attention:</b> the new string references the same memory area as the input string and is <b>NOT</b> required to be <code>NULL</code>-terminated. Use <a class="el" href="string_8h.html#accbfd2b459a028d7af9fb7df6f977d80" title="Creates a duplicate of the specified string. ">sstrdup()</a> to get a copy.</p> 201.2469 +<dl class="params"><dt>Parameters</dt><dd> 201.2470 + <table class="params"> 201.2471 + <tr><td class="paramname">string</td><td>input string </td></tr> 201.2472 + <tr><td class="paramname">start</td><td>start location of the substring </td></tr> 201.2473 + <tr><td class="paramname">length</td><td>the maximum length of the substring </td></tr> 201.2474 + </table> 201.2475 + </dd> 201.2476 +</dl> 201.2477 +<dl class="section return"><dt>Returns</dt><dd>a substring of <code>string</code> starting at <code>start</code> with a maximum length of <code>length</code></dd></dl> 201.2478 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="string_8h.html#a5eb9e0e1f26cf7fbecc038cd90e8b258" title="Returns a substring starting at the specified location. ">sstrsubs()</a> </dd> 201.2479 +<dd> 201.2480 +<a class="el" href="string_8h.html#af80898a0b75955eb2579298c3ae2c481" title="Returns a substring starting at the location of the first occurrence of the specified character...">sstrchr()</a> </dd></dl> 201.2481 + 201.2482 +</div> 201.2483 +</div> 201.2484 +<a id="ae2d6da564d3fce51f2e0cac580fdbc56"></a> 201.2485 +<h2 class="memtitle"><span class="permalink"><a href="#ae2d6da564d3fce51f2e0cac580fdbc56">◆ </a></span>sstrtrim()</h2> 201.2486 + 201.2487 +<div class="memitem"> 201.2488 +<div class="memproto"> 201.2489 + <table class="memname"> 201.2490 + <tr> 201.2491 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> sstrtrim </td> 201.2492 + <td>(</td> 201.2493 + <td class="paramtype"><a class="el" href="structsstr__t.html">sstr_t</a> </td> 201.2494 + <td class="paramname"><em>string</em></td><td>)</td> 201.2495 + <td></td> 201.2496 + </tr> 201.2497 + </table> 201.2498 +</div><div class="memdoc"> 201.2499 + 201.2500 +<p>Omits leading and trailing spaces. </p> 201.2501 +<p>This function returns a new <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> containing a trimmed version of the specified string.</p> 201.2502 +<p><b>Note:</b> the new <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> references the same memory, thus you <b>MUST NOT</b> pass the <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> of the return value to <code>free()</code>. It is also highly recommended to avoid assignments like <code>mystr = sstrtrim(mystr);</code> as you lose the reference to the source string. Assignments of this type are only permitted, if the <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> of the source string does not need to be freed or if another reference to the source string exists.</p> 201.2503 +<dl class="params"><dt>Parameters</dt><dd> 201.2504 + <table class="params"> 201.2505 + <tr><td class="paramname">string</td><td>the string that shall be trimmed </td></tr> 201.2506 + </table> 201.2507 + </dd> 201.2508 +</dl> 201.2509 +<dl class="section return"><dt>Returns</dt><dd>a new <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> containing the trimmed string </dd></dl> 201.2510 + 201.2511 +</div> 201.2512 +</div> 201.2513 +<a id="a69d5e3eeec783cc43314df71248768f5"></a> 201.2514 +<h2 class="memtitle"><span class="permalink"><a href="#a69d5e3eeec783cc43314df71248768f5">◆ </a></span>ucx_sc2sc()</h2> 201.2515 + 201.2516 +<div class="memitem"> 201.2517 +<div class="memproto"> 201.2518 + <table class="memname"> 201.2519 + <tr> 201.2520 + <td class="memname"><a class="el" href="structscstr__t.html">scstr_t</a> ucx_sc2sc </td> 201.2521 + <td>(</td> 201.2522 + <td class="paramtype"><a class="el" href="structscstr__t.html">scstr_t</a> </td> 201.2523 + <td class="paramname"><em>str</em></td><td>)</td> 201.2524 + <td></td> 201.2525 + </tr> 201.2526 + </table> 201.2527 +</div><div class="memdoc"> 201.2528 + 201.2529 +<p>One of two type adjustment functions that return an <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a>. </p> 201.2530 +<p>Used <b>internally</b> 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.</p> 201.2531 +<p><b>Do not use this function manually.</b></p> 201.2532 +<dl class="params"><dt>Parameters</dt><dd> 201.2533 + <table class="params"> 201.2534 + <tr><td class="paramname">str</td><td>some <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> </td></tr> 201.2535 + </table> 201.2536 + </dd> 201.2537 +</dl> 201.2538 +<dl class="section return"><dt>Returns</dt><dd>the argument itself </dd></dl> 201.2539 + 201.2540 +</div> 201.2541 +</div> 201.2542 +<a id="aedeb5d7bddda54116101a8d68af8c56d"></a> 201.2543 +<h2 class="memtitle"><span class="permalink"><a href="#aedeb5d7bddda54116101a8d68af8c56d">◆ </a></span>ucx_ss2c_s()</h2> 201.2544 + 201.2545 +<div class="memitem"> 201.2546 +<div class="memproto"> 201.2547 + <table class="memname"> 201.2548 + <tr> 201.2549 + <td class="memname"><a class="el" href="structscstr__t.html">scstr_t</a> ucx_ss2c_s </td> 201.2550 + <td>(</td> 201.2551 + <td class="paramname"></td><td>)</td> 201.2552 + <td></td> 201.2553 + </tr> 201.2554 + </table> 201.2555 +</div><div class="memdoc"> 201.2556 + 201.2557 +<p>Converts a UCX string to an immutable UCX string (<a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a>). </p> 201.2558 +<p>This <b>internal</b> function (ab)uses the C standard an expects one single argument which is then implicitly converted to <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a> without a warning.</p> 201.2559 +<p><b>Do not use this function manually.</b></p> 201.2560 +<dl class="section return"><dt>Returns</dt><dd>the an immutable version of the provided string </dd></dl> 201.2561 + 201.2562 +</div> 201.2563 +</div> 201.2564 +<a id="a9ce5ad1b2aa2dbeba204d452c2e64359"></a> 201.2565 +<h2 class="memtitle"><span class="permalink"><a href="#a9ce5ad1b2aa2dbeba204d452c2e64359">◆ </a></span>ucx_ss2sc()</h2> 201.2566 + 201.2567 +<div class="memitem"> 201.2568 +<div class="memproto"> 201.2569 + <table class="memname"> 201.2570 + <tr> 201.2571 + <td class="memname"><a class="el" href="structscstr__t.html">scstr_t</a> ucx_ss2sc </td> 201.2572 + <td>(</td> 201.2573 + <td class="paramtype"><a class="el" href="structsstr__t.html">sstr_t</a> </td> 201.2574 + <td class="paramname"><em>str</em></td><td>)</td> 201.2575 + <td></td> 201.2576 + </tr> 201.2577 + </table> 201.2578 +</div><div class="memdoc"> 201.2579 + 201.2580 +<p>One of two type adjustment functions that return an <a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a>. </p> 201.2581 +<p>Used <b>internally</b> to convert a UCX string to an immutable UCX string.</p> 201.2582 +<p><b>Do not use this function manually.</b></p> 201.2583 +<dl class="params"><dt>Parameters</dt><dd> 201.2584 + <table class="params"> 201.2585 + <tr><td class="paramname">str</td><td>some <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> </td></tr> 201.2586 + </table> 201.2587 + </dd> 201.2588 +</dl> 201.2589 +<dl class="section return"><dt>Returns</dt><dd>an immutable (<a class="el" href="structscstr__t.html" title="The UCX string structure for immutable (constant) strings. ">scstr_t</a>) version of the provided string. </dd></dl> 201.2590 + 201.2591 +</div> 201.2592 +</div> 201.2593 +</div><!-- contents --> 201.2594 +<!-- start footer part --> 201.2595 +<hr class="footer"/><address class="footer"><small> 201.2596 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 201.2597 +<img class="footer" src="doxygen.png" alt="doxygen"/> 201.2598 +</a> 1.8.13 201.2599 +</small></address> 201.2600 +</body> 201.2601 +</html>
202.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 202.2 +++ b/docs/api-2.1/string_8h_source.html Sat Feb 06 19:11:44 2021 +0100 202.3 @@ -0,0 +1,124 @@ 202.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 202.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 202.6 +<head> 202.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 202.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 202.9 +<meta name="generator" content="Doxygen 1.8.13"/> 202.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 202.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/string.h Source File</title> 202.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 202.13 +<script type="text/javascript" src="jquery.js"></script> 202.14 +<script type="text/javascript" src="dynsections.js"></script> 202.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 202.16 +<script type="text/javascript" src="search/searchdata.js"></script> 202.17 +<script type="text/javascript" src="search/search.js"></script> 202.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 202.19 +</head> 202.20 +<body> 202.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 202.22 +<div id="titlearea"> 202.23 +<table cellspacing="0" cellpadding="0"> 202.24 + <tbody> 202.25 + <tr style="height: 56px;"> 202.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 202.27 + <td id="projectalign" style="padding-left: 0.5em;"> 202.28 + <div id="projectname">ucx 202.29 + </div> 202.30 + <div id="projectbrief">UAP Common Extensions</div> 202.31 + </td> 202.32 + </tr> 202.33 + </tbody> 202.34 +</table> 202.35 +</div> 202.36 +<!-- end header part --> 202.37 +<!-- Generated by Doxygen 1.8.13 --> 202.38 +<script type="text/javascript"> 202.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 202.40 +</script> 202.41 +<script type="text/javascript" src="menudata.js"></script> 202.42 +<script type="text/javascript" src="menu.js"></script> 202.43 +<script type="text/javascript"> 202.44 +$(function() { 202.45 + initMenu('',true,false,'search.php','Search'); 202.46 + $(document).ready(function() { init_search(); }); 202.47 +}); 202.48 +</script> 202.49 +<div id="main-nav"></div> 202.50 +<!-- window showing the filter options --> 202.51 +<div id="MSearchSelectWindow" 202.52 + onmouseover="return searchBox.OnSearchSelectShow()" 202.53 + onmouseout="return searchBox.OnSearchSelectHide()" 202.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 202.55 +</div> 202.56 + 202.57 +<!-- iframe showing the search results (closed by default) --> 202.58 +<div id="MSearchResultsWindow"> 202.59 +<iframe src="javascript:void(0)" frameborder="0" 202.60 + name="MSearchResults" id="MSearchResults"> 202.61 +</iframe> 202.62 +</div> 202.63 + 202.64 +<div id="nav-path" class="navpath"> 202.65 + <ul> 202.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 202.67 +</div> 202.68 +</div><!-- top --> 202.69 +<div class="header"> 202.70 + <div class="headertitle"> 202.71 +<div class="title">string.h</div> </div> 202.72 +</div><!--header--> 202.73 +<div class="contents"> 202.74 +<a href="string_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are met:</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * documentation and/or other materials provided with the distribution.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#ifndef UCX_STRING_H</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#define UCX_STRING_H</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#include "<a class="code" href="ucx_8h.html">ucx.h</a>"</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#include "<a class="code" href="allocator_8h.html">allocator.h</a>"</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#include <stddef.h></span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="comment">/*</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="comment"> * Use this macro to disable the shortcuts if you experience macro collision.</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="comment"> */</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor">#ifndef UCX_NO_SSTR_SHORTCUTS</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00063"></a><span class="lineno"><a class="line" href="string_8h.html#a9037956cca97a4e84b642f17f3d10378"> 63</a></span> <span class="preprocessor">#define ST(s) { s, sizeof(s)-1 }</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="string_8h.html#a8fa17c8cf4c36df48f4108c36da8573e"> 66</a></span> <span class="preprocessor">#define S(s) sstrn(s, sizeof(s)-1)</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> </div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="string_8h.html#a7d261dd0bc358c957a368bc058c1ce53"> 69</a></span> <span class="preprocessor">#define SC(s) scstrn(s, sizeof(s)-1)</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_NO_SSTR_SHORTCUTS */</span><span class="preprocessor"></span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="comment">/*</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> <span class="comment"> * Use this macro to disable the format macros.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="comment"> */</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor">#ifndef UCX_NO_SSTR_FORMAT_MACROS</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="string_8h.html#a23ed51e87385886bb65e8cd19c839362"> 77</a></span> <span class="preprocessor">#define SFMT(s) (int) (s).length, (s).ptr</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="string_8h.html#a7d5bc48708405a28b23667e32dfcecae"> 80</a></span> <span class="preprocessor">#define PRIsstr ".*s"</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_NO_SSTR_FORMAT_MACROS */</span><span class="preprocessor"></span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  </div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="structsstr__t.html"> 90</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0"> 93</a></span>  <span class="keywordtype">char</span> *<a class="code" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0">ptr</a>;</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="structsstr__t.html#a5cf571708cdff92e45f08458f2b98229"> 95</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structsstr__t.html#a5cf571708cdff92e45f08458f2b98229">length</a>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> } <a class="code" href="structsstr__t.html">sstr_t</a>;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="structscstr__t.html"> 101</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span>{</div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="structscstr__t.html#a305fd48934b474a9bf4a40869030e391"> 104</a></span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structscstr__t.html#a305fd48934b474a9bf4a40869030e391">ptr</a>;</div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="structscstr__t.html#aaa0229f64f1057b6f65adededaa5a172"> 106</a></span>  <span class="keywordtype">size_t</span> <a class="code" href="structscstr__t.html#aaa0229f64f1057b6f65adededaa5a172">length</a>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> } <a class="code" href="structscstr__t.html">scstr_t</a>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="keyword">inline</span> <a class="code" href="structscstr__t.html">scstr_t</a> s2scstr(<a class="code" href="structsstr__t.html">sstr_t</a> s) {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="structscstr__t.html">scstr_t</a> c;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  c.<a class="code" href="structscstr__t.html#a305fd48934b474a9bf4a40869030e391">ptr</a> = s.<a class="code" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0">ptr</a>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  c.<a class="code" href="structscstr__t.html#aaa0229f64f1057b6f65adededaa5a172">length</a> = s.<a class="code" href="structsstr__t.html#a5cf571708cdff92e45f08458f2b98229">length</a>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="keywordflow">return</span> c;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">inline</span> <a class="code" href="structscstr__t.html">scstr_t</a> s2scstr(<a class="code" href="structscstr__t.html">scstr_t</a> str) {</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">return</span> str;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="preprocessor">#define SCSTR(s) s2scstr(s)</span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span> </div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> <a class="code" href="structscstr__t.html">scstr_t</a> <a class="code" href="string_8h.html#a69d5e3eeec783cc43314df71248768f5">ucx_sc2sc</a>(<a class="code" href="structscstr__t.html">scstr_t</a> str);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <a class="code" href="structscstr__t.html">scstr_t</a> <a class="code" href="string_8h.html#a9ce5ad1b2aa2dbeba204d452c2e64359">ucx_ss2sc</a>(<a class="code" href="structsstr__t.html">sstr_t</a> str);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="preprocessor">#if __STDC_VERSION__ >= 201112L</span></div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="preprocessor">#define SCSTR(str) _Generic(str, sstr_t: ucx_ss2sc, scstr_t: ucx_sc2sc)(str)</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> </div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span> <span class="preprocessor">#elif defined(__GNUC__) || defined(__clang__)</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="preprocessor">#define SCSTR(str) __builtin_choose_expr( \</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="preprocessor"> __builtin_types_compatible_p(typeof(str), sstr_t), \</span></div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor"> ucx_ss2sc, \</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="preprocessor"> ucx_sc2sc)(str)</span></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> </div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="preprocessor">#elif defined(__sun)</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="preprocessor">#define SCSTR(str) ({typeof(str) ucx_tmp_var_str = str; \</span></div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="preprocessor"> scstr_t ucx_tmp_var_c; \</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor"> ucx_tmp_var_c.ptr = ucx_tmp_var_str.ptr;\</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="preprocessor"> ucx_tmp_var_c.length = ucx_tmp_var_str.length;\</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="preprocessor"> ucx_tmp_var_c; })</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor">#else </span><span class="comment">/* no generics and no builtins */</span><span class="preprocessor"></span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> </div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> <a class="code" href="structscstr__t.html">scstr_t</a> <a class="code" href="string_8h.html#aedeb5d7bddda54116101a8d68af8c56d">ucx_ss2c_s</a>();</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div><div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="string_8h.html#ad4293350a9b39a23a6546bd0fef2aeed"> 233</a></span> <span class="preprocessor">#define SCSTR(str) ucx_ss2c_s(str)</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> <span class="preprocessor">#endif </span><span class="comment">/* C11 feature test */</span><span class="preprocessor"></span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor">#endif </span><span class="comment">/* C++ */</span><span class="preprocessor"></span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#a539eb7059251a051ee5d179526a23e9a">sstr</a>(<span class="keywordtype">char</span> *cstring);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#a2744c38ac44abf3e01fa059056dcf36c">sstrn</a>(<span class="keywordtype">char</span> *cstring, <span class="keywordtype">size_t</span> length);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <a class="code" href="structscstr__t.html">scstr_t</a> <a class="code" href="string_8h.html#a2b1d6f1eca1c1549f37107b9c026c5a6">scstr</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *cstring);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <a class="code" href="structscstr__t.html">scstr_t</a> <a class="code" href="string_8h.html#ae594f6e222ea394cef6a26c0dfad000d">scstrn</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *cstring, <span class="keywordtype">size_t</span> length);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> </div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> <span class="keywordtype">size_t</span> <a class="code" href="string_8h.html#ac1b000030d6d197eec48c15a182055d5">scstrnlen</a>(<span class="keywordtype">size_t</span> count, ...);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="string_8h.html#a33fa945acc5ac2ce962e5ef13cf1638c"> 329</a></span> <span class="preprocessor">#define sstrnlen(count, ...) scstrnlen(count, __VA_ARGS__)</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#a7376842c19e954b49215da81ef76ac0c">scstrcat</a>(<span class="keywordtype">size_t</span> count, <a class="code" href="structscstr__t.html">scstr_t</a> s1, ...);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> </div><div class="line"><a name="l00361"></a><span class="lineno"><a class="line" href="string_8h.html#a6af8a4c347c7fdb5980d4c4803be2759"> 361</a></span> <span class="preprocessor">#define sstrcat(count, s1, ...) scstrcat(count, SCSTR(s1), __VA_ARGS__)</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#abacce4cbd6f70fcb6453904ef08b02e9">scstrcat_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *alloc, <span class="keywordtype">size_t</span> count, <a class="code" href="structscstr__t.html">scstr_t</a> s1, ...);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div><div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="string_8h.html#a6068d460f9bc05962666a917d26568b3"> 399</a></span> <span class="preprocessor">#define sstrcat_a(alloc, count, s1, ...) \</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="preprocessor"> scstrcat_a(alloc, count, SCSTR(s1), __VA_ARGS__)</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#a5eb9e0e1f26cf7fbecc038cd90e8b258">sstrsubs</a>(<a class="code" href="structsstr__t.html">sstr_t</a> <span class="keywordtype">string</span>, <span class="keywordtype">size_t</span> start);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#a78925c91af54f23cebd20ff99ef4331a">sstrsubsl</a>(<a class="code" href="structsstr__t.html">sstr_t</a> <span class="keywordtype">string</span>, <span class="keywordtype">size_t</span> start, <span class="keywordtype">size_t</span> length);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span> </div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span> <a class="code" href="structscstr__t.html">scstr_t</a> <a class="code" href="string_8h.html#a9a6c8d8db0dda0037c3c852cce1a5060">scstrsubs</a>(<a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>, <span class="keywordtype">size_t</span> start);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span> </div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <a class="code" href="structscstr__t.html">scstr_t</a> <a class="code" href="string_8h.html#ad50f0f67b906fad0744f46bcb51e144b">scstrsubsl</a>(<a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>, <span class="keywordtype">size_t</span> start, <span class="keywordtype">size_t</span> length);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#af80898a0b75955eb2579298c3ae2c481">sstrchr</a>(<a class="code" href="structsstr__t.html">sstr_t</a> <span class="keywordtype">string</span>, <span class="keywordtype">int</span> chr);</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> </div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#adae3f59957ca328e1da5285cb8b02a72">sstrrchr</a>(<a class="code" href="structsstr__t.html">sstr_t</a> <span class="keywordtype">string</span>, <span class="keywordtype">int</span> chr);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <a class="code" href="structscstr__t.html">scstr_t</a> <a class="code" href="string_8h.html#a5836d6a7a744791c35e5c17bdc394a87">scstrchr</a>(<a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>, <span class="keywordtype">int</span> chr);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span> <a class="code" href="structscstr__t.html">scstr_t</a> <a class="code" href="string_8h.html#ae389835b97cd9382e7d6a6a075323376">scstrrchr</a>(<a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>, <span class="keywordtype">int</span> chr);</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span> </div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#aa4362cb36c6629f9d8484739fd827748">scstrsstr</a>(<a class="code" href="structsstr__t.html">sstr_t</a> <span class="keywordtype">string</span>, <a class="code" href="structscstr__t.html">scstr_t</a> match);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span> </div><div class="line"><a name="l00560"></a><span class="lineno"><a class="line" href="string_8h.html#a9d03be026afa9447c52bb34b9e3b895a"> 560</a></span> <span class="preprocessor">#define sstrstr(string, match) scstrsstr(string, SCSTR(match))</span></div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> </div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <a class="code" href="structscstr__t.html">scstr_t</a> <a class="code" href="string_8h.html#a54f256c3abe811c52d58b4ff1b23f051">scstrscstr</a>(<a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>, <a class="code" href="structscstr__t.html">scstr_t</a> match);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span> </div><div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="string_8h.html#aa696932213265e10f864678686f4ccde"> 594</a></span> <span class="preprocessor">#define sstrscstr(string, match) scstrscstr(string, SCSTR(match))</span></div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> <a class="code" href="structsstr__t.html">sstr_t</a>* <a class="code" href="string_8h.html#ae71cac352b00230848bde358f0fb05ea">scstrsplit</a>(<a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>, <a class="code" href="structscstr__t.html">scstr_t</a> delim, ssize_t *count);</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span> </div><div class="line"><a name="l00692"></a><span class="lineno"><a class="line" href="string_8h.html#aa929984004c3576bfafb95031aca8eb7"> 692</a></span> <span class="preprocessor">#define sstrsplit(string, delim, count) \</span></div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span> <span class="preprocessor"> scstrsplit(SCSTR(string), SCSTR(delim), count)</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span> </div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <a class="code" href="structsstr__t.html">sstr_t</a>* <a class="code" href="string_8h.html#a52906455ae530c9cdc6812c8e6d9bdef">scstrsplit_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>, <a class="code" href="structscstr__t.html">scstr_t</a> delim,</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  ssize_t *count);</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> </div><div class="line"><a name="l00736"></a><span class="lineno"><a class="line" href="string_8h.html#ac9f69fa3a17e26a3a5f9d985b5844601"> 736</a></span> <span class="preprocessor">#define sstrsplit_a(allocator, string, delim, count) \</span></div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="preprocessor"> scstrsplit_a(allocator, SCSTR(string), SCSTR(delim), count)</span></div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span> <span class="keywordtype">int</span> <a class="code" href="string_8h.html#af35272a8e5408c88ed3e25a3a98f0a82">scstrcmp</a>(<a class="code" href="structscstr__t.html">scstr_t</a> s1, <a class="code" href="structscstr__t.html">scstr_t</a> s2);</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span> </div><div class="line"><a name="l00765"></a><span class="lineno"><a class="line" href="string_8h.html#a7ae7156c8de57454ca38d306100b8160"> 765</a></span> <span class="preprocessor">#define sstrcmp(s1, s2) scstrcmp(SCSTR(s1), SCSTR(s2))</span></div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span> </div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span> <span class="keywordtype">int</span> <a class="code" href="string_8h.html#aca8142fb823d253054e17c17cfca05e0">scstrcasecmp</a>(<a class="code" href="structscstr__t.html">scstr_t</a> s1, <a class="code" href="structscstr__t.html">scstr_t</a> s2);</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span> </div><div class="line"><a name="l00795"></a><span class="lineno"><a class="line" href="string_8h.html#a81b0f6df794152c2038703d4e9d0ad59"> 795</a></span> <span class="preprocessor">#define sstrcasecmp(s1, s2) scstrcasecmp(SCSTR(s1), SCSTR(s2))</span></div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span> </div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#a97dccce03af419596dbdd592ca46a164">scstrdup</a>(<a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>);</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span> </div><div class="line"><a name="l00827"></a><span class="lineno"><a class="line" href="string_8h.html#accbfd2b459a028d7af9fb7df6f977d80"> 827</a></span> <span class="preprocessor">#define sstrdup(string) scstrdup(SCSTR(string))</span></div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span> </div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#a8fe58921f51eb1fde038472377e63014">scstrdup_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>);</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span> </div><div class="line"><a name="l00863"></a><span class="lineno"><a class="line" href="string_8h.html#a8d098baada4ea9ad5d8b6343b5aec007"> 863</a></span> <span class="preprocessor">#define sstrdup_a(allocator, string) scstrdup_a(allocator, SCSTR(string))</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span> </div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span> </div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#ae2d6da564d3fce51f2e0cac580fdbc56">sstrtrim</a>(<a class="code" href="structsstr__t.html">sstr_t</a> <span class="keywordtype">string</span>);</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span> </div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span> <a class="code" href="structscstr__t.html">scstr_t</a> <a class="code" href="string_8h.html#ad374b16eb1be8b48019debad9b9f268c">scstrtrim</a>(<a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>);</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span> </div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span> <span class="keywordtype">int</span> <a class="code" href="string_8h.html#a599ddc2f88dd1df68b72eefd91347393">scstrprefix</a>(<a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>, <a class="code" href="structscstr__t.html">scstr_t</a> prefix);</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span> </div><div class="line"><a name="l00920"></a><span class="lineno"><a class="line" href="string_8h.html#a7d73b66256384b26927e787318fdefa2"> 920</a></span> <span class="preprocessor">#define sstrprefix(string, prefix) scstrprefix(SCSTR(string), SCSTR(prefix))</span></div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span> </div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span> <span class="keywordtype">int</span> <a class="code" href="string_8h.html#a1f0ae316a2afe85d5b4655e6ece6721a">scstrsuffix</a>(<a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>, <a class="code" href="structscstr__t.html">scstr_t</a> suffix);</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span> </div><div class="line"><a name="l00938"></a><span class="lineno"><a class="line" href="string_8h.html#ac6a5246f26be2e8a5f34d8995b7ec14e"> 938</a></span> <span class="preprocessor">#define sstrsuffix(string, suffix) scstrsuffix(SCSTR(string), SCSTR(suffix))</span></div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span> </div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="keywordtype">int</span> <a class="code" href="string_8h.html#a3718ef4aa1e86cdb26bda2f07fb585df">scstrcaseprefix</a>(<a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>, <a class="code" href="structscstr__t.html">scstr_t</a> prefix);</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span> </div><div class="line"><a name="l00956"></a><span class="lineno"><a class="line" href="string_8h.html#acd3dc64e90db9b4046e14f115a815ff4"> 956</a></span> <span class="preprocessor">#define sstrcaseprefix(string, prefix) \</span></div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span> <span class="preprocessor"> scstrcaseprefix(SCSTR(string), SCSTR(prefix))</span></div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span> </div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span> <span class="keywordtype">int</span> <a class="code" href="string_8h.html#a6edb4b85f2b9efe79db7ffe6eccd7bc3">scstrcasesuffix</a>(<a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>, <a class="code" href="structscstr__t.html">scstr_t</a> suffix);</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span> </div><div class="line"><a name="l00975"></a><span class="lineno"><a class="line" href="string_8h.html#a57eabd4862d531dd685bbf2feb8468bf"> 975</a></span> <span class="preprocessor">#define sstrcasesuffix(string, suffix) \</span></div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span> <span class="preprocessor"> scstrcasesuffix(SCSTR(string), SCSTR(suffix))</span></div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span> </div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#abccf198bea3186ff2abb080cc88dcae6">scstrlower</a>(<a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>);</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span> </div><div class="line"><a name="l00999"></a><span class="lineno"><a class="line" href="string_8h.html#a89343ea3e719f00ee802b557db57b769"> 999</a></span> <span class="preprocessor">#define sstrlower(string) scstrlower(SCSTR(string))</span></div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#a3cf1e557df7ab58d03c78832c4060276">scstrlower_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>);</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span> </div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span> </div><div class="line"><a name="l01025"></a><span class="lineno"><a class="line" href="string_8h.html#a4bb4742fe71115f493991d307cb22b23"> 1025</a></span> <span class="preprocessor">#define sstrlower_a(allocator, string) scstrlower_a(allocator, SCSTR(string))</span></div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span> </div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#af3dd09ec9d11162fe0075f4e60f41240">scstrupper</a>(<a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>);</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span> </div><div class="line"><a name="l01048"></a><span class="lineno"><a class="line" href="string_8h.html#a084fe5a3a90d6fb6b15ecda03bb30824"> 1048</a></span> <span class="preprocessor">#define sstrupper(string) scstrupper(SCSTR(string))</span></div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span> </div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="string_8h.html#aea94613eb74668cc05d365803d32bfad">scstrupper_a</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <a class="code" href="structscstr__t.html">scstr_t</a> <span class="keywordtype">string</span>);</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span> </div><div class="line"><a name="l01073"></a><span class="lineno"><a class="line" href="string_8h.html#a5f0dd83c0176b812fb428004b2877a34"> 1073</a></span> <span class="preprocessor">#define sstrupper_a(allocator, string) scstrupper_a(allocator, string)</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> </div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span> }</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span> </div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_STRING_H */</span><span class="preprocessor"></span></div><div class="ttc" id="string_8h_html_a539eb7059251a051ee5d179526a23e9a"><div class="ttname"><a href="string_8h.html#a539eb7059251a051ee5d179526a23e9a">sstr</a></div><div class="ttdeci">sstr_t sstr(char *cstring)</div><div class="ttdoc">Creates a new sstr_t based on a C string. </div><div class="ttdef"><b>Definition:</b> string.c:43</div></div> 202.75 +<div class="ttc" id="string_8h_html_a97dccce03af419596dbdd592ca46a164"><div class="ttname"><a href="string_8h.html#a97dccce03af419596dbdd592ca46a164">scstrdup</a></div><div class="ttdeci">sstr_t scstrdup(scstr_t string)</div><div class="ttdoc">Creates a duplicate of the specified string. </div><div class="ttdef"><b>Definition:</b> string.c:520</div></div> 202.76 +<div class="ttc" id="structsstr__t_html"><div class="ttname"><a href="structsstr__t.html">sstr_t</a></div><div class="ttdoc">The UCX string structure. </div><div class="ttdef"><b>Definition:</b> string.h:90</div></div> 202.77 +<div class="ttc" id="string_8h_html_abccf198bea3186ff2abb080cc88dcae6"><div class="ttname"><a href="string_8h.html#abccf198bea3186ff2abb080cc88dcae6">scstrlower</a></div><div class="ttdeci">sstr_t scstrlower(scstr_t string)</div><div class="ttdoc">Returns a lower case version of a string. </div><div class="ttdef"><b>Definition:</b> string.c:633</div></div> 202.78 +<div class="ttc" id="string_8h_html_a78925c91af54f23cebd20ff99ef4331a"><div class="ttname"><a href="string_8h.html#a78925c91af54f23cebd20ff99ef4331a">sstrsubsl</a></div><div class="ttdeci">sstr_t sstrsubsl(sstr_t string, size_t start, size_t length)</div><div class="ttdoc">Returns a substring with the given length starting at the specified location. </div><div class="ttdef"><b>Definition:</b> string.c:201</div></div> 202.79 +<div class="ttc" id="string_8h_html_ad374b16eb1be8b48019debad9b9f268c"><div class="ttname"><a href="string_8h.html#ad374b16eb1be8b48019debad9b9f268c">scstrtrim</a></div><div class="ttdeci">scstr_t scstrtrim(scstr_t string)</div><div class="ttdoc">Omits leading and trailing spaces. </div><div class="ttdef"><b>Definition:</b> string.c:563</div></div> 202.80 +<div class="ttc" id="string_8h_html_a52906455ae530c9cdc6812c8e6d9bdef"><div class="ttname"><a href="string_8h.html#a52906455ae530c9cdc6812c8e6d9bdef">scstrsplit_a</a></div><div class="ttdeci">sstr_t * scstrsplit_a(UcxAllocator *allocator, scstr_t string, scstr_t delim, ssize_t *count)</div><div class="ttdoc">Performing scstrsplit() using a UcxAllocator. </div><div class="ttdef"><b>Definition:</b> string.c:400</div></div> 202.81 +<div class="ttc" id="ucx_8h_html"><div class="ttname"><a href="ucx_8h.html">ucx.h</a></div><div class="ttdoc">Main UCX Header providing most common definitions. </div></div> 202.82 +<div class="ttc" id="string_8h_html_ae389835b97cd9382e7d6a6a075323376"><div class="ttname"><a href="string_8h.html#ae389835b97cd9382e7d6a6a075323376">scstrrchr</a></div><div class="ttdeci">scstr_t scstrrchr(scstr_t string, int chr)</div><div class="ttdoc">Returns an immutable substring starting at the location of the last occurrence of the specified chara...</div><div class="ttdef"><b>Definition:</b> string.c:270</div></div> 202.83 +<div class="ttc" id="string_8h_html_a69d5e3eeec783cc43314df71248768f5"><div class="ttname"><a href="string_8h.html#a69d5e3eeec783cc43314df71248768f5">ucx_sc2sc</a></div><div class="ttdeci">scstr_t ucx_sc2sc(scstr_t str)</div><div class="ttdoc">One of two type adjustment functions that return an scstr_t. </div><div class="ttdef"><b>Definition:</b> string.c:666</div></div> 202.84 +<div class="ttc" id="string_8h_html_a599ddc2f88dd1df68b72eefd91347393"><div class="ttname"><a href="string_8h.html#a599ddc2f88dd1df68b72eefd91347393">scstrprefix</a></div><div class="ttdeci">int scstrprefix(scstr_t string, scstr_t prefix)</div><div class="ttdoc">Checks, if a string has a specific prefix. </div><div class="ttdef"><b>Definition:</b> string.c:570</div></div> 202.85 +<div class="ttc" id="string_8h_html_adae3f59957ca328e1da5285cb8b02a72"><div class="ttname"><a href="string_8h.html#adae3f59957ca328e1da5285cb8b02a72">sstrrchr</a></div><div class="ttdeci">sstr_t sstrrchr(sstr_t string, int chr)</div><div class="ttdoc">Returns a substring starting at the location of the last occurrence of the specified character...</div><div class="ttdef"><b>Definition:</b> string.c:254</div></div> 202.86 +<div class="ttc" id="string_8h_html_ae2d6da564d3fce51f2e0cac580fdbc56"><div class="ttname"><a href="string_8h.html#ae2d6da564d3fce51f2e0cac580fdbc56">sstrtrim</a></div><div class="ttdeci">sstr_t sstrtrim(sstr_t string)</div><div class="ttdoc">Omits leading and trailing spaces. </div><div class="ttdef"><b>Definition:</b> string.c:556</div></div> 202.87 +<div class="ttc" id="structscstr__t_html_a305fd48934b474a9bf4a40869030e391"><div class="ttname"><a href="structscstr__t.html#a305fd48934b474a9bf4a40869030e391">scstr_t::ptr</a></div><div class="ttdeci">const char * ptr</div><div class="ttdoc">A constant pointer to the immutable string (not necessarily NULL-terminated) </div><div class="ttdef"><b>Definition:</b> string.h:104</div></div> 202.88 +<div class="ttc" id="structscstr__t_html"><div class="ttname"><a href="structscstr__t.html">scstr_t</a></div><div class="ttdoc">The UCX string structure for immutable (constant) strings. </div><div class="ttdef"><b>Definition:</b> string.h:101</div></div> 202.89 +<div class="ttc" id="string_8h_html_ac1b000030d6d197eec48c15a182055d5"><div class="ttname"><a href="string_8h.html#ac1b000030d6d197eec48c15a182055d5">scstrnlen</a></div><div class="ttdeci">size_t scstrnlen(size_t count,...)</div><div class="ttdoc">Returns the accumulated length of all specified strings. </div><div class="ttdef"><b>Definition:</b> string.c:72</div></div> 202.90 +<div class="ttc" id="string_8h_html_a5eb9e0e1f26cf7fbecc038cd90e8b258"><div class="ttname"><a href="string_8h.html#a5eb9e0e1f26cf7fbecc038cd90e8b258">sstrsubs</a></div><div class="ttdeci">sstr_t sstrsubs(sstr_t string, size_t start)</div><div class="ttdoc">Returns a substring starting at the specified location. </div><div class="ttdef"><b>Definition:</b> string.c:197</div></div> 202.91 +<div class="ttc" id="string_8h_html_aca8142fb823d253054e17c17cfca05e0"><div class="ttname"><a href="string_8h.html#aca8142fb823d253054e17c17cfca05e0">scstrcasecmp</a></div><div class="ttdeci">int scstrcasecmp(scstr_t s1, scstr_t s2)</div><div class="ttdoc">Compares two UCX strings ignoring the case. </div><div class="ttdef"><b>Definition:</b> string.c:506</div></div> 202.92 +<div class="ttc" id="string_8h_html_a9ce5ad1b2aa2dbeba204d452c2e64359"><div class="ttname"><a href="string_8h.html#a9ce5ad1b2aa2dbeba204d452c2e64359">ucx_ss2sc</a></div><div class="ttdeci">scstr_t ucx_ss2sc(sstr_t str)</div><div class="ttdoc">One of two type adjustment functions that return an scstr_t. </div><div class="ttdef"><b>Definition:</b> string.c:669</div></div> 202.93 +<div class="ttc" id="string_8h_html_af35272a8e5408c88ed3e25a3a98f0a82"><div class="ttname"><a href="string_8h.html#af35272a8e5408c88ed3e25a3a98f0a82">scstrcmp</a></div><div class="ttdeci">int scstrcmp(scstr_t s1, scstr_t s2)</div><div class="ttdoc">Compares two UCX strings with standard memcmp(). </div><div class="ttdef"><b>Definition:</b> string.c:496</div></div> 202.94 +<div class="ttc" id="structsstr__t_html_af8049914efc1e67f7de3ee55ec0611b0"><div class="ttname"><a href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0">sstr_t::ptr</a></div><div class="ttdeci">char * ptr</div><div class="ttdoc">A pointer to the string (not necessarily NULL-terminated) </div><div class="ttdef"><b>Definition:</b> string.h:93</div></div> 202.95 +<div class="ttc" id="structUcxAllocator_html"><div class="ttname"><a href="structUcxAllocator.html">UcxAllocator</a></div><div class="ttdoc">UCX allocator data structure containing memory management functions. </div><div class="ttdef"><b>Definition:</b> allocator.h:88</div></div> 202.96 +<div class="ttc" id="string_8h_html_ae71cac352b00230848bde358f0fb05ea"><div class="ttname"><a href="string_8h.html#ae71cac352b00230848bde358f0fb05ea">scstrsplit</a></div><div class="ttdeci">sstr_t * scstrsplit(scstr_t string, scstr_t delim, ssize_t *count)</div><div class="ttdoc">Splits a string into parts by using a delimiter string. </div><div class="ttdef"><b>Definition:</b> string.c:396</div></div> 202.97 +<div class="ttc" id="string_8h_html_a3cf1e557df7ab58d03c78832c4060276"><div class="ttname"><a href="string_8h.html#a3cf1e557df7ab58d03c78832c4060276">scstrlower_a</a></div><div class="ttdeci">sstr_t scstrlower_a(UcxAllocator *allocator, scstr_t string)</div><div class="ttdoc">Returns a lower case version of a string. </div><div class="ttdef"><b>Definition:</b> string.c:641</div></div> 202.98 +<div class="ttc" id="structsstr__t_html_a5cf571708cdff92e45f08458f2b98229"><div class="ttname"><a href="structsstr__t.html#a5cf571708cdff92e45f08458f2b98229">sstr_t::length</a></div><div class="ttdeci">size_t length</div><div class="ttdoc">The length of the string. </div><div class="ttdef"><b>Definition:</b> string.h:95</div></div> 202.99 +<div class="ttc" id="string_8h_html_af80898a0b75955eb2579298c3ae2c481"><div class="ttname"><a href="string_8h.html#af80898a0b75955eb2579298c3ae2c481">sstrchr</a></div><div class="ttdeci">sstr_t sstrchr(sstr_t string, int chr)</div><div class="ttdoc">Returns a substring starting at the location of the first occurrence of the specified character...</div><div class="ttdef"><b>Definition:</b> string.c:246</div></div> 202.100 +<div class="ttc" id="string_8h_html_a8fe58921f51eb1fde038472377e63014"><div class="ttname"><a href="string_8h.html#a8fe58921f51eb1fde038472377e63014">scstrdup_a</a></div><div class="ttdeci">sstr_t scstrdup_a(UcxAllocator *allocator, scstr_t string)</div><div class="ttdoc">Creates a duplicate of the specified string using a UcxAllocator. </div><div class="ttdef"><b>Definition:</b> string.c:524</div></div> 202.101 +<div class="ttc" id="string_8h_html_ae594f6e222ea394cef6a26c0dfad000d"><div class="ttname"><a href="string_8h.html#ae594f6e222ea394cef6a26c0dfad000d">scstrn</a></div><div class="ttdeci">scstr_t scstrn(const char *cstring, size_t length)</div><div class="ttdoc">Creates a new scstr_t of the specified length based on a constant C string. </div><div class="ttdef"><b>Definition:</b> string.c:64</div></div> 202.102 +<div class="ttc" id="string_8h_html_aedeb5d7bddda54116101a8d68af8c56d"><div class="ttname"><a href="string_8h.html#aedeb5d7bddda54116101a8d68af8c56d">ucx_ss2c_s</a></div><div class="ttdeci">scstr_t ucx_ss2c_s()</div><div class="ttdoc">Converts a UCX string to an immutable UCX string (scstr_t). </div></div> 202.103 +<div class="ttc" id="string_8h_html_a1f0ae316a2afe85d5b4655e6ece6721a"><div class="ttname"><a href="string_8h.html#a1f0ae316a2afe85d5b4655e6ece6721a">scstrsuffix</a></div><div class="ttdeci">int scstrsuffix(scstr_t string, scstr_t suffix)</div><div class="ttdoc">Checks, if a string has a specific suffix. </div><div class="ttdef"><b>Definition:</b> string.c:585</div></div> 202.104 +<div class="ttc" id="string_8h_html_a2b1d6f1eca1c1549f37107b9c026c5a6"><div class="ttname"><a href="string_8h.html#a2b1d6f1eca1c1549f37107b9c026c5a6">scstr</a></div><div class="ttdeci">scstr_t scstr(const char *cstring)</div><div class="ttdoc">Creates a new scstr_t based on a constant C string. </div><div class="ttdef"><b>Definition:</b> string.c:57</div></div> 202.105 +<div class="ttc" id="allocator_8h_html"><div class="ttname"><a href="allocator_8h.html">allocator.h</a></div><div class="ttdoc">Allocator for custom memory management. </div></div> 202.106 +<div class="ttc" id="string_8h_html_a54f256c3abe811c52d58b4ff1b23f051"><div class="ttname"><a href="string_8h.html#a54f256c3abe811c52d58b4ff1b23f051">scstrscstr</a></div><div class="ttdeci">scstr_t scstrscstr(scstr_t string, scstr_t match)</div><div class="ttdoc">Returns an immutable substring starting at the location of the first occurrence of the specified immu...</div><div class="ttdef"><b>Definition:</b> string.c:375</div></div> 202.107 +<div class="ttc" id="string_8h_html_abacce4cbd6f70fcb6453904ef08b02e9"><div class="ttname"><a href="string_8h.html#abacce4cbd6f70fcb6453904ef08b02e9">scstrcat_a</a></div><div class="ttdeci">sstr_t scstrcat_a(UcxAllocator *alloc, size_t count, scstr_t s1,...)</div><div class="ttdoc">Concatenates two or more strings using a UcxAllocator. </div><div class="ttdef"><b>Definition:</b> string.c:167</div></div> 202.108 +<div class="ttc" id="string_8h_html_a7376842c19e954b49215da81ef76ac0c"><div class="ttname"><a href="string_8h.html#a7376842c19e954b49215da81ef76ac0c">scstrcat</a></div><div class="ttdeci">sstr_t scstrcat(size_t count, scstr_t s1,...)</div><div class="ttdoc">Concatenates two or more strings. </div><div class="ttdef"><b>Definition:</b> string.c:159</div></div> 202.109 +<div class="ttc" id="string_8h_html_aea94613eb74668cc05d365803d32bfad"><div class="ttname"><a href="string_8h.html#aea94613eb74668cc05d365803d32bfad">scstrupper_a</a></div><div class="ttdeci">sstr_t scstrupper_a(UcxAllocator *allocator, scstr_t string)</div><div class="ttdoc">Returns a upper case version of a string. </div><div class="ttdef"><b>Definition:</b> string.c:657</div></div> 202.110 +<div class="ttc" id="string_8h_html_af3dd09ec9d11162fe0075f4e60f41240"><div class="ttname"><a href="string_8h.html#af3dd09ec9d11162fe0075f4e60f41240">scstrupper</a></div><div class="ttdeci">sstr_t scstrupper(scstr_t string)</div><div class="ttdoc">Returns a upper case version of a string. </div><div class="ttdef"><b>Definition:</b> string.c:649</div></div> 202.111 +<div class="ttc" id="string_8h_html_ad50f0f67b906fad0744f46bcb51e144b"><div class="ttname"><a href="string_8h.html#ad50f0f67b906fad0744f46bcb51e144b">scstrsubsl</a></div><div class="ttdeci">scstr_t scstrsubsl(scstr_t string, size_t start, size_t length)</div><div class="ttdoc">Returns a substring of an immutable string with a maximum length starting at the specified location...</div><div class="ttdef"><b>Definition:</b> string.c:214</div></div> 202.112 +<div class="ttc" id="string_8h_html_a2744c38ac44abf3e01fa059056dcf36c"><div class="ttname"><a href="string_8h.html#a2744c38ac44abf3e01fa059056dcf36c">sstrn</a></div><div class="ttdeci">sstr_t sstrn(char *cstring, size_t length)</div><div class="ttdoc">Creates a new sstr_t of the specified length based on a C string. </div><div class="ttdef"><b>Definition:</b> string.c:50</div></div> 202.113 +<div class="ttc" id="structscstr__t_html_aaa0229f64f1057b6f65adededaa5a172"><div class="ttname"><a href="structscstr__t.html#aaa0229f64f1057b6f65adededaa5a172">scstr_t::length</a></div><div class="ttdeci">size_t length</div><div class="ttdoc">The length of the string. </div><div class="ttdef"><b>Definition:</b> string.h:106</div></div> 202.114 +<div class="ttc" id="string_8h_html_a6edb4b85f2b9efe79db7ffe6eccd7bc3"><div class="ttname"><a href="string_8h.html#a6edb4b85f2b9efe79db7ffe6eccd7bc3">scstrcasesuffix</a></div><div class="ttdeci">int scstrcasesuffix(scstr_t string, scstr_t suffix)</div><div class="ttdoc">Checks, if a string has a specific suffix, ignoring the case. </div><div class="ttdef"><b>Definition:</b> string.c:617</div></div> 202.115 +<div class="ttc" id="string_8h_html_a5836d6a7a744791c35e5c17bdc394a87"><div class="ttname"><a href="string_8h.html#a5836d6a7a744791c35e5c17bdc394a87">scstrchr</a></div><div class="ttdeci">scstr_t scstrchr(scstr_t string, int chr)</div><div class="ttdoc">Returns an immutable substring starting at the location of the first occurrence of the specified char...</div><div class="ttdef"><b>Definition:</b> string.c:262</div></div> 202.116 +<div class="ttc" id="string_8h_html_a9a6c8d8db0dda0037c3c852cce1a5060"><div class="ttname"><a href="string_8h.html#a9a6c8d8db0dda0037c3c852cce1a5060">scstrsubs</a></div><div class="ttdeci">scstr_t scstrsubs(scstr_t string, size_t start)</div><div class="ttdoc">Returns a substring of an immutable string starting at the specified location. </div><div class="ttdef"><b>Definition:</b> string.c:210</div></div> 202.117 +<div class="ttc" id="string_8h_html_aa4362cb36c6629f9d8484739fd827748"><div class="ttname"><a href="string_8h.html#aa4362cb36c6629f9d8484739fd827748">scstrsstr</a></div><div class="ttdeci">sstr_t scstrsstr(sstr_t string, scstr_t match)</div><div class="ttdoc">Returns a substring starting at the location of the first occurrence of the specified string...</div><div class="ttdef"><b>Definition:</b> string.c:357</div></div> 202.118 +<div class="ttc" id="string_8h_html_a3718ef4aa1e86cdb26bda2f07fb585df"><div class="ttname"><a href="string_8h.html#a3718ef4aa1e86cdb26bda2f07fb585df">scstrcaseprefix</a></div><div class="ttdeci">int scstrcaseprefix(scstr_t string, scstr_t prefix)</div><div class="ttdoc">Checks, if a string has a specific prefix, ignoring the case. </div><div class="ttdef"><b>Definition:</b> string.c:601</div></div> 202.119 +</div><!-- fragment --></div><!-- contents --> 202.120 +<!-- start footer part --> 202.121 +<hr class="footer"/><address class="footer"><small> 202.122 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 202.123 +<img class="footer" src="doxygen.png" alt="doxygen"/> 202.124 +</a> 1.8.13 202.125 +</small></address> 202.126 +</body> 202.127 +</html>
203.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 203.2 +++ b/docs/api-2.1/structUcxAVLNode.html Sat Feb 06 19:11:44 2021 +0100 203.3 @@ -0,0 +1,115 @@ 203.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 203.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 203.6 +<head> 203.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 203.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 203.9 +<meta name="generator" content="Doxygen 1.8.13"/> 203.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 203.11 +<title>ucx: UcxAVLNode Struct Reference</title> 203.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 203.13 +<script type="text/javascript" src="jquery.js"></script> 203.14 +<script type="text/javascript" src="dynsections.js"></script> 203.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 203.16 +<script type="text/javascript" src="search/searchdata.js"></script> 203.17 +<script type="text/javascript" src="search/search.js"></script> 203.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 203.19 +</head> 203.20 +<body> 203.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 203.22 +<div id="titlearea"> 203.23 +<table cellspacing="0" cellpadding="0"> 203.24 + <tbody> 203.25 + <tr style="height: 56px;"> 203.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 203.27 + <td id="projectalign" style="padding-left: 0.5em;"> 203.28 + <div id="projectname">ucx 203.29 + </div> 203.30 + <div id="projectbrief">UAP Common Extensions</div> 203.31 + </td> 203.32 + </tr> 203.33 + </tbody> 203.34 +</table> 203.35 +</div> 203.36 +<!-- end header part --> 203.37 +<!-- Generated by Doxygen 1.8.13 --> 203.38 +<script type="text/javascript"> 203.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 203.40 +</script> 203.41 +<script type="text/javascript" src="menudata.js"></script> 203.42 +<script type="text/javascript" src="menu.js"></script> 203.43 +<script type="text/javascript"> 203.44 +$(function() { 203.45 + initMenu('',true,false,'search.php','Search'); 203.46 + $(document).ready(function() { init_search(); }); 203.47 +}); 203.48 +</script> 203.49 +<div id="main-nav"></div> 203.50 +<!-- window showing the filter options --> 203.51 +<div id="MSearchSelectWindow" 203.52 + onmouseover="return searchBox.OnSearchSelectShow()" 203.53 + onmouseout="return searchBox.OnSearchSelectHide()" 203.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 203.55 +</div> 203.56 + 203.57 +<!-- iframe showing the search results (closed by default) --> 203.58 +<div id="MSearchResultsWindow"> 203.59 +<iframe src="javascript:void(0)" frameborder="0" 203.60 + name="MSearchResults" id="MSearchResults"> 203.61 +</iframe> 203.62 +</div> 203.63 + 203.64 +</div><!-- top --> 203.65 +<div class="header"> 203.66 + <div class="summary"> 203.67 +<a href="#pub-attribs">Data Fields</a> </div> 203.68 + <div class="headertitle"> 203.69 +<div class="title">UcxAVLNode Struct Reference</div> </div> 203.70 +</div><!--header--> 203.71 +<div class="contents"> 203.72 + 203.73 +<p>UCX AVL Node. 203.74 + <a href="structUcxAVLNode.html#details">More...</a></p> 203.75 + 203.76 +<p><code>#include <<a class="el" href="avl_8h_source.html">avl.h</a>></code></p> 203.77 +<table class="memberdecls"> 203.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 203.79 +Data Fields</h2></td></tr> 203.80 +<tr class="memitem:ab65a31010d26a3df898e6ba534702af6"><td class="memItemLeft" align="right" valign="top"><a id="ab65a31010d26a3df898e6ba534702af6"></a> 203.81 +intptr_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6">key</a></td></tr> 203.82 +<tr class="memdesc:ab65a31010d26a3df898e6ba534702af6"><td class="mdescLeft"> </td><td class="mdescRight">The key for this node. <br /></td></tr> 203.83 +<tr class="separator:ab65a31010d26a3df898e6ba534702af6"><td class="memSeparator" colspan="2"> </td></tr> 203.84 +<tr class="memitem:a302501b8c04c3fde668fe72249871258"><td class="memItemLeft" align="right" valign="top"><a id="a302501b8c04c3fde668fe72249871258"></a> 203.85 +void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAVLNode.html#a302501b8c04c3fde668fe72249871258">value</a></td></tr> 203.86 +<tr class="memdesc:a302501b8c04c3fde668fe72249871258"><td class="mdescLeft"> </td><td class="mdescRight">Data contained by this node. <br /></td></tr> 203.87 +<tr class="separator:a302501b8c04c3fde668fe72249871258"><td class="memSeparator" colspan="2"> </td></tr> 203.88 +<tr class="memitem:af129fd32863a7c35e82c5cd9d11dc95a"><td class="memItemLeft" align="right" valign="top"><a id="af129fd32863a7c35e82c5cd9d11dc95a"></a> 203.89 +size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAVLNode.html#af129fd32863a7c35e82c5cd9d11dc95a">height</a></td></tr> 203.90 +<tr class="memdesc:af129fd32863a7c35e82c5cd9d11dc95a"><td class="mdescLeft"> </td><td class="mdescRight">The height of this (sub)-tree. <br /></td></tr> 203.91 +<tr class="separator:af129fd32863a7c35e82c5cd9d11dc95a"><td class="memSeparator" colspan="2"> </td></tr> 203.92 +<tr class="memitem:afc4e3b4f452aa2d91cabb2135b9d42f7"><td class="memItemLeft" align="right" valign="top"><a id="afc4e3b4f452aa2d91cabb2135b9d42f7"></a> 203.93 +<a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAVLNode.html#afc4e3b4f452aa2d91cabb2135b9d42f7">parent</a></td></tr> 203.94 +<tr class="memdesc:afc4e3b4f452aa2d91cabb2135b9d42f7"><td class="mdescLeft"> </td><td class="mdescRight">Parent node. <br /></td></tr> 203.95 +<tr class="separator:afc4e3b4f452aa2d91cabb2135b9d42f7"><td class="memSeparator" colspan="2"> </td></tr> 203.96 +<tr class="memitem:ad3a1c733f2c1cc81ac527f846fc24b9c"><td class="memItemLeft" align="right" valign="top"><a id="ad3a1c733f2c1cc81ac527f846fc24b9c"></a> 203.97 +<a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAVLNode.html#ad3a1c733f2c1cc81ac527f846fc24b9c">left</a></td></tr> 203.98 +<tr class="memdesc:ad3a1c733f2c1cc81ac527f846fc24b9c"><td class="mdescLeft"> </td><td class="mdescRight">Root node of left subtree. <br /></td></tr> 203.99 +<tr class="separator:ad3a1c733f2c1cc81ac527f846fc24b9c"><td class="memSeparator" colspan="2"> </td></tr> 203.100 +<tr class="memitem:a7cbaa31dba8c7a89f4f8f7905f6fd238"><td class="memItemLeft" align="right" valign="top"><a id="a7cbaa31dba8c7a89f4f8f7905f6fd238"></a> 203.101 +<a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAVLNode.html#a7cbaa31dba8c7a89f4f8f7905f6fd238">right</a></td></tr> 203.102 +<tr class="memdesc:a7cbaa31dba8c7a89f4f8f7905f6fd238"><td class="mdescLeft"> </td><td class="mdescRight">Root node of right subtree. <br /></td></tr> 203.103 +<tr class="separator:a7cbaa31dba8c7a89f4f8f7905f6fd238"><td class="memSeparator" colspan="2"> </td></tr> 203.104 +</table> 203.105 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 203.106 +<div class="textblock"><p>UCX AVL Node. </p> 203.107 +</div><hr/>The documentation for this struct was generated from the following file:<ul> 203.108 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="avl_8h_source.html">avl.h</a></li> 203.109 +</ul> 203.110 +</div><!-- contents --> 203.111 +<!-- start footer part --> 203.112 +<hr class="footer"/><address class="footer"><small> 203.113 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 203.114 +<img class="footer" src="doxygen.png" alt="doxygen"/> 203.115 +</a> 1.8.13 203.116 +</small></address> 203.117 +</body> 203.118 +</html>
204.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 204.2 +++ b/docs/api-2.1/structUcxAVLTree.html Sat Feb 06 19:11:44 2021 +0100 204.3 @@ -0,0 +1,140 @@ 204.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 204.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 204.6 +<head> 204.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 204.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 204.9 +<meta name="generator" content="Doxygen 1.8.13"/> 204.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 204.11 +<title>ucx: UcxAVLTree Struct Reference</title> 204.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 204.13 +<script type="text/javascript" src="jquery.js"></script> 204.14 +<script type="text/javascript" src="dynsections.js"></script> 204.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 204.16 +<script type="text/javascript" src="search/searchdata.js"></script> 204.17 +<script type="text/javascript" src="search/search.js"></script> 204.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 204.19 +</head> 204.20 +<body> 204.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 204.22 +<div id="titlearea"> 204.23 +<table cellspacing="0" cellpadding="0"> 204.24 + <tbody> 204.25 + <tr style="height: 56px;"> 204.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 204.27 + <td id="projectalign" style="padding-left: 0.5em;"> 204.28 + <div id="projectname">ucx 204.29 + </div> 204.30 + <div id="projectbrief">UAP Common Extensions</div> 204.31 + </td> 204.32 + </tr> 204.33 + </tbody> 204.34 +</table> 204.35 +</div> 204.36 +<!-- end header part --> 204.37 +<!-- Generated by Doxygen 1.8.13 --> 204.38 +<script type="text/javascript"> 204.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 204.40 +</script> 204.41 +<script type="text/javascript" src="menudata.js"></script> 204.42 +<script type="text/javascript" src="menu.js"></script> 204.43 +<script type="text/javascript"> 204.44 +$(function() { 204.45 + initMenu('',true,false,'search.php','Search'); 204.46 + $(document).ready(function() { init_search(); }); 204.47 +}); 204.48 +</script> 204.49 +<div id="main-nav"></div> 204.50 +<!-- window showing the filter options --> 204.51 +<div id="MSearchSelectWindow" 204.52 + onmouseover="return searchBox.OnSearchSelectShow()" 204.53 + onmouseout="return searchBox.OnSearchSelectHide()" 204.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 204.55 +</div> 204.56 + 204.57 +<!-- iframe showing the search results (closed by default) --> 204.58 +<div id="MSearchResultsWindow"> 204.59 +<iframe src="javascript:void(0)" frameborder="0" 204.60 + name="MSearchResults" id="MSearchResults"> 204.61 +</iframe> 204.62 +</div> 204.63 + 204.64 +</div><!-- top --> 204.65 +<div class="header"> 204.66 + <div class="summary"> 204.67 +<a href="#pub-attribs">Data Fields</a> </div> 204.68 + <div class="headertitle"> 204.69 +<div class="title">UcxAVLTree Struct Reference</div> </div> 204.70 +</div><!--header--> 204.71 +<div class="contents"> 204.72 + 204.73 +<p>UCX AVL Tree. 204.74 + <a href="structUcxAVLTree.html#details">More...</a></p> 204.75 + 204.76 +<p><code>#include <<a class="el" href="avl_8h_source.html">avl.h</a>></code></p> 204.77 +<table class="memberdecls"> 204.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 204.79 +Data Fields</h2></td></tr> 204.80 +<tr class="memitem:a30652776b540156ad54c7d52833e4e28"><td class="memItemLeft" align="right" valign="top"><a id="a30652776b540156ad54c7d52833e4e28"></a> 204.81 +<a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAVLTree.html#a30652776b540156ad54c7d52833e4e28">allocator</a></td></tr> 204.82 +<tr class="memdesc:a30652776b540156ad54c7d52833e4e28"><td class="mdescLeft"> </td><td class="mdescRight">The <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> that shall be used to manage the memory for node data. <br /></td></tr> 204.83 +<tr class="separator:a30652776b540156ad54c7d52833e4e28"><td class="memSeparator" colspan="2"> </td></tr> 204.84 +<tr class="memitem:a393a8fc99eb2c290d3cb67170081d742"><td class="memItemLeft" align="right" valign="top"><a id="a393a8fc99eb2c290d3cb67170081d742"></a> 204.85 +<a class="el" href="structUcxAVLNode.html">UcxAVLNode</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAVLTree.html#a393a8fc99eb2c290d3cb67170081d742">root</a></td></tr> 204.86 +<tr class="memdesc:a393a8fc99eb2c290d3cb67170081d742"><td class="mdescLeft"> </td><td class="mdescRight">Root node of the tree. <br /></td></tr> 204.87 +<tr class="separator:a393a8fc99eb2c290d3cb67170081d742"><td class="memSeparator" colspan="2"> </td></tr> 204.88 +<tr class="memitem:a87aff25cb726cb9eb88eb815a10d1004"><td class="memItemLeft" align="right" valign="top"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAVLTree.html#a87aff25cb726cb9eb88eb815a10d1004">cmpfunc</a></td></tr> 204.89 +<tr class="memdesc:a87aff25cb726cb9eb88eb815a10d1004"><td class="mdescLeft"> </td><td class="mdescRight">Compare function that shall be used to compare the <a class="el" href="structUcxAVLNode.html" title="UCX AVL Node. ">UcxAVLNode</a> keys. <a href="#a87aff25cb726cb9eb88eb815a10d1004">More...</a><br /></td></tr> 204.90 +<tr class="separator:a87aff25cb726cb9eb88eb815a10d1004"><td class="memSeparator" colspan="2"> </td></tr> 204.91 +<tr class="memitem:ae92a3bfad3fe33c8dcbdad85112f83fd"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAVLTree.html#ae92a3bfad3fe33c8dcbdad85112f83fd">userdata</a></td></tr> 204.92 +<tr class="memdesc:ae92a3bfad3fe33c8dcbdad85112f83fd"><td class="mdescLeft"> </td><td class="mdescRight">Custom user data. <a href="#ae92a3bfad3fe33c8dcbdad85112f83fd">More...</a><br /></td></tr> 204.93 +<tr class="separator:ae92a3bfad3fe33c8dcbdad85112f83fd"><td class="memSeparator" colspan="2"> </td></tr> 204.94 +</table> 204.95 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 204.96 +<div class="textblock"><p>UCX AVL Tree. </p> 204.97 +</div><h2 class="groupheader">Field Documentation</h2> 204.98 +<a id="a87aff25cb726cb9eb88eb815a10d1004"></a> 204.99 +<h2 class="memtitle"><span class="permalink"><a href="#a87aff25cb726cb9eb88eb815a10d1004">◆ </a></span>cmpfunc</h2> 204.100 + 204.101 +<div class="memitem"> 204.102 +<div class="memproto"> 204.103 + <table class="memname"> 204.104 + <tr> 204.105 + <td class="memname"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a> UcxAVLTree::cmpfunc</td> 204.106 + </tr> 204.107 + </table> 204.108 +</div><div class="memdoc"> 204.109 + 204.110 +<p>Compare function that shall be used to compare the <a class="el" href="structUcxAVLNode.html" title="UCX AVL Node. ">UcxAVLNode</a> keys. </p> 204.111 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="structUcxAVLNode.html#ab65a31010d26a3df898e6ba534702af6" title="The key for this node. ">UcxAVLNode.key</a> </dd></dl> 204.112 + 204.113 +</div> 204.114 +</div> 204.115 +<a id="ae92a3bfad3fe33c8dcbdad85112f83fd"></a> 204.116 +<h2 class="memtitle"><span class="permalink"><a href="#ae92a3bfad3fe33c8dcbdad85112f83fd">◆ </a></span>userdata</h2> 204.117 + 204.118 +<div class="memitem"> 204.119 +<div class="memproto"> 204.120 + <table class="memname"> 204.121 + <tr> 204.122 + <td class="memname">void* UcxAVLTree::userdata</td> 204.123 + </tr> 204.124 + </table> 204.125 +</div><div class="memdoc"> 204.126 + 204.127 +<p>Custom user data. </p> 204.128 +<p>This data will also be provided to the cmpfunc. </p> 204.129 + 204.130 +</div> 204.131 +</div> 204.132 +<hr/>The documentation for this struct was generated from the following file:<ul> 204.133 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="avl_8h_source.html">avl.h</a></li> 204.134 +</ul> 204.135 +</div><!-- contents --> 204.136 +<!-- start footer part --> 204.137 +<hr class="footer"/><address class="footer"><small> 204.138 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 204.139 +<img class="footer" src="doxygen.png" alt="doxygen"/> 204.140 +</a> 1.8.13 204.141 +</small></address> 204.142 +</body> 204.143 +</html>
205.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 205.2 +++ b/docs/api-2.1/structUcxAllocator.html Sat Feb 06 19:11:44 2021 +0100 205.3 @@ -0,0 +1,128 @@ 205.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 205.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 205.6 +<head> 205.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 205.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 205.9 +<meta name="generator" content="Doxygen 1.8.13"/> 205.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 205.11 +<title>ucx: UcxAllocator Struct Reference</title> 205.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 205.13 +<script type="text/javascript" src="jquery.js"></script> 205.14 +<script type="text/javascript" src="dynsections.js"></script> 205.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 205.16 +<script type="text/javascript" src="search/searchdata.js"></script> 205.17 +<script type="text/javascript" src="search/search.js"></script> 205.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 205.19 +</head> 205.20 +<body> 205.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 205.22 +<div id="titlearea"> 205.23 +<table cellspacing="0" cellpadding="0"> 205.24 + <tbody> 205.25 + <tr style="height: 56px;"> 205.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 205.27 + <td id="projectalign" style="padding-left: 0.5em;"> 205.28 + <div id="projectname">ucx 205.29 + </div> 205.30 + <div id="projectbrief">UAP Common Extensions</div> 205.31 + </td> 205.32 + </tr> 205.33 + </tbody> 205.34 +</table> 205.35 +</div> 205.36 +<!-- end header part --> 205.37 +<!-- Generated by Doxygen 1.8.13 --> 205.38 +<script type="text/javascript"> 205.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 205.40 +</script> 205.41 +<script type="text/javascript" src="menudata.js"></script> 205.42 +<script type="text/javascript" src="menu.js"></script> 205.43 +<script type="text/javascript"> 205.44 +$(function() { 205.45 + initMenu('',true,false,'search.php','Search'); 205.46 + $(document).ready(function() { init_search(); }); 205.47 +}); 205.48 +</script> 205.49 +<div id="main-nav"></div> 205.50 +<!-- window showing the filter options --> 205.51 +<div id="MSearchSelectWindow" 205.52 + onmouseover="return searchBox.OnSearchSelectShow()" 205.53 + onmouseout="return searchBox.OnSearchSelectHide()" 205.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 205.55 +</div> 205.56 + 205.57 +<!-- iframe showing the search results (closed by default) --> 205.58 +<div id="MSearchResultsWindow"> 205.59 +<iframe src="javascript:void(0)" frameborder="0" 205.60 + name="MSearchResults" id="MSearchResults"> 205.61 +</iframe> 205.62 +</div> 205.63 + 205.64 +</div><!-- top --> 205.65 +<div class="header"> 205.66 + <div class="summary"> 205.67 +<a href="#pub-attribs">Data Fields</a> </div> 205.68 + <div class="headertitle"> 205.69 +<div class="title">UcxAllocator Struct Reference</div> </div> 205.70 +</div><!--header--> 205.71 +<div class="contents"> 205.72 + 205.73 +<p>UCX allocator data structure containing memory management functions. 205.74 + <a href="structUcxAllocator.html#details">More...</a></p> 205.75 + 205.76 +<p><code>#include <<a class="el" href="allocator_8h_source.html">allocator.h</a>></code></p> 205.77 +<table class="memberdecls"> 205.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 205.79 +Data Fields</h2></td></tr> 205.80 +<tr class="memitem:a1b78012998d1c28be86dc595f8f0aac9"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAllocator.html#a1b78012998d1c28be86dc595f8f0aac9">pool</a></td></tr> 205.81 +<tr class="memdesc:a1b78012998d1c28be86dc595f8f0aac9"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to an area of memory or a complex memory pool. <a href="#a1b78012998d1c28be86dc595f8f0aac9">More...</a><br /></td></tr> 205.82 +<tr class="separator:a1b78012998d1c28be86dc595f8f0aac9"><td class="memSeparator" colspan="2"> </td></tr> 205.83 +<tr class="memitem:a013376172be39ed54f77c4be6898845a"><td class="memItemLeft" align="right" valign="top"><a id="a013376172be39ed54f77c4be6898845a"></a> 205.84 +<a class="el" href="allocator_8h.html#a29f0f6a23a70db3b60635cd6dc384473">ucx_allocator_malloc</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAllocator.html#a013376172be39ed54f77c4be6898845a">malloc</a></td></tr> 205.85 +<tr class="memdesc:a013376172be39ed54f77c4be6898845a"><td class="mdescLeft"> </td><td class="mdescRight">The <code><a class="el" href="structUcxAllocator.html#a013376172be39ed54f77c4be6898845a" title="The malloc() function for this allocator. ">malloc()</a></code> function for this allocator. <br /></td></tr> 205.86 +<tr class="separator:a013376172be39ed54f77c4be6898845a"><td class="memSeparator" colspan="2"> </td></tr> 205.87 +<tr class="memitem:ab94ec1cba45cc4e7d81e1588a11cbb62"><td class="memItemLeft" align="right" valign="top"><a id="ab94ec1cba45cc4e7d81e1588a11cbb62"></a> 205.88 +<a class="el" href="allocator_8h.html#a2c0aba4221c1ac6801f03ed799f15b12">ucx_allocator_calloc</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAllocator.html#ab94ec1cba45cc4e7d81e1588a11cbb62">calloc</a></td></tr> 205.89 +<tr class="memdesc:ab94ec1cba45cc4e7d81e1588a11cbb62"><td class="mdescLeft"> </td><td class="mdescRight">The <code><a class="el" href="structUcxAllocator.html#ab94ec1cba45cc4e7d81e1588a11cbb62" title="The calloc() function for this allocator. ">calloc()</a></code> function for this allocator. <br /></td></tr> 205.90 +<tr class="separator:ab94ec1cba45cc4e7d81e1588a11cbb62"><td class="memSeparator" colspan="2"> </td></tr> 205.91 +<tr class="memitem:a3550e3847f31d9e9ce3ffcb0d3440c15"><td class="memItemLeft" align="right" valign="top"><a id="a3550e3847f31d9e9ce3ffcb0d3440c15"></a> 205.92 +<a class="el" href="allocator_8h.html#a6d7cf038a806e327c5da37321d04e426">ucx_allocator_realloc</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAllocator.html#a3550e3847f31d9e9ce3ffcb0d3440c15">realloc</a></td></tr> 205.93 +<tr class="memdesc:a3550e3847f31d9e9ce3ffcb0d3440c15"><td class="mdescLeft"> </td><td class="mdescRight">The <code><a class="el" href="structUcxAllocator.html#a3550e3847f31d9e9ce3ffcb0d3440c15" title="The realloc() function for this allocator. ">realloc()</a></code> function for this allocator. <br /></td></tr> 205.94 +<tr class="separator:a3550e3847f31d9e9ce3ffcb0d3440c15"><td class="memSeparator" colspan="2"> </td></tr> 205.95 +<tr class="memitem:aecce1840378ed53f1002190f4f87026f"><td class="memItemLeft" align="right" valign="top"><a id="aecce1840378ed53f1002190f4f87026f"></a> 205.96 +<a class="el" href="allocator_8h.html#aaf2387ddaddd8ab4b267e6b00e5d6f7e">ucx_allocator_free</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxAllocator.html#aecce1840378ed53f1002190f4f87026f">free</a></td></tr> 205.97 +<tr class="memdesc:aecce1840378ed53f1002190f4f87026f"><td class="mdescLeft"> </td><td class="mdescRight">The <code><a class="el" href="structUcxAllocator.html#aecce1840378ed53f1002190f4f87026f" title="The free() function for this allocator. ">free()</a></code> function for this allocator. <br /></td></tr> 205.98 +<tr class="separator:aecce1840378ed53f1002190f4f87026f"><td class="memSeparator" colspan="2"> </td></tr> 205.99 +</table> 205.100 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 205.101 +<div class="textblock"><p>UCX allocator data structure containing memory management functions. </p> 205.102 +</div><h2 class="groupheader">Field Documentation</h2> 205.103 +<a id="a1b78012998d1c28be86dc595f8f0aac9"></a> 205.104 +<h2 class="memtitle"><span class="permalink"><a href="#a1b78012998d1c28be86dc595f8f0aac9">◆ </a></span>pool</h2> 205.105 + 205.106 +<div class="memitem"> 205.107 +<div class="memproto"> 205.108 + <table class="memname"> 205.109 + <tr> 205.110 + <td class="memname">void* UcxAllocator::pool</td> 205.111 + </tr> 205.112 + </table> 205.113 +</div><div class="memdoc"> 205.114 + 205.115 +<p>Pointer to an area of memory or a complex memory pool. </p> 205.116 +<p>This pointer will be passed to any memory management function as first argument. </p> 205.117 + 205.118 +</div> 205.119 +</div> 205.120 +<hr/>The documentation for this struct was generated from the following file:<ul> 205.121 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="allocator_8h_source.html">allocator.h</a></li> 205.122 +</ul> 205.123 +</div><!-- contents --> 205.124 +<!-- start footer part --> 205.125 +<hr class="footer"/><address class="footer"><small> 205.126 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 205.127 +<img class="footer" src="doxygen.png" alt="doxygen"/> 205.128 +</a> 1.8.13 205.129 +</small></address> 205.130 +</body> 205.131 +</html>
206.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 206.2 +++ b/docs/api-2.1/structUcxArray.html Sat Feb 06 19:11:44 2021 +0100 206.3 @@ -0,0 +1,111 @@ 206.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 206.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 206.6 +<head> 206.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 206.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 206.9 +<meta name="generator" content="Doxygen 1.8.13"/> 206.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 206.11 +<title>ucx: UcxArray Struct Reference</title> 206.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 206.13 +<script type="text/javascript" src="jquery.js"></script> 206.14 +<script type="text/javascript" src="dynsections.js"></script> 206.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 206.16 +<script type="text/javascript" src="search/searchdata.js"></script> 206.17 +<script type="text/javascript" src="search/search.js"></script> 206.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 206.19 +</head> 206.20 +<body> 206.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 206.22 +<div id="titlearea"> 206.23 +<table cellspacing="0" cellpadding="0"> 206.24 + <tbody> 206.25 + <tr style="height: 56px;"> 206.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 206.27 + <td id="projectalign" style="padding-left: 0.5em;"> 206.28 + <div id="projectname">ucx 206.29 + </div> 206.30 + <div id="projectbrief">UAP Common Extensions</div> 206.31 + </td> 206.32 + </tr> 206.33 + </tbody> 206.34 +</table> 206.35 +</div> 206.36 +<!-- end header part --> 206.37 +<!-- Generated by Doxygen 1.8.13 --> 206.38 +<script type="text/javascript"> 206.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 206.40 +</script> 206.41 +<script type="text/javascript" src="menudata.js"></script> 206.42 +<script type="text/javascript" src="menu.js"></script> 206.43 +<script type="text/javascript"> 206.44 +$(function() { 206.45 + initMenu('',true,false,'search.php','Search'); 206.46 + $(document).ready(function() { init_search(); }); 206.47 +}); 206.48 +</script> 206.49 +<div id="main-nav"></div> 206.50 +<!-- window showing the filter options --> 206.51 +<div id="MSearchSelectWindow" 206.52 + onmouseover="return searchBox.OnSearchSelectShow()" 206.53 + onmouseout="return searchBox.OnSearchSelectHide()" 206.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 206.55 +</div> 206.56 + 206.57 +<!-- iframe showing the search results (closed by default) --> 206.58 +<div id="MSearchResultsWindow"> 206.59 +<iframe src="javascript:void(0)" frameborder="0" 206.60 + name="MSearchResults" id="MSearchResults"> 206.61 +</iframe> 206.62 +</div> 206.63 + 206.64 +</div><!-- top --> 206.65 +<div class="header"> 206.66 + <div class="summary"> 206.67 +<a href="#pub-attribs">Data Fields</a> </div> 206.68 + <div class="headertitle"> 206.69 +<div class="title">UcxArray Struct Reference</div> </div> 206.70 +</div><!--header--> 206.71 +<div class="contents"> 206.72 + 206.73 +<p>UCX array type. 206.74 + <a href="structUcxArray.html#details">More...</a></p> 206.75 + 206.76 +<p><code>#include <<a class="el" href="array_8h_source.html">array.h</a>></code></p> 206.77 +<table class="memberdecls"> 206.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 206.79 +Data Fields</h2></td></tr> 206.80 +<tr class="memitem:a7ed074887908e45bde7e1fbc67b31c18"><td class="memItemLeft" align="right" valign="top"><a id="a7ed074887908e45bde7e1fbc67b31c18"></a> 206.81 +size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxArray.html#a7ed074887908e45bde7e1fbc67b31c18">capacity</a></td></tr> 206.82 +<tr class="memdesc:a7ed074887908e45bde7e1fbc67b31c18"><td class="mdescLeft"> </td><td class="mdescRight">The current capacity of the array. <br /></td></tr> 206.83 +<tr class="separator:a7ed074887908e45bde7e1fbc67b31c18"><td class="memSeparator" colspan="2"> </td></tr> 206.84 +<tr class="memitem:a20c11f2c9048cda80062842b7c094e20"><td class="memItemLeft" align="right" valign="top"><a id="a20c11f2c9048cda80062842b7c094e20"></a> 206.85 +size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxArray.html#a20c11f2c9048cda80062842b7c094e20">size</a></td></tr> 206.86 +<tr class="memdesc:a20c11f2c9048cda80062842b7c094e20"><td class="mdescLeft"> </td><td class="mdescRight">The actual number of elements in the array. <br /></td></tr> 206.87 +<tr class="separator:a20c11f2c9048cda80062842b7c094e20"><td class="memSeparator" colspan="2"> </td></tr> 206.88 +<tr class="memitem:ac4e9ecdf8a8d010644f6e44dfef8190f"><td class="memItemLeft" align="right" valign="top"><a id="ac4e9ecdf8a8d010644f6e44dfef8190f"></a> 206.89 +size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxArray.html#ac4e9ecdf8a8d010644f6e44dfef8190f">elemsize</a></td></tr> 206.90 +<tr class="memdesc:ac4e9ecdf8a8d010644f6e44dfef8190f"><td class="mdescLeft"> </td><td class="mdescRight">The size of an individual element in bytes. <br /></td></tr> 206.91 +<tr class="separator:ac4e9ecdf8a8d010644f6e44dfef8190f"><td class="memSeparator" colspan="2"> </td></tr> 206.92 +<tr class="memitem:a04d2b03d0a45af1fab19b4216602075a"><td class="memItemLeft" align="right" valign="top"><a id="a04d2b03d0a45af1fab19b4216602075a"></a> 206.93 +void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxArray.html#a04d2b03d0a45af1fab19b4216602075a">data</a></td></tr> 206.94 +<tr class="memdesc:a04d2b03d0a45af1fab19b4216602075a"><td class="mdescLeft"> </td><td class="mdescRight">A pointer to the data. <br /></td></tr> 206.95 +<tr class="separator:a04d2b03d0a45af1fab19b4216602075a"><td class="memSeparator" colspan="2"> </td></tr> 206.96 +<tr class="memitem:a2ef31303b7548b9aa8e2b9187e295212"><td class="memItemLeft" align="right" valign="top"><a id="a2ef31303b7548b9aa8e2b9187e295212"></a> 206.97 +<a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxArray.html#a2ef31303b7548b9aa8e2b9187e295212">allocator</a></td></tr> 206.98 +<tr class="memdesc:a2ef31303b7548b9aa8e2b9187e295212"><td class="mdescLeft"> </td><td class="mdescRight">The allocator used for the data. <br /></td></tr> 206.99 +<tr class="separator:a2ef31303b7548b9aa8e2b9187e295212"><td class="memSeparator" colspan="2"> </td></tr> 206.100 +</table> 206.101 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 206.102 +<div class="textblock"><p>UCX array type. </p> 206.103 +</div><hr/>The documentation for this struct was generated from the following file:<ul> 206.104 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="array_8h_source.html">array.h</a></li> 206.105 +</ul> 206.106 +</div><!-- contents --> 206.107 +<!-- start footer part --> 206.108 +<hr class="footer"/><address class="footer"><small> 206.109 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 206.110 +<img class="footer" src="doxygen.png" alt="doxygen"/> 206.111 +</a> 1.8.13 206.112 +</small></address> 206.113 +</body> 206.114 +</html>
207.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 207.2 +++ b/docs/api-2.1/structUcxBuffer.html Sat Feb 06 19:11:44 2021 +0100 207.3 @@ -0,0 +1,193 @@ 207.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 207.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 207.6 +<head> 207.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 207.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 207.9 +<meta name="generator" content="Doxygen 1.8.13"/> 207.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 207.11 +<title>ucx: UcxBuffer Struct Reference</title> 207.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 207.13 +<script type="text/javascript" src="jquery.js"></script> 207.14 +<script type="text/javascript" src="dynsections.js"></script> 207.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 207.16 +<script type="text/javascript" src="search/searchdata.js"></script> 207.17 +<script type="text/javascript" src="search/search.js"></script> 207.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 207.19 +</head> 207.20 +<body> 207.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 207.22 +<div id="titlearea"> 207.23 +<table cellspacing="0" cellpadding="0"> 207.24 + <tbody> 207.25 + <tr style="height: 56px;"> 207.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 207.27 + <td id="projectalign" style="padding-left: 0.5em;"> 207.28 + <div id="projectname">ucx 207.29 + </div> 207.30 + <div id="projectbrief">UAP Common Extensions</div> 207.31 + </td> 207.32 + </tr> 207.33 + </tbody> 207.34 +</table> 207.35 +</div> 207.36 +<!-- end header part --> 207.37 +<!-- Generated by Doxygen 1.8.13 --> 207.38 +<script type="text/javascript"> 207.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 207.40 +</script> 207.41 +<script type="text/javascript" src="menudata.js"></script> 207.42 +<script type="text/javascript" src="menu.js"></script> 207.43 +<script type="text/javascript"> 207.44 +$(function() { 207.45 + initMenu('',true,false,'search.php','Search'); 207.46 + $(document).ready(function() { init_search(); }); 207.47 +}); 207.48 +</script> 207.49 +<div id="main-nav"></div> 207.50 +<!-- window showing the filter options --> 207.51 +<div id="MSearchSelectWindow" 207.52 + onmouseover="return searchBox.OnSearchSelectShow()" 207.53 + onmouseout="return searchBox.OnSearchSelectHide()" 207.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 207.55 +</div> 207.56 + 207.57 +<!-- iframe showing the search results (closed by default) --> 207.58 +<div id="MSearchResultsWindow"> 207.59 +<iframe src="javascript:void(0)" frameborder="0" 207.60 + name="MSearchResults" id="MSearchResults"> 207.61 +</iframe> 207.62 +</div> 207.63 + 207.64 +</div><!-- top --> 207.65 +<div class="header"> 207.66 + <div class="summary"> 207.67 +<a href="#pub-attribs">Data Fields</a> </div> 207.68 + <div class="headertitle"> 207.69 +<div class="title">UcxBuffer Struct Reference</div> </div> 207.70 +</div><!--header--> 207.71 +<div class="contents"> 207.72 + 207.73 +<p>UCX Buffer. 207.74 + <a href="structUcxBuffer.html#details">More...</a></p> 207.75 + 207.76 +<p><code>#include <<a class="el" href="buffer_8h_source.html">buffer.h</a>></code></p> 207.77 +<table class="memberdecls"> 207.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 207.79 +Data Fields</h2></td></tr> 207.80 +<tr class="memitem:a1a5076e85acb84b715a53bc0f37fb721"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxBuffer.html#a1a5076e85acb84b715a53bc0f37fb721">space</a></td></tr> 207.81 +<tr class="memdesc:a1a5076e85acb84b715a53bc0f37fb721"><td class="mdescLeft"> </td><td class="mdescRight">A pointer to the buffer contents. <a href="#a1a5076e85acb84b715a53bc0f37fb721">More...</a><br /></td></tr> 207.82 +<tr class="separator:a1a5076e85acb84b715a53bc0f37fb721"><td class="memSeparator" colspan="2"> </td></tr> 207.83 +<tr class="memitem:a7a64288f002cf62b492e2ea49c79615c"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxBuffer.html#a7a64288f002cf62b492e2ea49c79615c">pos</a></td></tr> 207.84 +<tr class="memdesc:a7a64288f002cf62b492e2ea49c79615c"><td class="mdescLeft"> </td><td class="mdescRight">Current position of the buffer. <a href="#a7a64288f002cf62b492e2ea49c79615c">More...</a><br /></td></tr> 207.85 +<tr class="separator:a7a64288f002cf62b492e2ea49c79615c"><td class="memSeparator" colspan="2"> </td></tr> 207.86 +<tr class="memitem:a385661894f3cee9c549bfe07a8b316bf"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxBuffer.html#a385661894f3cee9c549bfe07a8b316bf">capacity</a></td></tr> 207.87 +<tr class="memdesc:a385661894f3cee9c549bfe07a8b316bf"><td class="mdescLeft"> </td><td class="mdescRight">Current capacity (i.e. <a href="#a385661894f3cee9c549bfe07a8b316bf">More...</a><br /></td></tr> 207.88 +<tr class="separator:a385661894f3cee9c549bfe07a8b316bf"><td class="memSeparator" colspan="2"> </td></tr> 207.89 +<tr class="memitem:aec0aea8325394951d5ad4a9fbb8e1ac7"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxBuffer.html#aec0aea8325394951d5ad4a9fbb8e1ac7">size</a></td></tr> 207.90 +<tr class="memdesc:aec0aea8325394951d5ad4a9fbb8e1ac7"><td class="mdescLeft"> </td><td class="mdescRight">Current size of the buffer content. <a href="#aec0aea8325394951d5ad4a9fbb8e1ac7">More...</a><br /></td></tr> 207.91 +<tr class="separator:aec0aea8325394951d5ad4a9fbb8e1ac7"><td class="memSeparator" colspan="2"> </td></tr> 207.92 +<tr class="memitem:ac642e07b0a03be5aac48eb4aa5bec2f7"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxBuffer.html#ac642e07b0a03be5aac48eb4aa5bec2f7">flags</a></td></tr> 207.93 +<tr class="memdesc:ac642e07b0a03be5aac48eb4aa5bec2f7"><td class="mdescLeft"> </td><td class="mdescRight">Flag register for buffer features. <a href="#ac642e07b0a03be5aac48eb4aa5bec2f7">More...</a><br /></td></tr> 207.94 +<tr class="separator:ac642e07b0a03be5aac48eb4aa5bec2f7"><td class="memSeparator" colspan="2"> </td></tr> 207.95 +</table> 207.96 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 207.97 +<div class="textblock"><p>UCX Buffer. </p> 207.98 +</div><h2 class="groupheader">Field Documentation</h2> 207.99 +<a id="a385661894f3cee9c549bfe07a8b316bf"></a> 207.100 +<h2 class="memtitle"><span class="permalink"><a href="#a385661894f3cee9c549bfe07a8b316bf">◆ </a></span>capacity</h2> 207.101 + 207.102 +<div class="memitem"> 207.103 +<div class="memproto"> 207.104 + <table class="memname"> 207.105 + <tr> 207.106 + <td class="memname">size_t UcxBuffer::capacity</td> 207.107 + </tr> 207.108 + </table> 207.109 +</div><div class="memdoc"> 207.110 + 207.111 +<p>Current capacity (i.e. </p> 207.112 +<p>maximum size) of the buffer. </p> 207.113 + 207.114 +</div> 207.115 +</div> 207.116 +<a id="ac642e07b0a03be5aac48eb4aa5bec2f7"></a> 207.117 +<h2 class="memtitle"><span class="permalink"><a href="#ac642e07b0a03be5aac48eb4aa5bec2f7">◆ </a></span>flags</h2> 207.118 + 207.119 +<div class="memitem"> 207.120 +<div class="memproto"> 207.121 + <table class="memname"> 207.122 + <tr> 207.123 + <td class="memname">int UcxBuffer::flags</td> 207.124 + </tr> 207.125 + </table> 207.126 +</div><div class="memdoc"> 207.127 + 207.128 +<p>Flag register for buffer features. </p> 207.129 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="buffer_8h.html#acc77c8ed7b26854f555d4a5d11e49ea2" title="No buffer features enabled (all flags cleared). ">UCX_BUFFER_DEFAULT</a> </dd> 207.130 +<dd> 207.131 +<a class="el" href="buffer_8h.html#a8bab11ad8a76719228b9ee91e2e45535" title="If this flag is enabled, the buffer will automatically free its contents. ">UCX_BUFFER_AUTOFREE</a> </dd> 207.132 +<dd> 207.133 +<a class="el" href="buffer_8h.html#a05f9565f2d04399168c3b1c152a632be" title="If this flag is enabled, the buffer will automatically extends its capacity. ">UCX_BUFFER_AUTOEXTEND</a> </dd></dl> 207.134 + 207.135 +</div> 207.136 +</div> 207.137 +<a id="a7a64288f002cf62b492e2ea49c79615c"></a> 207.138 +<h2 class="memtitle"><span class="permalink"><a href="#a7a64288f002cf62b492e2ea49c79615c">◆ </a></span>pos</h2> 207.139 + 207.140 +<div class="memitem"> 207.141 +<div class="memproto"> 207.142 + <table class="memname"> 207.143 + <tr> 207.144 + <td class="memname">size_t UcxBuffer::pos</td> 207.145 + </tr> 207.146 + </table> 207.147 +</div><div class="memdoc"> 207.148 + 207.149 +<p>Current position of the buffer. </p> 207.150 + 207.151 +</div> 207.152 +</div> 207.153 +<a id="aec0aea8325394951d5ad4a9fbb8e1ac7"></a> 207.154 +<h2 class="memtitle"><span class="permalink"><a href="#aec0aea8325394951d5ad4a9fbb8e1ac7">◆ </a></span>size</h2> 207.155 + 207.156 +<div class="memitem"> 207.157 +<div class="memproto"> 207.158 + <table class="memname"> 207.159 + <tr> 207.160 + <td class="memname">size_t UcxBuffer::size</td> 207.161 + </tr> 207.162 + </table> 207.163 +</div><div class="memdoc"> 207.164 + 207.165 +<p>Current size of the buffer content. </p> 207.166 + 207.167 +</div> 207.168 +</div> 207.169 +<a id="a1a5076e85acb84b715a53bc0f37fb721"></a> 207.170 +<h2 class="memtitle"><span class="permalink"><a href="#a1a5076e85acb84b715a53bc0f37fb721">◆ </a></span>space</h2> 207.171 + 207.172 +<div class="memitem"> 207.173 +<div class="memproto"> 207.174 + <table class="memname"> 207.175 + <tr> 207.176 + <td class="memname">char* UcxBuffer::space</td> 207.177 + </tr> 207.178 + </table> 207.179 +</div><div class="memdoc"> 207.180 + 207.181 +<p>A pointer to the buffer contents. </p> 207.182 + 207.183 +</div> 207.184 +</div> 207.185 +<hr/>The documentation for this struct was generated from the following file:<ul> 207.186 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="buffer_8h_source.html">buffer.h</a></li> 207.187 +</ul> 207.188 +</div><!-- contents --> 207.189 +<!-- start footer part --> 207.190 +<hr class="footer"/><address class="footer"><small> 207.191 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 207.192 +<img class="footer" src="doxygen.png" alt="doxygen"/> 207.193 +</a> 1.8.13 207.194 +</small></address> 207.195 +</body> 207.196 +</html>
208.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 208.2 +++ b/docs/api-2.1/structUcxKey.html Sat Feb 06 19:11:44 2021 +0100 208.3 @@ -0,0 +1,149 @@ 208.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 208.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 208.6 +<head> 208.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 208.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 208.9 +<meta name="generator" content="Doxygen 1.8.13"/> 208.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 208.11 +<title>ucx: UcxKey Struct Reference</title> 208.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 208.13 +<script type="text/javascript" src="jquery.js"></script> 208.14 +<script type="text/javascript" src="dynsections.js"></script> 208.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 208.16 +<script type="text/javascript" src="search/searchdata.js"></script> 208.17 +<script type="text/javascript" src="search/search.js"></script> 208.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 208.19 +</head> 208.20 +<body> 208.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 208.22 +<div id="titlearea"> 208.23 +<table cellspacing="0" cellpadding="0"> 208.24 + <tbody> 208.25 + <tr style="height: 56px;"> 208.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 208.27 + <td id="projectalign" style="padding-left: 0.5em;"> 208.28 + <div id="projectname">ucx 208.29 + </div> 208.30 + <div id="projectbrief">UAP Common Extensions</div> 208.31 + </td> 208.32 + </tr> 208.33 + </tbody> 208.34 +</table> 208.35 +</div> 208.36 +<!-- end header part --> 208.37 +<!-- Generated by Doxygen 1.8.13 --> 208.38 +<script type="text/javascript"> 208.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 208.40 +</script> 208.41 +<script type="text/javascript" src="menudata.js"></script> 208.42 +<script type="text/javascript" src="menu.js"></script> 208.43 +<script type="text/javascript"> 208.44 +$(function() { 208.45 + initMenu('',true,false,'search.php','Search'); 208.46 + $(document).ready(function() { init_search(); }); 208.47 +}); 208.48 +</script> 208.49 +<div id="main-nav"></div> 208.50 +<!-- window showing the filter options --> 208.51 +<div id="MSearchSelectWindow" 208.52 + onmouseover="return searchBox.OnSearchSelectShow()" 208.53 + onmouseout="return searchBox.OnSearchSelectHide()" 208.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 208.55 +</div> 208.56 + 208.57 +<!-- iframe showing the search results (closed by default) --> 208.58 +<div id="MSearchResultsWindow"> 208.59 +<iframe src="javascript:void(0)" frameborder="0" 208.60 + name="MSearchResults" id="MSearchResults"> 208.61 +</iframe> 208.62 +</div> 208.63 + 208.64 +</div><!-- top --> 208.65 +<div class="header"> 208.66 + <div class="summary"> 208.67 +<a href="#pub-attribs">Data Fields</a> </div> 208.68 + <div class="headertitle"> 208.69 +<div class="title">UcxKey Struct Reference</div> </div> 208.70 +</div><!--header--> 208.71 +<div class="contents"> 208.72 + 208.73 +<p>Structure to publicly denote a key of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. 208.74 + <a href="structUcxKey.html#details">More...</a></p> 208.75 + 208.76 +<p><code>#include <<a class="el" href="map_8h_source.html">map.h</a>></code></p> 208.77 +<table class="memberdecls"> 208.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 208.79 +Data Fields</h2></td></tr> 208.80 +<tr class="memitem:a6176109f25b34f3fa92bcfbc8ae7a88c"><td class="memItemLeft" align="right" valign="top">const void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxKey.html#a6176109f25b34f3fa92bcfbc8ae7a88c">data</a></td></tr> 208.81 +<tr class="memdesc:a6176109f25b34f3fa92bcfbc8ae7a88c"><td class="mdescLeft"> </td><td class="mdescRight">The key data. <a href="#a6176109f25b34f3fa92bcfbc8ae7a88c">More...</a><br /></td></tr> 208.82 +<tr class="separator:a6176109f25b34f3fa92bcfbc8ae7a88c"><td class="memSeparator" colspan="2"> </td></tr> 208.83 +<tr class="memitem:abef01de37f355688f2ac797d2c280683"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxKey.html#abef01de37f355688f2ac797d2c280683">len</a></td></tr> 208.84 +<tr class="memdesc:abef01de37f355688f2ac797d2c280683"><td class="mdescLeft"> </td><td class="mdescRight">The length of the key data. <a href="#abef01de37f355688f2ac797d2c280683">More...</a><br /></td></tr> 208.85 +<tr class="separator:abef01de37f355688f2ac797d2c280683"><td class="memSeparator" colspan="2"> </td></tr> 208.86 +<tr class="memitem:aac9d372ac34a4cbd8459e2b04e505752"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxKey.html#aac9d372ac34a4cbd8459e2b04e505752">hash</a></td></tr> 208.87 +<tr class="memdesc:aac9d372ac34a4cbd8459e2b04e505752"><td class="mdescLeft"> </td><td class="mdescRight">A cache for the hash value of the key data. <a href="#aac9d372ac34a4cbd8459e2b04e505752">More...</a><br /></td></tr> 208.88 +<tr class="separator:aac9d372ac34a4cbd8459e2b04e505752"><td class="memSeparator" colspan="2"> </td></tr> 208.89 +</table> 208.90 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 208.91 +<div class="textblock"><p>Structure to publicly denote a key of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. </p> 208.92 +</div><h2 class="groupheader">Field Documentation</h2> 208.93 +<a id="a6176109f25b34f3fa92bcfbc8ae7a88c"></a> 208.94 +<h2 class="memtitle"><span class="permalink"><a href="#a6176109f25b34f3fa92bcfbc8ae7a88c">◆ </a></span>data</h2> 208.95 + 208.96 +<div class="memitem"> 208.97 +<div class="memproto"> 208.98 + <table class="memname"> 208.99 + <tr> 208.100 + <td class="memname">const void* UcxKey::data</td> 208.101 + </tr> 208.102 + </table> 208.103 +</div><div class="memdoc"> 208.104 + 208.105 +<p>The key data. </p> 208.106 + 208.107 +</div> 208.108 +</div> 208.109 +<a id="aac9d372ac34a4cbd8459e2b04e505752"></a> 208.110 +<h2 class="memtitle"><span class="permalink"><a href="#aac9d372ac34a4cbd8459e2b04e505752">◆ </a></span>hash</h2> 208.111 + 208.112 +<div class="memitem"> 208.113 +<div class="memproto"> 208.114 + <table class="memname"> 208.115 + <tr> 208.116 + <td class="memname">int UcxKey::hash</td> 208.117 + </tr> 208.118 + </table> 208.119 +</div><div class="memdoc"> 208.120 + 208.121 +<p>A cache for the hash value of the key data. </p> 208.122 + 208.123 +</div> 208.124 +</div> 208.125 +<a id="abef01de37f355688f2ac797d2c280683"></a> 208.126 +<h2 class="memtitle"><span class="permalink"><a href="#abef01de37f355688f2ac797d2c280683">◆ </a></span>len</h2> 208.127 + 208.128 +<div class="memitem"> 208.129 +<div class="memproto"> 208.130 + <table class="memname"> 208.131 + <tr> 208.132 + <td class="memname">size_t UcxKey::len</td> 208.133 + </tr> 208.134 + </table> 208.135 +</div><div class="memdoc"> 208.136 + 208.137 +<p>The length of the key data. </p> 208.138 + 208.139 +</div> 208.140 +</div> 208.141 +<hr/>The documentation for this struct was generated from the following file:<ul> 208.142 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="map_8h_source.html">map.h</a></li> 208.143 +</ul> 208.144 +</div><!-- contents --> 208.145 +<!-- start footer part --> 208.146 +<hr class="footer"/><address class="footer"><small> 208.147 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 208.148 +<img class="footer" src="doxygen.png" alt="doxygen"/> 208.149 +</a> 1.8.13 208.150 +</small></address> 208.151 +</body> 208.152 +</html>
209.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 209.2 +++ b/docs/api-2.1/structUcxList.html Sat Feb 06 19:11:44 2021 +0100 209.3 @@ -0,0 +1,103 @@ 209.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 209.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 209.6 +<head> 209.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 209.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 209.9 +<meta name="generator" content="Doxygen 1.8.13"/> 209.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 209.11 +<title>ucx: UcxList Struct Reference</title> 209.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 209.13 +<script type="text/javascript" src="jquery.js"></script> 209.14 +<script type="text/javascript" src="dynsections.js"></script> 209.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 209.16 +<script type="text/javascript" src="search/searchdata.js"></script> 209.17 +<script type="text/javascript" src="search/search.js"></script> 209.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 209.19 +</head> 209.20 +<body> 209.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 209.22 +<div id="titlearea"> 209.23 +<table cellspacing="0" cellpadding="0"> 209.24 + <tbody> 209.25 + <tr style="height: 56px;"> 209.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 209.27 + <td id="projectalign" style="padding-left: 0.5em;"> 209.28 + <div id="projectname">ucx 209.29 + </div> 209.30 + <div id="projectbrief">UAP Common Extensions</div> 209.31 + </td> 209.32 + </tr> 209.33 + </tbody> 209.34 +</table> 209.35 +</div> 209.36 +<!-- end header part --> 209.37 +<!-- Generated by Doxygen 1.8.13 --> 209.38 +<script type="text/javascript"> 209.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 209.40 +</script> 209.41 +<script type="text/javascript" src="menudata.js"></script> 209.42 +<script type="text/javascript" src="menu.js"></script> 209.43 +<script type="text/javascript"> 209.44 +$(function() { 209.45 + initMenu('',true,false,'search.php','Search'); 209.46 + $(document).ready(function() { init_search(); }); 209.47 +}); 209.48 +</script> 209.49 +<div id="main-nav"></div> 209.50 +<!-- window showing the filter options --> 209.51 +<div id="MSearchSelectWindow" 209.52 + onmouseover="return searchBox.OnSearchSelectShow()" 209.53 + onmouseout="return searchBox.OnSearchSelectHide()" 209.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 209.55 +</div> 209.56 + 209.57 +<!-- iframe showing the search results (closed by default) --> 209.58 +<div id="MSearchResultsWindow"> 209.59 +<iframe src="javascript:void(0)" frameborder="0" 209.60 + name="MSearchResults" id="MSearchResults"> 209.61 +</iframe> 209.62 +</div> 209.63 + 209.64 +</div><!-- top --> 209.65 +<div class="header"> 209.66 + <div class="summary"> 209.67 +<a href="#pub-attribs">Data Fields</a> </div> 209.68 + <div class="headertitle"> 209.69 +<div class="title">UcxList Struct Reference</div> </div> 209.70 +</div><!--header--> 209.71 +<div class="contents"> 209.72 + 209.73 +<p>UCX list structure. 209.74 + <a href="structUcxList.html#details">More...</a></p> 209.75 + 209.76 +<p><code>#include <<a class="el" href="list_8h_source.html">list.h</a>></code></p> 209.77 +<table class="memberdecls"> 209.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 209.79 +Data Fields</h2></td></tr> 209.80 +<tr class="memitem:a4a44905121b6fc2a088084ce578a9ea2"><td class="memItemLeft" align="right" valign="top"><a id="a4a44905121b6fc2a088084ce578a9ea2"></a> 209.81 +void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxList.html#a4a44905121b6fc2a088084ce578a9ea2">data</a></td></tr> 209.82 +<tr class="memdesc:a4a44905121b6fc2a088084ce578a9ea2"><td class="mdescLeft"> </td><td class="mdescRight">List element payload. <br /></td></tr> 209.83 +<tr class="separator:a4a44905121b6fc2a088084ce578a9ea2"><td class="memSeparator" colspan="2"> </td></tr> 209.84 +<tr class="memitem:a82a1818f1abf765b026fa91478569a8f"><td class="memItemLeft" align="right" valign="top"><a id="a82a1818f1abf765b026fa91478569a8f"></a> 209.85 +<a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxList.html#a82a1818f1abf765b026fa91478569a8f">next</a></td></tr> 209.86 +<tr class="memdesc:a82a1818f1abf765b026fa91478569a8f"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the next list element or <code>NULL</code>, if this is the last element. <br /></td></tr> 209.87 +<tr class="separator:a82a1818f1abf765b026fa91478569a8f"><td class="memSeparator" colspan="2"> </td></tr> 209.88 +<tr class="memitem:a0f1fddce9088b9c1414745d0b1b5c08b"><td class="memItemLeft" align="right" valign="top"><a id="a0f1fddce9088b9c1414745d0b1b5c08b"></a> 209.89 +<a class="el" href="structUcxList.html">UcxList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxList.html#a0f1fddce9088b9c1414745d0b1b5c08b">prev</a></td></tr> 209.90 +<tr class="memdesc:a0f1fddce9088b9c1414745d0b1b5c08b"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the previous list element or <code>NULL</code>, if this is the first element. <br /></td></tr> 209.91 +<tr class="separator:a0f1fddce9088b9c1414745d0b1b5c08b"><td class="memSeparator" colspan="2"> </td></tr> 209.92 +</table> 209.93 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 209.94 +<div class="textblock"><p>UCX list structure. </p> 209.95 +</div><hr/>The documentation for this struct was generated from the following file:<ul> 209.96 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="list_8h_source.html">list.h</a></li> 209.97 +</ul> 209.98 +</div><!-- contents --> 209.99 +<!-- start footer part --> 209.100 +<hr class="footer"/><address class="footer"><small> 209.101 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 209.102 +<img class="footer" src="doxygen.png" alt="doxygen"/> 209.103 +</a> 1.8.13 209.104 +</small></address> 209.105 +</body> 209.106 +</html>
210.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 210.2 +++ b/docs/api-2.1/structUcxLogger.html Sat Feb 06 19:11:44 2021 +0100 210.3 @@ -0,0 +1,213 @@ 210.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 210.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 210.6 +<head> 210.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 210.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 210.9 +<meta name="generator" content="Doxygen 1.8.13"/> 210.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 210.11 +<title>ucx: UcxLogger Struct Reference</title> 210.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 210.13 +<script type="text/javascript" src="jquery.js"></script> 210.14 +<script type="text/javascript" src="dynsections.js"></script> 210.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 210.16 +<script type="text/javascript" src="search/searchdata.js"></script> 210.17 +<script type="text/javascript" src="search/search.js"></script> 210.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 210.19 +</head> 210.20 +<body> 210.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 210.22 +<div id="titlearea"> 210.23 +<table cellspacing="0" cellpadding="0"> 210.24 + <tbody> 210.25 + <tr style="height: 56px;"> 210.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 210.27 + <td id="projectalign" style="padding-left: 0.5em;"> 210.28 + <div id="projectname">ucx 210.29 + </div> 210.30 + <div id="projectbrief">UAP Common Extensions</div> 210.31 + </td> 210.32 + </tr> 210.33 + </tbody> 210.34 +</table> 210.35 +</div> 210.36 +<!-- end header part --> 210.37 +<!-- Generated by Doxygen 1.8.13 --> 210.38 +<script type="text/javascript"> 210.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 210.40 +</script> 210.41 +<script type="text/javascript" src="menudata.js"></script> 210.42 +<script type="text/javascript" src="menu.js"></script> 210.43 +<script type="text/javascript"> 210.44 +$(function() { 210.45 + initMenu('',true,false,'search.php','Search'); 210.46 + $(document).ready(function() { init_search(); }); 210.47 +}); 210.48 +</script> 210.49 +<div id="main-nav"></div> 210.50 +<!-- window showing the filter options --> 210.51 +<div id="MSearchSelectWindow" 210.52 + onmouseover="return searchBox.OnSearchSelectShow()" 210.53 + onmouseout="return searchBox.OnSearchSelectHide()" 210.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 210.55 +</div> 210.56 + 210.57 +<!-- iframe showing the search results (closed by default) --> 210.58 +<div id="MSearchResultsWindow"> 210.59 +<iframe src="javascript:void(0)" frameborder="0" 210.60 + name="MSearchResults" id="MSearchResults"> 210.61 +</iframe> 210.62 +</div> 210.63 + 210.64 +</div><!-- top --> 210.65 +<div class="header"> 210.66 + <div class="summary"> 210.67 +<a href="#pub-attribs">Data Fields</a> </div> 210.68 + <div class="headertitle"> 210.69 +<div class="title">UcxLogger Struct Reference</div> </div> 210.70 +</div><!--header--> 210.71 +<div class="contents"> 210.72 + 210.73 +<p>The UCX Logger object. 210.74 + <a href="structUcxLogger.html#details">More...</a></p> 210.75 + 210.76 +<p><code>#include <<a class="el" href="logging_8h_source.html">logging.h</a>></code></p> 210.77 +<table class="memberdecls"> 210.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 210.79 +Data Fields</h2></td></tr> 210.80 +<tr class="memitem:a33fddf4791e8d49e479ecc78bf5d1b9e"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxLogger.html#a33fddf4791e8d49e479ecc78bf5d1b9e">stream</a></td></tr> 210.81 +<tr class="memdesc:a33fddf4791e8d49e479ecc78bf5d1b9e"><td class="mdescLeft"> </td><td class="mdescRight">The stream this logger writes its messages to. <a href="#a33fddf4791e8d49e479ecc78bf5d1b9e">More...</a><br /></td></tr> 210.82 +<tr class="separator:a33fddf4791e8d49e479ecc78bf5d1b9e"><td class="memSeparator" colspan="2"> </td></tr> 210.83 +<tr class="memitem:ada13bba090a9dc4f8d6cd9be73c60930"><td class="memItemLeft" align="right" valign="top"><a class="el" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxLogger.html#ada13bba090a9dc4f8d6cd9be73c60930">writer</a></td></tr> 210.84 +<tr class="memdesc:ada13bba090a9dc4f8d6cd9be73c60930"><td class="mdescLeft"> </td><td class="mdescRight">The write function that shall be used. <a href="#ada13bba090a9dc4f8d6cd9be73c60930">More...</a><br /></td></tr> 210.85 +<tr class="separator:ada13bba090a9dc4f8d6cd9be73c60930"><td class="memSeparator" colspan="2"> </td></tr> 210.86 +<tr class="memitem:a086f75df0f6c81ec491f25c0a4d9262b"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxLogger.html#a086f75df0f6c81ec491f25c0a4d9262b">dateformat</a></td></tr> 210.87 +<tr class="memdesc:a086f75df0f6c81ec491f25c0a4d9262b"><td class="mdescLeft"> </td><td class="mdescRight">The date format for timestamp outputs including the delimiter (default: <code>"%F %T %z "</code>). <a href="#a086f75df0f6c81ec491f25c0a4d9262b">More...</a><br /></td></tr> 210.88 +<tr class="separator:a086f75df0f6c81ec491f25c0a4d9262b"><td class="memSeparator" colspan="2"> </td></tr> 210.89 +<tr class="memitem:a2e0ee94c25b2307096c7970280d189cd"><td class="memItemLeft" align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxLogger.html#a2e0ee94c25b2307096c7970280d189cd">level</a></td></tr> 210.90 +<tr class="memdesc:a2e0ee94c25b2307096c7970280d189cd"><td class="mdescLeft"> </td><td class="mdescRight">The level, this logger operates on. <a href="#a2e0ee94c25b2307096c7970280d189cd">More...</a><br /></td></tr> 210.91 +<tr class="separator:a2e0ee94c25b2307096c7970280d189cd"><td class="memSeparator" colspan="2"> </td></tr> 210.92 +<tr class="memitem:a1de0db2e02dcf03366268f6943f8b97c"><td class="memItemLeft" align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxLogger.html#a1de0db2e02dcf03366268f6943f8b97c">mask</a></td></tr> 210.93 +<tr class="memdesc:a1de0db2e02dcf03366268f6943f8b97c"><td class="mdescLeft"> </td><td class="mdescRight">A configuration mask for automatic output. <a href="#a1de0db2e02dcf03366268f6943f8b97c">More...</a><br /></td></tr> 210.94 +<tr class="separator:a1de0db2e02dcf03366268f6943f8b97c"><td class="memSeparator" colspan="2"> </td></tr> 210.95 +<tr class="memitem:a187129f7bc6e5064b3d92a5f1217f396"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMap.html">UcxMap</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxLogger.html#a187129f7bc6e5064b3d92a5f1217f396">levels</a></td></tr> 210.96 +<tr class="memdesc:a187129f7bc6e5064b3d92a5f1217f396"><td class="mdescLeft"> </td><td class="mdescRight">A map of valid log levels for this logger. <a href="#a187129f7bc6e5064b3d92a5f1217f396">More...</a><br /></td></tr> 210.97 +<tr class="separator:a187129f7bc6e5064b3d92a5f1217f396"><td class="memSeparator" colspan="2"> </td></tr> 210.98 +</table> 210.99 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 210.100 +<div class="textblock"><p>The UCX Logger object. </p> 210.101 +</div><h2 class="groupheader">Field Documentation</h2> 210.102 +<a id="a086f75df0f6c81ec491f25c0a4d9262b"></a> 210.103 +<h2 class="memtitle"><span class="permalink"><a href="#a086f75df0f6c81ec491f25c0a4d9262b">◆ </a></span>dateformat</h2> 210.104 + 210.105 +<div class="memitem"> 210.106 +<div class="memproto"> 210.107 + <table class="memname"> 210.108 + <tr> 210.109 + <td class="memname">char* UcxLogger::dateformat</td> 210.110 + </tr> 210.111 + </table> 210.112 +</div><div class="memdoc"> 210.113 + 210.114 +<p>The date format for timestamp outputs including the delimiter (default: <code>"%F %T %z "</code>). </p> 210.115 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="logging_8h.html#a38607008268b4f776ee500fb95d2e823" title="Output flag for the timestmap. ">UCX_LOGGER_TIMESTAMP</a> </dd></dl> 210.116 + 210.117 +</div> 210.118 +</div> 210.119 +<a id="a2e0ee94c25b2307096c7970280d189cd"></a> 210.120 +<h2 class="memtitle"><span class="permalink"><a href="#a2e0ee94c25b2307096c7970280d189cd">◆ </a></span>level</h2> 210.121 + 210.122 +<div class="memitem"> 210.123 +<div class="memproto"> 210.124 + <table class="memname"> 210.125 + <tr> 210.126 + <td class="memname">unsigned int UcxLogger::level</td> 210.127 + </tr> 210.128 + </table> 210.129 +</div><div class="memdoc"> 210.130 + 210.131 +<p>The level, this logger operates on. </p> 210.132 +<p>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. </p> 210.133 + 210.134 +</div> 210.135 +</div> 210.136 +<a id="a187129f7bc6e5064b3d92a5f1217f396"></a> 210.137 +<h2 class="memtitle"><span class="permalink"><a href="#a187129f7bc6e5064b3d92a5f1217f396">◆ </a></span>levels</h2> 210.138 + 210.139 +<div class="memitem"> 210.140 +<div class="memproto"> 210.141 + <table class="memname"> 210.142 + <tr> 210.143 + <td class="memname"><a class="el" href="structUcxMap.html">UcxMap</a>* UcxLogger::levels</td> 210.144 + </tr> 210.145 + </table> 210.146 +</div><div class="memdoc"> 210.147 + 210.148 +<p>A map of valid log levels for this logger. </p> 210.149 +<p>The keys represent all valid log levels and the values provide string representations, that are used, if the UCX_LOGGER_LEVEL flag is set.</p> 210.150 +<p>The exact data types are <code>unsigned int</code> for the key and <code>const char*</code> for the value.</p> 210.151 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="logging_8h.html#aee18bc20e58ffb69910121512c350839" title="Output flag for the log level. ">UCX_LOGGER_LEVEL</a> </dd></dl> 210.152 + 210.153 +</div> 210.154 +</div> 210.155 +<a id="a1de0db2e02dcf03366268f6943f8b97c"></a> 210.156 +<h2 class="memtitle"><span class="permalink"><a href="#a1de0db2e02dcf03366268f6943f8b97c">◆ </a></span>mask</h2> 210.157 + 210.158 +<div class="memitem"> 210.159 +<div class="memproto"> 210.160 + <table class="memname"> 210.161 + <tr> 210.162 + <td class="memname">unsigned int UcxLogger::mask</td> 210.163 + </tr> 210.164 + </table> 210.165 +</div><div class="memdoc"> 210.166 + 210.167 +<p>A configuration mask for automatic output. </p> 210.168 +<p>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. </p> 210.169 + 210.170 +</div> 210.171 +</div> 210.172 +<a id="a33fddf4791e8d49e479ecc78bf5d1b9e"></a> 210.173 +<h2 class="memtitle"><span class="permalink"><a href="#a33fddf4791e8d49e479ecc78bf5d1b9e">◆ </a></span>stream</h2> 210.174 + 210.175 +<div class="memitem"> 210.176 +<div class="memproto"> 210.177 + <table class="memname"> 210.178 + <tr> 210.179 + <td class="memname">void* UcxLogger::stream</td> 210.180 + </tr> 210.181 + </table> 210.182 +</div><div class="memdoc"> 210.183 + 210.184 +<p>The stream this logger writes its messages to. </p> 210.185 + 210.186 +</div> 210.187 +</div> 210.188 +<a id="ada13bba090a9dc4f8d6cd9be73c60930"></a> 210.189 +<h2 class="memtitle"><span class="permalink"><a href="#ada13bba090a9dc4f8d6cd9be73c60930">◆ </a></span>writer</h2> 210.190 + 210.191 +<div class="memitem"> 210.192 +<div class="memproto"> 210.193 + <table class="memname"> 210.194 + <tr> 210.195 + <td class="memname"><a class="el" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a> UcxLogger::writer</td> 210.196 + </tr> 210.197 + </table> 210.198 +</div><div class="memdoc"> 210.199 + 210.200 +<p>The write function that shall be used. </p> 210.201 +<p>For standard file or stdout loggers this might be standard fwrite (default). </p> 210.202 + 210.203 +</div> 210.204 +</div> 210.205 +<hr/>The documentation for this struct was generated from the following file:<ul> 210.206 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="logging_8h_source.html">logging.h</a></li> 210.207 +</ul> 210.208 +</div><!-- contents --> 210.209 +<!-- start footer part --> 210.210 +<hr class="footer"/><address class="footer"><small> 210.211 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 210.212 +<img class="footer" src="doxygen.png" alt="doxygen"/> 210.213 +</a> 1.8.13 210.214 +</small></address> 210.215 +</body> 210.216 +</html>
211.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 211.2 +++ b/docs/api-2.1/structUcxMap.html Sat Feb 06 19:11:44 2021 +0100 211.3 @@ -0,0 +1,168 @@ 211.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 211.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 211.6 +<head> 211.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 211.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 211.9 +<meta name="generator" content="Doxygen 1.8.13"/> 211.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 211.11 +<title>ucx: UcxMap Struct Reference</title> 211.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 211.13 +<script type="text/javascript" src="jquery.js"></script> 211.14 +<script type="text/javascript" src="dynsections.js"></script> 211.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 211.16 +<script type="text/javascript" src="search/searchdata.js"></script> 211.17 +<script type="text/javascript" src="search/search.js"></script> 211.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 211.19 +</head> 211.20 +<body> 211.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 211.22 +<div id="titlearea"> 211.23 +<table cellspacing="0" cellpadding="0"> 211.24 + <tbody> 211.25 + <tr style="height: 56px;"> 211.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 211.27 + <td id="projectalign" style="padding-left: 0.5em;"> 211.28 + <div id="projectname">ucx 211.29 + </div> 211.30 + <div id="projectbrief">UAP Common Extensions</div> 211.31 + </td> 211.32 + </tr> 211.33 + </tbody> 211.34 +</table> 211.35 +</div> 211.36 +<!-- end header part --> 211.37 +<!-- Generated by Doxygen 1.8.13 --> 211.38 +<script type="text/javascript"> 211.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 211.40 +</script> 211.41 +<script type="text/javascript" src="menudata.js"></script> 211.42 +<script type="text/javascript" src="menu.js"></script> 211.43 +<script type="text/javascript"> 211.44 +$(function() { 211.45 + initMenu('',true,false,'search.php','Search'); 211.46 + $(document).ready(function() { init_search(); }); 211.47 +}); 211.48 +</script> 211.49 +<div id="main-nav"></div> 211.50 +<!-- window showing the filter options --> 211.51 +<div id="MSearchSelectWindow" 211.52 + onmouseover="return searchBox.OnSearchSelectShow()" 211.53 + onmouseout="return searchBox.OnSearchSelectHide()" 211.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 211.55 +</div> 211.56 + 211.57 +<!-- iframe showing the search results (closed by default) --> 211.58 +<div id="MSearchResultsWindow"> 211.59 +<iframe src="javascript:void(0)" frameborder="0" 211.60 + name="MSearchResults" id="MSearchResults"> 211.61 +</iframe> 211.62 +</div> 211.63 + 211.64 +</div><!-- top --> 211.65 +<div class="header"> 211.66 + <div class="summary"> 211.67 +<a href="#pub-attribs">Data Fields</a> </div> 211.68 + <div class="headertitle"> 211.69 +<div class="title">UcxMap Struct Reference</div> </div> 211.70 +</div><!--header--> 211.71 +<div class="contents"> 211.72 + 211.73 +<p>Structure for the UCX map. 211.74 + <a href="structUcxMap.html#details">More...</a></p> 211.75 + 211.76 +<p><code>#include <<a class="el" href="map_8h_source.html">map.h</a>></code></p> 211.77 +<table class="memberdecls"> 211.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 211.79 +Data Fields</h2></td></tr> 211.80 +<tr class="memitem:a531f3e481c1c331cf037b916192e974d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMap.html#a531f3e481c1c331cf037b916192e974d">allocator</a></td></tr> 211.81 +<tr class="memdesc:a531f3e481c1c331cf037b916192e974d"><td class="mdescLeft"> </td><td class="mdescRight">An allocator that is used for the map elements. <a href="#a531f3e481c1c331cf037b916192e974d">More...</a><br /></td></tr> 211.82 +<tr class="separator:a531f3e481c1c331cf037b916192e974d"><td class="memSeparator" colspan="2"> </td></tr> 211.83 +<tr class="memitem:a5792b5037c4f77ea3cb144b66c9b8790"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMapElement.html">UcxMapElement</a> ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790">map</a></td></tr> 211.84 +<tr class="memdesc:a5792b5037c4f77ea3cb144b66c9b8790"><td class="mdescLeft"> </td><td class="mdescRight">The array of map element lists. <a href="#a5792b5037c4f77ea3cb144b66c9b8790">More...</a><br /></td></tr> 211.85 +<tr class="separator:a5792b5037c4f77ea3cb144b66c9b8790"><td class="memSeparator" colspan="2"> </td></tr> 211.86 +<tr class="memitem:afe120846b26d99580a7ff1276464e838"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMap.html#afe120846b26d99580a7ff1276464e838">size</a></td></tr> 211.87 +<tr class="memdesc:afe120846b26d99580a7ff1276464e838"><td class="mdescLeft"> </td><td class="mdescRight">The size of the map is the length of the element list array. <a href="#afe120846b26d99580a7ff1276464e838">More...</a><br /></td></tr> 211.88 +<tr class="separator:afe120846b26d99580a7ff1276464e838"><td class="memSeparator" colspan="2"> </td></tr> 211.89 +<tr class="memitem:a14e9163f71f6c014dfa2103de70ae9cd"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMap.html#a14e9163f71f6c014dfa2103de70ae9cd">count</a></td></tr> 211.90 +<tr class="memdesc:a14e9163f71f6c014dfa2103de70ae9cd"><td class="mdescLeft"> </td><td class="mdescRight">The count of elements currently stored in this map. <a href="#a14e9163f71f6c014dfa2103de70ae9cd">More...</a><br /></td></tr> 211.91 +<tr class="separator:a14e9163f71f6c014dfa2103de70ae9cd"><td class="memSeparator" colspan="2"> </td></tr> 211.92 +</table> 211.93 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 211.94 +<div class="textblock"><p>Structure for the UCX map. </p> 211.95 +</div><h2 class="groupheader">Field Documentation</h2> 211.96 +<a id="a531f3e481c1c331cf037b916192e974d"></a> 211.97 +<h2 class="memtitle"><span class="permalink"><a href="#a531f3e481c1c331cf037b916192e974d">◆ </a></span>allocator</h2> 211.98 + 211.99 +<div class="memitem"> 211.100 +<div class="memproto"> 211.101 + <table class="memname"> 211.102 + <tr> 211.103 + <td class="memname"><a class="el" href="structUcxAllocator.html">UcxAllocator</a>* UcxMap::allocator</td> 211.104 + </tr> 211.105 + </table> 211.106 +</div><div class="memdoc"> 211.107 + 211.108 +<p>An allocator that is used for the map elements. </p> 211.109 + 211.110 +</div> 211.111 +</div> 211.112 +<a id="a14e9163f71f6c014dfa2103de70ae9cd"></a> 211.113 +<h2 class="memtitle"><span class="permalink"><a href="#a14e9163f71f6c014dfa2103de70ae9cd">◆ </a></span>count</h2> 211.114 + 211.115 +<div class="memitem"> 211.116 +<div class="memproto"> 211.117 + <table class="memname"> 211.118 + <tr> 211.119 + <td class="memname">size_t UcxMap::count</td> 211.120 + </tr> 211.121 + </table> 211.122 +</div><div class="memdoc"> 211.123 + 211.124 +<p>The count of elements currently stored in this map. </p> 211.125 + 211.126 +</div> 211.127 +</div> 211.128 +<a id="a5792b5037c4f77ea3cb144b66c9b8790"></a> 211.129 +<h2 class="memtitle"><span class="permalink"><a href="#a5792b5037c4f77ea3cb144b66c9b8790">◆ </a></span>map</h2> 211.130 + 211.131 +<div class="memitem"> 211.132 +<div class="memproto"> 211.133 + <table class="memname"> 211.134 + <tr> 211.135 + <td class="memname"><a class="el" href="structUcxMapElement.html">UcxMapElement</a>** UcxMap::map</td> 211.136 + </tr> 211.137 + </table> 211.138 +</div><div class="memdoc"> 211.139 + 211.140 +<p>The array of map element lists. </p> 211.141 + 211.142 +</div> 211.143 +</div> 211.144 +<a id="afe120846b26d99580a7ff1276464e838"></a> 211.145 +<h2 class="memtitle"><span class="permalink"><a href="#afe120846b26d99580a7ff1276464e838">◆ </a></span>size</h2> 211.146 + 211.147 +<div class="memitem"> 211.148 +<div class="memproto"> 211.149 + <table class="memname"> 211.150 + <tr> 211.151 + <td class="memname">size_t UcxMap::size</td> 211.152 + </tr> 211.153 + </table> 211.154 +</div><div class="memdoc"> 211.155 + 211.156 +<p>The size of the map is the length of the element list array. </p> 211.157 + 211.158 +</div> 211.159 +</div> 211.160 +<hr/>The documentation for this struct was generated from the following file:<ul> 211.161 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="map_8h_source.html">map.h</a></li> 211.162 +</ul> 211.163 +</div><!-- contents --> 211.164 +<!-- start footer part --> 211.165 +<hr class="footer"/><address class="footer"><small> 211.166 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 211.167 +<img class="footer" src="doxygen.png" alt="doxygen"/> 211.168 +</a> 1.8.13 211.169 +</small></address> 211.170 +</body> 211.171 +</html>
212.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 212.2 +++ b/docs/api-2.1/structUcxMapElement.html Sat Feb 06 19:11:44 2021 +0100 212.3 @@ -0,0 +1,149 @@ 212.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 212.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 212.6 +<head> 212.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 212.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 212.9 +<meta name="generator" content="Doxygen 1.8.13"/> 212.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 212.11 +<title>ucx: UcxMapElement Struct Reference</title> 212.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 212.13 +<script type="text/javascript" src="jquery.js"></script> 212.14 +<script type="text/javascript" src="dynsections.js"></script> 212.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 212.16 +<script type="text/javascript" src="search/searchdata.js"></script> 212.17 +<script type="text/javascript" src="search/search.js"></script> 212.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 212.19 +</head> 212.20 +<body> 212.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 212.22 +<div id="titlearea"> 212.23 +<table cellspacing="0" cellpadding="0"> 212.24 + <tbody> 212.25 + <tr style="height: 56px;"> 212.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 212.27 + <td id="projectalign" style="padding-left: 0.5em;"> 212.28 + <div id="projectname">ucx 212.29 + </div> 212.30 + <div id="projectbrief">UAP Common Extensions</div> 212.31 + </td> 212.32 + </tr> 212.33 + </tbody> 212.34 +</table> 212.35 +</div> 212.36 +<!-- end header part --> 212.37 +<!-- Generated by Doxygen 1.8.13 --> 212.38 +<script type="text/javascript"> 212.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 212.40 +</script> 212.41 +<script type="text/javascript" src="menudata.js"></script> 212.42 +<script type="text/javascript" src="menu.js"></script> 212.43 +<script type="text/javascript"> 212.44 +$(function() { 212.45 + initMenu('',true,false,'search.php','Search'); 212.46 + $(document).ready(function() { init_search(); }); 212.47 +}); 212.48 +</script> 212.49 +<div id="main-nav"></div> 212.50 +<!-- window showing the filter options --> 212.51 +<div id="MSearchSelectWindow" 212.52 + onmouseover="return searchBox.OnSearchSelectShow()" 212.53 + onmouseout="return searchBox.OnSearchSelectHide()" 212.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 212.55 +</div> 212.56 + 212.57 +<!-- iframe showing the search results (closed by default) --> 212.58 +<div id="MSearchResultsWindow"> 212.59 +<iframe src="javascript:void(0)" frameborder="0" 212.60 + name="MSearchResults" id="MSearchResults"> 212.61 +</iframe> 212.62 +</div> 212.63 + 212.64 +</div><!-- top --> 212.65 +<div class="header"> 212.66 + <div class="summary"> 212.67 +<a href="#pub-attribs">Data Fields</a> </div> 212.68 + <div class="headertitle"> 212.69 +<div class="title">UcxMapElement Struct Reference</div> </div> 212.70 +</div><!--header--> 212.71 +<div class="contents"> 212.72 + 212.73 +<p>Structure for an element of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. 212.74 + <a href="structUcxMapElement.html#details">More...</a></p> 212.75 + 212.76 +<p><code>#include <<a class="el" href="map_8h_source.html">map.h</a>></code></p> 212.77 +<table class="memberdecls"> 212.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 212.79 +Data Fields</h2></td></tr> 212.80 +<tr class="memitem:abbd7f3bf5beef370f702d2d5bb07733c"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMapElement.html#abbd7f3bf5beef370f702d2d5bb07733c">data</a></td></tr> 212.81 +<tr class="memdesc:abbd7f3bf5beef370f702d2d5bb07733c"><td class="mdescLeft"> </td><td class="mdescRight">The value data. <a href="#abbd7f3bf5beef370f702d2d5bb07733c">More...</a><br /></td></tr> 212.82 +<tr class="separator:abbd7f3bf5beef370f702d2d5bb07733c"><td class="memSeparator" colspan="2"> </td></tr> 212.83 +<tr class="memitem:a99fe8188b0889201d70ff5f922deef51"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMapElement.html">UcxMapElement</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMapElement.html#a99fe8188b0889201d70ff5f922deef51">next</a></td></tr> 212.84 +<tr class="memdesc:a99fe8188b0889201d70ff5f922deef51"><td class="mdescLeft"> </td><td class="mdescRight">A pointer to the next element in the current list. <a href="#a99fe8188b0889201d70ff5f922deef51">More...</a><br /></td></tr> 212.85 +<tr class="separator:a99fe8188b0889201d70ff5f922deef51"><td class="memSeparator" colspan="2"> </td></tr> 212.86 +<tr class="memitem:aa446141b708e106e2c8de1303318187c"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="structUcxMapKey.html">UcxMapKey</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMapElement.html#aa446141b708e106e2c8de1303318187c">key</a></td></tr> 212.87 +<tr class="memdesc:aa446141b708e106e2c8de1303318187c"><td class="mdescLeft"> </td><td class="mdescRight">The corresponding key. <a href="#aa446141b708e106e2c8de1303318187c">More...</a><br /></td></tr> 212.88 +<tr class="separator:aa446141b708e106e2c8de1303318187c"><td class="memSeparator" colspan="2"> </td></tr> 212.89 +</table> 212.90 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 212.91 +<div class="textblock"><p>Structure for an element of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. </p> 212.92 +</div><h2 class="groupheader">Field Documentation</h2> 212.93 +<a id="abbd7f3bf5beef370f702d2d5bb07733c"></a> 212.94 +<h2 class="memtitle"><span class="permalink"><a href="#abbd7f3bf5beef370f702d2d5bb07733c">◆ </a></span>data</h2> 212.95 + 212.96 +<div class="memitem"> 212.97 +<div class="memproto"> 212.98 + <table class="memname"> 212.99 + <tr> 212.100 + <td class="memname">void* UcxMapElement::data</td> 212.101 + </tr> 212.102 + </table> 212.103 +</div><div class="memdoc"> 212.104 + 212.105 +<p>The value data. </p> 212.106 + 212.107 +</div> 212.108 +</div> 212.109 +<a id="aa446141b708e106e2c8de1303318187c"></a> 212.110 +<h2 class="memtitle"><span class="permalink"><a href="#aa446141b708e106e2c8de1303318187c">◆ </a></span>key</h2> 212.111 + 212.112 +<div class="memitem"> 212.113 +<div class="memproto"> 212.114 + <table class="memname"> 212.115 + <tr> 212.116 + <td class="memname">struct <a class="el" href="structUcxMapKey.html">UcxMapKey</a> UcxMapElement::key</td> 212.117 + </tr> 212.118 + </table> 212.119 +</div><div class="memdoc"> 212.120 + 212.121 +<p>The corresponding key. </p> 212.122 + 212.123 +</div> 212.124 +</div> 212.125 +<a id="a99fe8188b0889201d70ff5f922deef51"></a> 212.126 +<h2 class="memtitle"><span class="permalink"><a href="#a99fe8188b0889201d70ff5f922deef51">◆ </a></span>next</h2> 212.127 + 212.128 +<div class="memitem"> 212.129 +<div class="memproto"> 212.130 + <table class="memname"> 212.131 + <tr> 212.132 + <td class="memname"><a class="el" href="structUcxMapElement.html">UcxMapElement</a>* UcxMapElement::next</td> 212.133 + </tr> 212.134 + </table> 212.135 +</div><div class="memdoc"> 212.136 + 212.137 +<p>A pointer to the next element in the current list. </p> 212.138 + 212.139 +</div> 212.140 +</div> 212.141 +<hr/>The documentation for this struct was generated from the following file:<ul> 212.142 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="map_8h_source.html">map.h</a></li> 212.143 +</ul> 212.144 +</div><!-- contents --> 212.145 +<!-- start footer part --> 212.146 +<hr class="footer"/><address class="footer"><small> 212.147 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 212.148 +<img class="footer" src="doxygen.png" alt="doxygen"/> 212.149 +</a> 1.8.13 212.150 +</small></address> 212.151 +</body> 212.152 +</html>
213.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 213.2 +++ b/docs/api-2.1/structUcxMapIterator.html Sat Feb 06 19:11:44 2021 +0100 213.3 @@ -0,0 +1,150 @@ 213.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 213.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 213.6 +<head> 213.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 213.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 213.9 +<meta name="generator" content="Doxygen 1.8.13"/> 213.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 213.11 +<title>ucx: UcxMapIterator Struct Reference</title> 213.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 213.13 +<script type="text/javascript" src="jquery.js"></script> 213.14 +<script type="text/javascript" src="dynsections.js"></script> 213.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 213.16 +<script type="text/javascript" src="search/searchdata.js"></script> 213.17 +<script type="text/javascript" src="search/search.js"></script> 213.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 213.19 +</head> 213.20 +<body> 213.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 213.22 +<div id="titlearea"> 213.23 +<table cellspacing="0" cellpadding="0"> 213.24 + <tbody> 213.25 + <tr style="height: 56px;"> 213.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 213.27 + <td id="projectalign" style="padding-left: 0.5em;"> 213.28 + <div id="projectname">ucx 213.29 + </div> 213.30 + <div id="projectbrief">UAP Common Extensions</div> 213.31 + </td> 213.32 + </tr> 213.33 + </tbody> 213.34 +</table> 213.35 +</div> 213.36 +<!-- end header part --> 213.37 +<!-- Generated by Doxygen 1.8.13 --> 213.38 +<script type="text/javascript"> 213.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 213.40 +</script> 213.41 +<script type="text/javascript" src="menudata.js"></script> 213.42 +<script type="text/javascript" src="menu.js"></script> 213.43 +<script type="text/javascript"> 213.44 +$(function() { 213.45 + initMenu('',true,false,'search.php','Search'); 213.46 + $(document).ready(function() { init_search(); }); 213.47 +}); 213.48 +</script> 213.49 +<div id="main-nav"></div> 213.50 +<!-- window showing the filter options --> 213.51 +<div id="MSearchSelectWindow" 213.52 + onmouseover="return searchBox.OnSearchSelectShow()" 213.53 + onmouseout="return searchBox.OnSearchSelectHide()" 213.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 213.55 +</div> 213.56 + 213.57 +<!-- iframe showing the search results (closed by default) --> 213.58 +<div id="MSearchResultsWindow"> 213.59 +<iframe src="javascript:void(0)" frameborder="0" 213.60 + name="MSearchResults" id="MSearchResults"> 213.61 +</iframe> 213.62 +</div> 213.63 + 213.64 +</div><!-- top --> 213.65 +<div class="header"> 213.66 + <div class="summary"> 213.67 +<a href="#pub-attribs">Data Fields</a> </div> 213.68 + <div class="headertitle"> 213.69 +<div class="title">UcxMapIterator Struct Reference</div> </div> 213.70 +</div><!--header--> 213.71 +<div class="contents"> 213.72 + 213.73 +<p>Structure for an iterator over a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. 213.74 + <a href="structUcxMapIterator.html#details">More...</a></p> 213.75 + 213.76 +<p><code>#include <<a class="el" href="map_8h_source.html">map.h</a>></code></p> 213.77 +<table class="memberdecls"> 213.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 213.79 +Data Fields</h2></td></tr> 213.80 +<tr class="memitem:af88d6e22547d09fe1d665dd650dcdb95"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMap.html">UcxMap</a> const * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMapIterator.html#af88d6e22547d09fe1d665dd650dcdb95">map</a></td></tr> 213.81 +<tr class="memdesc:af88d6e22547d09fe1d665dd650dcdb95"><td class="mdescLeft"> </td><td class="mdescRight">The map to iterate over. <a href="#af88d6e22547d09fe1d665dd650dcdb95">More...</a><br /></td></tr> 213.82 +<tr class="separator:af88d6e22547d09fe1d665dd650dcdb95"><td class="memSeparator" colspan="2"> </td></tr> 213.83 +<tr class="memitem:af1fc40f899f37280adb5b85acf6e742f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxMapElement.html">UcxMapElement</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMapIterator.html#af1fc40f899f37280adb5b85acf6e742f">cur</a></td></tr> 213.84 +<tr class="memdesc:af1fc40f899f37280adb5b85acf6e742f"><td class="mdescLeft"> </td><td class="mdescRight">The current map element. <a href="#af1fc40f899f37280adb5b85acf6e742f">More...</a><br /></td></tr> 213.85 +<tr class="separator:af1fc40f899f37280adb5b85acf6e742f"><td class="memSeparator" colspan="2"> </td></tr> 213.86 +<tr class="memitem:ac2376545c8816dd6895de4995e558c65"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMapIterator.html#ac2376545c8816dd6895de4995e558c65">index</a></td></tr> 213.87 +<tr class="memdesc:ac2376545c8816dd6895de4995e558c65"><td class="mdescLeft"> </td><td class="mdescRight">The current index of the element list array. <a href="#ac2376545c8816dd6895de4995e558c65">More...</a><br /></td></tr> 213.88 +<tr class="separator:ac2376545c8816dd6895de4995e558c65"><td class="memSeparator" colspan="2"> </td></tr> 213.89 +</table> 213.90 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 213.91 +<div class="textblock"><p>Structure for an iterator over a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. </p> 213.92 +</div><h2 class="groupheader">Field Documentation</h2> 213.93 +<a id="af1fc40f899f37280adb5b85acf6e742f"></a> 213.94 +<h2 class="memtitle"><span class="permalink"><a href="#af1fc40f899f37280adb5b85acf6e742f">◆ </a></span>cur</h2> 213.95 + 213.96 +<div class="memitem"> 213.97 +<div class="memproto"> 213.98 + <table class="memname"> 213.99 + <tr> 213.100 + <td class="memname"><a class="el" href="structUcxMapElement.html">UcxMapElement</a>* UcxMapIterator::cur</td> 213.101 + </tr> 213.102 + </table> 213.103 +</div><div class="memdoc"> 213.104 + 213.105 +<p>The current map element. </p> 213.106 + 213.107 +</div> 213.108 +</div> 213.109 +<a id="ac2376545c8816dd6895de4995e558c65"></a> 213.110 +<h2 class="memtitle"><span class="permalink"><a href="#ac2376545c8816dd6895de4995e558c65">◆ </a></span>index</h2> 213.111 + 213.112 +<div class="memitem"> 213.113 +<div class="memproto"> 213.114 + <table class="memname"> 213.115 + <tr> 213.116 + <td class="memname">size_t UcxMapIterator::index</td> 213.117 + </tr> 213.118 + </table> 213.119 +</div><div class="memdoc"> 213.120 + 213.121 +<p>The current index of the element list array. </p> 213.122 +<p><b>Attention: </b> this is <b>NOT</b> the element index! Do <b>NOT</b> manually iterate over the map by increasing this index. Use <a class="el" href="map_8h.html#aceb8675abf44860b4bbc301bbada5b91" title="Proceeds to the next element of the map (if any). ">ucx_map_iter_next()</a>. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="structUcxMap.html#a5792b5037c4f77ea3cb144b66c9b8790" title="The array of map element lists. ">UcxMap.map</a> </dd></dl> 213.123 + 213.124 +</div> 213.125 +</div> 213.126 +<a id="af88d6e22547d09fe1d665dd650dcdb95"></a> 213.127 +<h2 class="memtitle"><span class="permalink"><a href="#af88d6e22547d09fe1d665dd650dcdb95">◆ </a></span>map</h2> 213.128 + 213.129 +<div class="memitem"> 213.130 +<div class="memproto"> 213.131 + <table class="memname"> 213.132 + <tr> 213.133 + <td class="memname"><a class="el" href="structUcxMap.html">UcxMap</a> const* UcxMapIterator::map</td> 213.134 + </tr> 213.135 + </table> 213.136 +</div><div class="memdoc"> 213.137 + 213.138 +<p>The map to iterate over. </p> 213.139 + 213.140 +</div> 213.141 +</div> 213.142 +<hr/>The documentation for this struct was generated from the following file:<ul> 213.143 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="map_8h_source.html">map.h</a></li> 213.144 +</ul> 213.145 +</div><!-- contents --> 213.146 +<!-- start footer part --> 213.147 +<hr class="footer"/><address class="footer"><small> 213.148 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 213.149 +<img class="footer" src="doxygen.png" alt="doxygen"/> 213.150 +</a> 1.8.13 213.151 +</small></address> 213.152 +</body> 213.153 +</html>
214.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 214.2 +++ b/docs/api-2.1/structUcxMapKey.html Sat Feb 06 19:11:44 2021 +0100 214.3 @@ -0,0 +1,149 @@ 214.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 214.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 214.6 +<head> 214.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 214.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 214.9 +<meta name="generator" content="Doxygen 1.8.13"/> 214.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 214.11 +<title>ucx: UcxMapKey Struct Reference</title> 214.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 214.13 +<script type="text/javascript" src="jquery.js"></script> 214.14 +<script type="text/javascript" src="dynsections.js"></script> 214.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 214.16 +<script type="text/javascript" src="search/searchdata.js"></script> 214.17 +<script type="text/javascript" src="search/search.js"></script> 214.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 214.19 +</head> 214.20 +<body> 214.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 214.22 +<div id="titlearea"> 214.23 +<table cellspacing="0" cellpadding="0"> 214.24 + <tbody> 214.25 + <tr style="height: 56px;"> 214.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 214.27 + <td id="projectalign" style="padding-left: 0.5em;"> 214.28 + <div id="projectname">ucx 214.29 + </div> 214.30 + <div id="projectbrief">UAP Common Extensions</div> 214.31 + </td> 214.32 + </tr> 214.33 + </tbody> 214.34 +</table> 214.35 +</div> 214.36 +<!-- end header part --> 214.37 +<!-- Generated by Doxygen 1.8.13 --> 214.38 +<script type="text/javascript"> 214.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 214.40 +</script> 214.41 +<script type="text/javascript" src="menudata.js"></script> 214.42 +<script type="text/javascript" src="menu.js"></script> 214.43 +<script type="text/javascript"> 214.44 +$(function() { 214.45 + initMenu('',true,false,'search.php','Search'); 214.46 + $(document).ready(function() { init_search(); }); 214.47 +}); 214.48 +</script> 214.49 +<div id="main-nav"></div> 214.50 +<!-- window showing the filter options --> 214.51 +<div id="MSearchSelectWindow" 214.52 + onmouseover="return searchBox.OnSearchSelectShow()" 214.53 + onmouseout="return searchBox.OnSearchSelectHide()" 214.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 214.55 +</div> 214.56 + 214.57 +<!-- iframe showing the search results (closed by default) --> 214.58 +<div id="MSearchResultsWindow"> 214.59 +<iframe src="javascript:void(0)" frameborder="0" 214.60 + name="MSearchResults" id="MSearchResults"> 214.61 +</iframe> 214.62 +</div> 214.63 + 214.64 +</div><!-- top --> 214.65 +<div class="header"> 214.66 + <div class="summary"> 214.67 +<a href="#pub-attribs">Data Fields</a> </div> 214.68 + <div class="headertitle"> 214.69 +<div class="title">UcxMapKey Struct Reference</div> </div> 214.70 +</div><!--header--> 214.71 +<div class="contents"> 214.72 + 214.73 +<p>Internal structure for a key of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. 214.74 + <a href="structUcxMapKey.html#details">More...</a></p> 214.75 + 214.76 +<p><code>#include <<a class="el" href="map_8h_source.html">map.h</a>></code></p> 214.77 +<table class="memberdecls"> 214.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 214.79 +Data Fields</h2></td></tr> 214.80 +<tr class="memitem:ab71d1841e4f538628c00f782267fb6d5"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMapKey.html#ab71d1841e4f538628c00f782267fb6d5">data</a></td></tr> 214.81 +<tr class="memdesc:ab71d1841e4f538628c00f782267fb6d5"><td class="mdescLeft"> </td><td class="mdescRight">The key data. <a href="#ab71d1841e4f538628c00f782267fb6d5">More...</a><br /></td></tr> 214.82 +<tr class="separator:ab71d1841e4f538628c00f782267fb6d5"><td class="memSeparator" colspan="2"> </td></tr> 214.83 +<tr class="memitem:a504d46caa45c79cd87ff8cd835654270"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMapKey.html#a504d46caa45c79cd87ff8cd835654270">len</a></td></tr> 214.84 +<tr class="memdesc:a504d46caa45c79cd87ff8cd835654270"><td class="mdescLeft"> </td><td class="mdescRight">The length of the key data. <a href="#a504d46caa45c79cd87ff8cd835654270">More...</a><br /></td></tr> 214.85 +<tr class="separator:a504d46caa45c79cd87ff8cd835654270"><td class="memSeparator" colspan="2"> </td></tr> 214.86 +<tr class="memitem:a34c1f8fec98174583944fffd30e7c913"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMapKey.html#a34c1f8fec98174583944fffd30e7c913">hash</a></td></tr> 214.87 +<tr class="memdesc:a34c1f8fec98174583944fffd30e7c913"><td class="mdescLeft"> </td><td class="mdescRight">The hash value of the key data. <a href="#a34c1f8fec98174583944fffd30e7c913">More...</a><br /></td></tr> 214.88 +<tr class="separator:a34c1f8fec98174583944fffd30e7c913"><td class="memSeparator" colspan="2"> </td></tr> 214.89 +</table> 214.90 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 214.91 +<div class="textblock"><p>Internal structure for a key of a <a class="el" href="structUcxMap.html" title="Structure for the UCX map. ">UcxMap</a>. </p> 214.92 +</div><h2 class="groupheader">Field Documentation</h2> 214.93 +<a id="ab71d1841e4f538628c00f782267fb6d5"></a> 214.94 +<h2 class="memtitle"><span class="permalink"><a href="#ab71d1841e4f538628c00f782267fb6d5">◆ </a></span>data</h2> 214.95 + 214.96 +<div class="memitem"> 214.97 +<div class="memproto"> 214.98 + <table class="memname"> 214.99 + <tr> 214.100 + <td class="memname">void* UcxMapKey::data</td> 214.101 + </tr> 214.102 + </table> 214.103 +</div><div class="memdoc"> 214.104 + 214.105 +<p>The key data. </p> 214.106 + 214.107 +</div> 214.108 +</div> 214.109 +<a id="a34c1f8fec98174583944fffd30e7c913"></a> 214.110 +<h2 class="memtitle"><span class="permalink"><a href="#a34c1f8fec98174583944fffd30e7c913">◆ </a></span>hash</h2> 214.111 + 214.112 +<div class="memitem"> 214.113 +<div class="memproto"> 214.114 + <table class="memname"> 214.115 + <tr> 214.116 + <td class="memname">int UcxMapKey::hash</td> 214.117 + </tr> 214.118 + </table> 214.119 +</div><div class="memdoc"> 214.120 + 214.121 +<p>The hash value of the key data. </p> 214.122 + 214.123 +</div> 214.124 +</div> 214.125 +<a id="a504d46caa45c79cd87ff8cd835654270"></a> 214.126 +<h2 class="memtitle"><span class="permalink"><a href="#a504d46caa45c79cd87ff8cd835654270">◆ </a></span>len</h2> 214.127 + 214.128 +<div class="memitem"> 214.129 +<div class="memproto"> 214.130 + <table class="memname"> 214.131 + <tr> 214.132 + <td class="memname">size_t UcxMapKey::len</td> 214.133 + </tr> 214.134 + </table> 214.135 +</div><div class="memdoc"> 214.136 + 214.137 +<p>The length of the key data. </p> 214.138 + 214.139 +</div> 214.140 +</div> 214.141 +<hr/>The documentation for this struct was generated from the following file:<ul> 214.142 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="map_8h_source.html">map.h</a></li> 214.143 +</ul> 214.144 +</div><!-- contents --> 214.145 +<!-- start footer part --> 214.146 +<hr class="footer"/><address class="footer"><small> 214.147 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 214.148 +<img class="footer" src="doxygen.png" alt="doxygen"/> 214.149 +</a> 1.8.13 214.150 +</small></address> 214.151 +</body> 214.152 +</html>
215.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 215.2 +++ b/docs/api-2.1/structUcxMempool.html Sat Feb 06 19:11:44 2021 +0100 215.3 @@ -0,0 +1,153 @@ 215.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 215.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 215.6 +<head> 215.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 215.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 215.9 +<meta name="generator" content="Doxygen 1.8.13"/> 215.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 215.11 +<title>ucx: UcxMempool Struct Reference</title> 215.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 215.13 +<script type="text/javascript" src="jquery.js"></script> 215.14 +<script type="text/javascript" src="dynsections.js"></script> 215.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 215.16 +<script type="text/javascript" src="search/searchdata.js"></script> 215.17 +<script type="text/javascript" src="search/search.js"></script> 215.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 215.19 +</head> 215.20 +<body> 215.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 215.22 +<div id="titlearea"> 215.23 +<table cellspacing="0" cellpadding="0"> 215.24 + <tbody> 215.25 + <tr style="height: 56px;"> 215.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 215.27 + <td id="projectalign" style="padding-left: 0.5em;"> 215.28 + <div id="projectname">ucx 215.29 + </div> 215.30 + <div id="projectbrief">UAP Common Extensions</div> 215.31 + </td> 215.32 + </tr> 215.33 + </tbody> 215.34 +</table> 215.35 +</div> 215.36 +<!-- end header part --> 215.37 +<!-- Generated by Doxygen 1.8.13 --> 215.38 +<script type="text/javascript"> 215.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 215.40 +</script> 215.41 +<script type="text/javascript" src="menudata.js"></script> 215.42 +<script type="text/javascript" src="menu.js"></script> 215.43 +<script type="text/javascript"> 215.44 +$(function() { 215.45 + initMenu('',true,false,'search.php','Search'); 215.46 + $(document).ready(function() { init_search(); }); 215.47 +}); 215.48 +</script> 215.49 +<div id="main-nav"></div> 215.50 +<!-- window showing the filter options --> 215.51 +<div id="MSearchSelectWindow" 215.52 + onmouseover="return searchBox.OnSearchSelectShow()" 215.53 + onmouseout="return searchBox.OnSearchSelectHide()" 215.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 215.55 +</div> 215.56 + 215.57 +<!-- iframe showing the search results (closed by default) --> 215.58 +<div id="MSearchResultsWindow"> 215.59 +<iframe src="javascript:void(0)" frameborder="0" 215.60 + name="MSearchResults" id="MSearchResults"> 215.61 +</iframe> 215.62 +</div> 215.63 + 215.64 +</div><!-- top --> 215.65 +<div class="header"> 215.66 + <div class="summary"> 215.67 +<a href="#pub-attribs">Data Fields</a> </div> 215.68 + <div class="headertitle"> 215.69 +<div class="title">UcxMempool Struct Reference</div> </div> 215.70 +</div><!--header--> 215.71 +<div class="contents"> 215.72 + 215.73 +<p>UCX mempool structure. 215.74 + <a href="structUcxMempool.html#details">More...</a></p> 215.75 + 215.76 +<p><code>#include <<a class="el" href="mempool_8h_source.html">mempool.h</a>></code></p> 215.77 +<table class="memberdecls"> 215.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 215.79 +Data Fields</h2></td></tr> 215.80 +<tr class="memitem:ac45fd1e9269399e4c434d6bdaa770d92"><td class="memItemLeft" align="right" valign="top"><a id="ac45fd1e9269399e4c434d6bdaa770d92"></a> 215.81 +<a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMempool.html#ac45fd1e9269399e4c434d6bdaa770d92">allocator</a></td></tr> 215.82 +<tr class="memdesc:ac45fd1e9269399e4c434d6bdaa770d92"><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> based on this pool. <br /></td></tr> 215.83 +<tr class="separator:ac45fd1e9269399e4c434d6bdaa770d92"><td class="memSeparator" colspan="2"> </td></tr> 215.84 +<tr class="memitem:ae98c1b0150bb119ee0a8506a6f310d6e"><td class="memItemLeft" align="right" valign="top">void ** </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMempool.html#ae98c1b0150bb119ee0a8506a6f310d6e">data</a></td></tr> 215.85 +<tr class="memdesc:ae98c1b0150bb119ee0a8506a6f310d6e"><td class="mdescLeft"> </td><td class="mdescRight">List of pointers to pooled memory. <a href="#ae98c1b0150bb119ee0a8506a6f310d6e">More...</a><br /></td></tr> 215.86 +<tr class="separator:ae98c1b0150bb119ee0a8506a6f310d6e"><td class="memSeparator" colspan="2"> </td></tr> 215.87 +<tr class="memitem:aa3a73ab231e1bc207d526f46f1c1e23a"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMempool.html#aa3a73ab231e1bc207d526f46f1c1e23a">ndata</a></td></tr> 215.88 +<tr class="memdesc:aa3a73ab231e1bc207d526f46f1c1e23a"><td class="mdescLeft"> </td><td class="mdescRight">Count of pooled memory items. <a href="#aa3a73ab231e1bc207d526f46f1c1e23a">More...</a><br /></td></tr> 215.89 +<tr class="separator:aa3a73ab231e1bc207d526f46f1c1e23a"><td class="memSeparator" colspan="2"> </td></tr> 215.90 +<tr class="memitem:a304729986f2894971d0469e71e196bf0"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxMempool.html#a304729986f2894971d0469e71e196bf0">size</a></td></tr> 215.91 +<tr class="memdesc:a304729986f2894971d0469e71e196bf0"><td class="mdescLeft"> </td><td class="mdescRight">Memory pool size. <a href="#a304729986f2894971d0469e71e196bf0">More...</a><br /></td></tr> 215.92 +<tr class="separator:a304729986f2894971d0469e71e196bf0"><td class="memSeparator" colspan="2"> </td></tr> 215.93 +</table> 215.94 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 215.95 +<div class="textblock"><p>UCX mempool structure. </p> 215.96 +</div><h2 class="groupheader">Field Documentation</h2> 215.97 +<a id="ae98c1b0150bb119ee0a8506a6f310d6e"></a> 215.98 +<h2 class="memtitle"><span class="permalink"><a href="#ae98c1b0150bb119ee0a8506a6f310d6e">◆ </a></span>data</h2> 215.99 + 215.100 +<div class="memitem"> 215.101 +<div class="memproto"> 215.102 + <table class="memname"> 215.103 + <tr> 215.104 + <td class="memname">void** UcxMempool::data</td> 215.105 + </tr> 215.106 + </table> 215.107 +</div><div class="memdoc"> 215.108 + 215.109 +<p>List of pointers to pooled memory. </p> 215.110 + 215.111 +</div> 215.112 +</div> 215.113 +<a id="aa3a73ab231e1bc207d526f46f1c1e23a"></a> 215.114 +<h2 class="memtitle"><span class="permalink"><a href="#aa3a73ab231e1bc207d526f46f1c1e23a">◆ </a></span>ndata</h2> 215.115 + 215.116 +<div class="memitem"> 215.117 +<div class="memproto"> 215.118 + <table class="memname"> 215.119 + <tr> 215.120 + <td class="memname">size_t UcxMempool::ndata</td> 215.121 + </tr> 215.122 + </table> 215.123 +</div><div class="memdoc"> 215.124 + 215.125 +<p>Count of pooled memory items. </p> 215.126 + 215.127 +</div> 215.128 +</div> 215.129 +<a id="a304729986f2894971d0469e71e196bf0"></a> 215.130 +<h2 class="memtitle"><span class="permalink"><a href="#a304729986f2894971d0469e71e196bf0">◆ </a></span>size</h2> 215.131 + 215.132 +<div class="memitem"> 215.133 +<div class="memproto"> 215.134 + <table class="memname"> 215.135 + <tr> 215.136 + <td class="memname">size_t UcxMempool::size</td> 215.137 + </tr> 215.138 + </table> 215.139 +</div><div class="memdoc"> 215.140 + 215.141 +<p>Memory pool size. </p> 215.142 + 215.143 +</div> 215.144 +</div> 215.145 +<hr/>The documentation for this struct was generated from the following file:<ul> 215.146 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="mempool_8h_source.html">mempool.h</a></li> 215.147 +</ul> 215.148 +</div><!-- contents --> 215.149 +<!-- start footer part --> 215.150 +<hr class="footer"/><address class="footer"><small> 215.151 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 215.152 +<img class="footer" src="doxygen.png" alt="doxygen"/> 215.153 +</a> 1.8.13 215.154 +</small></address> 215.155 +</body> 215.156 +</html>
216.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 216.2 +++ b/docs/api-2.1/structUcxProperties.html Sat Feb 06 19:11:44 2021 +0100 216.3 @@ -0,0 +1,313 @@ 216.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 216.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 216.6 +<head> 216.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 216.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 216.9 +<meta name="generator" content="Doxygen 1.8.13"/> 216.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 216.11 +<title>ucx: UcxProperties Struct Reference</title> 216.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 216.13 +<script type="text/javascript" src="jquery.js"></script> 216.14 +<script type="text/javascript" src="dynsections.js"></script> 216.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 216.16 +<script type="text/javascript" src="search/searchdata.js"></script> 216.17 +<script type="text/javascript" src="search/search.js"></script> 216.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 216.19 +</head> 216.20 +<body> 216.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 216.22 +<div id="titlearea"> 216.23 +<table cellspacing="0" cellpadding="0"> 216.24 + <tbody> 216.25 + <tr style="height: 56px;"> 216.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 216.27 + <td id="projectalign" style="padding-left: 0.5em;"> 216.28 + <div id="projectname">ucx 216.29 + </div> 216.30 + <div id="projectbrief">UAP Common Extensions</div> 216.31 + </td> 216.32 + </tr> 216.33 + </tbody> 216.34 +</table> 216.35 +</div> 216.36 +<!-- end header part --> 216.37 +<!-- Generated by Doxygen 1.8.13 --> 216.38 +<script type="text/javascript"> 216.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 216.40 +</script> 216.41 +<script type="text/javascript" src="menudata.js"></script> 216.42 +<script type="text/javascript" src="menu.js"></script> 216.43 +<script type="text/javascript"> 216.44 +$(function() { 216.45 + initMenu('',true,false,'search.php','Search'); 216.46 + $(document).ready(function() { init_search(); }); 216.47 +}); 216.48 +</script> 216.49 +<div id="main-nav"></div> 216.50 +<!-- window showing the filter options --> 216.51 +<div id="MSearchSelectWindow" 216.52 + onmouseover="return searchBox.OnSearchSelectShow()" 216.53 + onmouseout="return searchBox.OnSearchSelectHide()" 216.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 216.55 +</div> 216.56 + 216.57 +<!-- iframe showing the search results (closed by default) --> 216.58 +<div id="MSearchResultsWindow"> 216.59 +<iframe src="javascript:void(0)" frameborder="0" 216.60 + name="MSearchResults" id="MSearchResults"> 216.61 +</iframe> 216.62 +</div> 216.63 + 216.64 +</div><!-- top --> 216.65 +<div class="header"> 216.66 + <div class="summary"> 216.67 +<a href="#pub-attribs">Data Fields</a> </div> 216.68 + <div class="headertitle"> 216.69 +<div class="title">UcxProperties Struct Reference</div> </div> 216.70 +</div><!--header--> 216.71 +<div class="contents"> 216.72 + 216.73 +<p><a class="el" href="structUcxProperties.html" title="UcxProperties object for parsing properties data. ">UcxProperties</a> object for parsing properties data. 216.74 + <a href="structUcxProperties.html#details">More...</a></p> 216.75 + 216.76 +<p><code>#include <<a class="el" href="properties_8h_source.html">properties.h</a>></code></p> 216.77 +<table class="memberdecls"> 216.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 216.79 +Data Fields</h2></td></tr> 216.80 +<tr class="memitem:a6bb4d29686df41a0f42641ee15232bfd"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxProperties.html#a6bb4d29686df41a0f42641ee15232bfd">buffer</a></td></tr> 216.81 +<tr class="memdesc:a6bb4d29686df41a0f42641ee15232bfd"><td class="mdescLeft"> </td><td class="mdescRight">Input buffer (don't set manually). <a href="#a6bb4d29686df41a0f42641ee15232bfd">More...</a><br /></td></tr> 216.82 +<tr class="separator:a6bb4d29686df41a0f42641ee15232bfd"><td class="memSeparator" colspan="2"> </td></tr> 216.83 +<tr class="memitem:a4e7524434525267e29f493a25dcca6b5"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxProperties.html#a4e7524434525267e29f493a25dcca6b5">buflen</a></td></tr> 216.84 +<tr class="memdesc:a4e7524434525267e29f493a25dcca6b5"><td class="mdescLeft"> </td><td class="mdescRight">Length of the input buffer (don't set manually). <a href="#a4e7524434525267e29f493a25dcca6b5">More...</a><br /></td></tr> 216.85 +<tr class="separator:a4e7524434525267e29f493a25dcca6b5"><td class="memSeparator" colspan="2"> </td></tr> 216.86 +<tr class="memitem:addd36ac8e5e42241c0a57453633970db"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxProperties.html#addd36ac8e5e42241c0a57453633970db">pos</a></td></tr> 216.87 +<tr class="memdesc:addd36ac8e5e42241c0a57453633970db"><td class="mdescLeft"> </td><td class="mdescRight">Current buffer position (don't set manually). <a href="#addd36ac8e5e42241c0a57453633970db">More...</a><br /></td></tr> 216.88 +<tr class="separator:addd36ac8e5e42241c0a57453633970db"><td class="memSeparator" colspan="2"> </td></tr> 216.89 +<tr class="memitem:a68556d4260153f58dde44e4c365edce6"><td class="memItemLeft" align="right" valign="top">char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxProperties.html#a68556d4260153f58dde44e4c365edce6">tmp</a></td></tr> 216.90 +<tr class="memdesc:a68556d4260153f58dde44e4c365edce6"><td class="mdescLeft"> </td><td class="mdescRight">Internal temporary buffer (don't set manually). <a href="#a68556d4260153f58dde44e4c365edce6">More...</a><br /></td></tr> 216.91 +<tr class="separator:a68556d4260153f58dde44e4c365edce6"><td class="memSeparator" colspan="2"> </td></tr> 216.92 +<tr class="memitem:a8a81853d5903bee2f4e1fa53fdffae6e"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxProperties.html#a8a81853d5903bee2f4e1fa53fdffae6e">tmplen</a></td></tr> 216.93 +<tr class="memdesc:a8a81853d5903bee2f4e1fa53fdffae6e"><td class="mdescLeft"> </td><td class="mdescRight">Internal temporary buffer length (don't set manually). <a href="#a8a81853d5903bee2f4e1fa53fdffae6e">More...</a><br /></td></tr> 216.94 +<tr class="separator:a8a81853d5903bee2f4e1fa53fdffae6e"><td class="memSeparator" colspan="2"> </td></tr> 216.95 +<tr class="memitem:a5af10131ea9f679b4ee174499f92e210"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxProperties.html#a5af10131ea9f679b4ee174499f92e210">tmpcap</a></td></tr> 216.96 +<tr class="memdesc:a5af10131ea9f679b4ee174499f92e210"><td class="mdescLeft"> </td><td class="mdescRight">Internal temporary buffer capacity (don't set manually). <a href="#a5af10131ea9f679b4ee174499f92e210">More...</a><br /></td></tr> 216.97 +<tr class="separator:a5af10131ea9f679b4ee174499f92e210"><td class="memSeparator" colspan="2"> </td></tr> 216.98 +<tr class="memitem:a34f71a6ab6dcb6892e3b4eb802e75bff"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxProperties.html#a34f71a6ab6dcb6892e3b4eb802e75bff">error</a></td></tr> 216.99 +<tr class="memdesc:a34f71a6ab6dcb6892e3b4eb802e75bff"><td class="mdescLeft"> </td><td class="mdescRight">Parser error code. <a href="#a34f71a6ab6dcb6892e3b4eb802e75bff">More...</a><br /></td></tr> 216.100 +<tr class="separator:a34f71a6ab6dcb6892e3b4eb802e75bff"><td class="memSeparator" colspan="2"> </td></tr> 216.101 +<tr class="memitem:af6adb3f69616cf9d2bb5ea7b4d837ca5"><td class="memItemLeft" align="right" valign="top">char </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxProperties.html#af6adb3f69616cf9d2bb5ea7b4d837ca5">delimiter</a></td></tr> 216.102 +<tr class="memdesc:af6adb3f69616cf9d2bb5ea7b4d837ca5"><td class="mdescLeft"> </td><td class="mdescRight">The delimiter that shall be used. <a href="#af6adb3f69616cf9d2bb5ea7b4d837ca5">More...</a><br /></td></tr> 216.103 +<tr class="separator:af6adb3f69616cf9d2bb5ea7b4d837ca5"><td class="memSeparator" colspan="2"> </td></tr> 216.104 +<tr class="memitem:afaa2e6a289fa6949b7b01df35fa5def8"><td class="memItemLeft" align="right" valign="top">char </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxProperties.html#afaa2e6a289fa6949b7b01df35fa5def8">comment1</a></td></tr> 216.105 +<tr class="memdesc:afaa2e6a289fa6949b7b01df35fa5def8"><td class="mdescLeft"> </td><td class="mdescRight">The first comment character. <a href="#afaa2e6a289fa6949b7b01df35fa5def8">More...</a><br /></td></tr> 216.106 +<tr class="separator:afaa2e6a289fa6949b7b01df35fa5def8"><td class="memSeparator" colspan="2"> </td></tr> 216.107 +<tr class="memitem:a9ea7ecb414ca8bc7bef62cdd19cc6363"><td class="memItemLeft" align="right" valign="top">char </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxProperties.html#a9ea7ecb414ca8bc7bef62cdd19cc6363">comment2</a></td></tr> 216.108 +<tr class="memdesc:a9ea7ecb414ca8bc7bef62cdd19cc6363"><td class="mdescLeft"> </td><td class="mdescRight">The second comment character. <a href="#a9ea7ecb414ca8bc7bef62cdd19cc6363">More...</a><br /></td></tr> 216.109 +<tr class="separator:a9ea7ecb414ca8bc7bef62cdd19cc6363"><td class="memSeparator" colspan="2"> </td></tr> 216.110 +<tr class="memitem:a5f3e561e32bac03e36a191a6940cca92"><td class="memItemLeft" align="right" valign="top">char </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxProperties.html#a5f3e561e32bac03e36a191a6940cca92">comment3</a></td></tr> 216.111 +<tr class="memdesc:a5f3e561e32bac03e36a191a6940cca92"><td class="mdescLeft"> </td><td class="mdescRight">The third comment character. <a href="#a5f3e561e32bac03e36a191a6940cca92">More...</a><br /></td></tr> 216.112 +<tr class="separator:a5f3e561e32bac03e36a191a6940cca92"><td class="memSeparator" colspan="2"> </td></tr> 216.113 +</table> 216.114 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 216.115 +<div class="textblock"><p><a class="el" href="structUcxProperties.html" title="UcxProperties object for parsing properties data. ">UcxProperties</a> object for parsing properties data. </p> 216.116 +<p>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. </p> 216.117 +</div><h2 class="groupheader">Field Documentation</h2> 216.118 +<a id="a6bb4d29686df41a0f42641ee15232bfd"></a> 216.119 +<h2 class="memtitle"><span class="permalink"><a href="#a6bb4d29686df41a0f42641ee15232bfd">◆ </a></span>buffer</h2> 216.120 + 216.121 +<div class="memitem"> 216.122 +<div class="memproto"> 216.123 + <table class="memname"> 216.124 + <tr> 216.125 + <td class="memname">char* UcxProperties::buffer</td> 216.126 + </tr> 216.127 + </table> 216.128 +</div><div class="memdoc"> 216.129 + 216.130 +<p>Input buffer (don't set manually). </p> 216.131 +<p>Automatically set by calls to <a class="el" href="properties_8h.html#aaf8de121764a4d22c763ff2ab41f3a4d" title="Sets the input buffer for the properties parser. ">ucx_properties_fill()</a>. </p> 216.132 + 216.133 +</div> 216.134 +</div> 216.135 +<a id="a4e7524434525267e29f493a25dcca6b5"></a> 216.136 +<h2 class="memtitle"><span class="permalink"><a href="#a4e7524434525267e29f493a25dcca6b5">◆ </a></span>buflen</h2> 216.137 + 216.138 +<div class="memitem"> 216.139 +<div class="memproto"> 216.140 + <table class="memname"> 216.141 + <tr> 216.142 + <td class="memname">size_t UcxProperties::buflen</td> 216.143 + </tr> 216.144 + </table> 216.145 +</div><div class="memdoc"> 216.146 + 216.147 +<p>Length of the input buffer (don't set manually). </p> 216.148 +<p>Automatically set by calls to <a class="el" href="properties_8h.html#aaf8de121764a4d22c763ff2ab41f3a4d" title="Sets the input buffer for the properties parser. ">ucx_properties_fill()</a>. </p> 216.149 + 216.150 +</div> 216.151 +</div> 216.152 +<a id="afaa2e6a289fa6949b7b01df35fa5def8"></a> 216.153 +<h2 class="memtitle"><span class="permalink"><a href="#afaa2e6a289fa6949b7b01df35fa5def8">◆ </a></span>comment1</h2> 216.154 + 216.155 +<div class="memitem"> 216.156 +<div class="memproto"> 216.157 + <table class="memname"> 216.158 + <tr> 216.159 + <td class="memname">char UcxProperties::comment1</td> 216.160 + </tr> 216.161 + </table> 216.162 +</div><div class="memdoc"> 216.163 + 216.164 +<p>The first comment character. </p> 216.165 +<p>This is '#' by default. </p> 216.166 + 216.167 +</div> 216.168 +</div> 216.169 +<a id="a9ea7ecb414ca8bc7bef62cdd19cc6363"></a> 216.170 +<h2 class="memtitle"><span class="permalink"><a href="#a9ea7ecb414ca8bc7bef62cdd19cc6363">◆ </a></span>comment2</h2> 216.171 + 216.172 +<div class="memitem"> 216.173 +<div class="memproto"> 216.174 + <table class="memname"> 216.175 + <tr> 216.176 + <td class="memname">char UcxProperties::comment2</td> 216.177 + </tr> 216.178 + </table> 216.179 +</div><div class="memdoc"> 216.180 + 216.181 +<p>The second comment character. </p> 216.182 +<p>This is not set by default. </p> 216.183 + 216.184 +</div> 216.185 +</div> 216.186 +<a id="a5f3e561e32bac03e36a191a6940cca92"></a> 216.187 +<h2 class="memtitle"><span class="permalink"><a href="#a5f3e561e32bac03e36a191a6940cca92">◆ </a></span>comment3</h2> 216.188 + 216.189 +<div class="memitem"> 216.190 +<div class="memproto"> 216.191 + <table class="memname"> 216.192 + <tr> 216.193 + <td class="memname">char UcxProperties::comment3</td> 216.194 + </tr> 216.195 + </table> 216.196 +</div><div class="memdoc"> 216.197 + 216.198 +<p>The third comment character. </p> 216.199 +<p>This is not set by default. </p> 216.200 + 216.201 +</div> 216.202 +</div> 216.203 +<a id="af6adb3f69616cf9d2bb5ea7b4d837ca5"></a> 216.204 +<h2 class="memtitle"><span class="permalink"><a href="#af6adb3f69616cf9d2bb5ea7b4d837ca5">◆ </a></span>delimiter</h2> 216.205 + 216.206 +<div class="memitem"> 216.207 +<div class="memproto"> 216.208 + <table class="memname"> 216.209 + <tr> 216.210 + <td class="memname">char UcxProperties::delimiter</td> 216.211 + </tr> 216.212 + </table> 216.213 +</div><div class="memdoc"> 216.214 + 216.215 +<p>The delimiter that shall be used. </p> 216.216 +<p>This is '=' by default. </p> 216.217 + 216.218 +</div> 216.219 +</div> 216.220 +<a id="a34f71a6ab6dcb6892e3b4eb802e75bff"></a> 216.221 +<h2 class="memtitle"><span class="permalink"><a href="#a34f71a6ab6dcb6892e3b4eb802e75bff">◆ </a></span>error</h2> 216.222 + 216.223 +<div class="memitem"> 216.224 +<div class="memproto"> 216.225 + <table class="memname"> 216.226 + <tr> 216.227 + <td class="memname">int UcxProperties::error</td> 216.228 + </tr> 216.229 + </table> 216.230 +</div><div class="memdoc"> 216.231 + 216.232 +<p>Parser error code. </p> 216.233 +<p>This is always 0 on success and a nonzero value on syntax errors. The value is set by <a class="el" href="properties_8h.html#a7e03bc573d45d48c538cd721e810d33c" title="Retrieves the next key/value-pair. ">ucx_properties_next()</a>. </p> 216.234 + 216.235 +</div> 216.236 +</div> 216.237 +<a id="addd36ac8e5e42241c0a57453633970db"></a> 216.238 +<h2 class="memtitle"><span class="permalink"><a href="#addd36ac8e5e42241c0a57453633970db">◆ </a></span>pos</h2> 216.239 + 216.240 +<div class="memitem"> 216.241 +<div class="memproto"> 216.242 + <table class="memname"> 216.243 + <tr> 216.244 + <td class="memname">size_t UcxProperties::pos</td> 216.245 + </tr> 216.246 + </table> 216.247 +</div><div class="memdoc"> 216.248 + 216.249 +<p>Current buffer position (don't set manually). </p> 216.250 +<p>Used by <a class="el" href="properties_8h.html#a7e03bc573d45d48c538cd721e810d33c" title="Retrieves the next key/value-pair. ">ucx_properties_next()</a>. </p> 216.251 + 216.252 +</div> 216.253 +</div> 216.254 +<a id="a68556d4260153f58dde44e4c365edce6"></a> 216.255 +<h2 class="memtitle"><span class="permalink"><a href="#a68556d4260153f58dde44e4c365edce6">◆ </a></span>tmp</h2> 216.256 + 216.257 +<div class="memitem"> 216.258 +<div class="memproto"> 216.259 + <table class="memname"> 216.260 + <tr> 216.261 + <td class="memname">char* UcxProperties::tmp</td> 216.262 + </tr> 216.263 + </table> 216.264 +</div><div class="memdoc"> 216.265 + 216.266 +<p>Internal temporary buffer (don't set manually). </p> 216.267 +<p>Used by <a class="el" href="properties_8h.html#a7e03bc573d45d48c538cd721e810d33c" title="Retrieves the next key/value-pair. ">ucx_properties_next()</a>. </p> 216.268 + 216.269 +</div> 216.270 +</div> 216.271 +<a id="a5af10131ea9f679b4ee174499f92e210"></a> 216.272 +<h2 class="memtitle"><span class="permalink"><a href="#a5af10131ea9f679b4ee174499f92e210">◆ </a></span>tmpcap</h2> 216.273 + 216.274 +<div class="memitem"> 216.275 +<div class="memproto"> 216.276 + <table class="memname"> 216.277 + <tr> 216.278 + <td class="memname">size_t UcxProperties::tmpcap</td> 216.279 + </tr> 216.280 + </table> 216.281 +</div><div class="memdoc"> 216.282 + 216.283 +<p>Internal temporary buffer capacity (don't set manually). </p> 216.284 +<p>Used by <a class="el" href="properties_8h.html#a7e03bc573d45d48c538cd721e810d33c" title="Retrieves the next key/value-pair. ">ucx_properties_next()</a>. </p> 216.285 + 216.286 +</div> 216.287 +</div> 216.288 +<a id="a8a81853d5903bee2f4e1fa53fdffae6e"></a> 216.289 +<h2 class="memtitle"><span class="permalink"><a href="#a8a81853d5903bee2f4e1fa53fdffae6e">◆ </a></span>tmplen</h2> 216.290 + 216.291 +<div class="memitem"> 216.292 +<div class="memproto"> 216.293 + <table class="memname"> 216.294 + <tr> 216.295 + <td class="memname">size_t UcxProperties::tmplen</td> 216.296 + </tr> 216.297 + </table> 216.298 +</div><div class="memdoc"> 216.299 + 216.300 +<p>Internal temporary buffer length (don't set manually). </p> 216.301 +<p>Used by <a class="el" href="properties_8h.html#a7e03bc573d45d48c538cd721e810d33c" title="Retrieves the next key/value-pair. ">ucx_properties_next()</a>. </p> 216.302 + 216.303 +</div> 216.304 +</div> 216.305 +<hr/>The documentation for this struct was generated from the following file:<ul> 216.306 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="properties_8h_source.html">properties.h</a></li> 216.307 +</ul> 216.308 +</div><!-- contents --> 216.309 +<!-- start footer part --> 216.310 +<hr class="footer"/><address class="footer"><small> 216.311 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 216.312 +<img class="footer" src="doxygen.png" alt="doxygen"/> 216.313 +</a> 1.8.13 216.314 +</small></address> 216.315 +</body> 216.316 +</html>
217.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 217.2 +++ b/docs/api-2.1/structUcxStack.html Sat Feb 06 19:11:44 2021 +0100 217.3 @@ -0,0 +1,123 @@ 217.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 217.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 217.6 +<head> 217.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 217.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 217.9 +<meta name="generator" content="Doxygen 1.8.13"/> 217.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 217.11 +<title>ucx: UcxStack Struct Reference</title> 217.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 217.13 +<script type="text/javascript" src="jquery.js"></script> 217.14 +<script type="text/javascript" src="dynsections.js"></script> 217.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 217.16 +<script type="text/javascript" src="search/searchdata.js"></script> 217.17 +<script type="text/javascript" src="search/search.js"></script> 217.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 217.19 +</head> 217.20 +<body> 217.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 217.22 +<div id="titlearea"> 217.23 +<table cellspacing="0" cellpadding="0"> 217.24 + <tbody> 217.25 + <tr style="height: 56px;"> 217.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 217.27 + <td id="projectalign" style="padding-left: 0.5em;"> 217.28 + <div id="projectname">ucx 217.29 + </div> 217.30 + <div id="projectbrief">UAP Common Extensions</div> 217.31 + </td> 217.32 + </tr> 217.33 + </tbody> 217.34 +</table> 217.35 +</div> 217.36 +<!-- end header part --> 217.37 +<!-- Generated by Doxygen 1.8.13 --> 217.38 +<script type="text/javascript"> 217.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 217.40 +</script> 217.41 +<script type="text/javascript" src="menudata.js"></script> 217.42 +<script type="text/javascript" src="menu.js"></script> 217.43 +<script type="text/javascript"> 217.44 +$(function() { 217.45 + initMenu('',true,false,'search.php','Search'); 217.46 + $(document).ready(function() { init_search(); }); 217.47 +}); 217.48 +</script> 217.49 +<div id="main-nav"></div> 217.50 +<!-- window showing the filter options --> 217.51 +<div id="MSearchSelectWindow" 217.52 + onmouseover="return searchBox.OnSearchSelectShow()" 217.53 + onmouseout="return searchBox.OnSearchSelectHide()" 217.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 217.55 +</div> 217.56 + 217.57 +<!-- iframe showing the search results (closed by default) --> 217.58 +<div id="MSearchResultsWindow"> 217.59 +<iframe src="javascript:void(0)" frameborder="0" 217.60 + name="MSearchResults" id="MSearchResults"> 217.61 +</iframe> 217.62 +</div> 217.63 + 217.64 +</div><!-- top --> 217.65 +<div class="header"> 217.66 + <div class="summary"> 217.67 +<a href="#pub-attribs">Data Fields</a> </div> 217.68 + <div class="headertitle"> 217.69 +<div class="title">UcxStack Struct Reference</div> </div> 217.70 +</div><!--header--> 217.71 +<div class="contents"> 217.72 + 217.73 +<p>UCX stack structure. 217.74 + <a href="structUcxStack.html#details">More...</a></p> 217.75 + 217.76 +<p><code>#include <<a class="el" href="stack_8h_source.html">stack.h</a>></code></p> 217.77 +<table class="memberdecls"> 217.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 217.79 +Data Fields</h2></td></tr> 217.80 +<tr class="memitem:a33cda4f6890ac56ab31701598bc1ae10"><td class="memItemLeft" align="right" valign="top"><a id="a33cda4f6890ac56ab31701598bc1ae10"></a> 217.81 +<a class="el" href="structUcxAllocator.html">UcxAllocator</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxStack.html#a33cda4f6890ac56ab31701598bc1ae10">allocator</a></td></tr> 217.82 +<tr class="memdesc:a33cda4f6890ac56ab31701598bc1ae10"><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> based on this stack. <br /></td></tr> 217.83 +<tr class="separator:a33cda4f6890ac56ab31701598bc1ae10"><td class="memSeparator" colspan="2"> </td></tr> 217.84 +<tr class="memitem:a4df86b1917bfc3bbf760220870638143"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxStack.html#a4df86b1917bfc3bbf760220870638143">size</a></td></tr> 217.85 +<tr class="memdesc:a4df86b1917bfc3bbf760220870638143"><td class="mdescLeft"> </td><td class="mdescRight">Stack size. <a href="#a4df86b1917bfc3bbf760220870638143">More...</a><br /></td></tr> 217.86 +<tr class="separator:a4df86b1917bfc3bbf760220870638143"><td class="memSeparator" colspan="2"> </td></tr> 217.87 +<tr class="memitem:af64d528744bf3a47fec87d2e45d2992f"><td class="memItemLeft" align="right" valign="top"><a id="af64d528744bf3a47fec87d2e45d2992f"></a> 217.88 +char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxStack.html#af64d528744bf3a47fec87d2e45d2992f">space</a></td></tr> 217.89 +<tr class="memdesc:af64d528744bf3a47fec87d2e45d2992f"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the bottom of the stack. <br /></td></tr> 217.90 +<tr class="separator:af64d528744bf3a47fec87d2e45d2992f"><td class="memSeparator" colspan="2"> </td></tr> 217.91 +<tr class="memitem:af0ff6f58edce469f17683013b86ade27"><td class="memItemLeft" align="right" valign="top"><a id="af0ff6f58edce469f17683013b86ade27"></a> 217.92 +char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxStack.html#af0ff6f58edce469f17683013b86ade27">top</a></td></tr> 217.93 +<tr class="memdesc:af0ff6f58edce469f17683013b86ade27"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the top of the stack. <br /></td></tr> 217.94 +<tr class="separator:af0ff6f58edce469f17683013b86ade27"><td class="memSeparator" colspan="2"> </td></tr> 217.95 +</table> 217.96 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 217.97 +<div class="textblock"><p>UCX stack structure. </p> 217.98 +</div><h2 class="groupheader">Field Documentation</h2> 217.99 +<a id="a4df86b1917bfc3bbf760220870638143"></a> 217.100 +<h2 class="memtitle"><span class="permalink"><a href="#a4df86b1917bfc3bbf760220870638143">◆ </a></span>size</h2> 217.101 + 217.102 +<div class="memitem"> 217.103 +<div class="memproto"> 217.104 + <table class="memname"> 217.105 + <tr> 217.106 + <td class="memname">size_t UcxStack::size</td> 217.107 + </tr> 217.108 + </table> 217.109 +</div><div class="memdoc"> 217.110 + 217.111 +<p>Stack size. </p> 217.112 + 217.113 +</div> 217.114 +</div> 217.115 +<hr/>The documentation for this struct was generated from the following file:<ul> 217.116 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="stack_8h_source.html">stack.h</a></li> 217.117 +</ul> 217.118 +</div><!-- contents --> 217.119 +<!-- start footer part --> 217.120 +<hr class="footer"/><address class="footer"><small> 217.121 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 217.122 +<img class="footer" src="doxygen.png" alt="doxygen"/> 217.123 +</a> 1.8.13 217.124 +</small></address> 217.125 +</body> 217.126 +</html>
218.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 218.2 +++ b/docs/api-2.1/structUcxTestList.html Sat Feb 06 19:11:44 2021 +0100 218.3 @@ -0,0 +1,130 @@ 218.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 218.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 218.6 +<head> 218.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 218.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 218.9 +<meta name="generator" content="Doxygen 1.8.13"/> 218.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 218.11 +<title>ucx: UcxTestList Struct Reference</title> 218.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 218.13 +<script type="text/javascript" src="jquery.js"></script> 218.14 +<script type="text/javascript" src="dynsections.js"></script> 218.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 218.16 +<script type="text/javascript" src="search/searchdata.js"></script> 218.17 +<script type="text/javascript" src="search/search.js"></script> 218.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 218.19 +</head> 218.20 +<body> 218.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 218.22 +<div id="titlearea"> 218.23 +<table cellspacing="0" cellpadding="0"> 218.24 + <tbody> 218.25 + <tr style="height: 56px;"> 218.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 218.27 + <td id="projectalign" style="padding-left: 0.5em;"> 218.28 + <div id="projectname">ucx 218.29 + </div> 218.30 + <div id="projectbrief">UAP Common Extensions</div> 218.31 + </td> 218.32 + </tr> 218.33 + </tbody> 218.34 +</table> 218.35 +</div> 218.36 +<!-- end header part --> 218.37 +<!-- Generated by Doxygen 1.8.13 --> 218.38 +<script type="text/javascript"> 218.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 218.40 +</script> 218.41 +<script type="text/javascript" src="menudata.js"></script> 218.42 +<script type="text/javascript" src="menu.js"></script> 218.43 +<script type="text/javascript"> 218.44 +$(function() { 218.45 + initMenu('',true,false,'search.php','Search'); 218.46 + $(document).ready(function() { init_search(); }); 218.47 +}); 218.48 +</script> 218.49 +<div id="main-nav"></div> 218.50 +<!-- window showing the filter options --> 218.51 +<div id="MSearchSelectWindow" 218.52 + onmouseover="return searchBox.OnSearchSelectShow()" 218.53 + onmouseout="return searchBox.OnSearchSelectHide()" 218.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 218.55 +</div> 218.56 + 218.57 +<!-- iframe showing the search results (closed by default) --> 218.58 +<div id="MSearchResultsWindow"> 218.59 +<iframe src="javascript:void(0)" frameborder="0" 218.60 + name="MSearchResults" id="MSearchResults"> 218.61 +</iframe> 218.62 +</div> 218.63 + 218.64 +</div><!-- top --> 218.65 +<div class="header"> 218.66 + <div class="summary"> 218.67 +<a href="#pub-attribs">Data Fields</a> </div> 218.68 + <div class="headertitle"> 218.69 +<div class="title">UcxTestList Struct Reference</div> </div> 218.70 +</div><!--header--> 218.71 +<div class="contents"> 218.72 + 218.73 +<p>Structure for the internal list of test cases. 218.74 + <a href="structUcxTestList.html#details">More...</a></p> 218.75 + 218.76 +<p><code>#include <<a class="el" href="test_8h_source.html">test.h</a>></code></p> 218.77 +<table class="memberdecls"> 218.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 218.79 +Data Fields</h2></td></tr> 218.80 +<tr class="memitem:a6022faa52e772b073141ca0a2f5a56c9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="test_8h.html#ae906817354c010b83c2784260cce7a1c">UcxTest</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxTestList.html#a6022faa52e772b073141ca0a2f5a56c9">test</a></td></tr> 218.81 +<tr class="memdesc:a6022faa52e772b073141ca0a2f5a56c9"><td class="mdescLeft"> </td><td class="mdescRight">Test case. <a href="#a6022faa52e772b073141ca0a2f5a56c9">More...</a><br /></td></tr> 218.82 +<tr class="separator:a6022faa52e772b073141ca0a2f5a56c9"><td class="memSeparator" colspan="2"> </td></tr> 218.83 +<tr class="memitem:aeebb80ff75d9f6f82ab6dc2641a3c74e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxTestList.html">UcxTestList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxTestList.html#aeebb80ff75d9f6f82ab6dc2641a3c74e">next</a></td></tr> 218.84 +<tr class="memdesc:aeebb80ff75d9f6f82ab6dc2641a3c74e"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to the next list element. <a href="#aeebb80ff75d9f6f82ab6dc2641a3c74e">More...</a><br /></td></tr> 218.85 +<tr class="separator:aeebb80ff75d9f6f82ab6dc2641a3c74e"><td class="memSeparator" colspan="2"> </td></tr> 218.86 +</table> 218.87 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 218.88 +<div class="textblock"><p>Structure for the internal list of test cases. </p> 218.89 +</div><h2 class="groupheader">Field Documentation</h2> 218.90 +<a id="aeebb80ff75d9f6f82ab6dc2641a3c74e"></a> 218.91 +<h2 class="memtitle"><span class="permalink"><a href="#aeebb80ff75d9f6f82ab6dc2641a3c74e">◆ </a></span>next</h2> 218.92 + 218.93 +<div class="memitem"> 218.94 +<div class="memproto"> 218.95 + <table class="memname"> 218.96 + <tr> 218.97 + <td class="memname"><a class="el" href="structUcxTestList.html">UcxTestList</a>* UcxTestList::next</td> 218.98 + </tr> 218.99 + </table> 218.100 +</div><div class="memdoc"> 218.101 + 218.102 +<p>Pointer to the next list element. </p> 218.103 + 218.104 +</div> 218.105 +</div> 218.106 +<a id="a6022faa52e772b073141ca0a2f5a56c9"></a> 218.107 +<h2 class="memtitle"><span class="permalink"><a href="#a6022faa52e772b073141ca0a2f5a56c9">◆ </a></span>test</h2> 218.108 + 218.109 +<div class="memitem"> 218.110 +<div class="memproto"> 218.111 + <table class="memname"> 218.112 + <tr> 218.113 + <td class="memname"><a class="el" href="test_8h.html#ae906817354c010b83c2784260cce7a1c">UcxTest</a> UcxTestList::test</td> 218.114 + </tr> 218.115 + </table> 218.116 +</div><div class="memdoc"> 218.117 + 218.118 +<p>Test case. </p> 218.119 + 218.120 +</div> 218.121 +</div> 218.122 +<hr/>The documentation for this struct was generated from the following file:<ul> 218.123 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="test_8h_source.html">test.h</a></li> 218.124 +</ul> 218.125 +</div><!-- contents --> 218.126 +<!-- start footer part --> 218.127 +<hr class="footer"/><address class="footer"><small> 218.128 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 218.129 +<img class="footer" src="doxygen.png" alt="doxygen"/> 218.130 +</a> 1.8.13 218.131 +</small></address> 218.132 +</body> 218.133 +</html>
219.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 219.2 +++ b/docs/api-2.1/structUcxTestSuite.html Sat Feb 06 19:11:44 2021 +0100 219.3 @@ -0,0 +1,150 @@ 219.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 219.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 219.6 +<head> 219.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 219.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 219.9 +<meta name="generator" content="Doxygen 1.8.13"/> 219.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 219.11 +<title>ucx: UcxTestSuite Struct Reference</title> 219.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 219.13 +<script type="text/javascript" src="jquery.js"></script> 219.14 +<script type="text/javascript" src="dynsections.js"></script> 219.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 219.16 +<script type="text/javascript" src="search/searchdata.js"></script> 219.17 +<script type="text/javascript" src="search/search.js"></script> 219.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 219.19 +</head> 219.20 +<body> 219.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 219.22 +<div id="titlearea"> 219.23 +<table cellspacing="0" cellpadding="0"> 219.24 + <tbody> 219.25 + <tr style="height: 56px;"> 219.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 219.27 + <td id="projectalign" style="padding-left: 0.5em;"> 219.28 + <div id="projectname">ucx 219.29 + </div> 219.30 + <div id="projectbrief">UAP Common Extensions</div> 219.31 + </td> 219.32 + </tr> 219.33 + </tbody> 219.34 +</table> 219.35 +</div> 219.36 +<!-- end header part --> 219.37 +<!-- Generated by Doxygen 1.8.13 --> 219.38 +<script type="text/javascript"> 219.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 219.40 +</script> 219.41 +<script type="text/javascript" src="menudata.js"></script> 219.42 +<script type="text/javascript" src="menu.js"></script> 219.43 +<script type="text/javascript"> 219.44 +$(function() { 219.45 + initMenu('',true,false,'search.php','Search'); 219.46 + $(document).ready(function() { init_search(); }); 219.47 +}); 219.48 +</script> 219.49 +<div id="main-nav"></div> 219.50 +<!-- window showing the filter options --> 219.51 +<div id="MSearchSelectWindow" 219.52 + onmouseover="return searchBox.OnSearchSelectShow()" 219.53 + onmouseout="return searchBox.OnSearchSelectHide()" 219.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 219.55 +</div> 219.56 + 219.57 +<!-- iframe showing the search results (closed by default) --> 219.58 +<div id="MSearchResultsWindow"> 219.59 +<iframe src="javascript:void(0)" frameborder="0" 219.60 + name="MSearchResults" id="MSearchResults"> 219.61 +</iframe> 219.62 +</div> 219.63 + 219.64 +</div><!-- top --> 219.65 +<div class="header"> 219.66 + <div class="summary"> 219.67 +<a href="#pub-attribs">Data Fields</a> </div> 219.68 + <div class="headertitle"> 219.69 +<div class="title">UcxTestSuite Struct Reference</div> </div> 219.70 +</div><!--header--> 219.71 +<div class="contents"> 219.72 + 219.73 +<p>A test suite containing multiple test cases. 219.74 + <a href="structUcxTestSuite.html#details">More...</a></p> 219.75 + 219.76 +<p><code>#include <<a class="el" href="test_8h_source.html">test.h</a>></code></p> 219.77 +<table class="memberdecls"> 219.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 219.79 +Data Fields</h2></td></tr> 219.80 +<tr class="memitem:a6cefa870a3c2e38d6ee682e38643dbbb"><td class="memItemLeft" align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxTestSuite.html#a6cefa870a3c2e38d6ee682e38643dbbb">success</a></td></tr> 219.81 +<tr class="memdesc:a6cefa870a3c2e38d6ee682e38643dbbb"><td class="mdescLeft"> </td><td class="mdescRight">The number of successful tests after the suite has been run. <a href="#a6cefa870a3c2e38d6ee682e38643dbbb">More...</a><br /></td></tr> 219.82 +<tr class="separator:a6cefa870a3c2e38d6ee682e38643dbbb"><td class="memSeparator" colspan="2"> </td></tr> 219.83 +<tr class="memitem:abfd240541d1e956e49cde0ac36286951"><td class="memItemLeft" align="right" valign="top">unsigned int </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxTestSuite.html#abfd240541d1e956e49cde0ac36286951">failure</a></td></tr> 219.84 +<tr class="memdesc:abfd240541d1e956e49cde0ac36286951"><td class="mdescLeft"> </td><td class="mdescRight">The number of failed tests after the suite has been run. <a href="#abfd240541d1e956e49cde0ac36286951">More...</a><br /></td></tr> 219.85 +<tr class="separator:abfd240541d1e956e49cde0ac36286951"><td class="memSeparator" colspan="2"> </td></tr> 219.86 +<tr class="memitem:a630677a70ebc2c3296704cda3196492b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxTestList.html">UcxTestList</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxTestSuite.html#a630677a70ebc2c3296704cda3196492b">tests</a></td></tr> 219.87 +<tr class="memdesc:a630677a70ebc2c3296704cda3196492b"><td class="mdescLeft"> </td><td class="mdescRight">Internal list of test cases. <a href="#a630677a70ebc2c3296704cda3196492b">More...</a><br /></td></tr> 219.88 +<tr class="separator:a630677a70ebc2c3296704cda3196492b"><td class="memSeparator" colspan="2"> </td></tr> 219.89 +</table> 219.90 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 219.91 +<div class="textblock"><p>A test suite containing multiple test cases. </p> 219.92 +</div><h2 class="groupheader">Field Documentation</h2> 219.93 +<a id="abfd240541d1e956e49cde0ac36286951"></a> 219.94 +<h2 class="memtitle"><span class="permalink"><a href="#abfd240541d1e956e49cde0ac36286951">◆ </a></span>failure</h2> 219.95 + 219.96 +<div class="memitem"> 219.97 +<div class="memproto"> 219.98 + <table class="memname"> 219.99 + <tr> 219.100 + <td class="memname">unsigned int UcxTestSuite::failure</td> 219.101 + </tr> 219.102 + </table> 219.103 +</div><div class="memdoc"> 219.104 + 219.105 +<p>The number of failed tests after the suite has been run. </p> 219.106 + 219.107 +</div> 219.108 +</div> 219.109 +<a id="a6cefa870a3c2e38d6ee682e38643dbbb"></a> 219.110 +<h2 class="memtitle"><span class="permalink"><a href="#a6cefa870a3c2e38d6ee682e38643dbbb">◆ </a></span>success</h2> 219.111 + 219.112 +<div class="memitem"> 219.113 +<div class="memproto"> 219.114 + <table class="memname"> 219.115 + <tr> 219.116 + <td class="memname">unsigned int UcxTestSuite::success</td> 219.117 + </tr> 219.118 + </table> 219.119 +</div><div class="memdoc"> 219.120 + 219.121 +<p>The number of successful tests after the suite has been run. </p> 219.122 + 219.123 +</div> 219.124 +</div> 219.125 +<a id="a630677a70ebc2c3296704cda3196492b"></a> 219.126 +<h2 class="memtitle"><span class="permalink"><a href="#a630677a70ebc2c3296704cda3196492b">◆ </a></span>tests</h2> 219.127 + 219.128 +<div class="memitem"> 219.129 +<div class="memproto"> 219.130 + <table class="memname"> 219.131 + <tr> 219.132 + <td class="memname"><a class="el" href="structUcxTestList.html">UcxTestList</a>* UcxTestSuite::tests</td> 219.133 + </tr> 219.134 + </table> 219.135 +</div><div class="memdoc"> 219.136 + 219.137 +<p>Internal list of test cases. </p> 219.138 +<p>Use <a class="el" href="test_8h.html#a8dfabc42f183d3a4d79379a5d17bf67d" title="Registers a test function with the specified test suite. ">ucx_test_register()</a> to add tests to this list. </p> 219.139 + 219.140 +</div> 219.141 +</div> 219.142 +<hr/>The documentation for this struct was generated from the following file:<ul> 219.143 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="test_8h_source.html">test.h</a></li> 219.144 +</ul> 219.145 +</div><!-- contents --> 219.146 +<!-- start footer part --> 219.147 +<hr class="footer"/><address class="footer"><small> 219.148 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 219.149 +<img class="footer" src="doxygen.png" alt="doxygen"/> 219.150 +</a> 1.8.13 219.151 +</small></address> 219.152 +</body> 219.153 +</html>
220.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 220.2 +++ b/docs/api-2.1/structscstr__t.html Sat Feb 06 19:11:44 2021 +0100 220.3 @@ -0,0 +1,99 @@ 220.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 220.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 220.6 +<head> 220.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 220.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 220.9 +<meta name="generator" content="Doxygen 1.8.13"/> 220.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 220.11 +<title>ucx: scstr_t Struct Reference</title> 220.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 220.13 +<script type="text/javascript" src="jquery.js"></script> 220.14 +<script type="text/javascript" src="dynsections.js"></script> 220.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 220.16 +<script type="text/javascript" src="search/searchdata.js"></script> 220.17 +<script type="text/javascript" src="search/search.js"></script> 220.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 220.19 +</head> 220.20 +<body> 220.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 220.22 +<div id="titlearea"> 220.23 +<table cellspacing="0" cellpadding="0"> 220.24 + <tbody> 220.25 + <tr style="height: 56px;"> 220.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 220.27 + <td id="projectalign" style="padding-left: 0.5em;"> 220.28 + <div id="projectname">ucx 220.29 + </div> 220.30 + <div id="projectbrief">UAP Common Extensions</div> 220.31 + </td> 220.32 + </tr> 220.33 + </tbody> 220.34 +</table> 220.35 +</div> 220.36 +<!-- end header part --> 220.37 +<!-- Generated by Doxygen 1.8.13 --> 220.38 +<script type="text/javascript"> 220.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 220.40 +</script> 220.41 +<script type="text/javascript" src="menudata.js"></script> 220.42 +<script type="text/javascript" src="menu.js"></script> 220.43 +<script type="text/javascript"> 220.44 +$(function() { 220.45 + initMenu('',true,false,'search.php','Search'); 220.46 + $(document).ready(function() { init_search(); }); 220.47 +}); 220.48 +</script> 220.49 +<div id="main-nav"></div> 220.50 +<!-- window showing the filter options --> 220.51 +<div id="MSearchSelectWindow" 220.52 + onmouseover="return searchBox.OnSearchSelectShow()" 220.53 + onmouseout="return searchBox.OnSearchSelectHide()" 220.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 220.55 +</div> 220.56 + 220.57 +<!-- iframe showing the search results (closed by default) --> 220.58 +<div id="MSearchResultsWindow"> 220.59 +<iframe src="javascript:void(0)" frameborder="0" 220.60 + name="MSearchResults" id="MSearchResults"> 220.61 +</iframe> 220.62 +</div> 220.63 + 220.64 +</div><!-- top --> 220.65 +<div class="header"> 220.66 + <div class="summary"> 220.67 +<a href="#pub-attribs">Data Fields</a> </div> 220.68 + <div class="headertitle"> 220.69 +<div class="title">scstr_t Struct Reference</div> </div> 220.70 +</div><!--header--> 220.71 +<div class="contents"> 220.72 + 220.73 +<p>The UCX string structure for immutable (constant) strings. 220.74 + <a href="structscstr__t.html#details">More...</a></p> 220.75 + 220.76 +<p><code>#include <<a class="el" href="string_8h_source.html">string.h</a>></code></p> 220.77 +<table class="memberdecls"> 220.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 220.79 +Data Fields</h2></td></tr> 220.80 +<tr class="memitem:a305fd48934b474a9bf4a40869030e391"><td class="memItemLeft" align="right" valign="top"><a id="a305fd48934b474a9bf4a40869030e391"></a> 220.81 +const char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structscstr__t.html#a305fd48934b474a9bf4a40869030e391">ptr</a></td></tr> 220.82 +<tr class="memdesc:a305fd48934b474a9bf4a40869030e391"><td class="mdescLeft"> </td><td class="mdescRight">A constant pointer to the immutable string (<b>not necessarily <code>NULL</code>-terminated</b>) <br /></td></tr> 220.83 +<tr class="separator:a305fd48934b474a9bf4a40869030e391"><td class="memSeparator" colspan="2"> </td></tr> 220.84 +<tr class="memitem:aaa0229f64f1057b6f65adededaa5a172"><td class="memItemLeft" align="right" valign="top"><a id="aaa0229f64f1057b6f65adededaa5a172"></a> 220.85 +size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structscstr__t.html#aaa0229f64f1057b6f65adededaa5a172">length</a></td></tr> 220.86 +<tr class="memdesc:aaa0229f64f1057b6f65adededaa5a172"><td class="mdescLeft"> </td><td class="mdescRight">The length of the string. <br /></td></tr> 220.87 +<tr class="separator:aaa0229f64f1057b6f65adededaa5a172"><td class="memSeparator" colspan="2"> </td></tr> 220.88 +</table> 220.89 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 220.90 +<div class="textblock"><p>The UCX string structure for immutable (constant) strings. </p> 220.91 +</div><hr/>The documentation for this struct was generated from the following file:<ul> 220.92 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="string_8h_source.html">string.h</a></li> 220.93 +</ul> 220.94 +</div><!-- contents --> 220.95 +<!-- start footer part --> 220.96 +<hr class="footer"/><address class="footer"><small> 220.97 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 220.98 +<img class="footer" src="doxygen.png" alt="doxygen"/> 220.99 +</a> 1.8.13 220.100 +</small></address> 220.101 +</body> 220.102 +</html>
221.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 221.2 +++ b/docs/api-2.1/structsstr__t.html Sat Feb 06 19:11:44 2021 +0100 221.3 @@ -0,0 +1,99 @@ 221.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 221.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 221.6 +<head> 221.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 221.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 221.9 +<meta name="generator" content="Doxygen 1.8.13"/> 221.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 221.11 +<title>ucx: sstr_t Struct Reference</title> 221.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 221.13 +<script type="text/javascript" src="jquery.js"></script> 221.14 +<script type="text/javascript" src="dynsections.js"></script> 221.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 221.16 +<script type="text/javascript" src="search/searchdata.js"></script> 221.17 +<script type="text/javascript" src="search/search.js"></script> 221.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 221.19 +</head> 221.20 +<body> 221.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 221.22 +<div id="titlearea"> 221.23 +<table cellspacing="0" cellpadding="0"> 221.24 + <tbody> 221.25 + <tr style="height: 56px;"> 221.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 221.27 + <td id="projectalign" style="padding-left: 0.5em;"> 221.28 + <div id="projectname">ucx 221.29 + </div> 221.30 + <div id="projectbrief">UAP Common Extensions</div> 221.31 + </td> 221.32 + </tr> 221.33 + </tbody> 221.34 +</table> 221.35 +</div> 221.36 +<!-- end header part --> 221.37 +<!-- Generated by Doxygen 1.8.13 --> 221.38 +<script type="text/javascript"> 221.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 221.40 +</script> 221.41 +<script type="text/javascript" src="menudata.js"></script> 221.42 +<script type="text/javascript" src="menu.js"></script> 221.43 +<script type="text/javascript"> 221.44 +$(function() { 221.45 + initMenu('',true,false,'search.php','Search'); 221.46 + $(document).ready(function() { init_search(); }); 221.47 +}); 221.48 +</script> 221.49 +<div id="main-nav"></div> 221.50 +<!-- window showing the filter options --> 221.51 +<div id="MSearchSelectWindow" 221.52 + onmouseover="return searchBox.OnSearchSelectShow()" 221.53 + onmouseout="return searchBox.OnSearchSelectHide()" 221.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 221.55 +</div> 221.56 + 221.57 +<!-- iframe showing the search results (closed by default) --> 221.58 +<div id="MSearchResultsWindow"> 221.59 +<iframe src="javascript:void(0)" frameborder="0" 221.60 + name="MSearchResults" id="MSearchResults"> 221.61 +</iframe> 221.62 +</div> 221.63 + 221.64 +</div><!-- top --> 221.65 +<div class="header"> 221.66 + <div class="summary"> 221.67 +<a href="#pub-attribs">Data Fields</a> </div> 221.68 + <div class="headertitle"> 221.69 +<div class="title">sstr_t Struct Reference</div> </div> 221.70 +</div><!--header--> 221.71 +<div class="contents"> 221.72 + 221.73 +<p>The UCX string structure. 221.74 + <a href="structsstr__t.html#details">More...</a></p> 221.75 + 221.76 +<p><code>#include <<a class="el" href="string_8h_source.html">string.h</a>></code></p> 221.77 +<table class="memberdecls"> 221.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 221.79 +Data Fields</h2></td></tr> 221.80 +<tr class="memitem:af8049914efc1e67f7de3ee55ec0611b0"><td class="memItemLeft" align="right" valign="top"><a id="af8049914efc1e67f7de3ee55ec0611b0"></a> 221.81 +char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0">ptr</a></td></tr> 221.82 +<tr class="memdesc:af8049914efc1e67f7de3ee55ec0611b0"><td class="mdescLeft"> </td><td class="mdescRight">A pointer to the string (<b>not necessarily <code>NULL</code>-terminated</b>) <br /></td></tr> 221.83 +<tr class="separator:af8049914efc1e67f7de3ee55ec0611b0"><td class="memSeparator" colspan="2"> </td></tr> 221.84 +<tr class="memitem:a5cf571708cdff92e45f08458f2b98229"><td class="memItemLeft" align="right" valign="top"><a id="a5cf571708cdff92e45f08458f2b98229"></a> 221.85 +size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structsstr__t.html#a5cf571708cdff92e45f08458f2b98229">length</a></td></tr> 221.86 +<tr class="memdesc:a5cf571708cdff92e45f08458f2b98229"><td class="mdescLeft"> </td><td class="mdescRight">The length of the string. <br /></td></tr> 221.87 +<tr class="separator:a5cf571708cdff92e45f08458f2b98229"><td class="memSeparator" colspan="2"> </td></tr> 221.88 +</table> 221.89 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 221.90 +<div class="textblock"><p>The UCX string structure. </p> 221.91 +</div><hr/>The documentation for this struct was generated from the following file:<ul> 221.92 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="string_8h_source.html">string.h</a></li> 221.93 +</ul> 221.94 +</div><!-- contents --> 221.95 +<!-- start footer part --> 221.96 +<hr class="footer"/><address class="footer"><small> 221.97 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 221.98 +<img class="footer" src="doxygen.png" alt="doxygen"/> 221.99 +</a> 1.8.13 221.100 +</small></address> 221.101 +</body> 221.102 +</html>
222.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 222.2 +++ b/docs/api-2.1/structucx__memchunk.html Sat Feb 06 19:11:44 2021 +0100 222.3 @@ -0,0 +1,129 @@ 222.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 222.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 222.6 +<head> 222.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 222.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 222.9 +<meta name="generator" content="Doxygen 1.8.13"/> 222.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 222.11 +<title>ucx: ucx_memchunk Struct Reference</title> 222.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 222.13 +<script type="text/javascript" src="jquery.js"></script> 222.14 +<script type="text/javascript" src="dynsections.js"></script> 222.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 222.16 +<script type="text/javascript" src="search/searchdata.js"></script> 222.17 +<script type="text/javascript" src="search/search.js"></script> 222.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 222.19 +</head> 222.20 +<body> 222.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 222.22 +<div id="titlearea"> 222.23 +<table cellspacing="0" cellpadding="0"> 222.24 + <tbody> 222.25 + <tr style="height: 56px;"> 222.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 222.27 + <td id="projectalign" style="padding-left: 0.5em;"> 222.28 + <div id="projectname">ucx 222.29 + </div> 222.30 + <div id="projectbrief">UAP Common Extensions</div> 222.31 + </td> 222.32 + </tr> 222.33 + </tbody> 222.34 +</table> 222.35 +</div> 222.36 +<!-- end header part --> 222.37 +<!-- Generated by Doxygen 1.8.13 --> 222.38 +<script type="text/javascript"> 222.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 222.40 +</script> 222.41 +<script type="text/javascript" src="menudata.js"></script> 222.42 +<script type="text/javascript" src="menu.js"></script> 222.43 +<script type="text/javascript"> 222.44 +$(function() { 222.45 + initMenu('',true,false,'search.php','Search'); 222.46 + $(document).ready(function() { init_search(); }); 222.47 +}); 222.48 +</script> 222.49 +<div id="main-nav"></div> 222.50 +<!-- window showing the filter options --> 222.51 +<div id="MSearchSelectWindow" 222.52 + onmouseover="return searchBox.OnSearchSelectShow()" 222.53 + onmouseout="return searchBox.OnSearchSelectHide()" 222.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 222.55 +</div> 222.56 + 222.57 +<!-- iframe showing the search results (closed by default) --> 222.58 +<div id="MSearchResultsWindow"> 222.59 +<iframe src="javascript:void(0)" frameborder="0" 222.60 + name="MSearchResults" id="MSearchResults"> 222.61 +</iframe> 222.62 +</div> 222.63 + 222.64 +</div><!-- top --> 222.65 +<div class="header"> 222.66 + <div class="summary"> 222.67 +<a href="#pub-attribs">Data Fields</a> </div> 222.68 + <div class="headertitle"> 222.69 +<div class="title">ucx_memchunk Struct Reference</div> </div> 222.70 +</div><!--header--> 222.71 +<div class="contents"> 222.72 + 222.73 +<p>Capsule for destructible memory chunks. 222.74 + <a href="structucx__memchunk.html#details">More...</a></p> 222.75 +<table class="memberdecls"> 222.76 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 222.77 +Data Fields</h2></td></tr> 222.78 +<tr class="memitem:ac7b5e3fda47b917d6fb2a1d7ea28447b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structucx__memchunk.html#ac7b5e3fda47b917d6fb2a1d7ea28447b">destructor</a></td></tr> 222.79 +<tr class="memdesc:ac7b5e3fda47b917d6fb2a1d7ea28447b"><td class="mdescLeft"> </td><td class="mdescRight">The destructor for the memory chunk. <a href="#ac7b5e3fda47b917d6fb2a1d7ea28447b">More...</a><br /></td></tr> 222.80 +<tr class="separator:ac7b5e3fda47b917d6fb2a1d7ea28447b"><td class="memSeparator" colspan="2"> </td></tr> 222.81 +<tr class="memitem:ab86550503e5f019bfa61a1e91f1c40da"><td class="memItemLeft" align="right" valign="top">char </td><td class="memItemRight" valign="bottom"><a class="el" href="structucx__memchunk.html#ab86550503e5f019bfa61a1e91f1c40da">c</a></td></tr> 222.82 +<tr class="memdesc:ab86550503e5f019bfa61a1e91f1c40da"><td class="mdescLeft"> </td><td class="mdescRight">First byte of the memory chunk. <a href="#ab86550503e5f019bfa61a1e91f1c40da">More...</a><br /></td></tr> 222.83 +<tr class="separator:ab86550503e5f019bfa61a1e91f1c40da"><td class="memSeparator" colspan="2"> </td></tr> 222.84 +</table> 222.85 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 222.86 +<div class="textblock"><p>Capsule for destructible memory chunks. </p> 222.87 +</div><h2 class="groupheader">Field Documentation</h2> 222.88 +<a id="ab86550503e5f019bfa61a1e91f1c40da"></a> 222.89 +<h2 class="memtitle"><span class="permalink"><a href="#ab86550503e5f019bfa61a1e91f1c40da">◆ </a></span>c</h2> 222.90 + 222.91 +<div class="memitem"> 222.92 +<div class="memproto"> 222.93 + <table class="memname"> 222.94 + <tr> 222.95 + <td class="memname">char ucx_memchunk::c</td> 222.96 + </tr> 222.97 + </table> 222.98 +</div><div class="memdoc"> 222.99 + 222.100 +<p>First byte of the memory chunk. </p> 222.101 +<p>Note, that the address <code>&c</code> is also the address of the whole memory chunk. </p> 222.102 + 222.103 +</div> 222.104 +</div> 222.105 +<a id="ac7b5e3fda47b917d6fb2a1d7ea28447b"></a> 222.106 +<h2 class="memtitle"><span class="permalink"><a href="#ac7b5e3fda47b917d6fb2a1d7ea28447b">◆ </a></span>destructor</h2> 222.107 + 222.108 +<div class="memitem"> 222.109 +<div class="memproto"> 222.110 + <table class="memname"> 222.111 + <tr> 222.112 + <td class="memname"><a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> ucx_memchunk::destructor</td> 222.113 + </tr> 222.114 + </table> 222.115 +</div><div class="memdoc"> 222.116 + 222.117 +<p>The destructor for the memory chunk. </p> 222.118 + 222.119 +</div> 222.120 +</div> 222.121 +<hr/>The documentation for this struct was generated from the following file:<ul> 222.122 +<li>/home/mike/workspace/c/ucx/src/mempool.c</li> 222.123 +</ul> 222.124 +</div><!-- contents --> 222.125 +<!-- start footer part --> 222.126 +<hr class="footer"/><address class="footer"><small> 222.127 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 222.128 +<img class="footer" src="doxygen.png" alt="doxygen"/> 222.129 +</a> 1.8.13 222.130 +</small></address> 222.131 +</body> 222.132 +</html>
223.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 223.2 +++ b/docs/api-2.1/structucx__regdestr.html Sat Feb 06 19:11:44 2021 +0100 223.3 @@ -0,0 +1,128 @@ 223.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 223.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 223.6 +<head> 223.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 223.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 223.9 +<meta name="generator" content="Doxygen 1.8.13"/> 223.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 223.11 +<title>ucx: ucx_regdestr Struct Reference</title> 223.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 223.13 +<script type="text/javascript" src="jquery.js"></script> 223.14 +<script type="text/javascript" src="dynsections.js"></script> 223.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 223.16 +<script type="text/javascript" src="search/searchdata.js"></script> 223.17 +<script type="text/javascript" src="search/search.js"></script> 223.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 223.19 +</head> 223.20 +<body> 223.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 223.22 +<div id="titlearea"> 223.23 +<table cellspacing="0" cellpadding="0"> 223.24 + <tbody> 223.25 + <tr style="height: 56px;"> 223.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 223.27 + <td id="projectalign" style="padding-left: 0.5em;"> 223.28 + <div id="projectname">ucx 223.29 + </div> 223.30 + <div id="projectbrief">UAP Common Extensions</div> 223.31 + </td> 223.32 + </tr> 223.33 + </tbody> 223.34 +</table> 223.35 +</div> 223.36 +<!-- end header part --> 223.37 +<!-- Generated by Doxygen 1.8.13 --> 223.38 +<script type="text/javascript"> 223.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 223.40 +</script> 223.41 +<script type="text/javascript" src="menudata.js"></script> 223.42 +<script type="text/javascript" src="menu.js"></script> 223.43 +<script type="text/javascript"> 223.44 +$(function() { 223.45 + initMenu('',true,false,'search.php','Search'); 223.46 + $(document).ready(function() { init_search(); }); 223.47 +}); 223.48 +</script> 223.49 +<div id="main-nav"></div> 223.50 +<!-- window showing the filter options --> 223.51 +<div id="MSearchSelectWindow" 223.52 + onmouseover="return searchBox.OnSearchSelectShow()" 223.53 + onmouseout="return searchBox.OnSearchSelectHide()" 223.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 223.55 +</div> 223.56 + 223.57 +<!-- iframe showing the search results (closed by default) --> 223.58 +<div id="MSearchResultsWindow"> 223.59 +<iframe src="javascript:void(0)" frameborder="0" 223.60 + name="MSearchResults" id="MSearchResults"> 223.61 +</iframe> 223.62 +</div> 223.63 + 223.64 +</div><!-- top --> 223.65 +<div class="header"> 223.66 + <div class="summary"> 223.67 +<a href="#pub-attribs">Data Fields</a> </div> 223.68 + <div class="headertitle"> 223.69 +<div class="title">ucx_regdestr Struct Reference</div> </div> 223.70 +</div><!--header--> 223.71 +<div class="contents"> 223.72 + 223.73 +<p>Capsule for data and its destructor. 223.74 + <a href="structucx__regdestr.html#details">More...</a></p> 223.75 +<table class="memberdecls"> 223.76 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 223.77 +Data Fields</h2></td></tr> 223.78 +<tr class="memitem:acea2a3bb66909aa800a931ac8b0cce56"><td class="memItemLeft" align="right" valign="top"><a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="structucx__regdestr.html#acea2a3bb66909aa800a931ac8b0cce56">destructor</a></td></tr> 223.79 +<tr class="memdesc:acea2a3bb66909aa800a931ac8b0cce56"><td class="mdescLeft"> </td><td class="mdescRight">The destructor for the data. <a href="#acea2a3bb66909aa800a931ac8b0cce56">More...</a><br /></td></tr> 223.80 +<tr class="separator:acea2a3bb66909aa800a931ac8b0cce56"><td class="memSeparator" colspan="2"> </td></tr> 223.81 +<tr class="memitem:aac0e9ec8df4aab08728b4f8292b5f5e7"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="structucx__regdestr.html#aac0e9ec8df4aab08728b4f8292b5f5e7">ptr</a></td></tr> 223.82 +<tr class="memdesc:aac0e9ec8df4aab08728b4f8292b5f5e7"><td class="mdescLeft"> </td><td class="mdescRight">A pointer to the data. <a href="#aac0e9ec8df4aab08728b4f8292b5f5e7">More...</a><br /></td></tr> 223.83 +<tr class="separator:aac0e9ec8df4aab08728b4f8292b5f5e7"><td class="memSeparator" colspan="2"> </td></tr> 223.84 +</table> 223.85 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 223.86 +<div class="textblock"><p>Capsule for data and its destructor. </p> 223.87 +</div><h2 class="groupheader">Field Documentation</h2> 223.88 +<a id="acea2a3bb66909aa800a931ac8b0cce56"></a> 223.89 +<h2 class="memtitle"><span class="permalink"><a href="#acea2a3bb66909aa800a931ac8b0cce56">◆ </a></span>destructor</h2> 223.90 + 223.91 +<div class="memitem"> 223.92 +<div class="memproto"> 223.93 + <table class="memname"> 223.94 + <tr> 223.95 + <td class="memname"><a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a> ucx_regdestr::destructor</td> 223.96 + </tr> 223.97 + </table> 223.98 +</div><div class="memdoc"> 223.99 + 223.100 +<p>The destructor for the data. </p> 223.101 + 223.102 +</div> 223.103 +</div> 223.104 +<a id="aac0e9ec8df4aab08728b4f8292b5f5e7"></a> 223.105 +<h2 class="memtitle"><span class="permalink"><a href="#aac0e9ec8df4aab08728b4f8292b5f5e7">◆ </a></span>ptr</h2> 223.106 + 223.107 +<div class="memitem"> 223.108 +<div class="memproto"> 223.109 + <table class="memname"> 223.110 + <tr> 223.111 + <td class="memname">void* ucx_regdestr::ptr</td> 223.112 + </tr> 223.113 + </table> 223.114 +</div><div class="memdoc"> 223.115 + 223.116 +<p>A pointer to the data. </p> 223.117 + 223.118 +</div> 223.119 +</div> 223.120 +<hr/>The documentation for this struct was generated from the following file:<ul> 223.121 +<li>/home/mike/workspace/c/ucx/src/mempool.c</li> 223.122 +</ul> 223.123 +</div><!-- contents --> 223.124 +<!-- start footer part --> 223.125 +<hr class="footer"/><address class="footer"><small> 223.126 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 223.127 +<img class="footer" src="doxygen.png" alt="doxygen"/> 223.128 +</a> 1.8.13 223.129 +</small></address> 223.130 +</body> 223.131 +</html>
224.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 224.2 +++ b/docs/api-2.1/structucx__stack__metadata.html Sat Feb 06 19:11:44 2021 +0100 224.3 @@ -0,0 +1,99 @@ 224.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 224.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 224.6 +<head> 224.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 224.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 224.9 +<meta name="generator" content="Doxygen 1.8.13"/> 224.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 224.11 +<title>ucx: ucx_stack_metadata Struct Reference</title> 224.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 224.13 +<script type="text/javascript" src="jquery.js"></script> 224.14 +<script type="text/javascript" src="dynsections.js"></script> 224.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 224.16 +<script type="text/javascript" src="search/searchdata.js"></script> 224.17 +<script type="text/javascript" src="search/search.js"></script> 224.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 224.19 +</head> 224.20 +<body> 224.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 224.22 +<div id="titlearea"> 224.23 +<table cellspacing="0" cellpadding="0"> 224.24 + <tbody> 224.25 + <tr style="height: 56px;"> 224.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 224.27 + <td id="projectalign" style="padding-left: 0.5em;"> 224.28 + <div id="projectname">ucx 224.29 + </div> 224.30 + <div id="projectbrief">UAP Common Extensions</div> 224.31 + </td> 224.32 + </tr> 224.33 + </tbody> 224.34 +</table> 224.35 +</div> 224.36 +<!-- end header part --> 224.37 +<!-- Generated by Doxygen 1.8.13 --> 224.38 +<script type="text/javascript"> 224.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 224.40 +</script> 224.41 +<script type="text/javascript" src="menudata.js"></script> 224.42 +<script type="text/javascript" src="menu.js"></script> 224.43 +<script type="text/javascript"> 224.44 +$(function() { 224.45 + initMenu('',true,false,'search.php','Search'); 224.46 + $(document).ready(function() { init_search(); }); 224.47 +}); 224.48 +</script> 224.49 +<div id="main-nav"></div> 224.50 +<!-- window showing the filter options --> 224.51 +<div id="MSearchSelectWindow" 224.52 + onmouseover="return searchBox.OnSearchSelectShow()" 224.53 + onmouseout="return searchBox.OnSearchSelectHide()" 224.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 224.55 +</div> 224.56 + 224.57 +<!-- iframe showing the search results (closed by default) --> 224.58 +<div id="MSearchResultsWindow"> 224.59 +<iframe src="javascript:void(0)" frameborder="0" 224.60 + name="MSearchResults" id="MSearchResults"> 224.61 +</iframe> 224.62 +</div> 224.63 + 224.64 +</div><!-- top --> 224.65 +<div class="header"> 224.66 + <div class="summary"> 224.67 +<a href="#pub-attribs">Data Fields</a> </div> 224.68 + <div class="headertitle"> 224.69 +<div class="title">ucx_stack_metadata Struct Reference</div> </div> 224.70 +</div><!--header--> 224.71 +<div class="contents"> 224.72 + 224.73 +<p>Metadata for each UCX stack element. 224.74 + <a href="structucx__stack__metadata.html#details">More...</a></p> 224.75 + 224.76 +<p><code>#include <<a class="el" href="stack_8h_source.html">stack.h</a>></code></p> 224.77 +<table class="memberdecls"> 224.78 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a> 224.79 +Data Fields</h2></td></tr> 224.80 +<tr class="memitem:ad46d2e8e5b0acf05f2def41d451c5579"><td class="memItemLeft" align="right" valign="top"><a id="ad46d2e8e5b0acf05f2def41d451c5579"></a> 224.81 +char * </td><td class="memItemRight" valign="bottom"><a class="el" href="structucx__stack__metadata.html#ad46d2e8e5b0acf05f2def41d451c5579">prev</a></td></tr> 224.82 +<tr class="memdesc:ad46d2e8e5b0acf05f2def41d451c5579"><td class="mdescLeft"> </td><td class="mdescRight">Location of the previous element (<code>NULL</code> if this is the first) <br /></td></tr> 224.83 +<tr class="separator:ad46d2e8e5b0acf05f2def41d451c5579"><td class="memSeparator" colspan="2"> </td></tr> 224.84 +<tr class="memitem:ae2a2848b721cfa44a7e963484c5e4b28"><td class="memItemLeft" align="right" valign="top"><a id="ae2a2848b721cfa44a7e963484c5e4b28"></a> 224.85 +size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="structucx__stack__metadata.html#ae2a2848b721cfa44a7e963484c5e4b28">size</a></td></tr> 224.86 +<tr class="memdesc:ae2a2848b721cfa44a7e963484c5e4b28"><td class="mdescLeft"> </td><td class="mdescRight">Size of this element. <br /></td></tr> 224.87 +<tr class="separator:ae2a2848b721cfa44a7e963484c5e4b28"><td class="memSeparator" colspan="2"> </td></tr> 224.88 +</table> 224.89 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 224.90 +<div class="textblock"><p>Metadata for each UCX stack element. </p> 224.91 +</div><hr/>The documentation for this struct was generated from the following file:<ul> 224.92 +<li>/home/mike/workspace/c/ucx/src/ucx/<a class="el" href="stack_8h_source.html">stack.h</a></li> 224.93 +</ul> 224.94 +</div><!-- contents --> 224.95 +<!-- start footer part --> 224.96 +<hr class="footer"/><address class="footer"><small> 224.97 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 224.98 +<img class="footer" src="doxygen.png" alt="doxygen"/> 224.99 +</a> 1.8.13 224.100 +</small></address> 224.101 +</body> 224.102 +</html>
225.1 Binary file docs/api-2.1/sync_off.png has changed
226.1 Binary file docs/api-2.1/sync_on.png has changed
227.1 Binary file docs/api-2.1/tab_a.png has changed
228.1 Binary file docs/api-2.1/tab_b.png has changed
229.1 Binary file docs/api-2.1/tab_h.png has changed
230.1 Binary file docs/api-2.1/tab_s.png has changed
231.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 231.2 +++ b/docs/api-2.1/tabs.css Sat Feb 06 19:11:44 2021 +0100 231.3 @@ -0,0 +1,1 @@ 231.4 +.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}}
232.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 232.2 +++ b/docs/api-2.1/test_8h.html Sat Feb 06 19:11:44 2021 +0100 232.3 @@ -0,0 +1,547 @@ 232.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 232.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 232.6 +<head> 232.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 232.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 232.9 +<meta name="generator" content="Doxygen 1.8.13"/> 232.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 232.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/test.h File Reference</title> 232.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 232.13 +<script type="text/javascript" src="jquery.js"></script> 232.14 +<script type="text/javascript" src="dynsections.js"></script> 232.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 232.16 +<script type="text/javascript" src="search/searchdata.js"></script> 232.17 +<script type="text/javascript" src="search/search.js"></script> 232.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 232.19 +</head> 232.20 +<body> 232.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 232.22 +<div id="titlearea"> 232.23 +<table cellspacing="0" cellpadding="0"> 232.24 + <tbody> 232.25 + <tr style="height: 56px;"> 232.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 232.27 + <td id="projectalign" style="padding-left: 0.5em;"> 232.28 + <div id="projectname">ucx 232.29 + </div> 232.30 + <div id="projectbrief">UAP Common Extensions</div> 232.31 + </td> 232.32 + </tr> 232.33 + </tbody> 232.34 +</table> 232.35 +</div> 232.36 +<!-- end header part --> 232.37 +<!-- Generated by Doxygen 1.8.13 --> 232.38 +<script type="text/javascript"> 232.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 232.40 +</script> 232.41 +<script type="text/javascript" src="menudata.js"></script> 232.42 +<script type="text/javascript" src="menu.js"></script> 232.43 +<script type="text/javascript"> 232.44 +$(function() { 232.45 + initMenu('',true,false,'search.php','Search'); 232.46 + $(document).ready(function() { init_search(); }); 232.47 +}); 232.48 +</script> 232.49 +<div id="main-nav"></div> 232.50 +<!-- window showing the filter options --> 232.51 +<div id="MSearchSelectWindow" 232.52 + onmouseover="return searchBox.OnSearchSelectShow()" 232.53 + onmouseout="return searchBox.OnSearchSelectHide()" 232.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 232.55 +</div> 232.56 + 232.57 +<!-- iframe showing the search results (closed by default) --> 232.58 +<div id="MSearchResultsWindow"> 232.59 +<iframe src="javascript:void(0)" frameborder="0" 232.60 + name="MSearchResults" id="MSearchResults"> 232.61 +</iframe> 232.62 +</div> 232.63 + 232.64 +<div id="nav-path" class="navpath"> 232.65 + <ul> 232.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 232.67 +</div> 232.68 +</div><!-- top --> 232.69 +<div class="header"> 232.70 + <div class="summary"> 232.71 +<a href="#nested-classes">Data Structures</a> | 232.72 +<a href="#define-members">Macros</a> | 232.73 +<a href="#typedef-members">Typedefs</a> | 232.74 +<a href="#func-members">Functions</a> </div> 232.75 + <div class="headertitle"> 232.76 +<div class="title">test.h File Reference</div> </div> 232.77 +</div><!--header--> 232.78 +<div class="contents"> 232.79 + 232.80 +<p>UCX Test Framework. 232.81 +<a href="#details">More...</a></p> 232.82 +<div class="textblock"><code>#include "<a class="el" href="ucx_8h_source.html">ucx.h</a>"</code><br /> 232.83 +<code>#include <stdio.h></code><br /> 232.84 +<code>#include <<a class="el" href="string_8h_source.html">string.h</a>></code><br /> 232.85 +<code>#include <setjmp.h></code><br /> 232.86 +</div> 232.87 +<p><a href="test_8h_source.html">Go to the source code of this file.</a></p> 232.88 +<table class="memberdecls"> 232.89 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a> 232.90 +Data Structures</h2></td></tr> 232.91 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxTestList.html">UcxTestList</a></td></tr> 232.92 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">Structure for the internal list of test cases. <a href="structUcxTestList.html#details">More...</a><br /></td></tr> 232.93 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 232.94 +<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structUcxTestSuite.html">UcxTestSuite</a></td></tr> 232.95 +<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">A test suite containing multiple test cases. <a href="structUcxTestSuite.html#details">More...</a><br /></td></tr> 232.96 +<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr> 232.97 +</table><table class="memberdecls"> 232.98 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> 232.99 +Macros</h2></td></tr> 232.100 +<tr class="memitem:a828bb1dfda1afd67ca795075903d227d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="test_8h.html#a828bb1dfda1afd67ca795075903d227d">__FUNCTION__</a>   __func__</td></tr> 232.101 +<tr class="memdesc:a828bb1dfda1afd67ca795075903d227d"><td class="mdescLeft"> </td><td class="mdescRight">Alias for the <code>__func__</code> preprocessor macro. <a href="#a828bb1dfda1afd67ca795075903d227d">More...</a><br /></td></tr> 232.102 +<tr class="separator:a828bb1dfda1afd67ca795075903d227d"><td class="memSeparator" colspan="2"> </td></tr> 232.103 +<tr class="memitem:a66cfb29c329fc9eaef071f2449836659"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="test_8h.html#a66cfb29c329fc9eaef071f2449836659">UCX_TEST</a>(name)   void name(<a class="el" href="structUcxTestSuite.html">UcxTestSuite</a>* _suite_,FILE *_output_)</td></tr> 232.104 +<tr class="memdesc:a66cfb29c329fc9eaef071f2449836659"><td class="mdescLeft"> </td><td class="mdescRight">Macro for a <a class="el" href="test_8h.html#ae906817354c010b83c2784260cce7a1c" title="Pointer to a test function. ">UcxTest</a> function header. <a href="#a66cfb29c329fc9eaef071f2449836659">More...</a><br /></td></tr> 232.105 +<tr class="separator:a66cfb29c329fc9eaef071f2449836659"><td class="memSeparator" colspan="2"> </td></tr> 232.106 +<tr class="memitem:a0547b8d4f3bcdb0633fdd8925e8aa5d4"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="test_8h.html#a0547b8d4f3bcdb0633fdd8925e8aa5d4">UCX_TEST_BEGIN</a></td></tr> 232.107 +<tr class="memdesc:a0547b8d4f3bcdb0633fdd8925e8aa5d4"><td class="mdescLeft"> </td><td class="mdescRight">Marks the begin of a test. <a href="#a0547b8d4f3bcdb0633fdd8925e8aa5d4">More...</a><br /></td></tr> 232.108 +<tr class="separator:a0547b8d4f3bcdb0633fdd8925e8aa5d4"><td class="memSeparator" colspan="2"> </td></tr> 232.109 +<tr class="memitem:a08f477cd12fc3fe741a92493e5df58a9"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="test_8h.html#a08f477cd12fc3fe741a92493e5df58a9">UCX_TEST_ASSERT</a>(condition, message)</td></tr> 232.110 +<tr class="memdesc:a08f477cd12fc3fe741a92493e5df58a9"><td class="mdescLeft"> </td><td class="mdescRight">Checks a test assertion. <a href="#a08f477cd12fc3fe741a92493e5df58a9">More...</a><br /></td></tr> 232.111 +<tr class="separator:a08f477cd12fc3fe741a92493e5df58a9"><td class="memSeparator" colspan="2"> </td></tr> 232.112 +<tr class="memitem:ae073cf5ead22cb27d662da048e16f44a"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="test_8h.html#ae073cf5ead22cb27d662da048e16f44a">UCX_TEST_SUBROUTINE</a>(name, ...)</td></tr> 232.113 +<tr class="memdesc:ae073cf5ead22cb27d662da048e16f44a"><td class="mdescLeft"> </td><td class="mdescRight">Macro for a test subroutine function header. <a href="#ae073cf5ead22cb27d662da048e16f44a">More...</a><br /></td></tr> 232.114 +<tr class="separator:ae073cf5ead22cb27d662da048e16f44a"><td class="memSeparator" colspan="2"> </td></tr> 232.115 +<tr class="memitem:a0efbab91c54f5237a2ab207f48cf0e51"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="test_8h.html#a0efbab91c54f5237a2ab207f48cf0e51">UCX_TEST_CALL_SUBROUTINE</a>(name, ...)   name(_suite_,_output_,_env_,__VA_ARGS__);</td></tr> 232.116 +<tr class="memdesc:a0efbab91c54f5237a2ab207f48cf0e51"><td class="mdescLeft"> </td><td class="mdescRight">Macro for calling a test subroutine. <a href="#a0efbab91c54f5237a2ab207f48cf0e51">More...</a><br /></td></tr> 232.117 +<tr class="separator:a0efbab91c54f5237a2ab207f48cf0e51"><td class="memSeparator" colspan="2"> </td></tr> 232.118 +<tr class="memitem:a86e64857c04f0447f8b16fb9c2b3b639"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="test_8h.html#a86e64857c04f0447f8b16fb9c2b3b639">UCX_TEST_END</a>   fwrite("success.\n", 1, 9, _output_); _suite_->success++;}</td></tr> 232.119 +<tr class="memdesc:a86e64857c04f0447f8b16fb9c2b3b639"><td class="mdescLeft"> </td><td class="mdescRight">Marks the end of a test. <a href="#a86e64857c04f0447f8b16fb9c2b3b639">More...</a><br /></td></tr> 232.120 +<tr class="separator:a86e64857c04f0447f8b16fb9c2b3b639"><td class="memSeparator" colspan="2"> </td></tr> 232.121 +</table><table class="memberdecls"> 232.122 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> 232.123 +Typedefs</h2></td></tr> 232.124 +<tr class="memitem:a52115d1d0f1c4a565ed6ef7c1bfd0363"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structUcxTestSuite.html">UcxTestSuite</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="test_8h.html#a52115d1d0f1c4a565ed6ef7c1bfd0363">UcxTestSuite</a></td></tr> 232.125 +<tr class="memdesc:a52115d1d0f1c4a565ed6ef7c1bfd0363"><td class="mdescLeft"> </td><td class="mdescRight">Type for the <a class="el" href="structUcxTestSuite.html" title="A test suite containing multiple test cases. ">UcxTestSuite</a>. <a href="#a52115d1d0f1c4a565ed6ef7c1bfd0363">More...</a><br /></td></tr> 232.126 +<tr class="separator:a52115d1d0f1c4a565ed6ef7c1bfd0363"><td class="memSeparator" colspan="2"> </td></tr> 232.127 +<tr class="memitem:ae906817354c010b83c2784260cce7a1c"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="test_8h.html#ae906817354c010b83c2784260cce7a1c">UcxTest</a>) (<a class="el" href="structUcxTestSuite.html">UcxTestSuite</a> *, FILE *)</td></tr> 232.128 +<tr class="memdesc:ae906817354c010b83c2784260cce7a1c"><td class="mdescLeft"> </td><td class="mdescRight">Pointer to a test function. <a href="#ae906817354c010b83c2784260cce7a1c">More...</a><br /></td></tr> 232.129 +<tr class="separator:ae906817354c010b83c2784260cce7a1c"><td class="memSeparator" colspan="2"> </td></tr> 232.130 +<tr class="memitem:a8048c50ae73ea690b776edfd63bd6a5d"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structUcxTestList.html">UcxTestList</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="test_8h.html#a8048c50ae73ea690b776edfd63bd6a5d">UcxTestList</a></td></tr> 232.131 +<tr class="memdesc:a8048c50ae73ea690b776edfd63bd6a5d"><td class="mdescLeft"> </td><td class="mdescRight">Type for the internal list of test cases. <a href="#a8048c50ae73ea690b776edfd63bd6a5d">More...</a><br /></td></tr> 232.132 +<tr class="separator:a8048c50ae73ea690b776edfd63bd6a5d"><td class="memSeparator" colspan="2"> </td></tr> 232.133 +</table><table class="memberdecls"> 232.134 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 232.135 +Functions</h2></td></tr> 232.136 +<tr class="memitem:a531f0df90363e0befbe900878f65f09e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structUcxTestSuite.html">UcxTestSuite</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="test_8h.html#a531f0df90363e0befbe900878f65f09e">ucx_test_suite_new</a> ()</td></tr> 232.137 +<tr class="memdesc:a531f0df90363e0befbe900878f65f09e"><td class="mdescLeft"> </td><td class="mdescRight">Creates a new test suite. <a href="#a531f0df90363e0befbe900878f65f09e">More...</a><br /></td></tr> 232.138 +<tr class="separator:a531f0df90363e0befbe900878f65f09e"><td class="memSeparator" colspan="2"> </td></tr> 232.139 +<tr class="memitem:a4a6ac61a6f72722273f8eaa7a343edde"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="test_8h.html#a4a6ac61a6f72722273f8eaa7a343edde">ucx_test_suite_free</a> (<a class="el" href="structUcxTestSuite.html">UcxTestSuite</a> *suite)</td></tr> 232.140 +<tr class="memdesc:a4a6ac61a6f72722273f8eaa7a343edde"><td class="mdescLeft"> </td><td class="mdescRight">Destroys a test suite. <a href="#a4a6ac61a6f72722273f8eaa7a343edde">More...</a><br /></td></tr> 232.141 +<tr class="separator:a4a6ac61a6f72722273f8eaa7a343edde"><td class="memSeparator" colspan="2"> </td></tr> 232.142 +<tr class="memitem:a8dfabc42f183d3a4d79379a5d17bf67d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="test_8h.html#a8dfabc42f183d3a4d79379a5d17bf67d">ucx_test_register</a> (<a class="el" href="structUcxTestSuite.html">UcxTestSuite</a> *suite, <a class="el" href="test_8h.html#ae906817354c010b83c2784260cce7a1c">UcxTest</a> test)</td></tr> 232.143 +<tr class="memdesc:a8dfabc42f183d3a4d79379a5d17bf67d"><td class="mdescLeft"> </td><td class="mdescRight">Registers a test function with the specified test suite. <a href="#a8dfabc42f183d3a4d79379a5d17bf67d">More...</a><br /></td></tr> 232.144 +<tr class="separator:a8dfabc42f183d3a4d79379a5d17bf67d"><td class="memSeparator" colspan="2"> </td></tr> 232.145 +<tr class="memitem:a3721458deeecb43aa322428f007714c3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="test_8h.html#a3721458deeecb43aa322428f007714c3">ucx_test_run</a> (<a class="el" href="structUcxTestSuite.html">UcxTestSuite</a> *suite, FILE *outstream)</td></tr> 232.146 +<tr class="memdesc:a3721458deeecb43aa322428f007714c3"><td class="mdescLeft"> </td><td class="mdescRight">Runs a test suite and writes the test log to the specified stream. <a href="#a3721458deeecb43aa322428f007714c3">More...</a><br /></td></tr> 232.147 +<tr class="separator:a3721458deeecb43aa322428f007714c3"><td class="memSeparator" colspan="2"> </td></tr> 232.148 +</table> 232.149 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 232.150 +<div class="textblock"><p>UCX Test Framework. </p> 232.151 +<p>Usage of this test framework:</p> 232.152 +<p>**** IN HEADER FILE: ****</p> 232.153 +<pre> 232.154 +<a class="el" href="test_8h.html#a66cfb29c329fc9eaef071f2449836659" title="Macro for a UcxTest function header. ">UCX_TEST(function_name)</a>; 232.155 +<a class="el" href="test_8h.html#ae073cf5ead22cb27d662da048e16f44a" title="Macro for a test subroutine function header. ">UCX_TEST_SUBROUTINE(subroutine_name, paramlist)</a>; // optional 232.156 +</pre><p>**** IN SOURCE FILE: **** </p><pre> 232.157 +<a class="el" href="test_8h.html#ae073cf5ead22cb27d662da048e16f44a" title="Macro for a test subroutine function header. ">UCX_TEST_SUBROUTINE(subroutine_name, paramlist)</a> { 232.158 + // tests with <a class="el" href="test_8h.html#a08f477cd12fc3fe741a92493e5df58a9" title="Checks a test assertion. ">UCX_TEST_ASSERT()</a> 232.159 +}</pre><pre><a class="el" href="test_8h.html#a66cfb29c329fc9eaef071f2449836659" title="Macro for a UcxTest function header. ">UCX_TEST(function_name)</a> { 232.160 + // memory allocation and other stuff here 232.161 + <a class="el" href="test_8h.html#a0547b8d4f3bcdb0633fdd8925e8aa5d4" title="Marks the begin of a test. ">UCX_TEST_BEGIN</a> 232.162 + // tests with <a class="el" href="test_8h.html#a08f477cd12fc3fe741a92493e5df58a9" title="Checks a test assertion. ">UCX_TEST_ASSERT()</a> and/or 232.163 + // calls with <a class="el" href="test_8h.html#a0efbab91c54f5237a2ab207f48cf0e51" title="Macro for calling a test subroutine. ">UCX_TEST_CALL_SUBROUTINE()</a> here 232.164 + <a class="el" href="test_8h.html#a86e64857c04f0447f8b16fb9c2b3b639" title="Marks the end of a test. ">UCX_TEST_END</a> 232.165 + // cleanup of memory here 232.166 +} 232.167 +</pre><p><b>Note:</b> if a test fails, a longjump is performed back to the <a class="el" href="test_8h.html#a0547b8d4f3bcdb0633fdd8925e8aa5d4" title="Marks the begin of a test. ">UCX_TEST_BEGIN</a> macro!</p> 232.168 +<p><b>Attention:</b> Do not call own functions within a test, that use <a class="el" href="test_8h.html#a08f477cd12fc3fe741a92493e5df58a9" title="Checks a test assertion. ">UCX_TEST_ASSERT()</a> macros and are not defined by using <a class="el" href="test_8h.html#ae073cf5ead22cb27d662da048e16f44a" title="Macro for a test subroutine function header. ">UCX_TEST_SUBROUTINE()</a>.</p> 232.169 +<dl class="section author"><dt>Author</dt><dd>Mike Becker </dd> 232.170 +<dd> 232.171 +Olaf Wintermann </dd></dl> 232.172 +</div><h2 class="groupheader">Macro Definition Documentation</h2> 232.173 +<a id="a828bb1dfda1afd67ca795075903d227d"></a> 232.174 +<h2 class="memtitle"><span class="permalink"><a href="#a828bb1dfda1afd67ca795075903d227d">◆ </a></span>__FUNCTION__</h2> 232.175 + 232.176 +<div class="memitem"> 232.177 +<div class="memproto"> 232.178 + <table class="memname"> 232.179 + <tr> 232.180 + <td class="memname">#define __FUNCTION__   __func__</td> 232.181 + </tr> 232.182 + </table> 232.183 +</div><div class="memdoc"> 232.184 + 232.185 +<p>Alias for the <code>__func__</code> preprocessor macro. </p> 232.186 +<p>Some compilers use <code>__func__</code> and others use <b>FUNCTION</b>. We use <b>FUNCTION</b> so we define it for those compilers which use <code>__func__</code>. </p> 232.187 + 232.188 +</div> 232.189 +</div> 232.190 +<a id="a66cfb29c329fc9eaef071f2449836659"></a> 232.191 +<h2 class="memtitle"><span class="permalink"><a href="#a66cfb29c329fc9eaef071f2449836659">◆ </a></span>UCX_TEST</h2> 232.192 + 232.193 +<div class="memitem"> 232.194 +<div class="memproto"> 232.195 + <table class="memname"> 232.196 + <tr> 232.197 + <td class="memname">#define UCX_TEST</td> 232.198 + <td>(</td> 232.199 + <td class="paramtype"> </td> 232.200 + <td class="paramname">name</td><td>)</td> 232.201 + <td>   void name(<a class="el" href="structUcxTestSuite.html">UcxTestSuite</a>* _suite_,FILE *_output_)</td> 232.202 + </tr> 232.203 + </table> 232.204 +</div><div class="memdoc"> 232.205 + 232.206 +<p>Macro for a <a class="el" href="test_8h.html#ae906817354c010b83c2784260cce7a1c" title="Pointer to a test function. ">UcxTest</a> function header. </p> 232.207 +<p>Use this macro to declare and/or define a <a class="el" href="test_8h.html#ae906817354c010b83c2784260cce7a1c" title="Pointer to a test function. ">UcxTest</a> function.</p> 232.208 +<dl class="params"><dt>Parameters</dt><dd> 232.209 + <table class="params"> 232.210 + <tr><td class="paramname">name</td><td>the name of the test function </td></tr> 232.211 + </table> 232.212 + </dd> 232.213 +</dl> 232.214 + 232.215 +</div> 232.216 +</div> 232.217 +<a id="a08f477cd12fc3fe741a92493e5df58a9"></a> 232.218 +<h2 class="memtitle"><span class="permalink"><a href="#a08f477cd12fc3fe741a92493e5df58a9">◆ </a></span>UCX_TEST_ASSERT</h2> 232.219 + 232.220 +<div class="memitem"> 232.221 +<div class="memproto"> 232.222 + <table class="memname"> 232.223 + <tr> 232.224 + <td class="memname">#define UCX_TEST_ASSERT</td> 232.225 + <td>(</td> 232.226 + <td class="paramtype"> </td> 232.227 + <td class="paramname">condition, </td> 232.228 + </tr> 232.229 + <tr> 232.230 + <td class="paramkey"></td> 232.231 + <td></td> 232.232 + <td class="paramtype"> </td> 232.233 + <td class="paramname">message </td> 232.234 + </tr> 232.235 + <tr> 232.236 + <td></td> 232.237 + <td>)</td> 232.238 + <td></td><td></td> 232.239 + </tr> 232.240 + </table> 232.241 +</div><div class="memdoc"> 232.242 +<b>Value:</b><div class="fragment"><div class="line"><span class="keywordflow">if</span> (!(condition)) { \</div><div class="line"> fwrite(message<span class="stringliteral">".\n"</span>, 1, 2+strlen(message), _output_); \</div><div class="line"> _suite_->failure++; \</div><div class="line"> longjmp(_env_, 1);\</div><div class="line"> }</div></div><!-- fragment --> 232.243 +<p>Checks a test assertion. </p> 232.244 +<p>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. </p><dl class="params"><dt>Parameters</dt><dd> 232.245 + <table class="params"> 232.246 + <tr><td class="paramname">condition</td><td>the condition to check </td></tr> 232.247 + <tr><td class="paramname">message</td><td>the message that shall be printed out on failure </td></tr> 232.248 + </table> 232.249 + </dd> 232.250 +</dl> 232.251 + 232.252 +</div> 232.253 +</div> 232.254 +<a id="a0547b8d4f3bcdb0633fdd8925e8aa5d4"></a> 232.255 +<h2 class="memtitle"><span class="permalink"><a href="#a0547b8d4f3bcdb0633fdd8925e8aa5d4">◆ </a></span>UCX_TEST_BEGIN</h2> 232.256 + 232.257 +<div class="memitem"> 232.258 +<div class="memproto"> 232.259 + <table class="memname"> 232.260 + <tr> 232.261 + <td class="memname">#define UCX_TEST_BEGIN</td> 232.262 + </tr> 232.263 + </table> 232.264 +</div><div class="memdoc"> 232.265 +<b>Value:</b><div class="fragment"><div class="line">fwrite(<span class="stringliteral">"Running "</span>, 1, 8, _output_);\</div><div class="line"> fwrite(<a class="code" href="test_8h.html#a828bb1dfda1afd67ca795075903d227d">__FUNCTION__</a>, 1, strlen(<a class="code" href="test_8h.html#a828bb1dfda1afd67ca795075903d227d">__FUNCTION__</a>), _output_);\</div><div class="line"> fwrite(<span class="stringliteral">"... "</span>, 1, 4, _output_);\</div><div class="line"> jmp_buf _env_; \</div><div class="line"> if (!setjmp(_env_)) {</div><div class="ttc" id="test_8h_html_a828bb1dfda1afd67ca795075903d227d"><div class="ttname"><a href="test_8h.html#a828bb1dfda1afd67ca795075903d227d">__FUNCTION__</a></div><div class="ttdeci">#define __FUNCTION__</div><div class="ttdoc">Alias for the __func__ preprocessor macro. </div><div class="ttdef"><b>Definition:</b> test.h:91</div></div> 232.266 +</div><!-- fragment --> 232.267 +<p>Marks the begin of a test. </p> 232.268 +<p><b>Note:</b> Any <a class="el" href="test_8h.html#a08f477cd12fc3fe741a92493e5df58a9" title="Checks a test assertion. ">UCX_TEST_ASSERT()</a> calls must be performed <b>after</b> <a class="el" href="test_8h.html#a0547b8d4f3bcdb0633fdd8925e8aa5d4" title="Marks the begin of a test. ">UCX_TEST_BEGIN</a>.</p> 232.269 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="test_8h.html#a86e64857c04f0447f8b16fb9c2b3b639" title="Marks the end of a test. ">UCX_TEST_END</a> </dd></dl> 232.270 + 232.271 +</div> 232.272 +</div> 232.273 +<a id="a0efbab91c54f5237a2ab207f48cf0e51"></a> 232.274 +<h2 class="memtitle"><span class="permalink"><a href="#a0efbab91c54f5237a2ab207f48cf0e51">◆ </a></span>UCX_TEST_CALL_SUBROUTINE</h2> 232.275 + 232.276 +<div class="memitem"> 232.277 +<div class="memproto"> 232.278 + <table class="memname"> 232.279 + <tr> 232.280 + <td class="memname">#define UCX_TEST_CALL_SUBROUTINE</td> 232.281 + <td>(</td> 232.282 + <td class="paramtype"> </td> 232.283 + <td class="paramname">name, </td> 232.284 + </tr> 232.285 + <tr> 232.286 + <td class="paramkey"></td> 232.287 + <td></td> 232.288 + <td class="paramtype"> </td> 232.289 + <td class="paramname"><em>...</em> </td> 232.290 + </tr> 232.291 + <tr> 232.292 + <td></td> 232.293 + <td>)</td> 232.294 + <td></td><td>   name(_suite_,_output_,_env_,__VA_ARGS__);</td> 232.295 + </tr> 232.296 + </table> 232.297 +</div><div class="memdoc"> 232.298 + 232.299 +<p>Macro for calling a test subroutine. </p> 232.300 +<p>Subroutines declared with <a class="el" href="test_8h.html#ae073cf5ead22cb27d662da048e16f44a" title="Macro for a test subroutine function header. ">UCX_TEST_SUBROUTINE()</a> can be called by using this macro.</p> 232.301 +<p><b>Note:</b> You may <b>only</b> call subroutines within a <a class="el" href="test_8h.html#a0547b8d4f3bcdb0633fdd8925e8aa5d4" title="Marks the begin of a test. ">UCX_TEST_BEGIN</a>- <a class="el" href="test_8h.html#a86e64857c04f0447f8b16fb9c2b3b639" title="Marks the end of a test. ">UCX_TEST_END</a>-block.</p> 232.302 +<dl class="params"><dt>Parameters</dt><dd> 232.303 + <table class="params"> 232.304 + <tr><td class="paramname">name</td><td>the name of the subroutine </td></tr> 232.305 + <tr><td class="paramname">...</td><td>the argument list</td></tr> 232.306 + </table> 232.307 + </dd> 232.308 +</dl> 232.309 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="test_8h.html#ae073cf5ead22cb27d662da048e16f44a" title="Macro for a test subroutine function header. ">UCX_TEST_SUBROUTINE()</a> </dd></dl> 232.310 + 232.311 +</div> 232.312 +</div> 232.313 +<a id="a86e64857c04f0447f8b16fb9c2b3b639"></a> 232.314 +<h2 class="memtitle"><span class="permalink"><a href="#a86e64857c04f0447f8b16fb9c2b3b639">◆ </a></span>UCX_TEST_END</h2> 232.315 + 232.316 +<div class="memitem"> 232.317 +<div class="memproto"> 232.318 + <table class="memname"> 232.319 + <tr> 232.320 + <td class="memname">#define UCX_TEST_END   fwrite("success.\n", 1, 9, _output_); _suite_->success++;}</td> 232.321 + </tr> 232.322 + </table> 232.323 +</div><div class="memdoc"> 232.324 + 232.325 +<p>Marks the end of a test. </p> 232.326 +<p><b>Note:</b> Any <a class="el" href="test_8h.html#a08f477cd12fc3fe741a92493e5df58a9" title="Checks a test assertion. ">UCX_TEST_ASSERT()</a> calls must be performed <b>before</b> <a class="el" href="test_8h.html#a86e64857c04f0447f8b16fb9c2b3b639" title="Marks the end of a test. ">UCX_TEST_END</a>.</p> 232.327 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="test_8h.html#a0547b8d4f3bcdb0633fdd8925e8aa5d4" title="Marks the begin of a test. ">UCX_TEST_BEGIN</a> </dd></dl> 232.328 + 232.329 +</div> 232.330 +</div> 232.331 +<a id="ae073cf5ead22cb27d662da048e16f44a"></a> 232.332 +<h2 class="memtitle"><span class="permalink"><a href="#ae073cf5ead22cb27d662da048e16f44a">◆ </a></span>UCX_TEST_SUBROUTINE</h2> 232.333 + 232.334 +<div class="memitem"> 232.335 +<div class="memproto"> 232.336 + <table class="memname"> 232.337 + <tr> 232.338 + <td class="memname">#define UCX_TEST_SUBROUTINE</td> 232.339 + <td>(</td> 232.340 + <td class="paramtype"> </td> 232.341 + <td class="paramname">name, </td> 232.342 + </tr> 232.343 + <tr> 232.344 + <td class="paramkey"></td> 232.345 + <td></td> 232.346 + <td class="paramtype"> </td> 232.347 + <td class="paramname"><em>...</em> </td> 232.348 + </tr> 232.349 + <tr> 232.350 + <td></td> 232.351 + <td>)</td> 232.352 + <td></td><td></td> 232.353 + </tr> 232.354 + </table> 232.355 +</div><div class="memdoc"> 232.356 +<b>Value:</b><div class="fragment"><div class="line"><span class="keywordtype">void</span> name(<a class="code" href="structUcxTestSuite.html">UcxTestSuite</a>* _suite_,\</div><div class="line"> FILE *_output_, jmp_buf _env_, __VA_ARGS__)</div><div class="ttc" id="structUcxTestSuite_html"><div class="ttname"><a href="structUcxTestSuite.html">UcxTestSuite</a></div><div class="ttdoc">A test suite containing multiple test cases. </div><div class="ttdef"><b>Definition:</b> test.h:116</div></div> 232.357 +</div><!-- fragment --> 232.358 +<p>Macro for a test subroutine function header. </p> 232.359 +<p>Use this to declare and/or define a subroutine that can be called by using <a class="el" href="test_8h.html#a0efbab91c54f5237a2ab207f48cf0e51" title="Macro for calling a test subroutine. ">UCX_TEST_CALL_SUBROUTINE()</a>.</p> 232.360 +<dl class="params"><dt>Parameters</dt><dd> 232.361 + <table class="params"> 232.362 + <tr><td class="paramname">name</td><td>the name of the subroutine </td></tr> 232.363 + <tr><td class="paramname">...</td><td>the parameter list</td></tr> 232.364 + </table> 232.365 + </dd> 232.366 +</dl> 232.367 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="test_8h.html#a0efbab91c54f5237a2ab207f48cf0e51" title="Macro for calling a test subroutine. ">UCX_TEST_CALL_SUBROUTINE()</a> </dd></dl> 232.368 + 232.369 +</div> 232.370 +</div> 232.371 +<h2 class="groupheader">Typedef Documentation</h2> 232.372 +<a id="ae906817354c010b83c2784260cce7a1c"></a> 232.373 +<h2 class="memtitle"><span class="permalink"><a href="#ae906817354c010b83c2784260cce7a1c">◆ </a></span>UcxTest</h2> 232.374 + 232.375 +<div class="memitem"> 232.376 +<div class="memproto"> 232.377 + <table class="memname"> 232.378 + <tr> 232.379 + <td class="memname">typedef void(* UcxTest) (<a class="el" href="structUcxTestSuite.html">UcxTestSuite</a> *, FILE *)</td> 232.380 + </tr> 232.381 + </table> 232.382 +</div><div class="memdoc"> 232.383 + 232.384 +<p>Pointer to a test function. </p> 232.385 + 232.386 +</div> 232.387 +</div> 232.388 +<a id="a8048c50ae73ea690b776edfd63bd6a5d"></a> 232.389 +<h2 class="memtitle"><span class="permalink"><a href="#a8048c50ae73ea690b776edfd63bd6a5d">◆ </a></span>UcxTestList</h2> 232.390 + 232.391 +<div class="memitem"> 232.392 +<div class="memproto"> 232.393 + <table class="memname"> 232.394 + <tr> 232.395 + <td class="memname">typedef struct <a class="el" href="structUcxTestList.html">UcxTestList</a> <a class="el" href="structUcxTestList.html">UcxTestList</a></td> 232.396 + </tr> 232.397 + </table> 232.398 +</div><div class="memdoc"> 232.399 + 232.400 +<p>Type for the internal list of test cases. </p> 232.401 + 232.402 +</div> 232.403 +</div> 232.404 +<a id="a52115d1d0f1c4a565ed6ef7c1bfd0363"></a> 232.405 +<h2 class="memtitle"><span class="permalink"><a href="#a52115d1d0f1c4a565ed6ef7c1bfd0363">◆ </a></span>UcxTestSuite</h2> 232.406 + 232.407 +<div class="memitem"> 232.408 +<div class="memproto"> 232.409 + <table class="memname"> 232.410 + <tr> 232.411 + <td class="memname">typedef struct <a class="el" href="structUcxTestSuite.html">UcxTestSuite</a> <a class="el" href="structUcxTestSuite.html">UcxTestSuite</a></td> 232.412 + </tr> 232.413 + </table> 232.414 +</div><div class="memdoc"> 232.415 + 232.416 +<p>Type for the <a class="el" href="structUcxTestSuite.html" title="A test suite containing multiple test cases. ">UcxTestSuite</a>. </p> 232.417 + 232.418 +</div> 232.419 +</div> 232.420 +<h2 class="groupheader">Function Documentation</h2> 232.421 +<a id="a8dfabc42f183d3a4d79379a5d17bf67d"></a> 232.422 +<h2 class="memtitle"><span class="permalink"><a href="#a8dfabc42f183d3a4d79379a5d17bf67d">◆ </a></span>ucx_test_register()</h2> 232.423 + 232.424 +<div class="memitem"> 232.425 +<div class="memproto"> 232.426 + <table class="memname"> 232.427 + <tr> 232.428 + <td class="memname">int ucx_test_register </td> 232.429 + <td>(</td> 232.430 + <td class="paramtype"><a class="el" href="structUcxTestSuite.html">UcxTestSuite</a> * </td> 232.431 + <td class="paramname"><em>suite</em>, </td> 232.432 + </tr> 232.433 + <tr> 232.434 + <td class="paramkey"></td> 232.435 + <td></td> 232.436 + <td class="paramtype"><a class="el" href="test_8h.html#ae906817354c010b83c2784260cce7a1c">UcxTest</a> </td> 232.437 + <td class="paramname"><em>test</em> </td> 232.438 + </tr> 232.439 + <tr> 232.440 + <td></td> 232.441 + <td>)</td> 232.442 + <td></td><td></td> 232.443 + </tr> 232.444 + </table> 232.445 +</div><div class="memdoc"> 232.446 + 232.447 +<p>Registers a test function with the specified test suite. </p> 232.448 +<dl class="params"><dt>Parameters</dt><dd> 232.449 + <table class="params"> 232.450 + <tr><td class="paramname">suite</td><td>the suite, the test function shall be added to </td></tr> 232.451 + <tr><td class="paramname">test</td><td>the test function to register </td></tr> 232.452 + </table> 232.453 + </dd> 232.454 +</dl> 232.455 +<dl class="section return"><dt>Returns</dt><dd><code>EXIT_SUCCESS</code> on success or <code>EXIT_FAILURE</code> on failure </dd></dl> 232.456 + 232.457 +</div> 232.458 +</div> 232.459 +<a id="a3721458deeecb43aa322428f007714c3"></a> 232.460 +<h2 class="memtitle"><span class="permalink"><a href="#a3721458deeecb43aa322428f007714c3">◆ </a></span>ucx_test_run()</h2> 232.461 + 232.462 +<div class="memitem"> 232.463 +<div class="memproto"> 232.464 + <table class="memname"> 232.465 + <tr> 232.466 + <td class="memname">void ucx_test_run </td> 232.467 + <td>(</td> 232.468 + <td class="paramtype"><a class="el" href="structUcxTestSuite.html">UcxTestSuite</a> * </td> 232.469 + <td class="paramname"><em>suite</em>, </td> 232.470 + </tr> 232.471 + <tr> 232.472 + <td class="paramkey"></td> 232.473 + <td></td> 232.474 + <td class="paramtype">FILE * </td> 232.475 + <td class="paramname"><em>outstream</em> </td> 232.476 + </tr> 232.477 + <tr> 232.478 + <td></td> 232.479 + <td>)</td> 232.480 + <td></td><td></td> 232.481 + </tr> 232.482 + </table> 232.483 +</div><div class="memdoc"> 232.484 + 232.485 +<p>Runs a test suite and writes the test log to the specified stream. </p> 232.486 +<dl class="params"><dt>Parameters</dt><dd> 232.487 + <table class="params"> 232.488 + <tr><td class="paramname">suite</td><td>the test suite to run </td></tr> 232.489 + <tr><td class="paramname">outstream</td><td>the stream the log shall be written to </td></tr> 232.490 + </table> 232.491 + </dd> 232.492 +</dl> 232.493 + 232.494 +</div> 232.495 +</div> 232.496 +<a id="a4a6ac61a6f72722273f8eaa7a343edde"></a> 232.497 +<h2 class="memtitle"><span class="permalink"><a href="#a4a6ac61a6f72722273f8eaa7a343edde">◆ </a></span>ucx_test_suite_free()</h2> 232.498 + 232.499 +<div class="memitem"> 232.500 +<div class="memproto"> 232.501 + <table class="memname"> 232.502 + <tr> 232.503 + <td class="memname">void ucx_test_suite_free </td> 232.504 + <td>(</td> 232.505 + <td class="paramtype"><a class="el" href="structUcxTestSuite.html">UcxTestSuite</a> * </td> 232.506 + <td class="paramname"><em>suite</em></td><td>)</td> 232.507 + <td></td> 232.508 + </tr> 232.509 + </table> 232.510 +</div><div class="memdoc"> 232.511 + 232.512 +<p>Destroys a test suite. </p> 232.513 +<dl class="params"><dt>Parameters</dt><dd> 232.514 + <table class="params"> 232.515 + <tr><td class="paramname">suite</td><td>the test suite to destroy </td></tr> 232.516 + </table> 232.517 + </dd> 232.518 +</dl> 232.519 + 232.520 +</div> 232.521 +</div> 232.522 +<a id="a531f0df90363e0befbe900878f65f09e"></a> 232.523 +<h2 class="memtitle"><span class="permalink"><a href="#a531f0df90363e0befbe900878f65f09e">◆ </a></span>ucx_test_suite_new()</h2> 232.524 + 232.525 +<div class="memitem"> 232.526 +<div class="memproto"> 232.527 + <table class="memname"> 232.528 + <tr> 232.529 + <td class="memname"><a class="el" href="structUcxTestSuite.html">UcxTestSuite</a>* ucx_test_suite_new </td> 232.530 + <td>(</td> 232.531 + <td class="paramname"></td><td>)</td> 232.532 + <td></td> 232.533 + </tr> 232.534 + </table> 232.535 +</div><div class="memdoc"> 232.536 + 232.537 +<p>Creates a new test suite. </p> 232.538 +<dl class="section return"><dt>Returns</dt><dd>a new test suite </dd></dl> 232.539 + 232.540 +</div> 232.541 +</div> 232.542 +</div><!-- contents --> 232.543 +<!-- start footer part --> 232.544 +<hr class="footer"/><address class="footer"><small> 232.545 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 232.546 +<img class="footer" src="doxygen.png" alt="doxygen"/> 232.547 +</a> 1.8.13 232.548 +</small></address> 232.549 +</body> 232.550 +</html>
233.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 233.2 +++ b/docs/api-2.1/test_8h_source.html Sat Feb 06 19:11:44 2021 +0100 233.3 @@ -0,0 +1,93 @@ 233.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 233.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 233.6 +<head> 233.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 233.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 233.9 +<meta name="generator" content="Doxygen 1.8.13"/> 233.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 233.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/test.h Source File</title> 233.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 233.13 +<script type="text/javascript" src="jquery.js"></script> 233.14 +<script type="text/javascript" src="dynsections.js"></script> 233.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 233.16 +<script type="text/javascript" src="search/searchdata.js"></script> 233.17 +<script type="text/javascript" src="search/search.js"></script> 233.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 233.19 +</head> 233.20 +<body> 233.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 233.22 +<div id="titlearea"> 233.23 +<table cellspacing="0" cellpadding="0"> 233.24 + <tbody> 233.25 + <tr style="height: 56px;"> 233.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 233.27 + <td id="projectalign" style="padding-left: 0.5em;"> 233.28 + <div id="projectname">ucx 233.29 + </div> 233.30 + <div id="projectbrief">UAP Common Extensions</div> 233.31 + </td> 233.32 + </tr> 233.33 + </tbody> 233.34 +</table> 233.35 +</div> 233.36 +<!-- end header part --> 233.37 +<!-- Generated by Doxygen 1.8.13 --> 233.38 +<script type="text/javascript"> 233.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 233.40 +</script> 233.41 +<script type="text/javascript" src="menudata.js"></script> 233.42 +<script type="text/javascript" src="menu.js"></script> 233.43 +<script type="text/javascript"> 233.44 +$(function() { 233.45 + initMenu('',true,false,'search.php','Search'); 233.46 + $(document).ready(function() { init_search(); }); 233.47 +}); 233.48 +</script> 233.49 +<div id="main-nav"></div> 233.50 +<!-- window showing the filter options --> 233.51 +<div id="MSearchSelectWindow" 233.52 + onmouseover="return searchBox.OnSearchSelectShow()" 233.53 + onmouseout="return searchBox.OnSearchSelectHide()" 233.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 233.55 +</div> 233.56 + 233.57 +<!-- iframe showing the search results (closed by default) --> 233.58 +<div id="MSearchResultsWindow"> 233.59 +<iframe src="javascript:void(0)" frameborder="0" 233.60 + name="MSearchResults" id="MSearchResults"> 233.61 +</iframe> 233.62 +</div> 233.63 + 233.64 +<div id="nav-path" class="navpath"> 233.65 + <ul> 233.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 233.67 +</div> 233.68 +</div><!-- top --> 233.69 +<div class="header"> 233.70 + <div class="headertitle"> 233.71 +<div class="title">test.h</div> </div> 233.72 +</div><!--header--> 233.73 +<div class="contents"> 233.74 +<a href="test_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are met:</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * documentation and/or other materials provided with the distribution.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor">#ifndef UCX_TEST_H</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor">#define UCX_TEST_H</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="preprocessor">#include "<a class="code" href="ucx_8h.html">ucx.h</a>"</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="preprocessor">#include <stdio.h></span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="preprocessor">#include <<a class="code" href="string_8h.html">string.h</a>></span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="preprocessor">#include <setjmp.h></span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> </div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="preprocessor">#ifndef __FUNCTION__</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="test_8h.html#a828bb1dfda1afd67ca795075903d227d"> 91</a></span> <span class="preprocessor">#define __FUNCTION__ __func__</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="test_8h.html#a52115d1d0f1c4a565ed6ef7c1bfd0363"> 95</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structUcxTestSuite.html">UcxTestSuite</a> <a class="code" href="structUcxTestSuite.html">UcxTestSuite</a>;</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="test_8h.html#ae906817354c010b83c2784260cce7a1c"> 98</a></span> <span class="keyword">typedef</span> void(*<a class="code" href="test_8h.html#ae906817354c010b83c2784260cce7a1c">UcxTest</a>)(<a class="code" href="structUcxTestSuite.html">UcxTestSuite</a>*,FILE*);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="test_8h.html#a8048c50ae73ea690b776edfd63bd6a5d"> 101</a></span> <span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="structUcxTestList.html">UcxTestList</a> <a class="code" href="structUcxTestList.html">UcxTestList</a>;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> </div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="structUcxTestList.html"> 104</a></span> <span class="keyword">struct </span><a class="code" href="structUcxTestList.html">UcxTestList</a> {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  </div><div class="line"><a name="l00107"></a><span class="lineno"><a class="line" href="structUcxTestList.html#a6022faa52e772b073141ca0a2f5a56c9"> 107</a></span>  <a class="code" href="test_8h.html#ae906817354c010b83c2784260cce7a1c">UcxTest</a> <a class="code" href="structUcxTestList.html#a6022faa52e772b073141ca0a2f5a56c9">test</a>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  </div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="structUcxTestList.html#aeebb80ff75d9f6f82ab6dc2641a3c74e"> 110</a></span>  <a class="code" href="structUcxTestList.html">UcxTestList</a> *<a class="code" href="structUcxTestList.html#aeebb80ff75d9f6f82ab6dc2641a3c74e">next</a>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span> };</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> </div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="structUcxTestSuite.html"> 116</a></span> <span class="keyword">struct </span>UcxTestSuite {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  </div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="structUcxTestSuite.html#a6cefa870a3c2e38d6ee682e38643dbbb"> 119</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structUcxTestSuite.html#a6cefa870a3c2e38d6ee682e38643dbbb">success</a>;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  </div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="structUcxTestSuite.html#abfd240541d1e956e49cde0ac36286951"> 122</a></span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structUcxTestSuite.html#abfd240541d1e956e49cde0ac36286951">failure</a>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  </div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="structUcxTestSuite.html#a630677a70ebc2c3296704cda3196492b"> 128</a></span>  <a class="code" href="structUcxTestList.html">UcxTestList</a> *<a class="code" href="structUcxTestSuite.html#a630677a70ebc2c3296704cda3196492b">tests</a>;</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> };</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> UcxTestSuite* <a class="code" href="test_8h.html#a531f0df90363e0befbe900878f65f09e">ucx_test_suite_new</a>();</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keywordtype">void</span> <a class="code" href="test_8h.html#a4a6ac61a6f72722273f8eaa7a343edde">ucx_test_suite_free</a>(UcxTestSuite* suite);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="keywordtype">int</span> <a class="code" href="test_8h.html#a8dfabc42f183d3a4d79379a5d17bf67d">ucx_test_register</a>(UcxTestSuite* suite, <a class="code" href="test_8h.html#ae906817354c010b83c2784260cce7a1c">UcxTest</a> <a class="code" href="structUcxTestList.html#a6022faa52e772b073141ca0a2f5a56c9">test</a>);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> </div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="keywordtype">void</span> <a class="code" href="test_8h.html#a3721458deeecb43aa322428f007714c3">ucx_test_run</a>(UcxTestSuite* suite, FILE* outstream);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="test_8h.html#a66cfb29c329fc9eaef071f2449836659"> 167</a></span> <span class="preprocessor">#define UCX_TEST(name) void name(UcxTestSuite* _suite_,FILE *_output_)</span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="test_8h.html#a0547b8d4f3bcdb0633fdd8925e8aa5d4"> 176</a></span> <span class="preprocessor">#define UCX_TEST_BEGIN fwrite("Running ", 1, 8, _output_);\</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> <span class="preprocessor"> fwrite(__FUNCTION__, 1, strlen(__FUNCTION__), _output_);\</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span> <span class="preprocessor"> fwrite("... ", 1, 4, _output_);\</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="preprocessor"> jmp_buf _env_; \</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="preprocessor"> if (!setjmp(_env_)) {</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> </div><div class="line"><a name="l00190"></a><span class="lineno"><a class="line" href="test_8h.html#a08f477cd12fc3fe741a92493e5df58a9"> 190</a></span> <span class="preprocessor">#define UCX_TEST_ASSERT(condition,message) if (!(condition)) { \</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor"> fwrite(message".\n", 1, 2+strlen(message), _output_); \</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor"> _suite_->failure++; \</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor"> longjmp(_env_, 1);\</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span> <span class="preprocessor"> }</span></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> </div><div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="test_8h.html#ae073cf5ead22cb27d662da048e16f44a"> 207</a></span> <span class="preprocessor">#define UCX_TEST_SUBROUTINE(name,...) void name(UcxTestSuite* _suite_,\</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor"> FILE *_output_, jmp_buf _env_, __VA_ARGS__)</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span> </div><div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="test_8h.html#a0efbab91c54f5237a2ab207f48cf0e51"> 224</a></span> <span class="preprocessor">#define UCX_TEST_CALL_SUBROUTINE(name,...) \</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="preprocessor"> name(_suite_,_output_,_env_,__VA_ARGS__);</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div><div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="test_8h.html#a86e64857c04f0447f8b16fb9c2b3b639"> 234</a></span> <span class="preprocessor">#define UCX_TEST_END fwrite("success.\n", 1, 9, _output_); _suite_->success++;}</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_TEST_H */</span><span class="preprocessor"></span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> </div><div class="ttc" id="structUcxTestSuite_html_a6cefa870a3c2e38d6ee682e38643dbbb"><div class="ttname"><a href="structUcxTestSuite.html#a6cefa870a3c2e38d6ee682e38643dbbb">UcxTestSuite::success</a></div><div class="ttdeci">unsigned int success</div><div class="ttdoc">The number of successful tests after the suite has been run. </div><div class="ttdef"><b>Definition:</b> test.h:119</div></div> 233.75 +<div class="ttc" id="string_8h_html"><div class="ttname"><a href="string_8h.html">string.h</a></div><div class="ttdoc">Bounded string implementation. </div></div> 233.76 +<div class="ttc" id="ucx_8h_html"><div class="ttname"><a href="ucx_8h.html">ucx.h</a></div><div class="ttdoc">Main UCX Header providing most common definitions. </div></div> 233.77 +<div class="ttc" id="structUcxTestList_html_a6022faa52e772b073141ca0a2f5a56c9"><div class="ttname"><a href="structUcxTestList.html#a6022faa52e772b073141ca0a2f5a56c9">UcxTestList::test</a></div><div class="ttdeci">UcxTest test</div><div class="ttdoc">Test case. </div><div class="ttdef"><b>Definition:</b> test.h:107</div></div> 233.78 +<div class="ttc" id="test_8h_html_a8dfabc42f183d3a4d79379a5d17bf67d"><div class="ttname"><a href="test_8h.html#a8dfabc42f183d3a4d79379a5d17bf67d">ucx_test_register</a></div><div class="ttdeci">int ucx_test_register(UcxTestSuite *suite, UcxTest test)</div><div class="ttdoc">Registers a test function with the specified test suite. </div><div class="ttdef"><b>Definition:</b> test.c:52</div></div> 233.79 +<div class="ttc" id="test_8h_html_a3721458deeecb43aa322428f007714c3"><div class="ttname"><a href="test_8h.html#a3721458deeecb43aa322428f007714c3">ucx_test_run</a></div><div class="ttdeci">void ucx_test_run(UcxTestSuite *suite, FILE *outstream)</div><div class="ttdoc">Runs a test suite and writes the test log to the specified stream. </div><div class="ttdef"><b>Definition:</b> test.c:82</div></div> 233.80 +<div class="ttc" id="structUcxTestList_html"><div class="ttname"><a href="structUcxTestList.html">UcxTestList</a></div><div class="ttdoc">Structure for the internal list of test cases. </div><div class="ttdef"><b>Definition:</b> test.h:104</div></div> 233.81 +<div class="ttc" id="test_8h_html_a531f0df90363e0befbe900878f65f09e"><div class="ttname"><a href="test_8h.html#a531f0df90363e0befbe900878f65f09e">ucx_test_suite_new</a></div><div class="ttdeci">UcxTestSuite * ucx_test_suite_new()</div><div class="ttdoc">Creates a new test suite. </div><div class="ttdef"><b>Definition:</b> test.c:31</div></div> 233.82 +<div class="ttc" id="structUcxTestSuite_html_a630677a70ebc2c3296704cda3196492b"><div class="ttname"><a href="structUcxTestSuite.html#a630677a70ebc2c3296704cda3196492b">UcxTestSuite::tests</a></div><div class="ttdeci">UcxTestList * tests</div><div class="ttdoc">Internal list of test cases. </div><div class="ttdef"><b>Definition:</b> test.h:128</div></div> 233.83 +<div class="ttc" id="test_8h_html_ae906817354c010b83c2784260cce7a1c"><div class="ttname"><a href="test_8h.html#ae906817354c010b83c2784260cce7a1c">UcxTest</a></div><div class="ttdeci">void(* UcxTest)(UcxTestSuite *, FILE *)</div><div class="ttdoc">Pointer to a test function. </div><div class="ttdef"><b>Definition:</b> test.h:98</div></div> 233.84 +<div class="ttc" id="test_8h_html_a4a6ac61a6f72722273f8eaa7a343edde"><div class="ttname"><a href="test_8h.html#a4a6ac61a6f72722273f8eaa7a343edde">ucx_test_suite_free</a></div><div class="ttdeci">void ucx_test_suite_free(UcxTestSuite *suite)</div><div class="ttdoc">Destroys a test suite. </div><div class="ttdef"><b>Definition:</b> test.c:42</div></div> 233.85 +<div class="ttc" id="structUcxTestSuite_html_abfd240541d1e956e49cde0ac36286951"><div class="ttname"><a href="structUcxTestSuite.html#abfd240541d1e956e49cde0ac36286951">UcxTestSuite::failure</a></div><div class="ttdeci">unsigned int failure</div><div class="ttdoc">The number of failed tests after the suite has been run. </div><div class="ttdef"><b>Definition:</b> test.h:122</div></div> 233.86 +<div class="ttc" id="structUcxTestList_html_aeebb80ff75d9f6f82ab6dc2641a3c74e"><div class="ttname"><a href="structUcxTestList.html#aeebb80ff75d9f6f82ab6dc2641a3c74e">UcxTestList::next</a></div><div class="ttdeci">UcxTestList * next</div><div class="ttdoc">Pointer to the next list element. </div><div class="ttdef"><b>Definition:</b> test.h:110</div></div> 233.87 +<div class="ttc" id="structUcxTestSuite_html"><div class="ttname"><a href="structUcxTestSuite.html">UcxTestSuite</a></div><div class="ttdoc">A test suite containing multiple test cases. </div><div class="ttdef"><b>Definition:</b> test.h:116</div></div> 233.88 +</div><!-- fragment --></div><!-- contents --> 233.89 +<!-- start footer part --> 233.90 +<hr class="footer"/><address class="footer"><small> 233.91 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 233.92 +<img class="footer" src="doxygen.png" alt="doxygen"/> 233.93 +</a> 1.8.13 233.94 +</small></address> 233.95 +</body> 233.96 +</html>
234.1 Binary file docs/api-2.1/uaplogo.png has changed
235.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 235.2 +++ b/docs/api-2.1/ucx_8h.html Sat Feb 06 19:11:44 2021 +0100 235.3 @@ -0,0 +1,388 @@ 235.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 235.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 235.6 +<head> 235.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 235.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 235.9 +<meta name="generator" content="Doxygen 1.8.13"/> 235.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 235.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/ucx.h File Reference</title> 235.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 235.13 +<script type="text/javascript" src="jquery.js"></script> 235.14 +<script type="text/javascript" src="dynsections.js"></script> 235.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 235.16 +<script type="text/javascript" src="search/searchdata.js"></script> 235.17 +<script type="text/javascript" src="search/search.js"></script> 235.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 235.19 +</head> 235.20 +<body> 235.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 235.22 +<div id="titlearea"> 235.23 +<table cellspacing="0" cellpadding="0"> 235.24 + <tbody> 235.25 + <tr style="height: 56px;"> 235.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 235.27 + <td id="projectalign" style="padding-left: 0.5em;"> 235.28 + <div id="projectname">ucx 235.29 + </div> 235.30 + <div id="projectbrief">UAP Common Extensions</div> 235.31 + </td> 235.32 + </tr> 235.33 + </tbody> 235.34 +</table> 235.35 +</div> 235.36 +<!-- end header part --> 235.37 +<!-- Generated by Doxygen 1.8.13 --> 235.38 +<script type="text/javascript"> 235.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 235.40 +</script> 235.41 +<script type="text/javascript" src="menudata.js"></script> 235.42 +<script type="text/javascript" src="menu.js"></script> 235.43 +<script type="text/javascript"> 235.44 +$(function() { 235.45 + initMenu('',true,false,'search.php','Search'); 235.46 + $(document).ready(function() { init_search(); }); 235.47 +}); 235.48 +</script> 235.49 +<div id="main-nav"></div> 235.50 +<!-- window showing the filter options --> 235.51 +<div id="MSearchSelectWindow" 235.52 + onmouseover="return searchBox.OnSearchSelectShow()" 235.53 + onmouseout="return searchBox.OnSearchSelectHide()" 235.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 235.55 +</div> 235.56 + 235.57 +<!-- iframe showing the search results (closed by default) --> 235.58 +<div id="MSearchResultsWindow"> 235.59 +<iframe src="javascript:void(0)" frameborder="0" 235.60 + name="MSearchResults" id="MSearchResults"> 235.61 +</iframe> 235.62 +</div> 235.63 + 235.64 +<div id="nav-path" class="navpath"> 235.65 + <ul> 235.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 235.67 +</div> 235.68 +</div><!-- top --> 235.69 +<div class="header"> 235.70 + <div class="summary"> 235.71 +<a href="#define-members">Macros</a> | 235.72 +<a href="#typedef-members">Typedefs</a> | 235.73 +<a href="#func-members">Functions</a> </div> 235.74 + <div class="headertitle"> 235.75 +<div class="title">ucx.h File Reference</div> </div> 235.76 +</div><!--header--> 235.77 +<div class="contents"> 235.78 + 235.79 +<p>Main UCX Header providing most common definitions. 235.80 +<a href="#details">More...</a></p> 235.81 +<div class="textblock"><code>#include <stdlib.h></code><br /> 235.82 +<code>#include <stdint.h></code><br /> 235.83 +<code>#include <sys/types.h></code><br /> 235.84 +</div> 235.85 +<p><a href="ucx_8h_source.html">Go to the source code of this file.</a></p> 235.86 +<table class="memberdecls"> 235.87 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> 235.88 +Macros</h2></td></tr> 235.89 +<tr class="memitem:aa57e5dd22d42387d748cc16777df1383"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#aa57e5dd22d42387d748cc16777df1383">UCX_VERSION_MAJOR</a>   2</td></tr> 235.90 +<tr class="memdesc:aa57e5dd22d42387d748cc16777df1383"><td class="mdescLeft"> </td><td class="mdescRight">Major UCX version as integer constant. <a href="#aa57e5dd22d42387d748cc16777df1383">More...</a><br /></td></tr> 235.91 +<tr class="separator:aa57e5dd22d42387d748cc16777df1383"><td class="memSeparator" colspan="2"> </td></tr> 235.92 +<tr class="memitem:a9ac10d6353e23d4615a87fc737c65eb0"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#a9ac10d6353e23d4615a87fc737c65eb0">UCX_VERSION_MINOR</a>   1</td></tr> 235.93 +<tr class="memdesc:a9ac10d6353e23d4615a87fc737c65eb0"><td class="mdescLeft"> </td><td class="mdescRight">Minor UCX version as integer constant. <a href="#a9ac10d6353e23d4615a87fc737c65eb0">More...</a><br /></td></tr> 235.94 +<tr class="separator:a9ac10d6353e23d4615a87fc737c65eb0"><td class="memSeparator" colspan="2"> </td></tr> 235.95 +<tr class="memitem:af12001920ca2fc1405615684e4dea284"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#af12001920ca2fc1405615684e4dea284">UCX_VERSION</a>   (((<a class="el" href="ucx_8h.html#aa57e5dd22d42387d748cc16777df1383">UCX_VERSION_MAJOR</a>)<<16)|<a class="el" href="ucx_8h.html#a9ac10d6353e23d4615a87fc737c65eb0">UCX_VERSION_MINOR</a>)</td></tr> 235.96 +<tr class="memdesc:af12001920ca2fc1405615684e4dea284"><td class="mdescLeft"> </td><td class="mdescRight">Version constant which ensures to increase monotonically. <a href="#af12001920ca2fc1405615684e4dea284">More...</a><br /></td></tr> 235.97 +<tr class="separator:af12001920ca2fc1405615684e4dea284"><td class="memSeparator" colspan="2"> </td></tr> 235.98 +<tr class="memitem:a0b5ed6c1a0b15356f4f948acfd32a4cc"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#a0b5ed6c1a0b15356f4f948acfd32a4cc">ucx_szmul</a>(a, b, result)   <a class="el" href="ucx_8h.html#a6637171cc0ec097b297f731a3036dd3b">ucx_szmul_impl</a>(a, b, result)</td></tr> 235.99 +<tr class="memdesc:a0b5ed6c1a0b15356f4f948acfd32a4cc"><td class="mdescLeft"> </td><td class="mdescRight">Performs a multiplication of size_t values and checks for overflow. <a href="#a0b5ed6c1a0b15356f4f948acfd32a4cc">More...</a><br /></td></tr> 235.100 +<tr class="separator:a0b5ed6c1a0b15356f4f948acfd32a4cc"><td class="memSeparator" colspan="2"> </td></tr> 235.101 +</table><table class="memberdecls"> 235.102 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> 235.103 +Typedefs</h2></td></tr> 235.104 +<tr class="memitem:ad2b370c2809914c8b7fedab163c266b3"><td class="memItemLeft" align="right" valign="top">typedef void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a>) (void *)</td></tr> 235.105 +<tr class="memdesc:ad2b370c2809914c8b7fedab163c266b3"><td class="mdescLeft"> </td><td class="mdescRight">A function pointer to a destructor function. <a href="#ad2b370c2809914c8b7fedab163c266b3">More...</a><br /></td></tr> 235.106 +<tr class="separator:ad2b370c2809914c8b7fedab163c266b3"><td class="memSeparator" colspan="2"> </td></tr> 235.107 +<tr class="memitem:afe5e2d5dbf34778e0e97852051570791"><td class="memItemLeft" align="right" valign="top">typedef int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a>) (const void *, const void *, void *)</td></tr> 235.108 +<tr class="memdesc:afe5e2d5dbf34778e0e97852051570791"><td class="mdescLeft"> </td><td class="mdescRight">Function pointer to a compare function. <a href="#afe5e2d5dbf34778e0e97852051570791">More...</a><br /></td></tr> 235.109 +<tr class="separator:afe5e2d5dbf34778e0e97852051570791"><td class="memSeparator" colspan="2"> </td></tr> 235.110 +<tr class="memitem:a0bc5bf89e556c1d45d10863d52728ac9"><td class="memItemLeft" align="right" valign="top">typedef intmax_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9">distance_func</a>) (const void *, const void *, void *)</td></tr> 235.111 +<tr class="memdesc:a0bc5bf89e556c1d45d10863d52728ac9"><td class="mdescLeft"> </td><td class="mdescRight">Function pointer to a distance function. <a href="#a0bc5bf89e556c1d45d10863d52728ac9">More...</a><br /></td></tr> 235.112 +<tr class="separator:a0bc5bf89e556c1d45d10863d52728ac9"><td class="memSeparator" colspan="2"> </td></tr> 235.113 +<tr class="memitem:aab917a5fe0965673c73e8ebd0a1fc967"><td class="memItemLeft" align="right" valign="top">typedef void *(* </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967">copy_func</a>) (const void *, void *)</td></tr> 235.114 +<tr class="memdesc:aab917a5fe0965673c73e8ebd0a1fc967"><td class="mdescLeft"> </td><td class="mdescRight">Function pointer to a copy function. <a href="#aab917a5fe0965673c73e8ebd0a1fc967">More...</a><br /></td></tr> 235.115 +<tr class="separator:aab917a5fe0965673c73e8ebd0a1fc967"><td class="memSeparator" colspan="2"> </td></tr> 235.116 +<tr class="memitem:a989b3f0fa4d307d278378fde435641ed"><td class="memItemLeft" align="right" valign="top">typedef size_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a>) (const void *, size_t, size_t, void *)</td></tr> 235.117 +<tr class="memdesc:a989b3f0fa4d307d278378fde435641ed"><td class="mdescLeft"> </td><td class="mdescRight">Function pointer to a write function. <a href="#a989b3f0fa4d307d278378fde435641ed">More...</a><br /></td></tr> 235.118 +<tr class="separator:a989b3f0fa4d307d278378fde435641ed"><td class="memSeparator" colspan="2"> </td></tr> 235.119 +<tr class="memitem:a6a67e255e460acb58f802067b3ff5fd5"><td class="memItemLeft" align="right" valign="top">typedef size_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">read_func</a>) (void *, size_t, size_t, void *)</td></tr> 235.120 +<tr class="memdesc:a6a67e255e460acb58f802067b3ff5fd5"><td class="mdescLeft"> </td><td class="mdescRight">Function pointer to a read function. <a href="#a6a67e255e460acb58f802067b3ff5fd5">More...</a><br /></td></tr> 235.121 +<tr class="separator:a6a67e255e460acb58f802067b3ff5fd5"><td class="memSeparator" colspan="2"> </td></tr> 235.122 +</table><table class="memberdecls"> 235.123 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 235.124 +Functions</h2></td></tr> 235.125 +<tr class="memitem:a6637171cc0ec097b297f731a3036dd3b"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="ucx_8h.html#a6637171cc0ec097b297f731a3036dd3b">ucx_szmul_impl</a> (size_t a, size_t b, size_t *result)</td></tr> 235.126 +<tr class="memdesc:a6637171cc0ec097b297f731a3036dd3b"><td class="mdescLeft"> </td><td class="mdescRight">Performs a multiplication of size_t values and checks for overflow. <a href="#a6637171cc0ec097b297f731a3036dd3b">More...</a><br /></td></tr> 235.127 +<tr class="separator:a6637171cc0ec097b297f731a3036dd3b"><td class="memSeparator" colspan="2"> </td></tr> 235.128 +</table> 235.129 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 235.130 +<div class="textblock"><p>Main UCX Header providing most common definitions. </p> 235.131 +<dl class="section author"><dt>Author</dt><dd>Mike Becker </dd> 235.132 +<dd> 235.133 +Olaf Wintermann </dd></dl> 235.134 +</div><h2 class="groupheader">Macro Definition Documentation</h2> 235.135 +<a id="a0b5ed6c1a0b15356f4f948acfd32a4cc"></a> 235.136 +<h2 class="memtitle"><span class="permalink"><a href="#a0b5ed6c1a0b15356f4f948acfd32a4cc">◆ </a></span>ucx_szmul</h2> 235.137 + 235.138 +<div class="memitem"> 235.139 +<div class="memproto"> 235.140 + <table class="memname"> 235.141 + <tr> 235.142 + <td class="memname">#define ucx_szmul</td> 235.143 + <td>(</td> 235.144 + <td class="paramtype"> </td> 235.145 + <td class="paramname">a, </td> 235.146 + </tr> 235.147 + <tr> 235.148 + <td class="paramkey"></td> 235.149 + <td></td> 235.150 + <td class="paramtype"> </td> 235.151 + <td class="paramname">b, </td> 235.152 + </tr> 235.153 + <tr> 235.154 + <td class="paramkey"></td> 235.155 + <td></td> 235.156 + <td class="paramtype"> </td> 235.157 + <td class="paramname">result </td> 235.158 + </tr> 235.159 + <tr> 235.160 + <td></td> 235.161 + <td>)</td> 235.162 + <td></td><td>   <a class="el" href="ucx_8h.html#a6637171cc0ec097b297f731a3036dd3b">ucx_szmul_impl</a>(a, b, result)</td> 235.163 + </tr> 235.164 + </table> 235.165 +</div><div class="memdoc"> 235.166 + 235.167 +<p>Performs a multiplication of size_t values and checks for overflow. </p> 235.168 +<dl class="params"><dt>Parameters</dt><dd> 235.169 + <table class="params"> 235.170 + <tr><td class="paramname">a</td><td>first operand </td></tr> 235.171 + <tr><td class="paramname">b</td><td>second operand </td></tr> 235.172 + <tr><td class="paramname">result</td><td>a pointer to a size_t, where the result should be stored </td></tr> 235.173 + </table> 235.174 + </dd> 235.175 +</dl> 235.176 +<dl class="section return"><dt>Returns</dt><dd>zero, if no overflow occurred and the result is correct, non-zero otherwise </dd></dl> 235.177 + 235.178 +</div> 235.179 +</div> 235.180 +<a id="af12001920ca2fc1405615684e4dea284"></a> 235.181 +<h2 class="memtitle"><span class="permalink"><a href="#af12001920ca2fc1405615684e4dea284">◆ </a></span>UCX_VERSION</h2> 235.182 + 235.183 +<div class="memitem"> 235.184 +<div class="memproto"> 235.185 + <table class="memname"> 235.186 + <tr> 235.187 + <td class="memname">#define UCX_VERSION   (((<a class="el" href="ucx_8h.html#aa57e5dd22d42387d748cc16777df1383">UCX_VERSION_MAJOR</a>)<<16)|<a class="el" href="ucx_8h.html#a9ac10d6353e23d4615a87fc737c65eb0">UCX_VERSION_MINOR</a>)</td> 235.188 + </tr> 235.189 + </table> 235.190 +</div><div class="memdoc"> 235.191 + 235.192 +<p>Version constant which ensures to increase monotonically. </p> 235.193 + 235.194 +</div> 235.195 +</div> 235.196 +<a id="aa57e5dd22d42387d748cc16777df1383"></a> 235.197 +<h2 class="memtitle"><span class="permalink"><a href="#aa57e5dd22d42387d748cc16777df1383">◆ </a></span>UCX_VERSION_MAJOR</h2> 235.198 + 235.199 +<div class="memitem"> 235.200 +<div class="memproto"> 235.201 + <table class="memname"> 235.202 + <tr> 235.203 + <td class="memname">#define UCX_VERSION_MAJOR   2</td> 235.204 + </tr> 235.205 + </table> 235.206 +</div><div class="memdoc"> 235.207 + 235.208 +<p>Major UCX version as integer constant. </p> 235.209 + 235.210 +</div> 235.211 +</div> 235.212 +<a id="a9ac10d6353e23d4615a87fc737c65eb0"></a> 235.213 +<h2 class="memtitle"><span class="permalink"><a href="#a9ac10d6353e23d4615a87fc737c65eb0">◆ </a></span>UCX_VERSION_MINOR</h2> 235.214 + 235.215 +<div class="memitem"> 235.216 +<div class="memproto"> 235.217 + <table class="memname"> 235.218 + <tr> 235.219 + <td class="memname">#define UCX_VERSION_MINOR   1</td> 235.220 + </tr> 235.221 + </table> 235.222 +</div><div class="memdoc"> 235.223 + 235.224 +<p>Minor UCX version as integer constant. </p> 235.225 + 235.226 +</div> 235.227 +</div> 235.228 +<h2 class="groupheader">Typedef Documentation</h2> 235.229 +<a id="afe5e2d5dbf34778e0e97852051570791"></a> 235.230 +<h2 class="memtitle"><span class="permalink"><a href="#afe5e2d5dbf34778e0e97852051570791">◆ </a></span>cmp_func</h2> 235.231 + 235.232 +<div class="memitem"> 235.233 +<div class="memproto"> 235.234 + <table class="memname"> 235.235 + <tr> 235.236 + <td class="memname">typedef int(* cmp_func) (const void *, const void *, void *)</td> 235.237 + </tr> 235.238 + </table> 235.239 +</div><div class="memdoc"> 235.240 + 235.241 +<p>Function pointer to a compare function. </p> 235.242 +<p>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 <code>NULL</code>, it shall be ignored. </p> 235.243 + 235.244 +</div> 235.245 +</div> 235.246 +<a id="aab917a5fe0965673c73e8ebd0a1fc967"></a> 235.247 +<h2 class="memtitle"><span class="permalink"><a href="#aab917a5fe0965673c73e8ebd0a1fc967">◆ </a></span>copy_func</h2> 235.248 + 235.249 +<div class="memitem"> 235.250 +<div class="memproto"> 235.251 + <table class="memname"> 235.252 + <tr> 235.253 + <td class="memname">typedef void*(* copy_func) (const void *, void *)</td> 235.254 + </tr> 235.255 + </table> 235.256 +</div><div class="memdoc"> 235.257 + 235.258 +<p>Function pointer to a copy function. </p> 235.259 +<p>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 <code>NULL</code>, it shall be ignored.</p> 235.260 +<p><b>Attention:</b> if pointers returned by functions of this type may be passed to <code>free()</code> depends on the implementation of the respective <code>copy_func</code>. </p> 235.261 + 235.262 +</div> 235.263 +</div> 235.264 +<a id="a0bc5bf89e556c1d45d10863d52728ac9"></a> 235.265 +<h2 class="memtitle"><span class="permalink"><a href="#a0bc5bf89e556c1d45d10863d52728ac9">◆ </a></span>distance_func</h2> 235.266 + 235.267 +<div class="memitem"> 235.268 +<div class="memproto"> 235.269 + <table class="memname"> 235.270 + <tr> 235.271 + <td class="memname">typedef intmax_t(* distance_func) (const void *, const void *, void *)</td> 235.272 + </tr> 235.273 + </table> 235.274 +</div><div class="memdoc"> 235.275 + 235.276 +<p>Function pointer to a distance function. </p> 235.277 +<p>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. </p> 235.278 + 235.279 +</div> 235.280 +</div> 235.281 +<a id="a6a67e255e460acb58f802067b3ff5fd5"></a> 235.282 +<h2 class="memtitle"><span class="permalink"><a href="#a6a67e255e460acb58f802067b3ff5fd5">◆ </a></span>read_func</h2> 235.283 + 235.284 +<div class="memitem"> 235.285 +<div class="memproto"> 235.286 + <table class="memname"> 235.287 + <tr> 235.288 + <td class="memname">typedef size_t(* read_func) (void *, size_t, size_t, void *)</td> 235.289 + </tr> 235.290 + </table> 235.291 +</div><div class="memdoc"> 235.292 + 235.293 +<p>Function pointer to a read function. </p> 235.294 +<p>The signature of the read function shall be compatible to the signature of standard <code>fread</code>, though it may use arbitrary data types for source and destination.</p> 235.295 +<p>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. </p> 235.296 + 235.297 +</div> 235.298 +</div> 235.299 +<a id="ad2b370c2809914c8b7fedab163c266b3"></a> 235.300 +<h2 class="memtitle"><span class="permalink"><a href="#ad2b370c2809914c8b7fedab163c266b3">◆ </a></span>ucx_destructor</h2> 235.301 + 235.302 +<div class="memitem"> 235.303 +<div class="memproto"> 235.304 + <table class="memname"> 235.305 + <tr> 235.306 + <td class="memname">typedef void(* ucx_destructor) (void *)</td> 235.307 + </tr> 235.308 + </table> 235.309 +</div><div class="memdoc"> 235.310 + 235.311 +<p>A function pointer to a destructor function. </p> 235.312 +<dl class="section see"><dt>See also</dt><dd>ucx_mempool_setdestr() </dd> 235.313 +<dd> 235.314 +ucx_mempool_regdestr() </dd></dl> 235.315 + 235.316 +</div> 235.317 +</div> 235.318 +<a id="a989b3f0fa4d307d278378fde435641ed"></a> 235.319 +<h2 class="memtitle"><span class="permalink"><a href="#a989b3f0fa4d307d278378fde435641ed">◆ </a></span>write_func</h2> 235.320 + 235.321 +<div class="memitem"> 235.322 +<div class="memproto"> 235.323 + <table class="memname"> 235.324 + <tr> 235.325 + <td class="memname">typedef size_t(* write_func) (const void *, size_t, size_t, void *)</td> 235.326 + </tr> 235.327 + </table> 235.328 +</div><div class="memdoc"> 235.329 + 235.330 +<p>Function pointer to a write function. </p> 235.331 +<p>The signature of the write function shall be compatible to the signature of standard <code>fwrite</code>, though it may use arbitrary data types for source and destination.</p> 235.332 +<p>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. </p> 235.333 + 235.334 +</div> 235.335 +</div> 235.336 +<h2 class="groupheader">Function Documentation</h2> 235.337 +<a id="a6637171cc0ec097b297f731a3036dd3b"></a> 235.338 +<h2 class="memtitle"><span class="permalink"><a href="#a6637171cc0ec097b297f731a3036dd3b">◆ </a></span>ucx_szmul_impl()</h2> 235.339 + 235.340 +<div class="memitem"> 235.341 +<div class="memproto"> 235.342 + <table class="memname"> 235.343 + <tr> 235.344 + <td class="memname">int ucx_szmul_impl </td> 235.345 + <td>(</td> 235.346 + <td class="paramtype">size_t </td> 235.347 + <td class="paramname"><em>a</em>, </td> 235.348 + </tr> 235.349 + <tr> 235.350 + <td class="paramkey"></td> 235.351 + <td></td> 235.352 + <td class="paramtype">size_t </td> 235.353 + <td class="paramname"><em>b</em>, </td> 235.354 + </tr> 235.355 + <tr> 235.356 + <td class="paramkey"></td> 235.357 + <td></td> 235.358 + <td class="paramtype">size_t * </td> 235.359 + <td class="paramname"><em>result</em> </td> 235.360 + </tr> 235.361 + <tr> 235.362 + <td></td> 235.363 + <td>)</td> 235.364 + <td></td><td></td> 235.365 + </tr> 235.366 + </table> 235.367 +</div><div class="memdoc"> 235.368 + 235.369 +<p>Performs a multiplication of size_t values and checks for overflow. </p> 235.370 +<p>This is a custom implementation in case there is no compiler builtin available.</p> 235.371 +<dl class="params"><dt>Parameters</dt><dd> 235.372 + <table class="params"> 235.373 + <tr><td class="paramname">a</td><td>first operand </td></tr> 235.374 + <tr><td class="paramname">b</td><td>second operand </td></tr> 235.375 + <tr><td class="paramname">result</td><td>a pointer to a size_t where the result should be stored </td></tr> 235.376 + </table> 235.377 + </dd> 235.378 +</dl> 235.379 +<dl class="section return"><dt>Returns</dt><dd>zero, if no overflow occurred and the result is correct, non-zero otherwise </dd></dl> 235.380 + 235.381 +</div> 235.382 +</div> 235.383 +</div><!-- contents --> 235.384 +<!-- start footer part --> 235.385 +<hr class="footer"/><address class="footer"><small> 235.386 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 235.387 +<img class="footer" src="doxygen.png" alt="doxygen"/> 235.388 +</a> 1.8.13 235.389 +</small></address> 235.390 +</body> 235.391 +</html>
236.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 236.2 +++ b/docs/api-2.1/ucx_8h_source.html Sat Feb 06 19:11:44 2021 +0100 236.3 @@ -0,0 +1,85 @@ 236.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 236.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 236.6 +<head> 236.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 236.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 236.9 +<meta name="generator" content="Doxygen 1.8.13"/> 236.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 236.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/ucx.h Source File</title> 236.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 236.13 +<script type="text/javascript" src="jquery.js"></script> 236.14 +<script type="text/javascript" src="dynsections.js"></script> 236.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 236.16 +<script type="text/javascript" src="search/searchdata.js"></script> 236.17 +<script type="text/javascript" src="search/search.js"></script> 236.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 236.19 +</head> 236.20 +<body> 236.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 236.22 +<div id="titlearea"> 236.23 +<table cellspacing="0" cellpadding="0"> 236.24 + <tbody> 236.25 + <tr style="height: 56px;"> 236.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 236.27 + <td id="projectalign" style="padding-left: 0.5em;"> 236.28 + <div id="projectname">ucx 236.29 + </div> 236.30 + <div id="projectbrief">UAP Common Extensions</div> 236.31 + </td> 236.32 + </tr> 236.33 + </tbody> 236.34 +</table> 236.35 +</div> 236.36 +<!-- end header part --> 236.37 +<!-- Generated by Doxygen 1.8.13 --> 236.38 +<script type="text/javascript"> 236.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 236.40 +</script> 236.41 +<script type="text/javascript" src="menudata.js"></script> 236.42 +<script type="text/javascript" src="menu.js"></script> 236.43 +<script type="text/javascript"> 236.44 +$(function() { 236.45 + initMenu('',true,false,'search.php','Search'); 236.46 + $(document).ready(function() { init_search(); }); 236.47 +}); 236.48 +</script> 236.49 +<div id="main-nav"></div> 236.50 +<!-- window showing the filter options --> 236.51 +<div id="MSearchSelectWindow" 236.52 + onmouseover="return searchBox.OnSearchSelectShow()" 236.53 + onmouseout="return searchBox.OnSearchSelectHide()" 236.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 236.55 +</div> 236.56 + 236.57 +<!-- iframe showing the search results (closed by default) --> 236.58 +<div id="MSearchResultsWindow"> 236.59 +<iframe src="javascript:void(0)" frameborder="0" 236.60 + name="MSearchResults" id="MSearchResults"> 236.61 +</iframe> 236.62 +</div> 236.63 + 236.64 +<div id="nav-path" class="navpath"> 236.65 + <ul> 236.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 236.67 +</div> 236.68 +</div><!-- top --> 236.69 +<div class="header"> 236.70 + <div class="headertitle"> 236.71 +<div class="title">ucx.h</div> </div> 236.72 +</div><!--header--> 236.73 +<div class="contents"> 236.74 +<a href="ucx_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are met:</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * documentation and/or other materials provided with the distribution.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor">#ifndef UCX_H</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#define UCX_H</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="ucx_8h.html#aa57e5dd22d42387d748cc16777df1383"> 40</a></span> <span class="preprocessor">#define UCX_VERSION_MAJOR 2</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="ucx_8h.html#a9ac10d6353e23d4615a87fc737c65eb0"> 43</a></span> <span class="preprocessor">#define UCX_VERSION_MINOR 1</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="ucx_8h.html#af12001920ca2fc1405615684e4dea284"> 46</a></span> <span class="preprocessor">#define UCX_VERSION (((UCX_VERSION_MAJOR)<<16)|UCX_VERSION_MINOR)</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#include <stdlib.h></span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#include <stdint.h></span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#ifdef _WIN32</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor">#if !(defined __ssize_t_defined || defined _SSIZE_T_)</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#include <BaseTsd.h></span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword">typedef</span> SSIZE_T ssize_t;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#define __ssize_t_defined</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor">#define _SSIZE_T_</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#endif </span><span class="comment">/* __ssize_t_defined and _SSIZE_T */</span><span class="preprocessor"></span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="preprocessor">#else </span><span class="comment">/* !_WIN32 */</span><span class="preprocessor"></span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#include <sys/types.h></span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor">#endif </span><span class="comment">/* _WIN32 */</span><span class="preprocessor"></span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  </div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3"> 72</a></span> <span class="keyword">typedef</span> void(*<a class="code" href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a>)(<span class="keywordtype">void</span>*);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791"> 84</a></span> <span class="keyword">typedef</span> int(*<a class="code" href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a>)(<span class="keyword">const</span> <span class="keywordtype">void</span>*,<span class="keyword">const</span> <span class="keywordtype">void</span>*,<span class="keywordtype">void</span>*);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9"> 93</a></span> <span class="keyword">typedef</span> intmax_t(*<a class="code" href="ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9">distance_func</a>)(<span class="keyword">const</span> <span class="keywordtype">void</span>*,<span class="keyword">const</span> <span class="keywordtype">void</span>*,<span class="keywordtype">void</span>*);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="ucx_8h.html#aab917a5fe0965673c73e8ebd0a1fc967"> 106</a></span> <span class="keyword">typedef</span> <span class="keywordtype">void</span>*(*copy_func)(<span class="keyword">const</span> <span class="keywordtype">void</span>*,<span class="keywordtype">void</span>*);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed"> 119</a></span> <span class="keyword">typedef</span> size_t(*<a class="code" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a>)(<span class="keyword">const</span> <span class="keywordtype">void</span>*, size_t, size_t, <span class="keywordtype">void</span>*);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5"> 132</a></span> <span class="keyword">typedef</span> size_t(*<a class="code" href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">read_func</a>)(<span class="keywordtype">void</span>*, size_t, size_t, <span class="keywordtype">void</span>*);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="preprocessor">#if __GNUC__ >= 5 || defined(__clang__)</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor">#define UCX_MUL_BUILTIN</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor">#if __WORDSIZE == 32</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="preprocessor">#define ucx_szmul(a, b, result) __builtin_umul_overflow(a, b, result)</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="preprocessor">#else </span><span class="comment">/* __WORDSIZE != 32 */</span><span class="preprocessor"></span></div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span> </div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="preprocessor">#define ucx_szmul(a, b, result) __builtin_umull_overflow(a, b, result)</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="preprocessor">#endif </span><span class="comment">/* __WORDSIZE */</span><span class="preprocessor"></span></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> <span class="preprocessor">#else </span><span class="comment">/* no GNUC or clang bultin */</span><span class="preprocessor"></span></div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00181"></a><span class="lineno"><a class="line" href="ucx_8h.html#a0b5ed6c1a0b15356f4f948acfd32a4cc"> 181</a></span> <span class="preprocessor">#define ucx_szmul(a, b, result) ucx_szmul_impl(a, b, result)</span></div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">int</span> <a class="code" href="ucx_8h.html#a6637171cc0ec097b297f731a3036dd3b">ucx_szmul_impl</a>(<span class="keywordtype">size_t</span> a, <span class="keywordtype">size_t</span> b, <span class="keywordtype">size_t</span> *result);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_H */</span><span class="preprocessor"></span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="ttc" id="ucx_8h_html_afe5e2d5dbf34778e0e97852051570791"><div class="ttname"><a href="ucx_8h.html#afe5e2d5dbf34778e0e97852051570791">cmp_func</a></div><div class="ttdeci">int(* cmp_func)(const void *, const void *, void *)</div><div class="ttdoc">Function pointer to a compare function. </div><div class="ttdef"><b>Definition:</b> ucx.h:84</div></div> 236.75 +<div class="ttc" id="ucx_8h_html_a6a67e255e460acb58f802067b3ff5fd5"><div class="ttname"><a href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">read_func</a></div><div class="ttdeci">size_t(* read_func)(void *, size_t, size_t, void *)</div><div class="ttdoc">Function pointer to a read function. </div><div class="ttdef"><b>Definition:</b> ucx.h:132</div></div> 236.76 +<div class="ttc" id="ucx_8h_html_a0bc5bf89e556c1d45d10863d52728ac9"><div class="ttname"><a href="ucx_8h.html#a0bc5bf89e556c1d45d10863d52728ac9">distance_func</a></div><div class="ttdeci">intmax_t(* distance_func)(const void *, const void *, void *)</div><div class="ttdoc">Function pointer to a distance function. </div><div class="ttdef"><b>Definition:</b> ucx.h:93</div></div> 236.77 +<div class="ttc" id="ucx_8h_html_a6637171cc0ec097b297f731a3036dd3b"><div class="ttname"><a href="ucx_8h.html#a6637171cc0ec097b297f731a3036dd3b">ucx_szmul_impl</a></div><div class="ttdeci">int ucx_szmul_impl(size_t a, size_t b, size_t *result)</div><div class="ttdoc">Performs a multiplication of size_t values and checks for overflow. </div><div class="ttdef"><b>Definition:</b> ucx.c:48</div></div> 236.78 +<div class="ttc" id="ucx_8h_html_a989b3f0fa4d307d278378fde435641ed"><div class="ttname"><a href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a></div><div class="ttdeci">size_t(* write_func)(const void *, size_t, size_t, void *)</div><div class="ttdoc">Function pointer to a write function. </div><div class="ttdef"><b>Definition:</b> ucx.h:119</div></div> 236.79 +<div class="ttc" id="ucx_8h_html_ad2b370c2809914c8b7fedab163c266b3"><div class="ttname"><a href="ucx_8h.html#ad2b370c2809914c8b7fedab163c266b3">ucx_destructor</a></div><div class="ttdeci">void(* ucx_destructor)(void *)</div><div class="ttdoc">A function pointer to a destructor function. </div><div class="ttdef"><b>Definition:</b> ucx.h:72</div></div> 236.80 +</div><!-- fragment --></div><!-- contents --> 236.81 +<!-- start footer part --> 236.82 +<hr class="footer"/><address class="footer"><small> 236.83 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 236.84 +<img class="footer" src="doxygen.png" alt="doxygen"/> 236.85 +</a> 1.8.13 236.86 +</small></address> 236.87 +</body> 236.88 +</html>
237.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 237.2 +++ b/docs/api-2.1/utils_8h.html Sat Feb 06 19:11:44 2021 +0100 237.3 @@ -0,0 +1,2233 @@ 237.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 237.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 237.6 +<head> 237.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 237.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 237.9 +<meta name="generator" content="Doxygen 1.8.13"/> 237.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 237.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/utils.h File Reference</title> 237.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 237.13 +<script type="text/javascript" src="jquery.js"></script> 237.14 +<script type="text/javascript" src="dynsections.js"></script> 237.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 237.16 +<script type="text/javascript" src="search/searchdata.js"></script> 237.17 +<script type="text/javascript" src="search/search.js"></script> 237.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 237.19 +</head> 237.20 +<body> 237.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 237.22 +<div id="titlearea"> 237.23 +<table cellspacing="0" cellpadding="0"> 237.24 + <tbody> 237.25 + <tr style="height: 56px;"> 237.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 237.27 + <td id="projectalign" style="padding-left: 0.5em;"> 237.28 + <div id="projectname">ucx 237.29 + </div> 237.30 + <div id="projectbrief">UAP Common Extensions</div> 237.31 + </td> 237.32 + </tr> 237.33 + </tbody> 237.34 +</table> 237.35 +</div> 237.36 +<!-- end header part --> 237.37 +<!-- Generated by Doxygen 1.8.13 --> 237.38 +<script type="text/javascript"> 237.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 237.40 +</script> 237.41 +<script type="text/javascript" src="menudata.js"></script> 237.42 +<script type="text/javascript" src="menu.js"></script> 237.43 +<script type="text/javascript"> 237.44 +$(function() { 237.45 + initMenu('',true,false,'search.php','Search'); 237.46 + $(document).ready(function() { init_search(); }); 237.47 +}); 237.48 +</script> 237.49 +<div id="main-nav"></div> 237.50 +<!-- window showing the filter options --> 237.51 +<div id="MSearchSelectWindow" 237.52 + onmouseover="return searchBox.OnSearchSelectShow()" 237.53 + onmouseout="return searchBox.OnSearchSelectHide()" 237.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 237.55 +</div> 237.56 + 237.57 +<!-- iframe showing the search results (closed by default) --> 237.58 +<div id="MSearchResultsWindow"> 237.59 +<iframe src="javascript:void(0)" frameborder="0" 237.60 + name="MSearchResults" id="MSearchResults"> 237.61 +</iframe> 237.62 +</div> 237.63 + 237.64 +<div id="nav-path" class="navpath"> 237.65 + <ul> 237.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 237.67 +</div> 237.68 +</div><!-- top --> 237.69 +<div class="header"> 237.70 + <div class="summary"> 237.71 +<a href="#define-members">Macros</a> | 237.72 +<a href="#func-members">Functions</a> </div> 237.73 + <div class="headertitle"> 237.74 +<div class="title">utils.h File Reference</div> </div> 237.75 +</div><!--header--> 237.76 +<div class="contents"> 237.77 + 237.78 +<p>Compare, copy and printf functions. 237.79 +<a href="#details">More...</a></p> 237.80 +<div class="textblock"><code>#include "<a class="el" href="ucx_8h_source.html">ucx.h</a>"</code><br /> 237.81 +<code>#include "<a class="el" href="string_8h_source.html">string.h</a>"</code><br /> 237.82 +<code>#include "<a class="el" href="allocator_8h_source.html">allocator.h</a>"</code><br /> 237.83 +<code>#include <inttypes.h></code><br /> 237.84 +<code>#include <stdarg.h></code><br /> 237.85 +</div> 237.86 +<p><a href="utils_8h_source.html">Go to the source code of this file.</a></p> 237.87 +<table class="memberdecls"> 237.88 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> 237.89 +Macros</h2></td></tr> 237.90 +<tr class="memitem:a23efd74fa5f701d4cf26ccbfd138a439"><td class="memItemLeft" align="right" valign="top"><a id="a23efd74fa5f701d4cf26ccbfd138a439"></a> 237.91 +#define </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a23efd74fa5f701d4cf26ccbfd138a439">UCX_STREAM_COPY_BUFSIZE</a>   4096</td></tr> 237.92 +<tr class="memdesc:a23efd74fa5f701d4cf26ccbfd138a439"><td class="mdescLeft"> </td><td class="mdescRight">Default buffer size for <a class="el" href="utils_8h.html#a41ca1344f781c0d3bf7a414a6e811392" title="Shorthand for an unbounded ucx_stream_bncopy call using a default buffer. ">ucx_stream_copy()</a> and <a class="el" href="utils_8h.html#add13f39a8af440b4f7e6f74339eaada2" title="Shorthand for ucx_stream_bncopy using a default copy buffer. ">ucx_stream_ncopy()</a>. <br /></td></tr> 237.93 +<tr class="separator:a23efd74fa5f701d4cf26ccbfd138a439"><td class="memSeparator" colspan="2"> </td></tr> 237.94 +<tr class="memitem:a41ca1344f781c0d3bf7a414a6e811392"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a41ca1344f781c0d3bf7a414a6e811392">ucx_stream_copy</a>(src, dest, rfnc, wfnc)</td></tr> 237.95 +<tr class="memdesc:a41ca1344f781c0d3bf7a414a6e811392"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for an unbounded ucx_stream_bncopy call using a default buffer. <a href="#a41ca1344f781c0d3bf7a414a6e811392">More...</a><br /></td></tr> 237.96 +<tr class="separator:a41ca1344f781c0d3bf7a414a6e811392"><td class="memSeparator" colspan="2"> </td></tr> 237.97 +<tr class="memitem:add13f39a8af440b4f7e6f74339eaada2"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#add13f39a8af440b4f7e6f74339eaada2">ucx_stream_ncopy</a>(src, dest, rfnc, wfnc, n)</td></tr> 237.98 +<tr class="memdesc:add13f39a8af440b4f7e6f74339eaada2"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for ucx_stream_bncopy using a default copy buffer. <a href="#add13f39a8af440b4f7e6f74339eaada2">More...</a><br /></td></tr> 237.99 +<tr class="separator:add13f39a8af440b4f7e6f74339eaada2"><td class="memSeparator" colspan="2"> </td></tr> 237.100 +<tr class="memitem:a6003a1750a66234169bd1f8cc84b297b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a6003a1750a66234169bd1f8cc84b297b">ucx_stream_bcopy</a>(src, dest, rfnc, wfnc, buf, bufsize)</td></tr> 237.101 +<tr class="memdesc:a6003a1750a66234169bd1f8cc84b297b"><td class="mdescLeft"> </td><td class="mdescRight">Shorthand for an unbounded ucx_stream_bncopy call using the specified buffer. <a href="#a6003a1750a66234169bd1f8cc84b297b">More...</a><br /></td></tr> 237.102 +<tr class="separator:a6003a1750a66234169bd1f8cc84b297b"><td class="memSeparator" colspan="2"> </td></tr> 237.103 +<tr class="memitem:af9f333b66ecd639c347c7235f4992e2e"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#af9f333b66ecd639c347c7235f4992e2e">ucx_sprintf</a>(...)   <a class="el" href="utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5">ucx_asprintf</a>(<a class="el" href="allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf">ucx_default_allocator</a>(), __VA_ARGS__)</td></tr> 237.104 +<tr class="memdesc:af9f333b66ecd639c347c7235f4992e2e"><td class="mdescLeft"> </td><td class="mdescRight">Shortcut for <a class="el" href="utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5" title="A printf() like function which allocates space for a sstr_t the result is written to...">ucx_asprintf()</a> with default allocator. <a href="#af9f333b66ecd639c347c7235f4992e2e">More...</a><br /></td></tr> 237.105 +<tr class="separator:af9f333b66ecd639c347c7235f4992e2e"><td class="memSeparator" colspan="2"> </td></tr> 237.106 +<tr class="memitem:a9d7d65a420f026fcb6982803d5120519"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a9d7d65a420f026fcb6982803d5120519">ucx_bprintf</a>(buffer, ...)</td></tr> 237.107 +<tr class="memdesc:a9d7d65a420f026fcb6982803d5120519"><td class="mdescLeft"> </td><td class="mdescRight">A <code>printf()</code> like function which writes the output to a <a class="el" href="structUcxBuffer.html" title="UCX Buffer. ">UcxBuffer</a>. <a href="#a9d7d65a420f026fcb6982803d5120519">More...</a><br /></td></tr> 237.108 +<tr class="separator:a9d7d65a420f026fcb6982803d5120519"><td class="memSeparator" colspan="2"> </td></tr> 237.109 +</table><table class="memberdecls"> 237.110 +<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> 237.111 +Functions</h2></td></tr> 237.112 +<tr class="memitem:adeb6e8d0a53a829207cfa0a979d01fff"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#adeb6e8d0a53a829207cfa0a979d01fff">ucx_strcpy</a> (const void *s, void *data)</td></tr> 237.113 +<tr class="memdesc:adeb6e8d0a53a829207cfa0a979d01fff"><td class="mdescLeft"> </td><td class="mdescRight">Copies a string. <a href="#adeb6e8d0a53a829207cfa0a979d01fff">More...</a><br /></td></tr> 237.114 +<tr class="separator:adeb6e8d0a53a829207cfa0a979d01fff"><td class="memSeparator" colspan="2"> </td></tr> 237.115 +<tr class="memitem:ab2e184e6a744941aab6b8058116baf30"><td class="memItemLeft" align="right" valign="top">void * </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#ab2e184e6a744941aab6b8058116baf30">ucx_memcpy</a> (const void *m, void *n)</td></tr> 237.116 +<tr class="memdesc:ab2e184e6a744941aab6b8058116baf30"><td class="mdescLeft"> </td><td class="mdescRight">Copies a memory area. <a href="#ab2e184e6a744941aab6b8058116baf30">More...</a><br /></td></tr> 237.117 +<tr class="separator:ab2e184e6a744941aab6b8058116baf30"><td class="memSeparator" colspan="2"> </td></tr> 237.118 +<tr class="memitem:a114ee7f7da62656ffd35e2dc23394201"><td class="memItemLeft" align="right" valign="top">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a114ee7f7da62656ffd35e2dc23394201">ucx_stream_bncopy</a> (void *src, void *dest, <a class="el" href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">read_func</a> rfnc, <a class="el" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a> wfnc, char *buf, size_t bufsize, size_t n)</td></tr> 237.119 +<tr class="memdesc:a114ee7f7da62656ffd35e2dc23394201"><td class="mdescLeft"> </td><td class="mdescRight">Reads data from a stream and writes it to another stream. <a href="#a114ee7f7da62656ffd35e2dc23394201">More...</a><br /></td></tr> 237.120 +<tr class="separator:a114ee7f7da62656ffd35e2dc23394201"><td class="memSeparator" colspan="2"> </td></tr> 237.121 +<tr class="memitem:aa6a37b9d172b6a5b2803d152f9e1b258"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#aa6a37b9d172b6a5b2803d152f9e1b258">ucx_cmp_str</a> (const void *s1, const void *s2, void *data)</td></tr> 237.122 +<tr class="memdesc:aa6a37b9d172b6a5b2803d152f9e1b258"><td class="mdescLeft"> </td><td class="mdescRight">Wraps the strcmp function. <a href="#aa6a37b9d172b6a5b2803d152f9e1b258">More...</a><br /></td></tr> 237.123 +<tr class="separator:aa6a37b9d172b6a5b2803d152f9e1b258"><td class="memSeparator" colspan="2"> </td></tr> 237.124 +<tr class="memitem:ac6b354a878f551a3a5b20a167db3f308"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#ac6b354a878f551a3a5b20a167db3f308">ucx_cmp_strn</a> (const void *s1, const void *s2, void *n)</td></tr> 237.125 +<tr class="memdesc:ac6b354a878f551a3a5b20a167db3f308"><td class="mdescLeft"> </td><td class="mdescRight">Wraps the strncmp function. <a href="#ac6b354a878f551a3a5b20a167db3f308">More...</a><br /></td></tr> 237.126 +<tr class="separator:ac6b354a878f551a3a5b20a167db3f308"><td class="memSeparator" colspan="2"> </td></tr> 237.127 +<tr class="memitem:adee0739589166d272f8cb7c23aabf8ba"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#adee0739589166d272f8cb7c23aabf8ba">ucx_cmp_sstr</a> (const void *s1, const void *s2, void *data)</td></tr> 237.128 +<tr class="memdesc:adee0739589166d272f8cb7c23aabf8ba"><td class="mdescLeft"> </td><td class="mdescRight">Wraps the sstrcmp function. <a href="#adee0739589166d272f8cb7c23aabf8ba">More...</a><br /></td></tr> 237.129 +<tr class="separator:adee0739589166d272f8cb7c23aabf8ba"><td class="memSeparator" colspan="2"> </td></tr> 237.130 +<tr class="memitem:a8ce7e11e6b3deafe89a32a091fde7f16"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a8ce7e11e6b3deafe89a32a091fde7f16">ucx_cmp_int</a> (const void *i1, const void *i2, void *data)</td></tr> 237.131 +<tr class="memdesc:a8ce7e11e6b3deafe89a32a091fde7f16"><td class="mdescLeft"> </td><td class="mdescRight">Compares two integers of type int. <a href="#a8ce7e11e6b3deafe89a32a091fde7f16">More...</a><br /></td></tr> 237.132 +<tr class="separator:a8ce7e11e6b3deafe89a32a091fde7f16"><td class="memSeparator" colspan="2"> </td></tr> 237.133 +<tr class="memitem:aeb57a2b9a6aaa0460c7a6bec29accf2c"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#aeb57a2b9a6aaa0460c7a6bec29accf2c">ucx_cmp_longint</a> (const void *i1, const void *i2, void *data)</td></tr> 237.134 +<tr class="memdesc:aeb57a2b9a6aaa0460c7a6bec29accf2c"><td class="mdescLeft"> </td><td class="mdescRight">Compares two integers of type long int. <a href="#aeb57a2b9a6aaa0460c7a6bec29accf2c">More...</a><br /></td></tr> 237.135 +<tr class="separator:aeb57a2b9a6aaa0460c7a6bec29accf2c"><td class="memSeparator" colspan="2"> </td></tr> 237.136 +<tr class="memitem:a366b57def20f86a41eaedf575eea5375"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a366b57def20f86a41eaedf575eea5375">ucx_cmp_longlong</a> (const void *i1, const void *i2, void *data)</td></tr> 237.137 +<tr class="memdesc:a366b57def20f86a41eaedf575eea5375"><td class="mdescLeft"> </td><td class="mdescRight">Compares two integers of type long long. <a href="#a366b57def20f86a41eaedf575eea5375">More...</a><br /></td></tr> 237.138 +<tr class="separator:a366b57def20f86a41eaedf575eea5375"><td class="memSeparator" colspan="2"> </td></tr> 237.139 +<tr class="memitem:aa29e6e559946375e34113e34e0b0bd0d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#aa29e6e559946375e34113e34e0b0bd0d">ucx_cmp_int16</a> (const void *i1, const void *i2, void *data)</td></tr> 237.140 +<tr class="memdesc:aa29e6e559946375e34113e34e0b0bd0d"><td class="mdescLeft"> </td><td class="mdescRight">Compares two integers of type int16_t. <a href="#aa29e6e559946375e34113e34e0b0bd0d">More...</a><br /></td></tr> 237.141 +<tr class="separator:aa29e6e559946375e34113e34e0b0bd0d"><td class="memSeparator" colspan="2"> </td></tr> 237.142 +<tr class="memitem:a858b2ac443fb202643b71f6a7e9218dd"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a858b2ac443fb202643b71f6a7e9218dd">ucx_cmp_int32</a> (const void *i1, const void *i2, void *data)</td></tr> 237.143 +<tr class="memdesc:a858b2ac443fb202643b71f6a7e9218dd"><td class="mdescLeft"> </td><td class="mdescRight">Compares two integers of type int32_t. <a href="#a858b2ac443fb202643b71f6a7e9218dd">More...</a><br /></td></tr> 237.144 +<tr class="separator:a858b2ac443fb202643b71f6a7e9218dd"><td class="memSeparator" colspan="2"> </td></tr> 237.145 +<tr class="memitem:a54701aea6a89fed1402dfb0bf56bc7f6"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a54701aea6a89fed1402dfb0bf56bc7f6">ucx_cmp_int64</a> (const void *i1, const void *i2, void *data)</td></tr> 237.146 +<tr class="memdesc:a54701aea6a89fed1402dfb0bf56bc7f6"><td class="mdescLeft"> </td><td class="mdescRight">Compares two integers of type int64_t. <a href="#a54701aea6a89fed1402dfb0bf56bc7f6">More...</a><br /></td></tr> 237.147 +<tr class="separator:a54701aea6a89fed1402dfb0bf56bc7f6"><td class="memSeparator" colspan="2"> </td></tr> 237.148 +<tr class="memitem:abd83a5da91c3dd026a6931bd80c12f1e"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#abd83a5da91c3dd026a6931bd80c12f1e">ucx_cmp_uint</a> (const void *i1, const void *i2, void *data)</td></tr> 237.149 +<tr class="memdesc:abd83a5da91c3dd026a6931bd80c12f1e"><td class="mdescLeft"> </td><td class="mdescRight">Compares two integers of type unsigned int. <a href="#abd83a5da91c3dd026a6931bd80c12f1e">More...</a><br /></td></tr> 237.150 +<tr class="separator:abd83a5da91c3dd026a6931bd80c12f1e"><td class="memSeparator" colspan="2"> </td></tr> 237.151 +<tr class="memitem:a3f3cbae2594d6f722bae29acb0408a24"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a3f3cbae2594d6f722bae29acb0408a24">ucx_cmp_ulongint</a> (const void *i1, const void *i2, void *data)</td></tr> 237.152 +<tr class="memdesc:a3f3cbae2594d6f722bae29acb0408a24"><td class="mdescLeft"> </td><td class="mdescRight">Compares two integers of type unsigned long int. <a href="#a3f3cbae2594d6f722bae29acb0408a24">More...</a><br /></td></tr> 237.153 +<tr class="separator:a3f3cbae2594d6f722bae29acb0408a24"><td class="memSeparator" colspan="2"> </td></tr> 237.154 +<tr class="memitem:a6acfc359421f21f9a042a654ff7faac5"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a6acfc359421f21f9a042a654ff7faac5">ucx_cmp_ulonglong</a> (const void *i1, const void *i2, void *data)</td></tr> 237.155 +<tr class="memdesc:a6acfc359421f21f9a042a654ff7faac5"><td class="mdescLeft"> </td><td class="mdescRight">Compares two integers of type unsigned long long. <a href="#a6acfc359421f21f9a042a654ff7faac5">More...</a><br /></td></tr> 237.156 +<tr class="separator:a6acfc359421f21f9a042a654ff7faac5"><td class="memSeparator" colspan="2"> </td></tr> 237.157 +<tr class="memitem:acde5366437e886a459b7468f7a9e11f0"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#acde5366437e886a459b7468f7a9e11f0">ucx_cmp_uint16</a> (const void *i1, const void *i2, void *data)</td></tr> 237.158 +<tr class="memdesc:acde5366437e886a459b7468f7a9e11f0"><td class="mdescLeft"> </td><td class="mdescRight">Compares two integers of type uint16_t. <a href="#acde5366437e886a459b7468f7a9e11f0">More...</a><br /></td></tr> 237.159 +<tr class="separator:acde5366437e886a459b7468f7a9e11f0"><td class="memSeparator" colspan="2"> </td></tr> 237.160 +<tr class="memitem:a5879d1722330355914d8c9146fa549d3"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a5879d1722330355914d8c9146fa549d3">ucx_cmp_uint32</a> (const void *i1, const void *i2, void *data)</td></tr> 237.161 +<tr class="memdesc:a5879d1722330355914d8c9146fa549d3"><td class="mdescLeft"> </td><td class="mdescRight">Compares two integers of type uint32_t. <a href="#a5879d1722330355914d8c9146fa549d3">More...</a><br /></td></tr> 237.162 +<tr class="separator:a5879d1722330355914d8c9146fa549d3"><td class="memSeparator" colspan="2"> </td></tr> 237.163 +<tr class="memitem:a1572a78b5b42f7151a5b2a5a7283d62d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a1572a78b5b42f7151a5b2a5a7283d62d">ucx_cmp_uint64</a> (const void *i1, const void *i2, void *data)</td></tr> 237.164 +<tr class="memdesc:a1572a78b5b42f7151a5b2a5a7283d62d"><td class="mdescLeft"> </td><td class="mdescRight">Compares two integers of type uint64_t. <a href="#a1572a78b5b42f7151a5b2a5a7283d62d">More...</a><br /></td></tr> 237.165 +<tr class="separator:a1572a78b5b42f7151a5b2a5a7283d62d"><td class="memSeparator" colspan="2"> </td></tr> 237.166 +<tr class="memitem:a4ab6753739d56c09cdf6079fdcabf7c6"><td class="memItemLeft" align="right" valign="top">intmax_t </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a4ab6753739d56c09cdf6079fdcabf7c6">ucx_dist_int</a> (const void *i1, const void *i2, void *data)</td></tr> 237.167 +<tr class="memdesc:a4ab6753739d56c09cdf6079fdcabf7c6"><td class="mdescLeft"> </td><td class="mdescRight">Distance function for integers of type int. <a href="#a4ab6753739d56c09cdf6079fdcabf7c6">More...</a><br /></td></tr> 237.168 +<tr class="separator:a4ab6753739d56c09cdf6079fdcabf7c6"><td class="memSeparator" colspan="2"> </td></tr> 237.169 +<tr class="memitem:a43e73d288b1553a0078bf4c98dd341f5"><td class="memItemLeft" align="right" valign="top">intmax_t </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a43e73d288b1553a0078bf4c98dd341f5">ucx_dist_longint</a> (const void *i1, const void *i2, void *data)</td></tr> 237.170 +<tr class="memdesc:a43e73d288b1553a0078bf4c98dd341f5"><td class="mdescLeft"> </td><td class="mdescRight">Distance function for integers of type long int. <a href="#a43e73d288b1553a0078bf4c98dd341f5">More...</a><br /></td></tr> 237.171 +<tr class="separator:a43e73d288b1553a0078bf4c98dd341f5"><td class="memSeparator" colspan="2"> </td></tr> 237.172 +<tr class="memitem:a306778414a2427951ea263be92368627"><td class="memItemLeft" align="right" valign="top">intmax_t </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a306778414a2427951ea263be92368627">ucx_dist_longlong</a> (const void *i1, const void *i2, void *data)</td></tr> 237.173 +<tr class="memdesc:a306778414a2427951ea263be92368627"><td class="mdescLeft"> </td><td class="mdescRight">Distance function for integers of type long long. <a href="#a306778414a2427951ea263be92368627">More...</a><br /></td></tr> 237.174 +<tr class="separator:a306778414a2427951ea263be92368627"><td class="memSeparator" colspan="2"> </td></tr> 237.175 +<tr class="memitem:a81fb8434b70ca11bf2c14abfa21d16a9"><td class="memItemLeft" align="right" valign="top">intmax_t </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a81fb8434b70ca11bf2c14abfa21d16a9">ucx_dist_int16</a> (const void *i1, const void *i2, void *data)</td></tr> 237.176 +<tr class="memdesc:a81fb8434b70ca11bf2c14abfa21d16a9"><td class="mdescLeft"> </td><td class="mdescRight">Distance function for integers of type int16_t. <a href="#a81fb8434b70ca11bf2c14abfa21d16a9">More...</a><br /></td></tr> 237.177 +<tr class="separator:a81fb8434b70ca11bf2c14abfa21d16a9"><td class="memSeparator" colspan="2"> </td></tr> 237.178 +<tr class="memitem:ab4a659cc46096f0490c1dafa57726476"><td class="memItemLeft" align="right" valign="top">intmax_t </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#ab4a659cc46096f0490c1dafa57726476">ucx_dist_int32</a> (const void *i1, const void *i2, void *data)</td></tr> 237.179 +<tr class="memdesc:ab4a659cc46096f0490c1dafa57726476"><td class="mdescLeft"> </td><td class="mdescRight">Distance function for integers of type int32_t. <a href="#ab4a659cc46096f0490c1dafa57726476">More...</a><br /></td></tr> 237.180 +<tr class="separator:ab4a659cc46096f0490c1dafa57726476"><td class="memSeparator" colspan="2"> </td></tr> 237.181 +<tr class="memitem:a54e7d06585bad3a899befc4e9c13853f"><td class="memItemLeft" align="right" valign="top">intmax_t </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a54e7d06585bad3a899befc4e9c13853f">ucx_dist_int64</a> (const void *i1, const void *i2, void *data)</td></tr> 237.182 +<tr class="memdesc:a54e7d06585bad3a899befc4e9c13853f"><td class="mdescLeft"> </td><td class="mdescRight">Distance function for integers of type int64_t. <a href="#a54e7d06585bad3a899befc4e9c13853f">More...</a><br /></td></tr> 237.183 +<tr class="separator:a54e7d06585bad3a899befc4e9c13853f"><td class="memSeparator" colspan="2"> </td></tr> 237.184 +<tr class="memitem:a37b7d471ca1679992afc11a0deda45f4"><td class="memItemLeft" align="right" valign="top">intmax_t </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a37b7d471ca1679992afc11a0deda45f4">ucx_dist_uint</a> (const void *i1, const void *i2, void *data)</td></tr> 237.185 +<tr class="memdesc:a37b7d471ca1679992afc11a0deda45f4"><td class="mdescLeft"> </td><td class="mdescRight">Distance function for integers of type unsigned int. <a href="#a37b7d471ca1679992afc11a0deda45f4">More...</a><br /></td></tr> 237.186 +<tr class="separator:a37b7d471ca1679992afc11a0deda45f4"><td class="memSeparator" colspan="2"> </td></tr> 237.187 +<tr class="memitem:abb13476228d0c16bfaba08469adbae2d"><td class="memItemLeft" align="right" valign="top">intmax_t </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#abb13476228d0c16bfaba08469adbae2d">ucx_dist_ulongint</a> (const void *i1, const void *i2, void *data)</td></tr> 237.188 +<tr class="memdesc:abb13476228d0c16bfaba08469adbae2d"><td class="mdescLeft"> </td><td class="mdescRight">Distance function for integers of type unsigned long int. <a href="#abb13476228d0c16bfaba08469adbae2d">More...</a><br /></td></tr> 237.189 +<tr class="separator:abb13476228d0c16bfaba08469adbae2d"><td class="memSeparator" colspan="2"> </td></tr> 237.190 +<tr class="memitem:a59a5859272cb4b43cbdd58208c41e32b"><td class="memItemLeft" align="right" valign="top">intmax_t </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a59a5859272cb4b43cbdd58208c41e32b">ucx_dist_ulonglong</a> (const void *i1, const void *i2, void *data)</td></tr> 237.191 +<tr class="memdesc:a59a5859272cb4b43cbdd58208c41e32b"><td class="mdescLeft"> </td><td class="mdescRight">Distance function for integers of type unsigned long long. <a href="#a59a5859272cb4b43cbdd58208c41e32b">More...</a><br /></td></tr> 237.192 +<tr class="separator:a59a5859272cb4b43cbdd58208c41e32b"><td class="memSeparator" colspan="2"> </td></tr> 237.193 +<tr class="memitem:a66e00a0703cbcde050ec922578e2f080"><td class="memItemLeft" align="right" valign="top">intmax_t </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a66e00a0703cbcde050ec922578e2f080">ucx_dist_uint16</a> (const void *i1, const void *i2, void *data)</td></tr> 237.194 +<tr class="memdesc:a66e00a0703cbcde050ec922578e2f080"><td class="mdescLeft"> </td><td class="mdescRight">Distance function for integers of type uint16_t. <a href="#a66e00a0703cbcde050ec922578e2f080">More...</a><br /></td></tr> 237.195 +<tr class="separator:a66e00a0703cbcde050ec922578e2f080"><td class="memSeparator" colspan="2"> </td></tr> 237.196 +<tr class="memitem:add2b5c5507caba59d894b84e056b079b"><td class="memItemLeft" align="right" valign="top">intmax_t </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#add2b5c5507caba59d894b84e056b079b">ucx_dist_uint32</a> (const void *i1, const void *i2, void *data)</td></tr> 237.197 +<tr class="memdesc:add2b5c5507caba59d894b84e056b079b"><td class="mdescLeft"> </td><td class="mdescRight">Distance function for integers of type uint32_t. <a href="#add2b5c5507caba59d894b84e056b079b">More...</a><br /></td></tr> 237.198 +<tr class="separator:add2b5c5507caba59d894b84e056b079b"><td class="memSeparator" colspan="2"> </td></tr> 237.199 +<tr class="memitem:a3ba75e2e0b2479eef2b22fb219b42da7"><td class="memItemLeft" align="right" valign="top">intmax_t </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a3ba75e2e0b2479eef2b22fb219b42da7">ucx_dist_uint64</a> (const void *i1, const void *i2, void *data)</td></tr> 237.200 +<tr class="memdesc:a3ba75e2e0b2479eef2b22fb219b42da7"><td class="mdescLeft"> </td><td class="mdescRight">Distance function for integers of type uint64_t. <a href="#a3ba75e2e0b2479eef2b22fb219b42da7">More...</a><br /></td></tr> 237.201 +<tr class="separator:a3ba75e2e0b2479eef2b22fb219b42da7"><td class="memSeparator" colspan="2"> </td></tr> 237.202 +<tr class="memitem:ad1196b561bcdad76c393885819769a97"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#ad1196b561bcdad76c393885819769a97">ucx_cmp_float</a> (const void *f1, const void *f2, void *data)</td></tr> 237.203 +<tr class="memdesc:ad1196b561bcdad76c393885819769a97"><td class="mdescLeft"> </td><td class="mdescRight">Compares two real numbers of type float. <a href="#ad1196b561bcdad76c393885819769a97">More...</a><br /></td></tr> 237.204 +<tr class="separator:ad1196b561bcdad76c393885819769a97"><td class="memSeparator" colspan="2"> </td></tr> 237.205 +<tr class="memitem:ab804b7c27d0bfcd7bf3a3583140825b6"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#ab804b7c27d0bfcd7bf3a3583140825b6">ucx_cmp_double</a> (const void *d1, const void *d2, void *data)</td></tr> 237.206 +<tr class="memdesc:ab804b7c27d0bfcd7bf3a3583140825b6"><td class="mdescLeft"> </td><td class="mdescRight">Compares two real numbers of type double. <a href="#ab804b7c27d0bfcd7bf3a3583140825b6">More...</a><br /></td></tr> 237.207 +<tr class="separator:ab804b7c27d0bfcd7bf3a3583140825b6"><td class="memSeparator" colspan="2"> </td></tr> 237.208 +<tr class="memitem:aa174d539de3ea59be4f9640f17ce53d8"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#aa174d539de3ea59be4f9640f17ce53d8">ucx_cmp_ptr</a> (const void *ptr1, const void *ptr2, void *data)</td></tr> 237.209 +<tr class="memdesc:aa174d539de3ea59be4f9640f17ce53d8"><td class="mdescLeft"> </td><td class="mdescRight">Compares two pointers. <a href="#aa174d539de3ea59be4f9640f17ce53d8">More...</a><br /></td></tr> 237.210 +<tr class="separator:aa174d539de3ea59be4f9640f17ce53d8"><td class="memSeparator" colspan="2"> </td></tr> 237.211 +<tr class="memitem:aff7d2bcded71196831a8c0664333f8e7"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#aff7d2bcded71196831a8c0664333f8e7">ucx_cmp_mem</a> (const void *ptr1, const void *ptr2, void *n)</td></tr> 237.212 +<tr class="memdesc:aff7d2bcded71196831a8c0664333f8e7"><td class="mdescLeft"> </td><td class="mdescRight">Compares two memory areas. <a href="#aff7d2bcded71196831a8c0664333f8e7">More...</a><br /></td></tr> 237.213 +<tr class="separator:aff7d2bcded71196831a8c0664333f8e7"><td class="memSeparator" colspan="2"> </td></tr> 237.214 +<tr class="memitem:aa0bec80e1c67f769ff5e112a7d4ce72a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#aa0bec80e1c67f769ff5e112a7d4ce72a">ucx_fprintf</a> (void *stream, <a class="el" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a> wfc, const char *fmt,...)</td></tr> 237.215 +<tr class="memdesc:aa0bec80e1c67f769ff5e112a7d4ce72a"><td class="mdescLeft"> </td><td class="mdescRight">A <code>printf()</code> like function which writes the output to a stream by using a <a class="el" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed" title="Function pointer to a write function. ">write_func()</a>. <a href="#aa0bec80e1c67f769ff5e112a7d4ce72a">More...</a><br /></td></tr> 237.216 +<tr class="separator:aa0bec80e1c67f769ff5e112a7d4ce72a"><td class="memSeparator" colspan="2"> </td></tr> 237.217 +<tr class="memitem:a4907967beb92c3ae351dd239abbb6927"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a4907967beb92c3ae351dd239abbb6927">ucx_vfprintf</a> (void *stream, <a class="el" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a> wfc, const char *fmt, va_list ap)</td></tr> 237.218 +<tr class="memdesc:a4907967beb92c3ae351dd239abbb6927"><td class="mdescLeft"> </td><td class="mdescRight"><code>va_list</code> version of <a class="el" href="utils_8h.html#aa0bec80e1c67f769ff5e112a7d4ce72a" title="A printf() like function which writes the output to a stream by using a write_func(). ">ucx_fprintf()</a>. <a href="#a4907967beb92c3ae351dd239abbb6927">More...</a><br /></td></tr> 237.219 +<tr class="separator:a4907967beb92c3ae351dd239abbb6927"><td class="memSeparator" colspan="2"> </td></tr> 237.220 +<tr class="memitem:a9f9cf0e89ffdc256ecb35429907f51f5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5">ucx_asprintf</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, const char *fmt,...)</td></tr> 237.221 +<tr class="memdesc:a9f9cf0e89ffdc256ecb35429907f51f5"><td class="mdescLeft"> </td><td class="mdescRight">A <code>printf()</code> like function which allocates space for a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> the result is written to. <a href="#a9f9cf0e89ffdc256ecb35429907f51f5">More...</a><br /></td></tr> 237.222 +<tr class="separator:a9f9cf0e89ffdc256ecb35429907f51f5"><td class="memSeparator" colspan="2"> </td></tr> 237.223 +<tr class="memitem:a3ea1dfb856c741f3e8ec6bfdc9ad427e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsstr__t.html">sstr_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="utils_8h.html#a3ea1dfb856c741f3e8ec6bfdc9ad427e">ucx_vasprintf</a> (<a class="el" href="structUcxAllocator.html">UcxAllocator</a> *allocator, const char *fmt, va_list ap)</td></tr> 237.224 +<tr class="memdesc:a3ea1dfb856c741f3e8ec6bfdc9ad427e"><td class="mdescLeft"> </td><td class="mdescRight"><code>va_list</code> version of <a class="el" href="utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5" title="A printf() like function which allocates space for a sstr_t the result is written to...">ucx_asprintf()</a>. <a href="#a3ea1dfb856c741f3e8ec6bfdc9ad427e">More...</a><br /></td></tr> 237.225 +<tr class="separator:a3ea1dfb856c741f3e8ec6bfdc9ad427e"><td class="memSeparator" colspan="2"> </td></tr> 237.226 +</table> 237.227 +<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> 237.228 +<div class="textblock"><p>Compare, copy and printf functions. </p> 237.229 +<dl class="section author"><dt>Author</dt><dd>Mike Becker </dd> 237.230 +<dd> 237.231 +Olaf Wintermann </dd></dl> 237.232 +</div><h2 class="groupheader">Macro Definition Documentation</h2> 237.233 +<a id="a9d7d65a420f026fcb6982803d5120519"></a> 237.234 +<h2 class="memtitle"><span class="permalink"><a href="#a9d7d65a420f026fcb6982803d5120519">◆ </a></span>ucx_bprintf</h2> 237.235 + 237.236 +<div class="memitem"> 237.237 +<div class="memproto"> 237.238 + <table class="memname"> 237.239 + <tr> 237.240 + <td class="memname">#define ucx_bprintf</td> 237.241 + <td>(</td> 237.242 + <td class="paramtype"> </td> 237.243 + <td class="paramname">buffer, </td> 237.244 + </tr> 237.245 + <tr> 237.246 + <td class="paramkey"></td> 237.247 + <td></td> 237.248 + <td class="paramtype"> </td> 237.249 + <td class="paramname"><em>...</em> </td> 237.250 + </tr> 237.251 + <tr> 237.252 + <td></td> 237.253 + <td>)</td> 237.254 + <td></td><td></td> 237.255 + </tr> 237.256 + </table> 237.257 +</div><div class="memdoc"> 237.258 +<b>Value:</b><div class="fragment"><div class="line"><a class="code" href="utils_8h.html#aa0bec80e1c67f769ff5e112a7d4ce72a">ucx_fprintf</a>((<a class="code" href="structUcxBuffer.html">UcxBuffer</a>*)buffer, \</div><div class="line"> (<a class="code" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a>)<a class="code" href="buffer_8h.html#af8aacc7401814392b58c1b7b81bffc05">ucx_buffer_write</a>, __VA_ARGS__)</div><div class="ttc" id="buffer_8h_html_af8aacc7401814392b58c1b7b81bffc05"><div class="ttname"><a href="buffer_8h.html#af8aacc7401814392b58c1b7b81bffc05">ucx_buffer_write</a></div><div class="ttdeci">size_t ucx_buffer_write(const void *ptr, size_t size, size_t nitems, UcxBuffer *buffer)</div><div class="ttdoc">Writes data to a UcxBuffer. </div><div class="ttdef"><b>Definition:</b> buffer.c:152</div></div> 237.259 +<div class="ttc" id="structUcxBuffer_html"><div class="ttname"><a href="structUcxBuffer.html">UcxBuffer</a></div><div class="ttdoc">UCX Buffer. </div><div class="ttdef"><b>Definition:</b> buffer.h:73</div></div> 237.260 +<div class="ttc" id="utils_8h_html_aa0bec80e1c67f769ff5e112a7d4ce72a"><div class="ttname"><a href="utils_8h.html#aa0bec80e1c67f769ff5e112a7d4ce72a">ucx_fprintf</a></div><div class="ttdeci">int ucx_fprintf(void *stream, write_func wfc, const char *fmt,...)</div><div class="ttdoc">A printf() like function which writes the output to a stream by using a write_func(). </div><div class="ttdef"><b>Definition:</b> utils.c:343</div></div> 237.261 +<div class="ttc" id="ucx_8h_html_a989b3f0fa4d307d278378fde435641ed"><div class="ttname"><a href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a></div><div class="ttdeci">size_t(* write_func)(const void *, size_t, size_t, void *)</div><div class="ttdoc">Function pointer to a write function. </div><div class="ttdef"><b>Definition:</b> ucx.h:119</div></div> 237.262 +</div><!-- fragment --> 237.263 +<p>A <code>printf()</code> like function which writes the output to a <a class="el" href="structUcxBuffer.html" title="UCX Buffer. ">UcxBuffer</a>. </p> 237.264 +<dl class="params"><dt>Parameters</dt><dd> 237.265 + <table class="params"> 237.266 + <tr><td class="paramname">buffer</td><td>the buffer the data is written to </td></tr> 237.267 + <tr><td class="paramname">...</td><td>format string and additional arguments </td></tr> 237.268 + </table> 237.269 + </dd> 237.270 +</dl> 237.271 +<dl class="section return"><dt>Returns</dt><dd>the total number of bytes written </dd></dl> 237.272 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="utils_8h.html#aa0bec80e1c67f769ff5e112a7d4ce72a" title="A printf() like function which writes the output to a stream by using a write_func(). ">ucx_fprintf()</a> </dd></dl> 237.273 + 237.274 +</div> 237.275 +</div> 237.276 +<a id="af9f333b66ecd639c347c7235f4992e2e"></a> 237.277 +<h2 class="memtitle"><span class="permalink"><a href="#af9f333b66ecd639c347c7235f4992e2e">◆ </a></span>ucx_sprintf</h2> 237.278 + 237.279 +<div class="memitem"> 237.280 +<div class="memproto"> 237.281 + <table class="memname"> 237.282 + <tr> 237.283 + <td class="memname">#define ucx_sprintf</td> 237.284 + <td>(</td> 237.285 + <td class="paramtype"> </td> 237.286 + <td class="paramname"><em>...</em></td><td>)</td> 237.287 + <td>   <a class="el" href="utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5">ucx_asprintf</a>(<a class="el" href="allocator_8h.html#a98d2f1b341118b7a0e341fda5d8b2ebf">ucx_default_allocator</a>(), __VA_ARGS__)</td> 237.288 + </tr> 237.289 + </table> 237.290 +</div><div class="memdoc"> 237.291 + 237.292 +<p>Shortcut for <a class="el" href="utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5" title="A printf() like function which allocates space for a sstr_t the result is written to...">ucx_asprintf()</a> with default allocator. </p> 237.293 + 237.294 +</div> 237.295 +</div> 237.296 +<a id="a6003a1750a66234169bd1f8cc84b297b"></a> 237.297 +<h2 class="memtitle"><span class="permalink"><a href="#a6003a1750a66234169bd1f8cc84b297b">◆ </a></span>ucx_stream_bcopy</h2> 237.298 + 237.299 +<div class="memitem"> 237.300 +<div class="memproto"> 237.301 + <table class="memname"> 237.302 + <tr> 237.303 + <td class="memname">#define ucx_stream_bcopy</td> 237.304 + <td>(</td> 237.305 + <td class="paramtype"> </td> 237.306 + <td class="paramname">src, </td> 237.307 + </tr> 237.308 + <tr> 237.309 + <td class="paramkey"></td> 237.310 + <td></td> 237.311 + <td class="paramtype"> </td> 237.312 + <td class="paramname">dest, </td> 237.313 + </tr> 237.314 + <tr> 237.315 + <td class="paramkey"></td> 237.316 + <td></td> 237.317 + <td class="paramtype"> </td> 237.318 + <td class="paramname">rfnc, </td> 237.319 + </tr> 237.320 + <tr> 237.321 + <td class="paramkey"></td> 237.322 + <td></td> 237.323 + <td class="paramtype"> </td> 237.324 + <td class="paramname">wfnc, </td> 237.325 + </tr> 237.326 + <tr> 237.327 + <td class="paramkey"></td> 237.328 + <td></td> 237.329 + <td class="paramtype"> </td> 237.330 + <td class="paramname">buf, </td> 237.331 + </tr> 237.332 + <tr> 237.333 + <td class="paramkey"></td> 237.334 + <td></td> 237.335 + <td class="paramtype"> </td> 237.336 + <td class="paramname">bufsize </td> 237.337 + </tr> 237.338 + <tr> 237.339 + <td></td> 237.340 + <td>)</td> 237.341 + <td></td><td></td> 237.342 + </tr> 237.343 + </table> 237.344 +</div><div class="memdoc"> 237.345 +<b>Value:</b><div class="fragment"><div class="line"><a class="code" href="utils_8h.html#a114ee7f7da62656ffd35e2dc23394201">ucx_stream_bncopy</a>(\</div><div class="line"> src, dest, (<a class="code" href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">read_func</a>)rfnc, (<a class="code" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a>)wfnc, \</div><div class="line"> buf, bufsize, (<span class="keywordtype">size_t</span>)-1)</div><div class="ttc" id="utils_8h_html_a114ee7f7da62656ffd35e2dc23394201"><div class="ttname"><a href="utils_8h.html#a114ee7f7da62656ffd35e2dc23394201">ucx_stream_bncopy</a></div><div class="ttdeci">size_t ucx_stream_bncopy(void *src, void *dest, read_func rfnc, write_func wfnc, char *buf, size_t bufsize, size_t n)</div><div class="ttdoc">Reads data from a stream and writes it to another stream. </div><div class="ttdef"><b>Definition:</b> utils.c:52</div></div> 237.346 +<div class="ttc" id="ucx_8h_html_a6a67e255e460acb58f802067b3ff5fd5"><div class="ttname"><a href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">read_func</a></div><div class="ttdeci">size_t(* read_func)(void *, size_t, size_t, void *)</div><div class="ttdoc">Function pointer to a read function. </div><div class="ttdef"><b>Definition:</b> ucx.h:132</div></div> 237.347 +<div class="ttc" id="ucx_8h_html_a989b3f0fa4d307d278378fde435641ed"><div class="ttname"><a href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a></div><div class="ttdeci">size_t(* write_func)(const void *, size_t, size_t, void *)</div><div class="ttdoc">Function pointer to a write function. </div><div class="ttdef"><b>Definition:</b> ucx.h:119</div></div> 237.348 +</div><!-- fragment --> 237.349 +<p>Shorthand for an unbounded ucx_stream_bncopy call using the specified buffer. </p> 237.350 +<dl class="params"><dt>Parameters</dt><dd> 237.351 + <table class="params"> 237.352 + <tr><td class="paramname">src</td><td>the source stream </td></tr> 237.353 + <tr><td class="paramname">dest</td><td>the destination stream </td></tr> 237.354 + <tr><td class="paramname">rfnc</td><td>the read function </td></tr> 237.355 + <tr><td class="paramname">wfnc</td><td>the write function </td></tr> 237.356 + <tr><td class="paramname">buf</td><td>a pointer to the copy buffer or <code>NULL</code> if a buffer shall be implicitly created on the heap </td></tr> 237.357 + <tr><td class="paramname">bufsize</td><td>the size of the copy buffer - if <code>NULL</code> was provided for <code>buf</code>, this is the size of the buffer that shall be implicitly created </td></tr> 237.358 + </table> 237.359 + </dd> 237.360 +</dl> 237.361 +<dl class="section return"><dt>Returns</dt><dd>total number of bytes copied </dd></dl> 237.362 + 237.363 +</div> 237.364 +</div> 237.365 +<a id="a41ca1344f781c0d3bf7a414a6e811392"></a> 237.366 +<h2 class="memtitle"><span class="permalink"><a href="#a41ca1344f781c0d3bf7a414a6e811392">◆ </a></span>ucx_stream_copy</h2> 237.367 + 237.368 +<div class="memitem"> 237.369 +<div class="memproto"> 237.370 + <table class="memname"> 237.371 + <tr> 237.372 + <td class="memname">#define ucx_stream_copy</td> 237.373 + <td>(</td> 237.374 + <td class="paramtype"> </td> 237.375 + <td class="paramname">src, </td> 237.376 + </tr> 237.377 + <tr> 237.378 + <td class="paramkey"></td> 237.379 + <td></td> 237.380 + <td class="paramtype"> </td> 237.381 + <td class="paramname">dest, </td> 237.382 + </tr> 237.383 + <tr> 237.384 + <td class="paramkey"></td> 237.385 + <td></td> 237.386 + <td class="paramtype"> </td> 237.387 + <td class="paramname">rfnc, </td> 237.388 + </tr> 237.389 + <tr> 237.390 + <td class="paramkey"></td> 237.391 + <td></td> 237.392 + <td class="paramtype"> </td> 237.393 + <td class="paramname">wfnc </td> 237.394 + </tr> 237.395 + <tr> 237.396 + <td></td> 237.397 + <td>)</td> 237.398 + <td></td><td></td> 237.399 + </tr> 237.400 + </table> 237.401 +</div><div class="memdoc"> 237.402 +<b>Value:</b><div class="fragment"><div class="line"><a class="code" href="utils_8h.html#a114ee7f7da62656ffd35e2dc23394201">ucx_stream_bncopy</a>(\</div><div class="line"> src, dest, (<a class="code" href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">read_func</a>)rfnc, (<a class="code" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a>)wfnc, \</div><div class="line"> NULL, <a class="code" href="utils_8h.html#a23efd74fa5f701d4cf26ccbfd138a439">UCX_STREAM_COPY_BUFSIZE</a>, (<span class="keywordtype">size_t</span>)-1)</div><div class="ttc" id="utils_8h_html_a114ee7f7da62656ffd35e2dc23394201"><div class="ttname"><a href="utils_8h.html#a114ee7f7da62656ffd35e2dc23394201">ucx_stream_bncopy</a></div><div class="ttdeci">size_t ucx_stream_bncopy(void *src, void *dest, read_func rfnc, write_func wfnc, char *buf, size_t bufsize, size_t n)</div><div class="ttdoc">Reads data from a stream and writes it to another stream. </div><div class="ttdef"><b>Definition:</b> utils.c:52</div></div> 237.403 +<div class="ttc" id="utils_8h_html_a23efd74fa5f701d4cf26ccbfd138a439"><div class="ttname"><a href="utils_8h.html#a23efd74fa5f701d4cf26ccbfd138a439">UCX_STREAM_COPY_BUFSIZE</a></div><div class="ttdeci">#define UCX_STREAM_COPY_BUFSIZE</div><div class="ttdoc">Default buffer size for ucx_stream_copy() and ucx_stream_ncopy(). </div><div class="ttdef"><b>Definition:</b> utils.h:55</div></div> 237.404 +<div class="ttc" id="ucx_8h_html_a6a67e255e460acb58f802067b3ff5fd5"><div class="ttname"><a href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">read_func</a></div><div class="ttdeci">size_t(* read_func)(void *, size_t, size_t, void *)</div><div class="ttdoc">Function pointer to a read function. </div><div class="ttdef"><b>Definition:</b> ucx.h:132</div></div> 237.405 +<div class="ttc" id="ucx_8h_html_a989b3f0fa4d307d278378fde435641ed"><div class="ttname"><a href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a></div><div class="ttdeci">size_t(* write_func)(const void *, size_t, size_t, void *)</div><div class="ttdoc">Function pointer to a write function. </div><div class="ttdef"><b>Definition:</b> ucx.h:119</div></div> 237.406 +</div><!-- fragment --> 237.407 +<p>Shorthand for an unbounded ucx_stream_bncopy call using a default buffer. </p> 237.408 +<dl class="params"><dt>Parameters</dt><dd> 237.409 + <table class="params"> 237.410 + <tr><td class="paramname">src</td><td>the source stream </td></tr> 237.411 + <tr><td class="paramname">dest</td><td>the destination stream </td></tr> 237.412 + <tr><td class="paramname">rfnc</td><td>the read function </td></tr> 237.413 + <tr><td class="paramname">wfnc</td><td>the write function </td></tr> 237.414 + </table> 237.415 + </dd> 237.416 +</dl> 237.417 +<dl class="section return"><dt>Returns</dt><dd>total number of bytes copied</dd></dl> 237.418 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="utils_8h.html#a23efd74fa5f701d4cf26ccbfd138a439" title="Default buffer size for ucx_stream_copy() and ucx_stream_ncopy(). ">UCX_STREAM_COPY_BUFSIZE</a> </dd></dl> 237.419 + 237.420 +</div> 237.421 +</div> 237.422 +<a id="add13f39a8af440b4f7e6f74339eaada2"></a> 237.423 +<h2 class="memtitle"><span class="permalink"><a href="#add13f39a8af440b4f7e6f74339eaada2">◆ </a></span>ucx_stream_ncopy</h2> 237.424 + 237.425 +<div class="memitem"> 237.426 +<div class="memproto"> 237.427 + <table class="memname"> 237.428 + <tr> 237.429 + <td class="memname">#define ucx_stream_ncopy</td> 237.430 + <td>(</td> 237.431 + <td class="paramtype"> </td> 237.432 + <td class="paramname">src, </td> 237.433 + </tr> 237.434 + <tr> 237.435 + <td class="paramkey"></td> 237.436 + <td></td> 237.437 + <td class="paramtype"> </td> 237.438 + <td class="paramname">dest, </td> 237.439 + </tr> 237.440 + <tr> 237.441 + <td class="paramkey"></td> 237.442 + <td></td> 237.443 + <td class="paramtype"> </td> 237.444 + <td class="paramname">rfnc, </td> 237.445 + </tr> 237.446 + <tr> 237.447 + <td class="paramkey"></td> 237.448 + <td></td> 237.449 + <td class="paramtype"> </td> 237.450 + <td class="paramname">wfnc, </td> 237.451 + </tr> 237.452 + <tr> 237.453 + <td class="paramkey"></td> 237.454 + <td></td> 237.455 + <td class="paramtype"> </td> 237.456 + <td class="paramname">n </td> 237.457 + </tr> 237.458 + <tr> 237.459 + <td></td> 237.460 + <td>)</td> 237.461 + <td></td><td></td> 237.462 + </tr> 237.463 + </table> 237.464 +</div><div class="memdoc"> 237.465 +<b>Value:</b><div class="fragment"><div class="line"><a class="code" href="utils_8h.html#a114ee7f7da62656ffd35e2dc23394201">ucx_stream_bncopy</a>(\</div><div class="line"> src, dest, (<a class="code" href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">read_func</a>)rfnc, (<a class="code" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a>)wfnc, \</div><div class="line"> NULL, <a class="code" href="utils_8h.html#a23efd74fa5f701d4cf26ccbfd138a439">UCX_STREAM_COPY_BUFSIZE</a>, n)</div><div class="ttc" id="utils_8h_html_a114ee7f7da62656ffd35e2dc23394201"><div class="ttname"><a href="utils_8h.html#a114ee7f7da62656ffd35e2dc23394201">ucx_stream_bncopy</a></div><div class="ttdeci">size_t ucx_stream_bncopy(void *src, void *dest, read_func rfnc, write_func wfnc, char *buf, size_t bufsize, size_t n)</div><div class="ttdoc">Reads data from a stream and writes it to another stream. </div><div class="ttdef"><b>Definition:</b> utils.c:52</div></div> 237.466 +<div class="ttc" id="utils_8h_html_a23efd74fa5f701d4cf26ccbfd138a439"><div class="ttname"><a href="utils_8h.html#a23efd74fa5f701d4cf26ccbfd138a439">UCX_STREAM_COPY_BUFSIZE</a></div><div class="ttdeci">#define UCX_STREAM_COPY_BUFSIZE</div><div class="ttdoc">Default buffer size for ucx_stream_copy() and ucx_stream_ncopy(). </div><div class="ttdef"><b>Definition:</b> utils.h:55</div></div> 237.467 +<div class="ttc" id="ucx_8h_html_a6a67e255e460acb58f802067b3ff5fd5"><div class="ttname"><a href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">read_func</a></div><div class="ttdeci">size_t(* read_func)(void *, size_t, size_t, void *)</div><div class="ttdoc">Function pointer to a read function. </div><div class="ttdef"><b>Definition:</b> ucx.h:132</div></div> 237.468 +<div class="ttc" id="ucx_8h_html_a989b3f0fa4d307d278378fde435641ed"><div class="ttname"><a href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a></div><div class="ttdeci">size_t(* write_func)(const void *, size_t, size_t, void *)</div><div class="ttdoc">Function pointer to a write function. </div><div class="ttdef"><b>Definition:</b> ucx.h:119</div></div> 237.469 +</div><!-- fragment --> 237.470 +<p>Shorthand for ucx_stream_bncopy using a default copy buffer. </p> 237.471 +<dl class="params"><dt>Parameters</dt><dd> 237.472 + <table class="params"> 237.473 + <tr><td class="paramname">src</td><td>the source stream </td></tr> 237.474 + <tr><td class="paramname">dest</td><td>the destination stream </td></tr> 237.475 + <tr><td class="paramname">rfnc</td><td>the read function </td></tr> 237.476 + <tr><td class="paramname">wfnc</td><td>the write function </td></tr> 237.477 + <tr><td class="paramname">n</td><td>maximum number of bytes that shall be copied </td></tr> 237.478 + </table> 237.479 + </dd> 237.480 +</dl> 237.481 +<dl class="section return"><dt>Returns</dt><dd>total number of bytes copied </dd></dl> 237.482 + 237.483 +</div> 237.484 +</div> 237.485 +<h2 class="groupheader">Function Documentation</h2> 237.486 +<a id="a9f9cf0e89ffdc256ecb35429907f51f5"></a> 237.487 +<h2 class="memtitle"><span class="permalink"><a href="#a9f9cf0e89ffdc256ecb35429907f51f5">◆ </a></span>ucx_asprintf()</h2> 237.488 + 237.489 +<div class="memitem"> 237.490 +<div class="memproto"> 237.491 + <table class="memname"> 237.492 + <tr> 237.493 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> ucx_asprintf </td> 237.494 + <td>(</td> 237.495 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 237.496 + <td class="paramname"><em>allocator</em>, </td> 237.497 + </tr> 237.498 + <tr> 237.499 + <td class="paramkey"></td> 237.500 + <td></td> 237.501 + <td class="paramtype">const char * </td> 237.502 + <td class="paramname"><em>fmt</em>, </td> 237.503 + </tr> 237.504 + <tr> 237.505 + <td class="paramkey"></td> 237.506 + <td></td> 237.507 + <td class="paramtype"> </td> 237.508 + <td class="paramname"><em>...</em> </td> 237.509 + </tr> 237.510 + <tr> 237.511 + <td></td> 237.512 + <td>)</td> 237.513 + <td></td><td></td> 237.514 + </tr> 237.515 + </table> 237.516 +</div><div class="memdoc"> 237.517 + 237.518 +<p>A <code>printf()</code> like function which allocates space for a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> the result is written to. </p> 237.519 +<p><b>Attention</b>: The <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> data is allocated with the allocators <a class="el" href="allocator_8h.html#a29f0f6a23a70db3b60635cd6dc384473" title="A function pointer to the allocators malloc() function. ">ucx_allocator_malloc()</a> function. So it is implementation dependent, if the returned <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> pointer must be passed to the allocators <a class="el" href="allocator_8h.html#aaf2387ddaddd8ab4b267e6b00e5d6f7e" title="A function pointer to the allocators free() function. ">ucx_allocator_free()</a> function manually.</p> 237.520 +<p><b>Note</b>: The <a class="el" href="structsstr__t.html#af8049914efc1e67f7de3ee55ec0611b0" title="A pointer to the string (not necessarily NULL-terminated) ">sstr_t.ptr</a> of the return value will <em>always</em> be <code>NULL</code>-terminated.</p> 237.521 +<dl class="params"><dt>Parameters</dt><dd> 237.522 + <table class="params"> 237.523 + <tr><td class="paramname">allocator</td><td>the <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> used for allocating the result <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> </td></tr> 237.524 + <tr><td class="paramname">fmt</td><td>format string </td></tr> 237.525 + <tr><td class="paramname">...</td><td>additional arguments </td></tr> 237.526 + </table> 237.527 + </dd> 237.528 +</dl> 237.529 +<dl class="section return"><dt>Returns</dt><dd>a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> containing the formatted string </dd></dl> 237.530 + 237.531 +</div> 237.532 +</div> 237.533 +<a id="ab804b7c27d0bfcd7bf3a3583140825b6"></a> 237.534 +<h2 class="memtitle"><span class="permalink"><a href="#ab804b7c27d0bfcd7bf3a3583140825b6">◆ </a></span>ucx_cmp_double()</h2> 237.535 + 237.536 +<div class="memitem"> 237.537 +<div class="memproto"> 237.538 + <table class="memname"> 237.539 + <tr> 237.540 + <td class="memname">int ucx_cmp_double </td> 237.541 + <td>(</td> 237.542 + <td class="paramtype">const void * </td> 237.543 + <td class="paramname"><em>d1</em>, </td> 237.544 + </tr> 237.545 + <tr> 237.546 + <td class="paramkey"></td> 237.547 + <td></td> 237.548 + <td class="paramtype">const void * </td> 237.549 + <td class="paramname"><em>d2</em>, </td> 237.550 + </tr> 237.551 + <tr> 237.552 + <td class="paramkey"></td> 237.553 + <td></td> 237.554 + <td class="paramtype">void * </td> 237.555 + <td class="paramname"><em>data</em> </td> 237.556 + </tr> 237.557 + <tr> 237.558 + <td></td> 237.559 + <td>)</td> 237.560 + <td></td><td></td> 237.561 + </tr> 237.562 + </table> 237.563 +</div><div class="memdoc"> 237.564 + 237.565 +<p>Compares two real numbers of type double. </p> 237.566 +<dl class="params"><dt>Parameters</dt><dd> 237.567 + <table class="params"> 237.568 + <tr><td class="paramname">d1</td><td>pointer to double one </td></tr> 237.569 + <tr><td class="paramname">d2</td><td>pointer to double two </td></tr> 237.570 + <tr><td class="paramname">data</td><td>if provided: a pointer to precision (default: 1e-14) </td></tr> 237.571 + </table> 237.572 + </dd> 237.573 +</dl> 237.574 +<dl class="section return"><dt>Returns</dt><dd>-1, if *d1 is less than *d2, 0 if both are equal, 1 if *d1 is greater than *d2 </dd></dl> 237.575 + 237.576 +</div> 237.577 +</div> 237.578 +<a id="ad1196b561bcdad76c393885819769a97"></a> 237.579 +<h2 class="memtitle"><span class="permalink"><a href="#ad1196b561bcdad76c393885819769a97">◆ </a></span>ucx_cmp_float()</h2> 237.580 + 237.581 +<div class="memitem"> 237.582 +<div class="memproto"> 237.583 + <table class="memname"> 237.584 + <tr> 237.585 + <td class="memname">int ucx_cmp_float </td> 237.586 + <td>(</td> 237.587 + <td class="paramtype">const void * </td> 237.588 + <td class="paramname"><em>f1</em>, </td> 237.589 + </tr> 237.590 + <tr> 237.591 + <td class="paramkey"></td> 237.592 + <td></td> 237.593 + <td class="paramtype">const void * </td> 237.594 + <td class="paramname"><em>f2</em>, </td> 237.595 + </tr> 237.596 + <tr> 237.597 + <td class="paramkey"></td> 237.598 + <td></td> 237.599 + <td class="paramtype">void * </td> 237.600 + <td class="paramname"><em>data</em> </td> 237.601 + </tr> 237.602 + <tr> 237.603 + <td></td> 237.604 + <td>)</td> 237.605 + <td></td><td></td> 237.606 + </tr> 237.607 + </table> 237.608 +</div><div class="memdoc"> 237.609 + 237.610 +<p>Compares two real numbers of type float. </p> 237.611 +<dl class="params"><dt>Parameters</dt><dd> 237.612 + <table class="params"> 237.613 + <tr><td class="paramname">f1</td><td>pointer to float one </td></tr> 237.614 + <tr><td class="paramname">f2</td><td>pointer to float two </td></tr> 237.615 + <tr><td class="paramname">data</td><td>if provided: a pointer to precision (default: 1e-6f) </td></tr> 237.616 + </table> 237.617 + </dd> 237.618 +</dl> 237.619 +<dl class="section return"><dt>Returns</dt><dd>-1, if *f1 is less than *f2, 0 if both are equal, 1 if *f1 is greater than *f2 </dd></dl> 237.620 + 237.621 +</div> 237.622 +</div> 237.623 +<a id="a8ce7e11e6b3deafe89a32a091fde7f16"></a> 237.624 +<h2 class="memtitle"><span class="permalink"><a href="#a8ce7e11e6b3deafe89a32a091fde7f16">◆ </a></span>ucx_cmp_int()</h2> 237.625 + 237.626 +<div class="memitem"> 237.627 +<div class="memproto"> 237.628 + <table class="memname"> 237.629 + <tr> 237.630 + <td class="memname">int ucx_cmp_int </td> 237.631 + <td>(</td> 237.632 + <td class="paramtype">const void * </td> 237.633 + <td class="paramname"><em>i1</em>, </td> 237.634 + </tr> 237.635 + <tr> 237.636 + <td class="paramkey"></td> 237.637 + <td></td> 237.638 + <td class="paramtype">const void * </td> 237.639 + <td class="paramname"><em>i2</em>, </td> 237.640 + </tr> 237.641 + <tr> 237.642 + <td class="paramkey"></td> 237.643 + <td></td> 237.644 + <td class="paramtype">void * </td> 237.645 + <td class="paramname"><em>data</em> </td> 237.646 + </tr> 237.647 + <tr> 237.648 + <td></td> 237.649 + <td>)</td> 237.650 + <td></td><td></td> 237.651 + </tr> 237.652 + </table> 237.653 +</div><div class="memdoc"> 237.654 + 237.655 +<p>Compares two integers of type int. </p> 237.656 +<dl class="params"><dt>Parameters</dt><dd> 237.657 + <table class="params"> 237.658 + <tr><td class="paramname">i1</td><td>pointer to integer one </td></tr> 237.659 + <tr><td class="paramname">i2</td><td>pointer to integer two </td></tr> 237.660 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.661 + </table> 237.662 + </dd> 237.663 +</dl> 237.664 +<dl class="section return"><dt>Returns</dt><dd>-1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2 </dd></dl> 237.665 + 237.666 +</div> 237.667 +</div> 237.668 +<a id="aa29e6e559946375e34113e34e0b0bd0d"></a> 237.669 +<h2 class="memtitle"><span class="permalink"><a href="#aa29e6e559946375e34113e34e0b0bd0d">◆ </a></span>ucx_cmp_int16()</h2> 237.670 + 237.671 +<div class="memitem"> 237.672 +<div class="memproto"> 237.673 + <table class="memname"> 237.674 + <tr> 237.675 + <td class="memname">int ucx_cmp_int16 </td> 237.676 + <td>(</td> 237.677 + <td class="paramtype">const void * </td> 237.678 + <td class="paramname"><em>i1</em>, </td> 237.679 + </tr> 237.680 + <tr> 237.681 + <td class="paramkey"></td> 237.682 + <td></td> 237.683 + <td class="paramtype">const void * </td> 237.684 + <td class="paramname"><em>i2</em>, </td> 237.685 + </tr> 237.686 + <tr> 237.687 + <td class="paramkey"></td> 237.688 + <td></td> 237.689 + <td class="paramtype">void * </td> 237.690 + <td class="paramname"><em>data</em> </td> 237.691 + </tr> 237.692 + <tr> 237.693 + <td></td> 237.694 + <td>)</td> 237.695 + <td></td><td></td> 237.696 + </tr> 237.697 + </table> 237.698 +</div><div class="memdoc"> 237.699 + 237.700 +<p>Compares two integers of type int16_t. </p> 237.701 +<dl class="params"><dt>Parameters</dt><dd> 237.702 + <table class="params"> 237.703 + <tr><td class="paramname">i1</td><td>pointer to int16_t one </td></tr> 237.704 + <tr><td class="paramname">i2</td><td>pointer to int16_t two </td></tr> 237.705 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.706 + </table> 237.707 + </dd> 237.708 +</dl> 237.709 +<dl class="section return"><dt>Returns</dt><dd>-1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2 </dd></dl> 237.710 + 237.711 +</div> 237.712 +</div> 237.713 +<a id="a858b2ac443fb202643b71f6a7e9218dd"></a> 237.714 +<h2 class="memtitle"><span class="permalink"><a href="#a858b2ac443fb202643b71f6a7e9218dd">◆ </a></span>ucx_cmp_int32()</h2> 237.715 + 237.716 +<div class="memitem"> 237.717 +<div class="memproto"> 237.718 + <table class="memname"> 237.719 + <tr> 237.720 + <td class="memname">int ucx_cmp_int32 </td> 237.721 + <td>(</td> 237.722 + <td class="paramtype">const void * </td> 237.723 + <td class="paramname"><em>i1</em>, </td> 237.724 + </tr> 237.725 + <tr> 237.726 + <td class="paramkey"></td> 237.727 + <td></td> 237.728 + <td class="paramtype">const void * </td> 237.729 + <td class="paramname"><em>i2</em>, </td> 237.730 + </tr> 237.731 + <tr> 237.732 + <td class="paramkey"></td> 237.733 + <td></td> 237.734 + <td class="paramtype">void * </td> 237.735 + <td class="paramname"><em>data</em> </td> 237.736 + </tr> 237.737 + <tr> 237.738 + <td></td> 237.739 + <td>)</td> 237.740 + <td></td><td></td> 237.741 + </tr> 237.742 + </table> 237.743 +</div><div class="memdoc"> 237.744 + 237.745 +<p>Compares two integers of type int32_t. </p> 237.746 +<dl class="params"><dt>Parameters</dt><dd> 237.747 + <table class="params"> 237.748 + <tr><td class="paramname">i1</td><td>pointer to int32_t one </td></tr> 237.749 + <tr><td class="paramname">i2</td><td>pointer to int32_t two </td></tr> 237.750 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.751 + </table> 237.752 + </dd> 237.753 +</dl> 237.754 +<dl class="section return"><dt>Returns</dt><dd>-1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2 </dd></dl> 237.755 + 237.756 +</div> 237.757 +</div> 237.758 +<a id="a54701aea6a89fed1402dfb0bf56bc7f6"></a> 237.759 +<h2 class="memtitle"><span class="permalink"><a href="#a54701aea6a89fed1402dfb0bf56bc7f6">◆ </a></span>ucx_cmp_int64()</h2> 237.760 + 237.761 +<div class="memitem"> 237.762 +<div class="memproto"> 237.763 + <table class="memname"> 237.764 + <tr> 237.765 + <td class="memname">int ucx_cmp_int64 </td> 237.766 + <td>(</td> 237.767 + <td class="paramtype">const void * </td> 237.768 + <td class="paramname"><em>i1</em>, </td> 237.769 + </tr> 237.770 + <tr> 237.771 + <td class="paramkey"></td> 237.772 + <td></td> 237.773 + <td class="paramtype">const void * </td> 237.774 + <td class="paramname"><em>i2</em>, </td> 237.775 + </tr> 237.776 + <tr> 237.777 + <td class="paramkey"></td> 237.778 + <td></td> 237.779 + <td class="paramtype">void * </td> 237.780 + <td class="paramname"><em>data</em> </td> 237.781 + </tr> 237.782 + <tr> 237.783 + <td></td> 237.784 + <td>)</td> 237.785 + <td></td><td></td> 237.786 + </tr> 237.787 + </table> 237.788 +</div><div class="memdoc"> 237.789 + 237.790 +<p>Compares two integers of type int64_t. </p> 237.791 +<dl class="params"><dt>Parameters</dt><dd> 237.792 + <table class="params"> 237.793 + <tr><td class="paramname">i1</td><td>pointer to int64_t one </td></tr> 237.794 + <tr><td class="paramname">i2</td><td>pointer to int64_t two </td></tr> 237.795 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.796 + </table> 237.797 + </dd> 237.798 +</dl> 237.799 +<dl class="section return"><dt>Returns</dt><dd>-1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2 </dd></dl> 237.800 + 237.801 +</div> 237.802 +</div> 237.803 +<a id="aeb57a2b9a6aaa0460c7a6bec29accf2c"></a> 237.804 +<h2 class="memtitle"><span class="permalink"><a href="#aeb57a2b9a6aaa0460c7a6bec29accf2c">◆ </a></span>ucx_cmp_longint()</h2> 237.805 + 237.806 +<div class="memitem"> 237.807 +<div class="memproto"> 237.808 + <table class="memname"> 237.809 + <tr> 237.810 + <td class="memname">int ucx_cmp_longint </td> 237.811 + <td>(</td> 237.812 + <td class="paramtype">const void * </td> 237.813 + <td class="paramname"><em>i1</em>, </td> 237.814 + </tr> 237.815 + <tr> 237.816 + <td class="paramkey"></td> 237.817 + <td></td> 237.818 + <td class="paramtype">const void * </td> 237.819 + <td class="paramname"><em>i2</em>, </td> 237.820 + </tr> 237.821 + <tr> 237.822 + <td class="paramkey"></td> 237.823 + <td></td> 237.824 + <td class="paramtype">void * </td> 237.825 + <td class="paramname"><em>data</em> </td> 237.826 + </tr> 237.827 + <tr> 237.828 + <td></td> 237.829 + <td>)</td> 237.830 + <td></td><td></td> 237.831 + </tr> 237.832 + </table> 237.833 +</div><div class="memdoc"> 237.834 + 237.835 +<p>Compares two integers of type long int. </p> 237.836 +<dl class="params"><dt>Parameters</dt><dd> 237.837 + <table class="params"> 237.838 + <tr><td class="paramname">i1</td><td>pointer to long integer one </td></tr> 237.839 + <tr><td class="paramname">i2</td><td>pointer to long integer two </td></tr> 237.840 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.841 + </table> 237.842 + </dd> 237.843 +</dl> 237.844 +<dl class="section return"><dt>Returns</dt><dd>-1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2 </dd></dl> 237.845 + 237.846 +</div> 237.847 +</div> 237.848 +<a id="a366b57def20f86a41eaedf575eea5375"></a> 237.849 +<h2 class="memtitle"><span class="permalink"><a href="#a366b57def20f86a41eaedf575eea5375">◆ </a></span>ucx_cmp_longlong()</h2> 237.850 + 237.851 +<div class="memitem"> 237.852 +<div class="memproto"> 237.853 + <table class="memname"> 237.854 + <tr> 237.855 + <td class="memname">int ucx_cmp_longlong </td> 237.856 + <td>(</td> 237.857 + <td class="paramtype">const void * </td> 237.858 + <td class="paramname"><em>i1</em>, </td> 237.859 + </tr> 237.860 + <tr> 237.861 + <td class="paramkey"></td> 237.862 + <td></td> 237.863 + <td class="paramtype">const void * </td> 237.864 + <td class="paramname"><em>i2</em>, </td> 237.865 + </tr> 237.866 + <tr> 237.867 + <td class="paramkey"></td> 237.868 + <td></td> 237.869 + <td class="paramtype">void * </td> 237.870 + <td class="paramname"><em>data</em> </td> 237.871 + </tr> 237.872 + <tr> 237.873 + <td></td> 237.874 + <td>)</td> 237.875 + <td></td><td></td> 237.876 + </tr> 237.877 + </table> 237.878 +</div><div class="memdoc"> 237.879 + 237.880 +<p>Compares two integers of type long long. </p> 237.881 +<dl class="params"><dt>Parameters</dt><dd> 237.882 + <table class="params"> 237.883 + <tr><td class="paramname">i1</td><td>pointer to long long one </td></tr> 237.884 + <tr><td class="paramname">i2</td><td>pointer to long long two </td></tr> 237.885 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.886 + </table> 237.887 + </dd> 237.888 +</dl> 237.889 +<dl class="section return"><dt>Returns</dt><dd>-1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2 </dd></dl> 237.890 + 237.891 +</div> 237.892 +</div> 237.893 +<a id="aff7d2bcded71196831a8c0664333f8e7"></a> 237.894 +<h2 class="memtitle"><span class="permalink"><a href="#aff7d2bcded71196831a8c0664333f8e7">◆ </a></span>ucx_cmp_mem()</h2> 237.895 + 237.896 +<div class="memitem"> 237.897 +<div class="memproto"> 237.898 + <table class="memname"> 237.899 + <tr> 237.900 + <td class="memname">int ucx_cmp_mem </td> 237.901 + <td>(</td> 237.902 + <td class="paramtype">const void * </td> 237.903 + <td class="paramname"><em>ptr1</em>, </td> 237.904 + </tr> 237.905 + <tr> 237.906 + <td class="paramkey"></td> 237.907 + <td></td> 237.908 + <td class="paramtype">const void * </td> 237.909 + <td class="paramname"><em>ptr2</em>, </td> 237.910 + </tr> 237.911 + <tr> 237.912 + <td class="paramkey"></td> 237.913 + <td></td> 237.914 + <td class="paramtype">void * </td> 237.915 + <td class="paramname"><em>n</em> </td> 237.916 + </tr> 237.917 + <tr> 237.918 + <td></td> 237.919 + <td>)</td> 237.920 + <td></td><td></td> 237.921 + </tr> 237.922 + </table> 237.923 +</div><div class="memdoc"> 237.924 + 237.925 +<p>Compares two memory areas. </p> 237.926 +<dl class="params"><dt>Parameters</dt><dd> 237.927 + <table class="params"> 237.928 + <tr><td class="paramname">ptr1</td><td>pointer one </td></tr> 237.929 + <tr><td class="paramname">ptr2</td><td>pointer two </td></tr> 237.930 + <tr><td class="paramname">n</td><td>a pointer to the size_t containing the third parameter for memcmp </td></tr> 237.931 + </table> 237.932 + </dd> 237.933 +</dl> 237.934 +<dl class="section return"><dt>Returns</dt><dd>the result of memcmp(ptr1, ptr2, *n) </dd></dl> 237.935 + 237.936 +</div> 237.937 +</div> 237.938 +<a id="aa174d539de3ea59be4f9640f17ce53d8"></a> 237.939 +<h2 class="memtitle"><span class="permalink"><a href="#aa174d539de3ea59be4f9640f17ce53d8">◆ </a></span>ucx_cmp_ptr()</h2> 237.940 + 237.941 +<div class="memitem"> 237.942 +<div class="memproto"> 237.943 + <table class="memname"> 237.944 + <tr> 237.945 + <td class="memname">int ucx_cmp_ptr </td> 237.946 + <td>(</td> 237.947 + <td class="paramtype">const void * </td> 237.948 + <td class="paramname"><em>ptr1</em>, </td> 237.949 + </tr> 237.950 + <tr> 237.951 + <td class="paramkey"></td> 237.952 + <td></td> 237.953 + <td class="paramtype">const void * </td> 237.954 + <td class="paramname"><em>ptr2</em>, </td> 237.955 + </tr> 237.956 + <tr> 237.957 + <td class="paramkey"></td> 237.958 + <td></td> 237.959 + <td class="paramtype">void * </td> 237.960 + <td class="paramname"><em>data</em> </td> 237.961 + </tr> 237.962 + <tr> 237.963 + <td></td> 237.964 + <td>)</td> 237.965 + <td></td><td></td> 237.966 + </tr> 237.967 + </table> 237.968 +</div><div class="memdoc"> 237.969 + 237.970 +<p>Compares two pointers. </p> 237.971 +<dl class="params"><dt>Parameters</dt><dd> 237.972 + <table class="params"> 237.973 + <tr><td class="paramname">ptr1</td><td>pointer one </td></tr> 237.974 + <tr><td class="paramname">ptr2</td><td>pointer two </td></tr> 237.975 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.976 + </table> 237.977 + </dd> 237.978 +</dl> 237.979 +<dl class="section return"><dt>Returns</dt><dd>-1 if ptr1 is less than ptr2, 0 if both are equal, 1 if ptr1 is greater than ptr2 </dd></dl> 237.980 + 237.981 +</div> 237.982 +</div> 237.983 +<a id="adee0739589166d272f8cb7c23aabf8ba"></a> 237.984 +<h2 class="memtitle"><span class="permalink"><a href="#adee0739589166d272f8cb7c23aabf8ba">◆ </a></span>ucx_cmp_sstr()</h2> 237.985 + 237.986 +<div class="memitem"> 237.987 +<div class="memproto"> 237.988 + <table class="memname"> 237.989 + <tr> 237.990 + <td class="memname">int ucx_cmp_sstr </td> 237.991 + <td>(</td> 237.992 + <td class="paramtype">const void * </td> 237.993 + <td class="paramname"><em>s1</em>, </td> 237.994 + </tr> 237.995 + <tr> 237.996 + <td class="paramkey"></td> 237.997 + <td></td> 237.998 + <td class="paramtype">const void * </td> 237.999 + <td class="paramname"><em>s2</em>, </td> 237.1000 + </tr> 237.1001 + <tr> 237.1002 + <td class="paramkey"></td> 237.1003 + <td></td> 237.1004 + <td class="paramtype">void * </td> 237.1005 + <td class="paramname"><em>data</em> </td> 237.1006 + </tr> 237.1007 + <tr> 237.1008 + <td></td> 237.1009 + <td>)</td> 237.1010 + <td></td><td></td> 237.1011 + </tr> 237.1012 + </table> 237.1013 +</div><div class="memdoc"> 237.1014 + 237.1015 +<p>Wraps the sstrcmp function. </p> 237.1016 +<dl class="params"><dt>Parameters</dt><dd> 237.1017 + <table class="params"> 237.1018 + <tr><td class="paramname">s1</td><td>sstr one </td></tr> 237.1019 + <tr><td class="paramname">s2</td><td>sstr two </td></tr> 237.1020 + <tr><td class="paramname">data</td><td>ignored </td></tr> 237.1021 + </table> 237.1022 + </dd> 237.1023 +</dl> 237.1024 +<dl class="section return"><dt>Returns</dt><dd>the result of <a class="el" href="string_8h.html#a7ae7156c8de57454ca38d306100b8160" title="Compares two UCX strings with standard memcmp(). ">sstrcmp(s1, s2)</a> </dd></dl> 237.1025 + 237.1026 +</div> 237.1027 +</div> 237.1028 +<a id="aa6a37b9d172b6a5b2803d152f9e1b258"></a> 237.1029 +<h2 class="memtitle"><span class="permalink"><a href="#aa6a37b9d172b6a5b2803d152f9e1b258">◆ </a></span>ucx_cmp_str()</h2> 237.1030 + 237.1031 +<div class="memitem"> 237.1032 +<div class="memproto"> 237.1033 + <table class="memname"> 237.1034 + <tr> 237.1035 + <td class="memname">int ucx_cmp_str </td> 237.1036 + <td>(</td> 237.1037 + <td class="paramtype">const void * </td> 237.1038 + <td class="paramname"><em>s1</em>, </td> 237.1039 + </tr> 237.1040 + <tr> 237.1041 + <td class="paramkey"></td> 237.1042 + <td></td> 237.1043 + <td class="paramtype">const void * </td> 237.1044 + <td class="paramname"><em>s2</em>, </td> 237.1045 + </tr> 237.1046 + <tr> 237.1047 + <td class="paramkey"></td> 237.1048 + <td></td> 237.1049 + <td class="paramtype">void * </td> 237.1050 + <td class="paramname"><em>data</em> </td> 237.1051 + </tr> 237.1052 + <tr> 237.1053 + <td></td> 237.1054 + <td>)</td> 237.1055 + <td></td><td></td> 237.1056 + </tr> 237.1057 + </table> 237.1058 +</div><div class="memdoc"> 237.1059 + 237.1060 +<p>Wraps the strcmp function. </p> 237.1061 +<dl class="params"><dt>Parameters</dt><dd> 237.1062 + <table class="params"> 237.1063 + <tr><td class="paramname">s1</td><td>string one </td></tr> 237.1064 + <tr><td class="paramname">s2</td><td>string two </td></tr> 237.1065 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1066 + </table> 237.1067 + </dd> 237.1068 +</dl> 237.1069 +<dl class="section return"><dt>Returns</dt><dd>the result of strcmp(s1, s2) </dd></dl> 237.1070 + 237.1071 +</div> 237.1072 +</div> 237.1073 +<a id="ac6b354a878f551a3a5b20a167db3f308"></a> 237.1074 +<h2 class="memtitle"><span class="permalink"><a href="#ac6b354a878f551a3a5b20a167db3f308">◆ </a></span>ucx_cmp_strn()</h2> 237.1075 + 237.1076 +<div class="memitem"> 237.1077 +<div class="memproto"> 237.1078 + <table class="memname"> 237.1079 + <tr> 237.1080 + <td class="memname">int ucx_cmp_strn </td> 237.1081 + <td>(</td> 237.1082 + <td class="paramtype">const void * </td> 237.1083 + <td class="paramname"><em>s1</em>, </td> 237.1084 + </tr> 237.1085 + <tr> 237.1086 + <td class="paramkey"></td> 237.1087 + <td></td> 237.1088 + <td class="paramtype">const void * </td> 237.1089 + <td class="paramname"><em>s2</em>, </td> 237.1090 + </tr> 237.1091 + <tr> 237.1092 + <td class="paramkey"></td> 237.1093 + <td></td> 237.1094 + <td class="paramtype">void * </td> 237.1095 + <td class="paramname"><em>n</em> </td> 237.1096 + </tr> 237.1097 + <tr> 237.1098 + <td></td> 237.1099 + <td>)</td> 237.1100 + <td></td><td></td> 237.1101 + </tr> 237.1102 + </table> 237.1103 +</div><div class="memdoc"> 237.1104 + 237.1105 +<p>Wraps the strncmp function. </p> 237.1106 +<dl class="params"><dt>Parameters</dt><dd> 237.1107 + <table class="params"> 237.1108 + <tr><td class="paramname">s1</td><td>string one </td></tr> 237.1109 + <tr><td class="paramname">s2</td><td>string two </td></tr> 237.1110 + <tr><td class="paramname">n</td><td>a pointer to the size_t containing the third strncmp parameter </td></tr> 237.1111 + </table> 237.1112 + </dd> 237.1113 +</dl> 237.1114 +<dl class="section return"><dt>Returns</dt><dd>the result of strncmp(s1, s2, *n) </dd></dl> 237.1115 + 237.1116 +</div> 237.1117 +</div> 237.1118 +<a id="abd83a5da91c3dd026a6931bd80c12f1e"></a> 237.1119 +<h2 class="memtitle"><span class="permalink"><a href="#abd83a5da91c3dd026a6931bd80c12f1e">◆ </a></span>ucx_cmp_uint()</h2> 237.1120 + 237.1121 +<div class="memitem"> 237.1122 +<div class="memproto"> 237.1123 + <table class="memname"> 237.1124 + <tr> 237.1125 + <td class="memname">int ucx_cmp_uint </td> 237.1126 + <td>(</td> 237.1127 + <td class="paramtype">const void * </td> 237.1128 + <td class="paramname"><em>i1</em>, </td> 237.1129 + </tr> 237.1130 + <tr> 237.1131 + <td class="paramkey"></td> 237.1132 + <td></td> 237.1133 + <td class="paramtype">const void * </td> 237.1134 + <td class="paramname"><em>i2</em>, </td> 237.1135 + </tr> 237.1136 + <tr> 237.1137 + <td class="paramkey"></td> 237.1138 + <td></td> 237.1139 + <td class="paramtype">void * </td> 237.1140 + <td class="paramname"><em>data</em> </td> 237.1141 + </tr> 237.1142 + <tr> 237.1143 + <td></td> 237.1144 + <td>)</td> 237.1145 + <td></td><td></td> 237.1146 + </tr> 237.1147 + </table> 237.1148 +</div><div class="memdoc"> 237.1149 + 237.1150 +<p>Compares two integers of type unsigned int. </p> 237.1151 +<dl class="params"><dt>Parameters</dt><dd> 237.1152 + <table class="params"> 237.1153 + <tr><td class="paramname">i1</td><td>pointer to unsigned integer one </td></tr> 237.1154 + <tr><td class="paramname">i2</td><td>pointer to unsigned integer two </td></tr> 237.1155 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1156 + </table> 237.1157 + </dd> 237.1158 +</dl> 237.1159 +<dl class="section return"><dt>Returns</dt><dd>-1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2 </dd></dl> 237.1160 + 237.1161 +</div> 237.1162 +</div> 237.1163 +<a id="acde5366437e886a459b7468f7a9e11f0"></a> 237.1164 +<h2 class="memtitle"><span class="permalink"><a href="#acde5366437e886a459b7468f7a9e11f0">◆ </a></span>ucx_cmp_uint16()</h2> 237.1165 + 237.1166 +<div class="memitem"> 237.1167 +<div class="memproto"> 237.1168 + <table class="memname"> 237.1169 + <tr> 237.1170 + <td class="memname">int ucx_cmp_uint16 </td> 237.1171 + <td>(</td> 237.1172 + <td class="paramtype">const void * </td> 237.1173 + <td class="paramname"><em>i1</em>, </td> 237.1174 + </tr> 237.1175 + <tr> 237.1176 + <td class="paramkey"></td> 237.1177 + <td></td> 237.1178 + <td class="paramtype">const void * </td> 237.1179 + <td class="paramname"><em>i2</em>, </td> 237.1180 + </tr> 237.1181 + <tr> 237.1182 + <td class="paramkey"></td> 237.1183 + <td></td> 237.1184 + <td class="paramtype">void * </td> 237.1185 + <td class="paramname"><em>data</em> </td> 237.1186 + </tr> 237.1187 + <tr> 237.1188 + <td></td> 237.1189 + <td>)</td> 237.1190 + <td></td><td></td> 237.1191 + </tr> 237.1192 + </table> 237.1193 +</div><div class="memdoc"> 237.1194 + 237.1195 +<p>Compares two integers of type uint16_t. </p> 237.1196 +<dl class="params"><dt>Parameters</dt><dd> 237.1197 + <table class="params"> 237.1198 + <tr><td class="paramname">i1</td><td>pointer to uint16_t one </td></tr> 237.1199 + <tr><td class="paramname">i2</td><td>pointer to uint16_t two </td></tr> 237.1200 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1201 + </table> 237.1202 + </dd> 237.1203 +</dl> 237.1204 +<dl class="section return"><dt>Returns</dt><dd>-1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2 </dd></dl> 237.1205 + 237.1206 +</div> 237.1207 +</div> 237.1208 +<a id="a5879d1722330355914d8c9146fa549d3"></a> 237.1209 +<h2 class="memtitle"><span class="permalink"><a href="#a5879d1722330355914d8c9146fa549d3">◆ </a></span>ucx_cmp_uint32()</h2> 237.1210 + 237.1211 +<div class="memitem"> 237.1212 +<div class="memproto"> 237.1213 + <table class="memname"> 237.1214 + <tr> 237.1215 + <td class="memname">int ucx_cmp_uint32 </td> 237.1216 + <td>(</td> 237.1217 + <td class="paramtype">const void * </td> 237.1218 + <td class="paramname"><em>i1</em>, </td> 237.1219 + </tr> 237.1220 + <tr> 237.1221 + <td class="paramkey"></td> 237.1222 + <td></td> 237.1223 + <td class="paramtype">const void * </td> 237.1224 + <td class="paramname"><em>i2</em>, </td> 237.1225 + </tr> 237.1226 + <tr> 237.1227 + <td class="paramkey"></td> 237.1228 + <td></td> 237.1229 + <td class="paramtype">void * </td> 237.1230 + <td class="paramname"><em>data</em> </td> 237.1231 + </tr> 237.1232 + <tr> 237.1233 + <td></td> 237.1234 + <td>)</td> 237.1235 + <td></td><td></td> 237.1236 + </tr> 237.1237 + </table> 237.1238 +</div><div class="memdoc"> 237.1239 + 237.1240 +<p>Compares two integers of type uint32_t. </p> 237.1241 +<dl class="params"><dt>Parameters</dt><dd> 237.1242 + <table class="params"> 237.1243 + <tr><td class="paramname">i1</td><td>pointer to uint32_t one </td></tr> 237.1244 + <tr><td class="paramname">i2</td><td>pointer to uint32_t two </td></tr> 237.1245 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1246 + </table> 237.1247 + </dd> 237.1248 +</dl> 237.1249 +<dl class="section return"><dt>Returns</dt><dd>-1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2 </dd></dl> 237.1250 + 237.1251 +</div> 237.1252 +</div> 237.1253 +<a id="a1572a78b5b42f7151a5b2a5a7283d62d"></a> 237.1254 +<h2 class="memtitle"><span class="permalink"><a href="#a1572a78b5b42f7151a5b2a5a7283d62d">◆ </a></span>ucx_cmp_uint64()</h2> 237.1255 + 237.1256 +<div class="memitem"> 237.1257 +<div class="memproto"> 237.1258 + <table class="memname"> 237.1259 + <tr> 237.1260 + <td class="memname">int ucx_cmp_uint64 </td> 237.1261 + <td>(</td> 237.1262 + <td class="paramtype">const void * </td> 237.1263 + <td class="paramname"><em>i1</em>, </td> 237.1264 + </tr> 237.1265 + <tr> 237.1266 + <td class="paramkey"></td> 237.1267 + <td></td> 237.1268 + <td class="paramtype">const void * </td> 237.1269 + <td class="paramname"><em>i2</em>, </td> 237.1270 + </tr> 237.1271 + <tr> 237.1272 + <td class="paramkey"></td> 237.1273 + <td></td> 237.1274 + <td class="paramtype">void * </td> 237.1275 + <td class="paramname"><em>data</em> </td> 237.1276 + </tr> 237.1277 + <tr> 237.1278 + <td></td> 237.1279 + <td>)</td> 237.1280 + <td></td><td></td> 237.1281 + </tr> 237.1282 + </table> 237.1283 +</div><div class="memdoc"> 237.1284 + 237.1285 +<p>Compares two integers of type uint64_t. </p> 237.1286 +<dl class="params"><dt>Parameters</dt><dd> 237.1287 + <table class="params"> 237.1288 + <tr><td class="paramname">i1</td><td>pointer to uint64_t one </td></tr> 237.1289 + <tr><td class="paramname">i2</td><td>pointer to uint64_t two </td></tr> 237.1290 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1291 + </table> 237.1292 + </dd> 237.1293 +</dl> 237.1294 +<dl class="section return"><dt>Returns</dt><dd>-1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2 </dd></dl> 237.1295 + 237.1296 +</div> 237.1297 +</div> 237.1298 +<a id="a3f3cbae2594d6f722bae29acb0408a24"></a> 237.1299 +<h2 class="memtitle"><span class="permalink"><a href="#a3f3cbae2594d6f722bae29acb0408a24">◆ </a></span>ucx_cmp_ulongint()</h2> 237.1300 + 237.1301 +<div class="memitem"> 237.1302 +<div class="memproto"> 237.1303 + <table class="memname"> 237.1304 + <tr> 237.1305 + <td class="memname">int ucx_cmp_ulongint </td> 237.1306 + <td>(</td> 237.1307 + <td class="paramtype">const void * </td> 237.1308 + <td class="paramname"><em>i1</em>, </td> 237.1309 + </tr> 237.1310 + <tr> 237.1311 + <td class="paramkey"></td> 237.1312 + <td></td> 237.1313 + <td class="paramtype">const void * </td> 237.1314 + <td class="paramname"><em>i2</em>, </td> 237.1315 + </tr> 237.1316 + <tr> 237.1317 + <td class="paramkey"></td> 237.1318 + <td></td> 237.1319 + <td class="paramtype">void * </td> 237.1320 + <td class="paramname"><em>data</em> </td> 237.1321 + </tr> 237.1322 + <tr> 237.1323 + <td></td> 237.1324 + <td>)</td> 237.1325 + <td></td><td></td> 237.1326 + </tr> 237.1327 + </table> 237.1328 +</div><div class="memdoc"> 237.1329 + 237.1330 +<p>Compares two integers of type unsigned long int. </p> 237.1331 +<dl class="params"><dt>Parameters</dt><dd> 237.1332 + <table class="params"> 237.1333 + <tr><td class="paramname">i1</td><td>pointer to unsigned long integer one </td></tr> 237.1334 + <tr><td class="paramname">i2</td><td>pointer to unsigned long integer two </td></tr> 237.1335 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1336 + </table> 237.1337 + </dd> 237.1338 +</dl> 237.1339 +<dl class="section return"><dt>Returns</dt><dd>-1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2 </dd></dl> 237.1340 + 237.1341 +</div> 237.1342 +</div> 237.1343 +<a id="a6acfc359421f21f9a042a654ff7faac5"></a> 237.1344 +<h2 class="memtitle"><span class="permalink"><a href="#a6acfc359421f21f9a042a654ff7faac5">◆ </a></span>ucx_cmp_ulonglong()</h2> 237.1345 + 237.1346 +<div class="memitem"> 237.1347 +<div class="memproto"> 237.1348 + <table class="memname"> 237.1349 + <tr> 237.1350 + <td class="memname">int ucx_cmp_ulonglong </td> 237.1351 + <td>(</td> 237.1352 + <td class="paramtype">const void * </td> 237.1353 + <td class="paramname"><em>i1</em>, </td> 237.1354 + </tr> 237.1355 + <tr> 237.1356 + <td class="paramkey"></td> 237.1357 + <td></td> 237.1358 + <td class="paramtype">const void * </td> 237.1359 + <td class="paramname"><em>i2</em>, </td> 237.1360 + </tr> 237.1361 + <tr> 237.1362 + <td class="paramkey"></td> 237.1363 + <td></td> 237.1364 + <td class="paramtype">void * </td> 237.1365 + <td class="paramname"><em>data</em> </td> 237.1366 + </tr> 237.1367 + <tr> 237.1368 + <td></td> 237.1369 + <td>)</td> 237.1370 + <td></td><td></td> 237.1371 + </tr> 237.1372 + </table> 237.1373 +</div><div class="memdoc"> 237.1374 + 237.1375 +<p>Compares two integers of type unsigned long long. </p> 237.1376 +<dl class="params"><dt>Parameters</dt><dd> 237.1377 + <table class="params"> 237.1378 + <tr><td class="paramname">i1</td><td>pointer to unsigned long long one </td></tr> 237.1379 + <tr><td class="paramname">i2</td><td>pointer to unsigned long long two </td></tr> 237.1380 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1381 + </table> 237.1382 + </dd> 237.1383 +</dl> 237.1384 +<dl class="section return"><dt>Returns</dt><dd>-1, if *i1 is less than *i2, 0 if both are equal, 1 if *i1 is greater than *i2 </dd></dl> 237.1385 + 237.1386 +</div> 237.1387 +</div> 237.1388 +<a id="a4ab6753739d56c09cdf6079fdcabf7c6"></a> 237.1389 +<h2 class="memtitle"><span class="permalink"><a href="#a4ab6753739d56c09cdf6079fdcabf7c6">◆ </a></span>ucx_dist_int()</h2> 237.1390 + 237.1391 +<div class="memitem"> 237.1392 +<div class="memproto"> 237.1393 + <table class="memname"> 237.1394 + <tr> 237.1395 + <td class="memname">intmax_t ucx_dist_int </td> 237.1396 + <td>(</td> 237.1397 + <td class="paramtype">const void * </td> 237.1398 + <td class="paramname"><em>i1</em>, </td> 237.1399 + </tr> 237.1400 + <tr> 237.1401 + <td class="paramkey"></td> 237.1402 + <td></td> 237.1403 + <td class="paramtype">const void * </td> 237.1404 + <td class="paramname"><em>i2</em>, </td> 237.1405 + </tr> 237.1406 + <tr> 237.1407 + <td class="paramkey"></td> 237.1408 + <td></td> 237.1409 + <td class="paramtype">void * </td> 237.1410 + <td class="paramname"><em>data</em> </td> 237.1411 + </tr> 237.1412 + <tr> 237.1413 + <td></td> 237.1414 + <td>)</td> 237.1415 + <td></td><td></td> 237.1416 + </tr> 237.1417 + </table> 237.1418 +</div><div class="memdoc"> 237.1419 + 237.1420 +<p>Distance function for integers of type int. </p> 237.1421 +<dl class="params"><dt>Parameters</dt><dd> 237.1422 + <table class="params"> 237.1423 + <tr><td class="paramname">i1</td><td>pointer to integer one </td></tr> 237.1424 + <tr><td class="paramname">i2</td><td>pointer to integer two </td></tr> 237.1425 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1426 + </table> 237.1427 + </dd> 237.1428 +</dl> 237.1429 +<dl class="section return"><dt>Returns</dt><dd>i1 minus i2 </dd></dl> 237.1430 + 237.1431 +</div> 237.1432 +</div> 237.1433 +<a id="a81fb8434b70ca11bf2c14abfa21d16a9"></a> 237.1434 +<h2 class="memtitle"><span class="permalink"><a href="#a81fb8434b70ca11bf2c14abfa21d16a9">◆ </a></span>ucx_dist_int16()</h2> 237.1435 + 237.1436 +<div class="memitem"> 237.1437 +<div class="memproto"> 237.1438 + <table class="memname"> 237.1439 + <tr> 237.1440 + <td class="memname">intmax_t ucx_dist_int16 </td> 237.1441 + <td>(</td> 237.1442 + <td class="paramtype">const void * </td> 237.1443 + <td class="paramname"><em>i1</em>, </td> 237.1444 + </tr> 237.1445 + <tr> 237.1446 + <td class="paramkey"></td> 237.1447 + <td></td> 237.1448 + <td class="paramtype">const void * </td> 237.1449 + <td class="paramname"><em>i2</em>, </td> 237.1450 + </tr> 237.1451 + <tr> 237.1452 + <td class="paramkey"></td> 237.1453 + <td></td> 237.1454 + <td class="paramtype">void * </td> 237.1455 + <td class="paramname"><em>data</em> </td> 237.1456 + </tr> 237.1457 + <tr> 237.1458 + <td></td> 237.1459 + <td>)</td> 237.1460 + <td></td><td></td> 237.1461 + </tr> 237.1462 + </table> 237.1463 +</div><div class="memdoc"> 237.1464 + 237.1465 +<p>Distance function for integers of type int16_t. </p> 237.1466 +<dl class="params"><dt>Parameters</dt><dd> 237.1467 + <table class="params"> 237.1468 + <tr><td class="paramname">i1</td><td>pointer to int16_t one </td></tr> 237.1469 + <tr><td class="paramname">i2</td><td>pointer to int16_t two </td></tr> 237.1470 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1471 + </table> 237.1472 + </dd> 237.1473 +</dl> 237.1474 +<dl class="section return"><dt>Returns</dt><dd>i1 minus i2 </dd></dl> 237.1475 + 237.1476 +</div> 237.1477 +</div> 237.1478 +<a id="ab4a659cc46096f0490c1dafa57726476"></a> 237.1479 +<h2 class="memtitle"><span class="permalink"><a href="#ab4a659cc46096f0490c1dafa57726476">◆ </a></span>ucx_dist_int32()</h2> 237.1480 + 237.1481 +<div class="memitem"> 237.1482 +<div class="memproto"> 237.1483 + <table class="memname"> 237.1484 + <tr> 237.1485 + <td class="memname">intmax_t ucx_dist_int32 </td> 237.1486 + <td>(</td> 237.1487 + <td class="paramtype">const void * </td> 237.1488 + <td class="paramname"><em>i1</em>, </td> 237.1489 + </tr> 237.1490 + <tr> 237.1491 + <td class="paramkey"></td> 237.1492 + <td></td> 237.1493 + <td class="paramtype">const void * </td> 237.1494 + <td class="paramname"><em>i2</em>, </td> 237.1495 + </tr> 237.1496 + <tr> 237.1497 + <td class="paramkey"></td> 237.1498 + <td></td> 237.1499 + <td class="paramtype">void * </td> 237.1500 + <td class="paramname"><em>data</em> </td> 237.1501 + </tr> 237.1502 + <tr> 237.1503 + <td></td> 237.1504 + <td>)</td> 237.1505 + <td></td><td></td> 237.1506 + </tr> 237.1507 + </table> 237.1508 +</div><div class="memdoc"> 237.1509 + 237.1510 +<p>Distance function for integers of type int32_t. </p> 237.1511 +<dl class="params"><dt>Parameters</dt><dd> 237.1512 + <table class="params"> 237.1513 + <tr><td class="paramname">i1</td><td>pointer to int32_t one </td></tr> 237.1514 + <tr><td class="paramname">i2</td><td>pointer to int32_t two </td></tr> 237.1515 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1516 + </table> 237.1517 + </dd> 237.1518 +</dl> 237.1519 +<dl class="section return"><dt>Returns</dt><dd>i1 minus i2 </dd></dl> 237.1520 + 237.1521 +</div> 237.1522 +</div> 237.1523 +<a id="a54e7d06585bad3a899befc4e9c13853f"></a> 237.1524 +<h2 class="memtitle"><span class="permalink"><a href="#a54e7d06585bad3a899befc4e9c13853f">◆ </a></span>ucx_dist_int64()</h2> 237.1525 + 237.1526 +<div class="memitem"> 237.1527 +<div class="memproto"> 237.1528 + <table class="memname"> 237.1529 + <tr> 237.1530 + <td class="memname">intmax_t ucx_dist_int64 </td> 237.1531 + <td>(</td> 237.1532 + <td class="paramtype">const void * </td> 237.1533 + <td class="paramname"><em>i1</em>, </td> 237.1534 + </tr> 237.1535 + <tr> 237.1536 + <td class="paramkey"></td> 237.1537 + <td></td> 237.1538 + <td class="paramtype">const void * </td> 237.1539 + <td class="paramname"><em>i2</em>, </td> 237.1540 + </tr> 237.1541 + <tr> 237.1542 + <td class="paramkey"></td> 237.1543 + <td></td> 237.1544 + <td class="paramtype">void * </td> 237.1545 + <td class="paramname"><em>data</em> </td> 237.1546 + </tr> 237.1547 + <tr> 237.1548 + <td></td> 237.1549 + <td>)</td> 237.1550 + <td></td><td></td> 237.1551 + </tr> 237.1552 + </table> 237.1553 +</div><div class="memdoc"> 237.1554 + 237.1555 +<p>Distance function for integers of type int64_t. </p> 237.1556 +<dl class="params"><dt>Parameters</dt><dd> 237.1557 + <table class="params"> 237.1558 + <tr><td class="paramname">i1</td><td>pointer to int64_t one </td></tr> 237.1559 + <tr><td class="paramname">i2</td><td>pointer to int64_t two </td></tr> 237.1560 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1561 + </table> 237.1562 + </dd> 237.1563 +</dl> 237.1564 +<dl class="section return"><dt>Returns</dt><dd>i1 minus i2 </dd></dl> 237.1565 + 237.1566 +</div> 237.1567 +</div> 237.1568 +<a id="a43e73d288b1553a0078bf4c98dd341f5"></a> 237.1569 +<h2 class="memtitle"><span class="permalink"><a href="#a43e73d288b1553a0078bf4c98dd341f5">◆ </a></span>ucx_dist_longint()</h2> 237.1570 + 237.1571 +<div class="memitem"> 237.1572 +<div class="memproto"> 237.1573 + <table class="memname"> 237.1574 + <tr> 237.1575 + <td class="memname">intmax_t ucx_dist_longint </td> 237.1576 + <td>(</td> 237.1577 + <td class="paramtype">const void * </td> 237.1578 + <td class="paramname"><em>i1</em>, </td> 237.1579 + </tr> 237.1580 + <tr> 237.1581 + <td class="paramkey"></td> 237.1582 + <td></td> 237.1583 + <td class="paramtype">const void * </td> 237.1584 + <td class="paramname"><em>i2</em>, </td> 237.1585 + </tr> 237.1586 + <tr> 237.1587 + <td class="paramkey"></td> 237.1588 + <td></td> 237.1589 + <td class="paramtype">void * </td> 237.1590 + <td class="paramname"><em>data</em> </td> 237.1591 + </tr> 237.1592 + <tr> 237.1593 + <td></td> 237.1594 + <td>)</td> 237.1595 + <td></td><td></td> 237.1596 + </tr> 237.1597 + </table> 237.1598 +</div><div class="memdoc"> 237.1599 + 237.1600 +<p>Distance function for integers of type long int. </p> 237.1601 +<dl class="params"><dt>Parameters</dt><dd> 237.1602 + <table class="params"> 237.1603 + <tr><td class="paramname">i1</td><td>pointer to long integer one </td></tr> 237.1604 + <tr><td class="paramname">i2</td><td>pointer to long integer two </td></tr> 237.1605 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1606 + </table> 237.1607 + </dd> 237.1608 +</dl> 237.1609 +<dl class="section return"><dt>Returns</dt><dd>i1 minus i2 </dd></dl> 237.1610 + 237.1611 +</div> 237.1612 +</div> 237.1613 +<a id="a306778414a2427951ea263be92368627"></a> 237.1614 +<h2 class="memtitle"><span class="permalink"><a href="#a306778414a2427951ea263be92368627">◆ </a></span>ucx_dist_longlong()</h2> 237.1615 + 237.1616 +<div class="memitem"> 237.1617 +<div class="memproto"> 237.1618 + <table class="memname"> 237.1619 + <tr> 237.1620 + <td class="memname">intmax_t ucx_dist_longlong </td> 237.1621 + <td>(</td> 237.1622 + <td class="paramtype">const void * </td> 237.1623 + <td class="paramname"><em>i1</em>, </td> 237.1624 + </tr> 237.1625 + <tr> 237.1626 + <td class="paramkey"></td> 237.1627 + <td></td> 237.1628 + <td class="paramtype">const void * </td> 237.1629 + <td class="paramname"><em>i2</em>, </td> 237.1630 + </tr> 237.1631 + <tr> 237.1632 + <td class="paramkey"></td> 237.1633 + <td></td> 237.1634 + <td class="paramtype">void * </td> 237.1635 + <td class="paramname"><em>data</em> </td> 237.1636 + </tr> 237.1637 + <tr> 237.1638 + <td></td> 237.1639 + <td>)</td> 237.1640 + <td></td><td></td> 237.1641 + </tr> 237.1642 + </table> 237.1643 +</div><div class="memdoc"> 237.1644 + 237.1645 +<p>Distance function for integers of type long long. </p> 237.1646 +<dl class="params"><dt>Parameters</dt><dd> 237.1647 + <table class="params"> 237.1648 + <tr><td class="paramname">i1</td><td>pointer to long long one </td></tr> 237.1649 + <tr><td class="paramname">i2</td><td>pointer to long long two </td></tr> 237.1650 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1651 + </table> 237.1652 + </dd> 237.1653 +</dl> 237.1654 +<dl class="section return"><dt>Returns</dt><dd>i1 minus i2 </dd></dl> 237.1655 + 237.1656 +</div> 237.1657 +</div> 237.1658 +<a id="a37b7d471ca1679992afc11a0deda45f4"></a> 237.1659 +<h2 class="memtitle"><span class="permalink"><a href="#a37b7d471ca1679992afc11a0deda45f4">◆ </a></span>ucx_dist_uint()</h2> 237.1660 + 237.1661 +<div class="memitem"> 237.1662 +<div class="memproto"> 237.1663 + <table class="memname"> 237.1664 + <tr> 237.1665 + <td class="memname">intmax_t ucx_dist_uint </td> 237.1666 + <td>(</td> 237.1667 + <td class="paramtype">const void * </td> 237.1668 + <td class="paramname"><em>i1</em>, </td> 237.1669 + </tr> 237.1670 + <tr> 237.1671 + <td class="paramkey"></td> 237.1672 + <td></td> 237.1673 + <td class="paramtype">const void * </td> 237.1674 + <td class="paramname"><em>i2</em>, </td> 237.1675 + </tr> 237.1676 + <tr> 237.1677 + <td class="paramkey"></td> 237.1678 + <td></td> 237.1679 + <td class="paramtype">void * </td> 237.1680 + <td class="paramname"><em>data</em> </td> 237.1681 + </tr> 237.1682 + <tr> 237.1683 + <td></td> 237.1684 + <td>)</td> 237.1685 + <td></td><td></td> 237.1686 + </tr> 237.1687 + </table> 237.1688 +</div><div class="memdoc"> 237.1689 + 237.1690 +<p>Distance function for integers of type unsigned int. </p> 237.1691 +<dl class="params"><dt>Parameters</dt><dd> 237.1692 + <table class="params"> 237.1693 + <tr><td class="paramname">i1</td><td>pointer to unsigned integer one </td></tr> 237.1694 + <tr><td class="paramname">i2</td><td>pointer to unsigned integer two </td></tr> 237.1695 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1696 + </table> 237.1697 + </dd> 237.1698 +</dl> 237.1699 +<dl class="section return"><dt>Returns</dt><dd>i1 minus i2 </dd></dl> 237.1700 + 237.1701 +</div> 237.1702 +</div> 237.1703 +<a id="a66e00a0703cbcde050ec922578e2f080"></a> 237.1704 +<h2 class="memtitle"><span class="permalink"><a href="#a66e00a0703cbcde050ec922578e2f080">◆ </a></span>ucx_dist_uint16()</h2> 237.1705 + 237.1706 +<div class="memitem"> 237.1707 +<div class="memproto"> 237.1708 + <table class="memname"> 237.1709 + <tr> 237.1710 + <td class="memname">intmax_t ucx_dist_uint16 </td> 237.1711 + <td>(</td> 237.1712 + <td class="paramtype">const void * </td> 237.1713 + <td class="paramname"><em>i1</em>, </td> 237.1714 + </tr> 237.1715 + <tr> 237.1716 + <td class="paramkey"></td> 237.1717 + <td></td> 237.1718 + <td class="paramtype">const void * </td> 237.1719 + <td class="paramname"><em>i2</em>, </td> 237.1720 + </tr> 237.1721 + <tr> 237.1722 + <td class="paramkey"></td> 237.1723 + <td></td> 237.1724 + <td class="paramtype">void * </td> 237.1725 + <td class="paramname"><em>data</em> </td> 237.1726 + </tr> 237.1727 + <tr> 237.1728 + <td></td> 237.1729 + <td>)</td> 237.1730 + <td></td><td></td> 237.1731 + </tr> 237.1732 + </table> 237.1733 +</div><div class="memdoc"> 237.1734 + 237.1735 +<p>Distance function for integers of type uint16_t. </p> 237.1736 +<dl class="params"><dt>Parameters</dt><dd> 237.1737 + <table class="params"> 237.1738 + <tr><td class="paramname">i1</td><td>pointer to uint16_t one </td></tr> 237.1739 + <tr><td class="paramname">i2</td><td>pointer to uint16_t two </td></tr> 237.1740 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1741 + </table> 237.1742 + </dd> 237.1743 +</dl> 237.1744 +<dl class="section return"><dt>Returns</dt><dd>i1 minus i2 </dd></dl> 237.1745 + 237.1746 +</div> 237.1747 +</div> 237.1748 +<a id="add2b5c5507caba59d894b84e056b079b"></a> 237.1749 +<h2 class="memtitle"><span class="permalink"><a href="#add2b5c5507caba59d894b84e056b079b">◆ </a></span>ucx_dist_uint32()</h2> 237.1750 + 237.1751 +<div class="memitem"> 237.1752 +<div class="memproto"> 237.1753 + <table class="memname"> 237.1754 + <tr> 237.1755 + <td class="memname">intmax_t ucx_dist_uint32 </td> 237.1756 + <td>(</td> 237.1757 + <td class="paramtype">const void * </td> 237.1758 + <td class="paramname"><em>i1</em>, </td> 237.1759 + </tr> 237.1760 + <tr> 237.1761 + <td class="paramkey"></td> 237.1762 + <td></td> 237.1763 + <td class="paramtype">const void * </td> 237.1764 + <td class="paramname"><em>i2</em>, </td> 237.1765 + </tr> 237.1766 + <tr> 237.1767 + <td class="paramkey"></td> 237.1768 + <td></td> 237.1769 + <td class="paramtype">void * </td> 237.1770 + <td class="paramname"><em>data</em> </td> 237.1771 + </tr> 237.1772 + <tr> 237.1773 + <td></td> 237.1774 + <td>)</td> 237.1775 + <td></td><td></td> 237.1776 + </tr> 237.1777 + </table> 237.1778 +</div><div class="memdoc"> 237.1779 + 237.1780 +<p>Distance function for integers of type uint32_t. </p> 237.1781 +<dl class="params"><dt>Parameters</dt><dd> 237.1782 + <table class="params"> 237.1783 + <tr><td class="paramname">i1</td><td>pointer to uint32_t one </td></tr> 237.1784 + <tr><td class="paramname">i2</td><td>pointer to uint32_t two </td></tr> 237.1785 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1786 + </table> 237.1787 + </dd> 237.1788 +</dl> 237.1789 +<dl class="section return"><dt>Returns</dt><dd>i1 minus i2 </dd></dl> 237.1790 + 237.1791 +</div> 237.1792 +</div> 237.1793 +<a id="a3ba75e2e0b2479eef2b22fb219b42da7"></a> 237.1794 +<h2 class="memtitle"><span class="permalink"><a href="#a3ba75e2e0b2479eef2b22fb219b42da7">◆ </a></span>ucx_dist_uint64()</h2> 237.1795 + 237.1796 +<div class="memitem"> 237.1797 +<div class="memproto"> 237.1798 + <table class="memname"> 237.1799 + <tr> 237.1800 + <td class="memname">intmax_t ucx_dist_uint64 </td> 237.1801 + <td>(</td> 237.1802 + <td class="paramtype">const void * </td> 237.1803 + <td class="paramname"><em>i1</em>, </td> 237.1804 + </tr> 237.1805 + <tr> 237.1806 + <td class="paramkey"></td> 237.1807 + <td></td> 237.1808 + <td class="paramtype">const void * </td> 237.1809 + <td class="paramname"><em>i2</em>, </td> 237.1810 + </tr> 237.1811 + <tr> 237.1812 + <td class="paramkey"></td> 237.1813 + <td></td> 237.1814 + <td class="paramtype">void * </td> 237.1815 + <td class="paramname"><em>data</em> </td> 237.1816 + </tr> 237.1817 + <tr> 237.1818 + <td></td> 237.1819 + <td>)</td> 237.1820 + <td></td><td></td> 237.1821 + </tr> 237.1822 + </table> 237.1823 +</div><div class="memdoc"> 237.1824 + 237.1825 +<p>Distance function for integers of type uint64_t. </p> 237.1826 +<dl class="params"><dt>Parameters</dt><dd> 237.1827 + <table class="params"> 237.1828 + <tr><td class="paramname">i1</td><td>pointer to uint64_t one </td></tr> 237.1829 + <tr><td class="paramname">i2</td><td>pointer to uint64_t two </td></tr> 237.1830 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1831 + </table> 237.1832 + </dd> 237.1833 +</dl> 237.1834 +<dl class="section return"><dt>Returns</dt><dd>i1 minus i2 </dd></dl> 237.1835 + 237.1836 +</div> 237.1837 +</div> 237.1838 +<a id="abb13476228d0c16bfaba08469adbae2d"></a> 237.1839 +<h2 class="memtitle"><span class="permalink"><a href="#abb13476228d0c16bfaba08469adbae2d">◆ </a></span>ucx_dist_ulongint()</h2> 237.1840 + 237.1841 +<div class="memitem"> 237.1842 +<div class="memproto"> 237.1843 + <table class="memname"> 237.1844 + <tr> 237.1845 + <td class="memname">intmax_t ucx_dist_ulongint </td> 237.1846 + <td>(</td> 237.1847 + <td class="paramtype">const void * </td> 237.1848 + <td class="paramname"><em>i1</em>, </td> 237.1849 + </tr> 237.1850 + <tr> 237.1851 + <td class="paramkey"></td> 237.1852 + <td></td> 237.1853 + <td class="paramtype">const void * </td> 237.1854 + <td class="paramname"><em>i2</em>, </td> 237.1855 + </tr> 237.1856 + <tr> 237.1857 + <td class="paramkey"></td> 237.1858 + <td></td> 237.1859 + <td class="paramtype">void * </td> 237.1860 + <td class="paramname"><em>data</em> </td> 237.1861 + </tr> 237.1862 + <tr> 237.1863 + <td></td> 237.1864 + <td>)</td> 237.1865 + <td></td><td></td> 237.1866 + </tr> 237.1867 + </table> 237.1868 +</div><div class="memdoc"> 237.1869 + 237.1870 +<p>Distance function for integers of type unsigned long int. </p> 237.1871 +<dl class="params"><dt>Parameters</dt><dd> 237.1872 + <table class="params"> 237.1873 + <tr><td class="paramname">i1</td><td>pointer to unsigned long integer one </td></tr> 237.1874 + <tr><td class="paramname">i2</td><td>pointer to unsigned long integer two </td></tr> 237.1875 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1876 + </table> 237.1877 + </dd> 237.1878 +</dl> 237.1879 +<dl class="section return"><dt>Returns</dt><dd>i1 minus i2 </dd></dl> 237.1880 + 237.1881 +</div> 237.1882 +</div> 237.1883 +<a id="a59a5859272cb4b43cbdd58208c41e32b"></a> 237.1884 +<h2 class="memtitle"><span class="permalink"><a href="#a59a5859272cb4b43cbdd58208c41e32b">◆ </a></span>ucx_dist_ulonglong()</h2> 237.1885 + 237.1886 +<div class="memitem"> 237.1887 +<div class="memproto"> 237.1888 + <table class="memname"> 237.1889 + <tr> 237.1890 + <td class="memname">intmax_t ucx_dist_ulonglong </td> 237.1891 + <td>(</td> 237.1892 + <td class="paramtype">const void * </td> 237.1893 + <td class="paramname"><em>i1</em>, </td> 237.1894 + </tr> 237.1895 + <tr> 237.1896 + <td class="paramkey"></td> 237.1897 + <td></td> 237.1898 + <td class="paramtype">const void * </td> 237.1899 + <td class="paramname"><em>i2</em>, </td> 237.1900 + </tr> 237.1901 + <tr> 237.1902 + <td class="paramkey"></td> 237.1903 + <td></td> 237.1904 + <td class="paramtype">void * </td> 237.1905 + <td class="paramname"><em>data</em> </td> 237.1906 + </tr> 237.1907 + <tr> 237.1908 + <td></td> 237.1909 + <td>)</td> 237.1910 + <td></td><td></td> 237.1911 + </tr> 237.1912 + </table> 237.1913 +</div><div class="memdoc"> 237.1914 + 237.1915 +<p>Distance function for integers of type unsigned long long. </p> 237.1916 +<dl class="params"><dt>Parameters</dt><dd> 237.1917 + <table class="params"> 237.1918 + <tr><td class="paramname">i1</td><td>pointer to unsigned long long one </td></tr> 237.1919 + <tr><td class="paramname">i2</td><td>pointer to unsigned long long two </td></tr> 237.1920 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.1921 + </table> 237.1922 + </dd> 237.1923 +</dl> 237.1924 +<dl class="section return"><dt>Returns</dt><dd>i1 minus i2 </dd></dl> 237.1925 + 237.1926 +</div> 237.1927 +</div> 237.1928 +<a id="aa0bec80e1c67f769ff5e112a7d4ce72a"></a> 237.1929 +<h2 class="memtitle"><span class="permalink"><a href="#aa0bec80e1c67f769ff5e112a7d4ce72a">◆ </a></span>ucx_fprintf()</h2> 237.1930 + 237.1931 +<div class="memitem"> 237.1932 +<div class="memproto"> 237.1933 + <table class="memname"> 237.1934 + <tr> 237.1935 + <td class="memname">int ucx_fprintf </td> 237.1936 + <td>(</td> 237.1937 + <td class="paramtype">void * </td> 237.1938 + <td class="paramname"><em>stream</em>, </td> 237.1939 + </tr> 237.1940 + <tr> 237.1941 + <td class="paramkey"></td> 237.1942 + <td></td> 237.1943 + <td class="paramtype"><a class="el" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a> </td> 237.1944 + <td class="paramname"><em>wfc</em>, </td> 237.1945 + </tr> 237.1946 + <tr> 237.1947 + <td class="paramkey"></td> 237.1948 + <td></td> 237.1949 + <td class="paramtype">const char * </td> 237.1950 + <td class="paramname"><em>fmt</em>, </td> 237.1951 + </tr> 237.1952 + <tr> 237.1953 + <td class="paramkey"></td> 237.1954 + <td></td> 237.1955 + <td class="paramtype"> </td> 237.1956 + <td class="paramname"><em>...</em> </td> 237.1957 + </tr> 237.1958 + <tr> 237.1959 + <td></td> 237.1960 + <td>)</td> 237.1961 + <td></td><td></td> 237.1962 + </tr> 237.1963 + </table> 237.1964 +</div><div class="memdoc"> 237.1965 + 237.1966 +<p>A <code>printf()</code> like function which writes the output to a stream by using a <a class="el" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed" title="Function pointer to a write function. ">write_func()</a>. </p> 237.1967 +<dl class="params"><dt>Parameters</dt><dd> 237.1968 + <table class="params"> 237.1969 + <tr><td class="paramname">stream</td><td>the stream the data is written to </td></tr> 237.1970 + <tr><td class="paramname">wfc</td><td>the write function </td></tr> 237.1971 + <tr><td class="paramname">fmt</td><td>format string </td></tr> 237.1972 + <tr><td class="paramname">...</td><td>additional arguments </td></tr> 237.1973 + </table> 237.1974 + </dd> 237.1975 +</dl> 237.1976 +<dl class="section return"><dt>Returns</dt><dd>the total number of bytes written </dd></dl> 237.1977 + 237.1978 +</div> 237.1979 +</div> 237.1980 +<a id="ab2e184e6a744941aab6b8058116baf30"></a> 237.1981 +<h2 class="memtitle"><span class="permalink"><a href="#ab2e184e6a744941aab6b8058116baf30">◆ </a></span>ucx_memcpy()</h2> 237.1982 + 237.1983 +<div class="memitem"> 237.1984 +<div class="memproto"> 237.1985 + <table class="memname"> 237.1986 + <tr> 237.1987 + <td class="memname">void* ucx_memcpy </td> 237.1988 + <td>(</td> 237.1989 + <td class="paramtype">const void * </td> 237.1990 + <td class="paramname"><em>m</em>, </td> 237.1991 + </tr> 237.1992 + <tr> 237.1993 + <td class="paramkey"></td> 237.1994 + <td></td> 237.1995 + <td class="paramtype">void * </td> 237.1996 + <td class="paramname"><em>n</em> </td> 237.1997 + </tr> 237.1998 + <tr> 237.1999 + <td></td> 237.2000 + <td>)</td> 237.2001 + <td></td><td></td> 237.2002 + </tr> 237.2003 + </table> 237.2004 +</div><div class="memdoc"> 237.2005 + 237.2006 +<p>Copies a memory area. </p> 237.2007 +<dl class="params"><dt>Parameters</dt><dd> 237.2008 + <table class="params"> 237.2009 + <tr><td class="paramname">m</td><td>a pointer to the memory area </td></tr> 237.2010 + <tr><td class="paramname">n</td><td>a pointer to the size_t containing the size of the memory area </td></tr> 237.2011 + </table> 237.2012 + </dd> 237.2013 +</dl> 237.2014 +<dl class="section return"><dt>Returns</dt><dd>a pointer to a copy of the specified memory area that can be passed to free(void*) </dd></dl> 237.2015 + 237.2016 +</div> 237.2017 +</div> 237.2018 +<a id="adeb6e8d0a53a829207cfa0a979d01fff"></a> 237.2019 +<h2 class="memtitle"><span class="permalink"><a href="#adeb6e8d0a53a829207cfa0a979d01fff">◆ </a></span>ucx_strcpy()</h2> 237.2020 + 237.2021 +<div class="memitem"> 237.2022 +<div class="memproto"> 237.2023 + <table class="memname"> 237.2024 + <tr> 237.2025 + <td class="memname">void* ucx_strcpy </td> 237.2026 + <td>(</td> 237.2027 + <td class="paramtype">const void * </td> 237.2028 + <td class="paramname"><em>s</em>, </td> 237.2029 + </tr> 237.2030 + <tr> 237.2031 + <td class="paramkey"></td> 237.2032 + <td></td> 237.2033 + <td class="paramtype">void * </td> 237.2034 + <td class="paramname"><em>data</em> </td> 237.2035 + </tr> 237.2036 + <tr> 237.2037 + <td></td> 237.2038 + <td>)</td> 237.2039 + <td></td><td></td> 237.2040 + </tr> 237.2041 + </table> 237.2042 +</div><div class="memdoc"> 237.2043 + 237.2044 +<p>Copies a string. </p> 237.2045 +<dl class="params"><dt>Parameters</dt><dd> 237.2046 + <table class="params"> 237.2047 + <tr><td class="paramname">s</td><td>the string to copy </td></tr> 237.2048 + <tr><td class="paramname">data</td><td>omitted </td></tr> 237.2049 + </table> 237.2050 + </dd> 237.2051 +</dl> 237.2052 +<dl class="section return"><dt>Returns</dt><dd>a pointer to a copy of s1 that can be passed to free(void*) </dd></dl> 237.2053 + 237.2054 +</div> 237.2055 +</div> 237.2056 +<a id="a114ee7f7da62656ffd35e2dc23394201"></a> 237.2057 +<h2 class="memtitle"><span class="permalink"><a href="#a114ee7f7da62656ffd35e2dc23394201">◆ </a></span>ucx_stream_bncopy()</h2> 237.2058 + 237.2059 +<div class="memitem"> 237.2060 +<div class="memproto"> 237.2061 + <table class="memname"> 237.2062 + <tr> 237.2063 + <td class="memname">size_t ucx_stream_bncopy </td> 237.2064 + <td>(</td> 237.2065 + <td class="paramtype">void * </td> 237.2066 + <td class="paramname"><em>src</em>, </td> 237.2067 + </tr> 237.2068 + <tr> 237.2069 + <td class="paramkey"></td> 237.2070 + <td></td> 237.2071 + <td class="paramtype">void * </td> 237.2072 + <td class="paramname"><em>dest</em>, </td> 237.2073 + </tr> 237.2074 + <tr> 237.2075 + <td class="paramkey"></td> 237.2076 + <td></td> 237.2077 + <td class="paramtype"><a class="el" href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">read_func</a> </td> 237.2078 + <td class="paramname"><em>rfnc</em>, </td> 237.2079 + </tr> 237.2080 + <tr> 237.2081 + <td class="paramkey"></td> 237.2082 + <td></td> 237.2083 + <td class="paramtype"><a class="el" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a> </td> 237.2084 + <td class="paramname"><em>wfnc</em>, </td> 237.2085 + </tr> 237.2086 + <tr> 237.2087 + <td class="paramkey"></td> 237.2088 + <td></td> 237.2089 + <td class="paramtype">char * </td> 237.2090 + <td class="paramname"><em>buf</em>, </td> 237.2091 + </tr> 237.2092 + <tr> 237.2093 + <td class="paramkey"></td> 237.2094 + <td></td> 237.2095 + <td class="paramtype">size_t </td> 237.2096 + <td class="paramname"><em>bufsize</em>, </td> 237.2097 + </tr> 237.2098 + <tr> 237.2099 + <td class="paramkey"></td> 237.2100 + <td></td> 237.2101 + <td class="paramtype">size_t </td> 237.2102 + <td class="paramname"><em>n</em> </td> 237.2103 + </tr> 237.2104 + <tr> 237.2105 + <td></td> 237.2106 + <td>)</td> 237.2107 + <td></td><td></td> 237.2108 + </tr> 237.2109 + </table> 237.2110 +</div><div class="memdoc"> 237.2111 + 237.2112 +<p>Reads data from a stream and writes it to another stream. </p> 237.2113 +<dl class="params"><dt>Parameters</dt><dd> 237.2114 + <table class="params"> 237.2115 + <tr><td class="paramname">src</td><td>the source stream </td></tr> 237.2116 + <tr><td class="paramname">dest</td><td>the destination stream </td></tr> 237.2117 + <tr><td class="paramname">rfnc</td><td>the read function </td></tr> 237.2118 + <tr><td class="paramname">wfnc</td><td>the write function </td></tr> 237.2119 + <tr><td class="paramname">buf</td><td>a pointer to the copy buffer or <code>NULL</code> if a buffer shall be implicitly created on the heap </td></tr> 237.2120 + <tr><td class="paramname">bufsize</td><td>the size of the copy buffer - if <code>NULL</code> was provided for <code>buf</code>, this is the size of the buffer that shall be implicitly created </td></tr> 237.2121 + <tr><td class="paramname">n</td><td>the maximum number of bytes that shall be copied </td></tr> 237.2122 + </table> 237.2123 + </dd> 237.2124 +</dl> 237.2125 +<dl class="section return"><dt>Returns</dt><dd>the total number of bytes copied </dd></dl> 237.2126 + 237.2127 +</div> 237.2128 +</div> 237.2129 +<a id="a3ea1dfb856c741f3e8ec6bfdc9ad427e"></a> 237.2130 +<h2 class="memtitle"><span class="permalink"><a href="#a3ea1dfb856c741f3e8ec6bfdc9ad427e">◆ </a></span>ucx_vasprintf()</h2> 237.2131 + 237.2132 +<div class="memitem"> 237.2133 +<div class="memproto"> 237.2134 + <table class="memname"> 237.2135 + <tr> 237.2136 + <td class="memname"><a class="el" href="structsstr__t.html">sstr_t</a> ucx_vasprintf </td> 237.2137 + <td>(</td> 237.2138 + <td class="paramtype"><a class="el" href="structUcxAllocator.html">UcxAllocator</a> * </td> 237.2139 + <td class="paramname"><em>allocator</em>, </td> 237.2140 + </tr> 237.2141 + <tr> 237.2142 + <td class="paramkey"></td> 237.2143 + <td></td> 237.2144 + <td class="paramtype">const char * </td> 237.2145 + <td class="paramname"><em>fmt</em>, </td> 237.2146 + </tr> 237.2147 + <tr> 237.2148 + <td class="paramkey"></td> 237.2149 + <td></td> 237.2150 + <td class="paramtype">va_list </td> 237.2151 + <td class="paramname"><em>ap</em> </td> 237.2152 + </tr> 237.2153 + <tr> 237.2154 + <td></td> 237.2155 + <td>)</td> 237.2156 + <td></td><td></td> 237.2157 + </tr> 237.2158 + </table> 237.2159 +</div><div class="memdoc"> 237.2160 + 237.2161 +<p><code>va_list</code> version of <a class="el" href="utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5" title="A printf() like function which allocates space for a sstr_t the result is written to...">ucx_asprintf()</a>. </p> 237.2162 +<dl class="params"><dt>Parameters</dt><dd> 237.2163 + <table class="params"> 237.2164 + <tr><td class="paramname">allocator</td><td>the <a class="el" href="structUcxAllocator.html" title="UCX allocator data structure containing memory management functions. ">UcxAllocator</a> used for allocating the result <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> </td></tr> 237.2165 + <tr><td class="paramname">fmt</td><td>format string </td></tr> 237.2166 + <tr><td class="paramname">ap</td><td>argument list </td></tr> 237.2167 + </table> 237.2168 + </dd> 237.2169 +</dl> 237.2170 +<dl class="section return"><dt>Returns</dt><dd>a <a class="el" href="structsstr__t.html" title="The UCX string structure. ">sstr_t</a> containing the formatted string </dd></dl> 237.2171 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5" title="A printf() like function which allocates space for a sstr_t the result is written to...">ucx_asprintf()</a> </dd></dl> 237.2172 + 237.2173 +</div> 237.2174 +</div> 237.2175 +<a id="a4907967beb92c3ae351dd239abbb6927"></a> 237.2176 +<h2 class="memtitle"><span class="permalink"><a href="#a4907967beb92c3ae351dd239abbb6927">◆ </a></span>ucx_vfprintf()</h2> 237.2177 + 237.2178 +<div class="memitem"> 237.2179 +<div class="memproto"> 237.2180 + <table class="memname"> 237.2181 + <tr> 237.2182 + <td class="memname">int ucx_vfprintf </td> 237.2183 + <td>(</td> 237.2184 + <td class="paramtype">void * </td> 237.2185 + <td class="paramname"><em>stream</em>, </td> 237.2186 + </tr> 237.2187 + <tr> 237.2188 + <td class="paramkey"></td> 237.2189 + <td></td> 237.2190 + <td class="paramtype"><a class="el" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a> </td> 237.2191 + <td class="paramname"><em>wfc</em>, </td> 237.2192 + </tr> 237.2193 + <tr> 237.2194 + <td class="paramkey"></td> 237.2195 + <td></td> 237.2196 + <td class="paramtype">const char * </td> 237.2197 + <td class="paramname"><em>fmt</em>, </td> 237.2198 + </tr> 237.2199 + <tr> 237.2200 + <td class="paramkey"></td> 237.2201 + <td></td> 237.2202 + <td class="paramtype">va_list </td> 237.2203 + <td class="paramname"><em>ap</em> </td> 237.2204 + </tr> 237.2205 + <tr> 237.2206 + <td></td> 237.2207 + <td>)</td> 237.2208 + <td></td><td></td> 237.2209 + </tr> 237.2210 + </table> 237.2211 +</div><div class="memdoc"> 237.2212 + 237.2213 +<p><code>va_list</code> version of <a class="el" href="utils_8h.html#aa0bec80e1c67f769ff5e112a7d4ce72a" title="A printf() like function which writes the output to a stream by using a write_func(). ">ucx_fprintf()</a>. </p> 237.2214 +<dl class="params"><dt>Parameters</dt><dd> 237.2215 + <table class="params"> 237.2216 + <tr><td class="paramname">stream</td><td>the stream the data is written to </td></tr> 237.2217 + <tr><td class="paramname">wfc</td><td>the write function </td></tr> 237.2218 + <tr><td class="paramname">fmt</td><td>format string </td></tr> 237.2219 + <tr><td class="paramname">ap</td><td>argument list </td></tr> 237.2220 + </table> 237.2221 + </dd> 237.2222 +</dl> 237.2223 +<dl class="section return"><dt>Returns</dt><dd>the total number of bytes written </dd></dl> 237.2224 +<dl class="section see"><dt>See also</dt><dd><a class="el" href="utils_8h.html#aa0bec80e1c67f769ff5e112a7d4ce72a" title="A printf() like function which writes the output to a stream by using a write_func(). ">ucx_fprintf()</a> </dd></dl> 237.2225 + 237.2226 +</div> 237.2227 +</div> 237.2228 +</div><!-- contents --> 237.2229 +<!-- start footer part --> 237.2230 +<hr class="footer"/><address class="footer"><small> 237.2231 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 237.2232 +<img class="footer" src="doxygen.png" alt="doxygen"/> 237.2233 +</a> 1.8.13 237.2234 +</small></address> 237.2235 +</body> 237.2236 +</html>
238.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 238.2 +++ b/docs/api-2.1/utils_8h_source.html Sat Feb 06 19:11:44 2021 +0100 238.3 @@ -0,0 +1,124 @@ 238.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 238.5 +<html xmlns="http://www.w3.org/1999/xhtml"> 238.6 +<head> 238.7 +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> 238.8 +<meta http-equiv="X-UA-Compatible" content="IE=9"/> 238.9 +<meta name="generator" content="Doxygen 1.8.13"/> 238.10 +<meta name="viewport" content="width=device-width, initial-scale=1"/> 238.11 +<title>ucx: /home/mike/workspace/c/ucx/src/ucx/utils.h Source File</title> 238.12 +<link href="tabs.css" rel="stylesheet" type="text/css"/> 238.13 +<script type="text/javascript" src="jquery.js"></script> 238.14 +<script type="text/javascript" src="dynsections.js"></script> 238.15 +<link href="search/search.css" rel="stylesheet" type="text/css"/> 238.16 +<script type="text/javascript" src="search/searchdata.js"></script> 238.17 +<script type="text/javascript" src="search/search.js"></script> 238.18 +<link href="doxygen.css" rel="stylesheet" type="text/css" /> 238.19 +</head> 238.20 +<body> 238.21 +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> 238.22 +<div id="titlearea"> 238.23 +<table cellspacing="0" cellpadding="0"> 238.24 + <tbody> 238.25 + <tr style="height: 56px;"> 238.26 + <td id="projectlogo"><img alt="Logo" src="uaplogo.png"/></td> 238.27 + <td id="projectalign" style="padding-left: 0.5em;"> 238.28 + <div id="projectname">ucx 238.29 + </div> 238.30 + <div id="projectbrief">UAP Common Extensions</div> 238.31 + </td> 238.32 + </tr> 238.33 + </tbody> 238.34 +</table> 238.35 +</div> 238.36 +<!-- end header part --> 238.37 +<!-- Generated by Doxygen 1.8.13 --> 238.38 +<script type="text/javascript"> 238.39 +var searchBox = new SearchBox("searchBox", "search",false,'Search'); 238.40 +</script> 238.41 +<script type="text/javascript" src="menudata.js"></script> 238.42 +<script type="text/javascript" src="menu.js"></script> 238.43 +<script type="text/javascript"> 238.44 +$(function() { 238.45 + initMenu('',true,false,'search.php','Search'); 238.46 + $(document).ready(function() { init_search(); }); 238.47 +}); 238.48 +</script> 238.49 +<div id="main-nav"></div> 238.50 +<!-- window showing the filter options --> 238.51 +<div id="MSearchSelectWindow" 238.52 + onmouseover="return searchBox.OnSearchSelectShow()" 238.53 + onmouseout="return searchBox.OnSearchSelectHide()" 238.54 + onkeydown="return searchBox.OnSearchSelectKey(event)"> 238.55 +</div> 238.56 + 238.57 +<!-- iframe showing the search results (closed by default) --> 238.58 +<div id="MSearchResultsWindow"> 238.59 +<iframe src="javascript:void(0)" frameborder="0" 238.60 + name="MSearchResults" id="MSearchResults"> 238.61 +</iframe> 238.62 +</div> 238.63 + 238.64 +<div id="nav-path" class="navpath"> 238.65 + <ul> 238.66 +<li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="dir_69f4ea29401808fe6229564976cde3ce.html">ucx</a></li> </ul> 238.67 +</div> 238.68 +</div><!-- top --> 238.69 +<div class="header"> 238.70 + <div class="headertitle"> 238.71 +<div class="title">utils.h</div> </div> 238.72 +</div><!--header--> 238.73 +<div class="contents"> 238.74 +<a href="utils_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved.</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Redistribution and use in source and binary forms, with or without</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * modification, are permitted provided that the following conditions are met:</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * 1. Redistributions of source code must retain the above copyright</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * notice, this list of conditions and the following disclaimer.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> *</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> * 2. Redistributions in binary form must reproduce the above copyright</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> * notice, this list of conditions and the following disclaimer in the</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> * documentation and/or other materials provided with the distribution.</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> *</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment"> * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * POSSIBILITY OF SUCH DAMAGE.</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> */</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="preprocessor">#ifndef UCX_UTILS_H</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#define UCX_UTILS_H</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="preprocessor">#include "<a class="code" href="ucx_8h.html">ucx.h</a>"</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="preprocessor">#include "<a class="code" href="string_8h.html">string.h</a>"</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="preprocessor">#include "<a class="code" href="allocator_8h.html">allocator.h</a>"</span></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#include <inttypes.h></span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#include <<a class="code" href="string_8h.html">string.h</a>></span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#include <stdarg.h></span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword">extern</span> <span class="stringliteral">"C"</span> {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="utils_8h.html#a23efd74fa5f701d4cf26ccbfd138a439"> 55</a></span> <span class="preprocessor">#define UCX_STREAM_COPY_BUFSIZE 4096</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="keywordtype">void</span> *<a class="code" href="utils_8h.html#adeb6e8d0a53a829207cfa0a979d01fff">ucx_strcpy</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *s, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keywordtype">void</span> *<a class="code" href="utils_8h.html#ab2e184e6a744941aab6b8058116baf30">ucx_memcpy</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *m, <span class="keywordtype">void</span> *n);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> </div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="keywordtype">size_t</span> <a class="code" href="utils_8h.html#a114ee7f7da62656ffd35e2dc23394201">ucx_stream_bncopy</a>(<span class="keywordtype">void</span> *src, <span class="keywordtype">void</span> *dest, <a class="code" href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">read_func</a> rfnc, <a class="code" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a> wfnc,</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordtype">char</span>* buf, <span class="keywordtype">size_t</span> bufsize, <span class="keywordtype">size_t</span> n);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="utils_8h.html#a41ca1344f781c0d3bf7a414a6e811392"> 104</a></span> <span class="preprocessor">#define ucx_stream_copy(src,dest,rfnc,wfnc) ucx_stream_bncopy(\</span></div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor"> src, dest, (read_func)rfnc, (write_func)wfnc, \</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor"> NULL, UCX_STREAM_COPY_BUFSIZE, (size_t)-1)</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="utils_8h.html#add13f39a8af440b4f7e6f74339eaada2"> 118</a></span> <span class="preprocessor">#define ucx_stream_ncopy(src,dest,rfnc,wfnc, n) ucx_stream_bncopy(\</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="preprocessor"> src, dest, (read_func)rfnc, (write_func)wfnc, \</span></div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="preprocessor"> NULL, UCX_STREAM_COPY_BUFSIZE, n)</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="utils_8h.html#a6003a1750a66234169bd1f8cc84b297b"> 136</a></span> <span class="preprocessor">#define ucx_stream_bcopy(src,dest,rfnc,wfnc, buf, bufsize) ucx_stream_bncopy(\</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor"> src, dest, (read_func)rfnc, (write_func)wfnc, \</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="preprocessor"> buf, bufsize, (size_t)-1)</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#aa6a37b9d172b6a5b2803d152f9e1b258">ucx_cmp_str</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *s1, <span class="keyword">const</span> <span class="keywordtype">void</span> *s2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#ac6b354a878f551a3a5b20a167db3f308">ucx_cmp_strn</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *s1, <span class="keyword">const</span> <span class="keywordtype">void</span> *s2, <span class="keywordtype">void</span> *n);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#adee0739589166d272f8cb7c23aabf8ba">ucx_cmp_sstr</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *s1, <span class="keyword">const</span> <span class="keywordtype">void</span> *s2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#a8ce7e11e6b3deafe89a32a091fde7f16">ucx_cmp_int</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span> </div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#aeb57a2b9a6aaa0460c7a6bec29accf2c">ucx_cmp_longint</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#a366b57def20f86a41eaedf575eea5375">ucx_cmp_longlong</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#aa29e6e559946375e34113e34e0b0bd0d">ucx_cmp_int16</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> </div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#a858b2ac443fb202643b71f6a7e9218dd">ucx_cmp_int32</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#a54701aea6a89fed1402dfb0bf56bc7f6">ucx_cmp_int64</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#abd83a5da91c3dd026a6931bd80c12f1e">ucx_cmp_uint</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#a3f3cbae2594d6f722bae29acb0408a24">ucx_cmp_ulongint</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#a6acfc359421f21f9a042a654ff7faac5">ucx_cmp_ulonglong</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#acde5366437e886a459b7468f7a9e11f0">ucx_cmp_uint16</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#a5879d1722330355914d8c9146fa549d3">ucx_cmp_uint32</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#a1572a78b5b42f7151a5b2a5a7283d62d">ucx_cmp_uint64</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> intmax_t <a class="code" href="utils_8h.html#a4ab6753739d56c09cdf6079fdcabf7c6">ucx_dist_int</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> intmax_t <a class="code" href="utils_8h.html#a43e73d288b1553a0078bf4c98dd341f5">ucx_dist_longint</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> intmax_t <a class="code" href="utils_8h.html#a306778414a2427951ea263be92368627">ucx_dist_longlong</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> intmax_t <a class="code" href="utils_8h.html#a81fb8434b70ca11bf2c14abfa21d16a9">ucx_dist_int16</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> </div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> intmax_t <a class="code" href="utils_8h.html#ab4a659cc46096f0490c1dafa57726476">ucx_dist_int32</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> intmax_t <a class="code" href="utils_8h.html#a54e7d06585bad3a899befc4e9c13853f">ucx_dist_int64</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> intmax_t <a class="code" href="utils_8h.html#a37b7d471ca1679992afc11a0deda45f4">ucx_dist_uint</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> intmax_t <a class="code" href="utils_8h.html#abb13476228d0c16bfaba08469adbae2d">ucx_dist_ulongint</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> </div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> intmax_t <a class="code" href="utils_8h.html#a59a5859272cb4b43cbdd58208c41e32b">ucx_dist_ulonglong</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> intmax_t <a class="code" href="utils_8h.html#a66e00a0703cbcde050ec922578e2f080">ucx_dist_uint16</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span> intmax_t <a class="code" href="utils_8h.html#add2b5c5507caba59d894b84e056b079b">ucx_dist_uint32</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> intmax_t <a class="code" href="utils_8h.html#a3ba75e2e0b2479eef2b22fb219b42da7">ucx_dist_uint64</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *i1, <span class="keyword">const</span> <span class="keywordtype">void</span> *i2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#ad1196b561bcdad76c393885819769a97">ucx_cmp_float</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *f1, <span class="keyword">const</span> <span class="keywordtype">void</span> *f2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#ab804b7c27d0bfcd7bf3a3583140825b6">ucx_cmp_double</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *d1, <span class="keyword">const</span> <span class="keywordtype">void</span> *d2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#aa174d539de3ea59be4f9640f17ce53d8">ucx_cmp_ptr</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *ptr1, <span class="keyword">const</span> <span class="keywordtype">void</span> *ptr2, <span class="keywordtype">void</span> *data);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#aff7d2bcded71196831a8c0664333f8e7">ucx_cmp_mem</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *ptr1, <span class="keyword">const</span> <span class="keywordtype">void</span> *ptr2, <span class="keywordtype">void</span> *n);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#aa0bec80e1c67f769ff5e112a7d4ce72a">ucx_fprintf</a>(<span class="keywordtype">void</span> *stream, <a class="code" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a> wfc, <span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ...);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span> </div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span> <span class="keywordtype">int</span> <a class="code" href="utils_8h.html#a4907967beb92c3ae351dd239abbb6927">ucx_vfprintf</a>(<span class="keywordtype">void</span> *stream, <a class="code" href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a> wfc, <span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, va_list ap);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5">ucx_asprintf</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, ...);</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span> </div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span> <a class="code" href="structsstr__t.html">sstr_t</a> <a class="code" href="utils_8h.html#a3ea1dfb856c741f3e8ec6bfdc9ad427e">ucx_vasprintf</a>(<a class="code" href="structUcxAllocator.html">UcxAllocator</a> *allocator, <span class="keyword">const</span> <span class="keywordtype">char</span> *fmt, va_list ap);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div><div class="line"><a name="l00488"></a><span class="lineno"><a class="line" href="utils_8h.html#af9f333b66ecd639c347c7235f4992e2e"> 488</a></span> <span class="preprocessor">#define ucx_sprintf(...) \</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> <span class="preprocessor"> ucx_asprintf(ucx_default_allocator(), __VA_ARGS__)</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> </div><div class="line"><a name="l00500"></a><span class="lineno"><a class="line" href="utils_8h.html#a9d7d65a420f026fcb6982803d5120519"> 500</a></span> <span class="preprocessor">#define ucx_bprintf(buffer, ...) ucx_fprintf((UcxBuffer*)buffer, \</span></div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="preprocessor"> (write_func)ucx_buffer_write, __VA_ARGS__)</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span> <span class="preprocessor">#ifdef __cplusplus</span></div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> }</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span> <span class="preprocessor">#endif </span><span class="comment">/* UCX_UTILS_H */</span><span class="preprocessor"></span></div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span> </div><div class="ttc" id="utils_8h_html_a5879d1722330355914d8c9146fa549d3"><div class="ttname"><a href="utils_8h.html#a5879d1722330355914d8c9146fa549d3">ucx_cmp_uint32</a></div><div class="ttdeci">int ucx_cmp_uint32(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Compares two integers of type uint32_t. </div><div class="ttdef"><b>Definition:</b> utils.c:205</div></div> 238.75 +<div class="ttc" id="structsstr__t_html"><div class="ttname"><a href="structsstr__t.html">sstr_t</a></div><div class="ttdoc">The UCX string structure. </div><div class="ttdef"><b>Definition:</b> string.h:90</div></div> 238.76 +<div class="ttc" id="utils_8h_html_aeb57a2b9a6aaa0460c7a6bec29accf2c"><div class="ttname"><a href="utils_8h.html#aeb57a2b9a6aaa0460c7a6bec29accf2c">ucx_cmp_longint</a></div><div class="ttdeci">int ucx_cmp_longint(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Compares two integers of type long int. </div><div class="ttdef"><b>Definition:</b> utils.c:115</div></div> 238.77 +<div class="ttc" id="utils_8h_html_a4ab6753739d56c09cdf6079fdcabf7c6"><div class="ttname"><a href="utils_8h.html#a4ab6753739d56c09cdf6079fdcabf7c6">ucx_dist_int</a></div><div class="ttdeci">intmax_t ucx_dist_int(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Distance function for integers of type int. </div><div class="ttdef"><b>Definition:</b> utils.c:225</div></div> 238.78 +<div class="ttc" id="string_8h_html"><div class="ttname"><a href="string_8h.html">string.h</a></div><div class="ttdoc">Bounded string implementation. </div></div> 238.79 +<div class="ttc" id="utils_8h_html_a6acfc359421f21f9a042a654ff7faac5"><div class="ttname"><a href="utils_8h.html#a6acfc359421f21f9a042a654ff7faac5">ucx_cmp_ulonglong</a></div><div class="ttdeci">int ucx_cmp_ulonglong(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Compares two integers of type unsigned long long. </div><div class="ttdef"><b>Definition:</b> utils.c:185</div></div> 238.80 +<div class="ttc" id="utils_8h_html_a114ee7f7da62656ffd35e2dc23394201"><div class="ttname"><a href="utils_8h.html#a114ee7f7da62656ffd35e2dc23394201">ucx_stream_bncopy</a></div><div class="ttdeci">size_t ucx_stream_bncopy(void *src, void *dest, read_func rfnc, write_func wfnc, char *buf, size_t bufsize, size_t n)</div><div class="ttdoc">Reads data from a stream and writes it to another stream. </div><div class="ttdef"><b>Definition:</b> utils.c:52</div></div> 238.81 +<div class="ttc" id="utils_8h_html_adee0739589166d272f8cb7c23aabf8ba"><div class="ttname"><a href="utils_8h.html#adee0739589166d272f8cb7c23aabf8ba">ucx_cmp_sstr</a></div><div class="ttdeci">int ucx_cmp_sstr(const void *s1, const void *s2, void *data)</div><div class="ttdoc">Wraps the sstrcmp function. </div><div class="ttdef"><b>Definition:</b> utils.c:99</div></div> 238.82 +<div class="ttc" id="ucx_8h_html"><div class="ttname"><a href="ucx_8h.html">ucx.h</a></div><div class="ttdoc">Main UCX Header providing most common definitions. </div></div> 238.83 +<div class="ttc" id="utils_8h_html_ad1196b561bcdad76c393885819769a97"><div class="ttname"><a href="utils_8h.html#ad1196b561bcdad76c393885819769a97">ucx_cmp_float</a></div><div class="ttdeci">int ucx_cmp_float(const void *f1, const void *f2, void *data)</div><div class="ttdoc">Compares two real numbers of type float. </div><div class="ttdef"><b>Definition:</b> utils.c:297</div></div> 238.84 +<div class="ttc" id="utils_8h_html_a366b57def20f86a41eaedf575eea5375"><div class="ttname"><a href="utils_8h.html#a366b57def20f86a41eaedf575eea5375">ucx_cmp_longlong</a></div><div class="ttdeci">int ucx_cmp_longlong(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Compares two integers of type long long. </div><div class="ttdef"><b>Definition:</b> utils.c:125</div></div> 238.85 +<div class="ttc" id="utils_8h_html_a858b2ac443fb202643b71f6a7e9218dd"><div class="ttname"><a href="utils_8h.html#a858b2ac443fb202643b71f6a7e9218dd">ucx_cmp_int32</a></div><div class="ttdeci">int ucx_cmp_int32(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Compares two integers of type int32_t. </div><div class="ttdef"><b>Definition:</b> utils.c:145</div></div> 238.86 +<div class="ttc" id="utils_8h_html_a3f3cbae2594d6f722bae29acb0408a24"><div class="ttname"><a href="utils_8h.html#a3f3cbae2594d6f722bae29acb0408a24">ucx_cmp_ulongint</a></div><div class="ttdeci">int ucx_cmp_ulongint(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Compares two integers of type unsigned long int. </div><div class="ttdef"><b>Definition:</b> utils.c:175</div></div> 238.87 +<div class="ttc" id="utils_8h_html_a1572a78b5b42f7151a5b2a5a7283d62d"><div class="ttname"><a href="utils_8h.html#a1572a78b5b42f7151a5b2a5a7283d62d">ucx_cmp_uint64</a></div><div class="ttdeci">int ucx_cmp_uint64(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Compares two integers of type uint64_t. </div><div class="ttdef"><b>Definition:</b> utils.c:215</div></div> 238.88 +<div class="ttc" id="utils_8h_html_a306778414a2427951ea263be92368627"><div class="ttname"><a href="utils_8h.html#a306778414a2427951ea263be92368627">ucx_dist_longlong</a></div><div class="ttdeci">intmax_t ucx_dist_longlong(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Distance function for integers of type long long. </div><div class="ttdef"><b>Definition:</b> utils.c:237</div></div> 238.89 +<div class="ttc" id="utils_8h_html_ac6b354a878f551a3a5b20a167db3f308"><div class="ttname"><a href="utils_8h.html#ac6b354a878f551a3a5b20a167db3f308">ucx_cmp_strn</a></div><div class="ttdeci">int ucx_cmp_strn(const void *s1, const void *s2, void *n)</div><div class="ttdoc">Wraps the strncmp function. </div><div class="ttdef"><b>Definition:</b> utils.c:95</div></div> 238.90 +<div class="ttc" id="utils_8h_html_aa6a37b9d172b6a5b2803d152f9e1b258"><div class="ttname"><a href="utils_8h.html#aa6a37b9d172b6a5b2803d152f9e1b258">ucx_cmp_str</a></div><div class="ttdeci">int ucx_cmp_str(const void *s1, const void *s2, void *data)</div><div class="ttdoc">Wraps the strcmp function. </div><div class="ttdef"><b>Definition:</b> utils.c:91</div></div> 238.91 +<div class="ttc" id="utils_8h_html_ab804b7c27d0bfcd7bf3a3583140825b6"><div class="ttname"><a href="utils_8h.html#ab804b7c27d0bfcd7bf3a3583140825b6">ucx_cmp_double</a></div><div class="ttdeci">int ucx_cmp_double(const void *d1, const void *d2, void *data)</div><div class="ttdoc">Compares two real numbers of type double. </div><div class="ttdef"><b>Definition:</b> utils.c:308</div></div> 238.92 +<div class="ttc" id="utils_8h_html_a3ba75e2e0b2479eef2b22fb219b42da7"><div class="ttname"><a href="utils_8h.html#a3ba75e2e0b2479eef2b22fb219b42da7">ucx_dist_uint64</a></div><div class="ttdeci">intmax_t ucx_dist_uint64(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Distance function for integers of type uint64_t. </div><div class="ttdef"><b>Definition:</b> utils.c:291</div></div> 238.93 +<div class="ttc" id="utils_8h_html_add2b5c5507caba59d894b84e056b079b"><div class="ttname"><a href="utils_8h.html#add2b5c5507caba59d894b84e056b079b">ucx_dist_uint32</a></div><div class="ttdeci">intmax_t ucx_dist_uint32(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Distance function for integers of type uint32_t. </div><div class="ttdef"><b>Definition:</b> utils.c:285</div></div> 238.94 +<div class="ttc" id="structUcxAllocator_html"><div class="ttname"><a href="structUcxAllocator.html">UcxAllocator</a></div><div class="ttdoc">UCX allocator data structure containing memory management functions. </div><div class="ttdef"><b>Definition:</b> allocator.h:88</div></div> 238.95 +<div class="ttc" id="utils_8h_html_aa174d539de3ea59be4f9640f17ce53d8"><div class="ttname"><a href="utils_8h.html#aa174d539de3ea59be4f9640f17ce53d8">ucx_cmp_ptr</a></div><div class="ttdeci">int ucx_cmp_ptr(const void *ptr1, const void *ptr2, void *data)</div><div class="ttdoc">Compares two pointers. </div><div class="ttdef"><b>Definition:</b> utils.c:319</div></div> 238.96 +<div class="ttc" id="utils_8h_html_aff7d2bcded71196831a8c0664333f8e7"><div class="ttname"><a href="utils_8h.html#aff7d2bcded71196831a8c0664333f8e7">ucx_cmp_mem</a></div><div class="ttdeci">int ucx_cmp_mem(const void *ptr1, const void *ptr2, void *n)</div><div class="ttdoc">Compares two memory areas. </div><div class="ttdef"><b>Definition:</b> utils.c:329</div></div> 238.97 +<div class="ttc" id="utils_8h_html_a59a5859272cb4b43cbdd58208c41e32b"><div class="ttname"><a href="utils_8h.html#a59a5859272cb4b43cbdd58208c41e32b">ucx_dist_ulonglong</a></div><div class="ttdeci">intmax_t ucx_dist_ulonglong(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Distance function for integers of type unsigned long long. </div><div class="ttdef"><b>Definition:</b> utils.c:273</div></div> 238.98 +<div class="ttc" id="utils_8h_html_aa0bec80e1c67f769ff5e112a7d4ce72a"><div class="ttname"><a href="utils_8h.html#aa0bec80e1c67f769ff5e112a7d4ce72a">ucx_fprintf</a></div><div class="ttdeci">int ucx_fprintf(void *stream, write_func wfc, const char *fmt,...)</div><div class="ttdoc">A printf() like function which writes the output to a stream by using a write_func(). </div><div class="ttdef"><b>Definition:</b> utils.c:343</div></div> 238.99 +<div class="ttc" id="utils_8h_html_acde5366437e886a459b7468f7a9e11f0"><div class="ttname"><a href="utils_8h.html#acde5366437e886a459b7468f7a9e11f0">ucx_cmp_uint16</a></div><div class="ttdeci">int ucx_cmp_uint16(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Compares two integers of type uint16_t. </div><div class="ttdef"><b>Definition:</b> utils.c:195</div></div> 238.100 +<div class="ttc" id="utils_8h_html_a8ce7e11e6b3deafe89a32a091fde7f16"><div class="ttname"><a href="utils_8h.html#a8ce7e11e6b3deafe89a32a091fde7f16">ucx_cmp_int</a></div><div class="ttdeci">int ucx_cmp_int(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Compares two integers of type int. </div><div class="ttdef"><b>Definition:</b> utils.c:105</div></div> 238.101 +<div class="ttc" id="utils_8h_html_a54e7d06585bad3a899befc4e9c13853f"><div class="ttname"><a href="utils_8h.html#a54e7d06585bad3a899befc4e9c13853f">ucx_dist_int64</a></div><div class="ttdeci">intmax_t ucx_dist_int64(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Distance function for integers of type int64_t. </div><div class="ttdef"><b>Definition:</b> utils.c:255</div></div> 238.102 +<div class="ttc" id="ucx_8h_html_a6a67e255e460acb58f802067b3ff5fd5"><div class="ttname"><a href="ucx_8h.html#a6a67e255e460acb58f802067b3ff5fd5">read_func</a></div><div class="ttdeci">size_t(* read_func)(void *, size_t, size_t, void *)</div><div class="ttdoc">Function pointer to a read function. </div><div class="ttdef"><b>Definition:</b> ucx.h:132</div></div> 238.103 +<div class="ttc" id="utils_8h_html_abd83a5da91c3dd026a6931bd80c12f1e"><div class="ttname"><a href="utils_8h.html#abd83a5da91c3dd026a6931bd80c12f1e">ucx_cmp_uint</a></div><div class="ttdeci">int ucx_cmp_uint(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Compares two integers of type unsigned int. </div><div class="ttdef"><b>Definition:</b> utils.c:165</div></div> 238.104 +<div class="ttc" id="utils_8h_html_a9f9cf0e89ffdc256ecb35429907f51f5"><div class="ttname"><a href="utils_8h.html#a9f9cf0e89ffdc256ecb35429907f51f5">ucx_asprintf</a></div><div class="ttdeci">sstr_t ucx_asprintf(UcxAllocator *allocator, const char *fmt,...)</div><div class="ttdoc">A printf() like function which allocates space for a sstr_t the result is written to...</div><div class="ttdef"><b>Definition:</b> utils.c:394</div></div> 238.105 +<div class="ttc" id="utils_8h_html_a37b7d471ca1679992afc11a0deda45f4"><div class="ttname"><a href="utils_8h.html#a37b7d471ca1679992afc11a0deda45f4">ucx_dist_uint</a></div><div class="ttdeci">intmax_t ucx_dist_uint(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Distance function for integers of type unsigned int. </div><div class="ttdef"><b>Definition:</b> utils.c:261</div></div> 238.106 +<div class="ttc" id="utils_8h_html_a81fb8434b70ca11bf2c14abfa21d16a9"><div class="ttname"><a href="utils_8h.html#a81fb8434b70ca11bf2c14abfa21d16a9">ucx_dist_int16</a></div><div class="ttdeci">intmax_t ucx_dist_int16(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Distance function for integers of type int16_t. </div><div class="ttdef"><b>Definition:</b> utils.c:243</div></div> 238.107 +<div class="ttc" id="utils_8h_html_adeb6e8d0a53a829207cfa0a979d01fff"><div class="ttname"><a href="utils_8h.html#adeb6e8d0a53a829207cfa0a979d01fff">ucx_strcpy</a></div><div class="ttdeci">void * ucx_strcpy(const void *s, void *data)</div><div class="ttdoc">Copies a string. </div><div class="ttdef"><b>Definition:</b> utils.c:37</div></div> 238.108 +<div class="ttc" id="utils_8h_html_a43e73d288b1553a0078bf4c98dd341f5"><div class="ttname"><a href="utils_8h.html#a43e73d288b1553a0078bf4c98dd341f5">ucx_dist_longint</a></div><div class="ttdeci">intmax_t ucx_dist_longint(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Distance function for integers of type long int. </div><div class="ttdef"><b>Definition:</b> utils.c:231</div></div> 238.109 +<div class="ttc" id="utils_8h_html_a66e00a0703cbcde050ec922578e2f080"><div class="ttname"><a href="utils_8h.html#a66e00a0703cbcde050ec922578e2f080">ucx_dist_uint16</a></div><div class="ttdeci">intmax_t ucx_dist_uint16(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Distance function for integers of type uint16_t. </div><div class="ttdef"><b>Definition:</b> utils.c:279</div></div> 238.110 +<div class="ttc" id="utils_8h_html_ab4a659cc46096f0490c1dafa57726476"><div class="ttname"><a href="utils_8h.html#ab4a659cc46096f0490c1dafa57726476">ucx_dist_int32</a></div><div class="ttdeci">intmax_t ucx_dist_int32(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Distance function for integers of type int32_t. </div><div class="ttdef"><b>Definition:</b> utils.c:249</div></div> 238.111 +<div class="ttc" id="allocator_8h_html"><div class="ttname"><a href="allocator_8h.html">allocator.h</a></div><div class="ttdoc">Allocator for custom memory management. </div></div> 238.112 +<div class="ttc" id="utils_8h_html_abb13476228d0c16bfaba08469adbae2d"><div class="ttname"><a href="utils_8h.html#abb13476228d0c16bfaba08469adbae2d">ucx_dist_ulongint</a></div><div class="ttdeci">intmax_t ucx_dist_ulongint(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Distance function for integers of type unsigned long int. </div><div class="ttdef"><b>Definition:</b> utils.c:267</div></div> 238.113 +<div class="ttc" id="ucx_8h_html_a989b3f0fa4d307d278378fde435641ed"><div class="ttname"><a href="ucx_8h.html#a989b3f0fa4d307d278378fde435641ed">write_func</a></div><div class="ttdeci">size_t(* write_func)(const void *, size_t, size_t, void *)</div><div class="ttdoc">Function pointer to a write function. </div><div class="ttdef"><b>Definition:</b> ucx.h:119</div></div> 238.114 +<div class="ttc" id="utils_8h_html_aa29e6e559946375e34113e34e0b0bd0d"><div class="ttname"><a href="utils_8h.html#aa29e6e559946375e34113e34e0b0bd0d">ucx_cmp_int16</a></div><div class="ttdeci">int ucx_cmp_int16(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Compares two integers of type int16_t. </div><div class="ttdef"><b>Definition:</b> utils.c:135</div></div> 238.115 +<div class="ttc" id="utils_8h_html_ab2e184e6a744941aab6b8058116baf30"><div class="ttname"><a href="utils_8h.html#ab2e184e6a744941aab6b8058116baf30">ucx_memcpy</a></div><div class="ttdeci">void * ucx_memcpy(const void *m, void *n)</div><div class="ttdoc">Copies a memory area. </div><div class="ttdef"><b>Definition:</b> utils.c:45</div></div> 238.116 +<div class="ttc" id="utils_8h_html_a54701aea6a89fed1402dfb0bf56bc7f6"><div class="ttname"><a href="utils_8h.html#a54701aea6a89fed1402dfb0bf56bc7f6">ucx_cmp_int64</a></div><div class="ttdeci">int ucx_cmp_int64(const void *i1, const void *i2, void *data)</div><div class="ttdoc">Compares two integers of type int64_t. </div><div class="ttdef"><b>Definition:</b> utils.c:155</div></div> 238.117 +<div class="ttc" id="utils_8h_html_a4907967beb92c3ae351dd239abbb6927"><div class="ttname"><a href="utils_8h.html#a4907967beb92c3ae351dd239abbb6927">ucx_vfprintf</a></div><div class="ttdeci">int ucx_vfprintf(void *stream, write_func wfc, const char *fmt, va_list ap)</div><div class="ttdoc">va_list version of ucx_fprintf(). </div><div class="ttdef"><b>Definition:</b> utils.c:352</div></div> 238.118 +<div class="ttc" id="utils_8h_html_a3ea1dfb856c741f3e8ec6bfdc9ad427e"><div class="ttname"><a href="utils_8h.html#a3ea1dfb856c741f3e8ec6bfdc9ad427e">ucx_vasprintf</a></div><div class="ttdeci">sstr_t ucx_vasprintf(UcxAllocator *allocator, const char *fmt, va_list ap)</div><div class="ttdoc">va_list version of ucx_asprintf(). </div><div class="ttdef"><b>Definition:</b> utils.c:403</div></div> 238.119 +</div><!-- fragment --></div><!-- contents --> 238.120 +<!-- start footer part --> 238.121 +<hr class="footer"/><address class="footer"><small> 238.122 +Generated on Thu Dec 19 2019 19:58:24 for ucx by  <a href="http://www.doxygen.org/index.html"> 238.123 +<img class="footer" src="doxygen.png" alt="doxygen"/> 238.124 +</a> 1.8.13 238.125 +</small></address> 238.126 +</body> 238.127 +</html>
239.1 --- a/docs/src/CMakeLists.txt Mon Dec 30 09:54:10 2019 +0100 239.2 +++ b/docs/src/CMakeLists.txt Sat Feb 06 19:11:44 2021 +0100 239.3 @@ -1,7 +1,7 @@ 239.4 # 239.5 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 239.6 # 239.7 -# Copyright 2019 Mike Becker, Olaf Wintermann All rights reserved. 239.8 +# Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved. 239.9 # 239.10 # Redistribution and use in source and binary forms, with or without 239.11 # modification, are permitted provided that the following conditions are met: 239.12 @@ -28,7 +28,7 @@ 239.13 239.14 set(PANDOC_DESTDIR ${CMAKE_BINARY_DIR}/docs/web) 239.15 set(PANDOC_ARGS -c ucx.css -B header.html -A footer.html -T 'UAP Common Extensions') 239.16 -set(PANDOC_SRC index.md license.md modules.md install.md) 239.17 +set(PANDOC_SRC index.md license.md install.md) 239.18 set(LOGO_PATH ../../uaplogo.png) 239.19 239.20 if (NOT EXISTS ${PANDOC_EXECUTABLE}) 239.21 @@ -42,6 +42,7 @@ 239.22 message(STATUS "HTML Documentation will be generated at: ${PANDOC_DESTDIR}.") 239.23 file(MAKE_DIRECTORY ${PANDOC_DESTDIR}) 239.24 239.25 +# UCX 3.0 documentation 239.26 foreach(source_file ${PANDOC_SRC}) 239.27 string(REPLACE .md .html dest_file ${source_file}) 239.28 string(PREPEND dest_file "${PANDOC_DESTDIR}/") 239.29 @@ -54,10 +55,20 @@ 239.30 ) 239.31 endforeach() 239.32 239.33 +# UCX 2.1 documentation 239.34 +add_custom_target(docs-html-21 239.35 + COMMAND ${PANDOC_EXECUTABLE} -c ucx.css -B header-ucx2.html -A footer.html 239.36 + -T 'UAP Common Extensions' -o ${PANDOC_DESTDIR}/modules-ucx2.html modules-ucx2.md 239.37 + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 239.38 + DEPENDS modules-ucx2.md 239.39 + COMMENT "Adding UCX 2.1 HTML documentation." 239.40 +) 239.41 + 239.42 +# Collect all HTML documentation 239.43 add_custom_target(docs-html 239.44 COMMAND ${CMAKE_COMMAND} -E copy ucx.css ${PANDOC_DESTDIR}/ucx.css 239.45 COMMAND ${CMAKE_COMMAND} -E copy ${LOGO_PATH} ${PANDOC_DESTDIR}/uaplogo.png 239.46 - DEPENDS ${PANDOC_DEST} 239.47 + DEPENDS ${PANDOC_DEST} docs-html-21 239.48 WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 239.49 COMMENT "Generating HTML documentation with pandoc." 239.50 )
240.1 --- a/docs/src/Makefile Mon Dec 30 09:54:10 2019 +0100 240.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 240.3 @@ -1,66 +0,0 @@ 240.4 -# 240.5 -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 240.6 -# 240.7 -# Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 240.8 -# 240.9 -# Redistribution and use in source and binary forms, with or without 240.10 -# modification, are permitted provided that the following conditions are met: 240.11 -# 240.12 -# 1. Redistributions of source code must retain the above copyright 240.13 -# notice, this list of conditions and the following disclaimer. 240.14 -# 240.15 -# 2. Redistributions in binary form must reproduce the above copyright 240.16 -# notice, this list of conditions and the following disclaimer in the 240.17 -# documentation and/or other materials provided with the distribution. 240.18 -# 240.19 -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 240.20 -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 240.21 -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 240.22 -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 240.23 -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 240.24 -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 240.25 -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 240.26 -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 240.27 -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 240.28 -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 240.29 -# POSSIBILITY OF SUCH DAMAGE. 240.30 -# 240.31 - 240.32 -PD=pandoc 240.33 -PFLAGS=-c ucx.css -B header.html -A footer.html -T 'UAP Common Extensions' 240.34 - 240.35 -SRC = index.md 240.36 -SRC += install.md 240.37 -SRC += license.md 240.38 -SRC += modules.md 240.39 - 240.40 -DEST = ../web 240.41 - 240.42 -PROJROOT = ../.. 240.43 -LOGO = uaplogo.png 240.44 - 240.45 -HTML = $(SRC:%.md=$(DEST)/%.html) 240.46 - 240.47 -all: html api 240.48 - 240.49 - 240.50 -html: $(DEST) $(DEST)/ucx.css $(DEST)/$(LOGO) $(HTML) 240.51 - 240.52 - 240.53 -api: $(DEST) 240.54 - cd $(PROJROOT); doxygen 240.55 - 240.56 -$(DEST): 240.57 - mkdir -p $@ 240.58 - 240.59 -$(DEST)/%.html: %.md 240.60 - $(PD) $(PFLAGS) $< -o $@ 240.61 - 240.62 -$(DEST)/ucx.css: ucx.css 240.63 - cp $< $@ 240.64 - 240.65 -$(DEST)/$(LOGO): $(PROJROOT)/$(LOGO) 240.66 - cp $< $@ 240.67 - 240.68 -clean: 240.69 - rm -Rf $(DEST)
241.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 241.2 +++ b/docs/src/header-ucx2.html Sat Feb 06 19:11:44 2021 +0100 241.3 @@ -0,0 +1,58 @@ 241.4 + <!-- begin header --> 241.5 + <div id="page-header"> 241.6 + <span>UAP Common Extensions</span> 241.7 + <img src="uaplogo.png" alt="UAP Core"> 241.8 + </div> 241.9 + <!-- end header --> 241.10 + 241.11 + <!-- begin navigation --> 241.12 + <div id="sidebar"> 241.13 + <div class="nav"> 241.14 + <h3>Getting Started</h3> 241.15 + <ul> 241.16 + <li><a href="index.html">Overview</a></li> 241.17 + <li><a href="install.html">Build Instructions</a></li> 241.18 + <li><a href="license.html">License</a></li> 241.19 + </ul> 241.20 + </div> 241.21 + <div class="nav"> 241.22 + <h3>Documentation</h3> 241.23 + <ul> 241.24 + <li><a href="modules.html">Modules</a> 241.25 + <ul> 241.26 + <li><a href="modules.html#allocator">Allocator</a></li> 241.27 + <li><a href="modules.html#array">Array</a></li> 241.28 + <li><a href="modules.html#avl-tree">AVL Tree</a></li> 241.29 + <li><a href="modules.html#buffer">Buffer</a></li> 241.30 + <li><a href="modules.html#list">List</a></li> 241.31 + <li><a href="modules.html#logging">Logging</a></li> 241.32 + <li><a href="modules.html#map">Map</a></li> 241.33 + <li><a href="modules.html#memory-pool">Memory Pool</a></li> 241.34 + <li><a href="modules.html#properties">Properties</a></li> 241.35 + <li><a href="modules.html#stack">Stack</a></li> 241.36 + <li><a href="modules.html#string">String</a></li> 241.37 + <li><a href="modules.html#testing">Testing</a></li> 241.38 + <li><a href="modules.html#utilities">Utilities</a></li> 241.39 + </ul> 241.40 + </li> 241.41 + <li><a target="_blank" href="api-2.1/index.html">API Reference</a></li> 241.42 + </ul> 241.43 + </div> 241.44 + <div class="nav"> 241.45 + <h3>Repositories</h3> 241.46 + <ul> 241.47 + <li><a target="_blank" href="https://develop.uap-core.de/hg/ucx/">UAP Core Repository</a></li> 241.48 + <li><a target="_blank" href="https://sourceforge.net/p/ucx/">Source Forge</a></li> 241.49 + </ul> 241.50 + </div> 241.51 + <div class="nav"> 241.52 + <h3>Partners</h3> 241.53 + <ul> 241.54 + <li><a target="_blank" href="https://www.unixwork.de">UNIXwork</a></li> 241.55 + </ul> 241.56 + </div> 241.57 + </div> 241.58 + <!-- end navigation --> 241.59 + 241.60 + <!-- begin content --> 241.61 + <div id="content"> 241.62 \ No newline at end of file
242.1 --- a/docs/src/header.html Mon Dec 30 09:54:10 2019 +0100 242.2 +++ b/docs/src/header.html Sat Feb 06 19:11:44 2021 +0100 242.3 @@ -18,24 +18,9 @@ 242.4 <div class="nav"> 242.5 <h3>Documentation</h3> 242.6 <ul> 242.7 - <li><a href="modules.html">Modules</a> 242.8 - <ul> 242.9 - <li><a href="modules.html#allocator">Allocator</a></li> 242.10 - <li><a href="modules.html#array">Array</a></li> 242.11 - <li><a href="modules.html#avl-tree">AVL Tree</a></li> 242.12 - <li><a href="modules.html#buffer">Buffer</a></li> 242.13 - <li><a href="modules.html#list">List</a></li> 242.14 - <li><a href="modules.html#logging">Logging</a></li> 242.15 - <li><a href="modules.html#map">Map</a></li> 242.16 - <li><a href="modules.html#memory-pool">Memory Pool</a></li> 242.17 - <li><a href="modules.html#properties">Properties</a></li> 242.18 - <li><a href="modules.html#stack">Stack</a></li> 242.19 - <li><a href="modules.html#string">String</a></li> 242.20 - <li><a href="modules.html#testing">Testing</a></li> 242.21 - <li><a href="modules.html#utilities">Utilities</a></li> 242.22 - </ul> 242.23 - </li> 242.24 + <li>Under construction...</li> 242.25 <li><a target="_blank" href="api/index.html">API Reference</a></li> 242.26 + <li><a href="modules-ucx2.html">UCX 2.1</a> 242.27 </ul> 242.28 </div> 242.29 <div class="nav">
243.1 --- a/docs/src/index.md Mon Dec 30 09:54:10 2019 +0100 243.2 +++ b/docs/src/index.md Sat Feb 06 19:11:44 2021 +0100 243.3 @@ -29,6 +29,10 @@ 243.4 Changelog 243.5 --------- 243.6 243.7 +### Version 3.0 243.8 + 243.9 + * under construction... 243.10 + 243.11 ### Version 2.1 - 2019-12-30 243.12 243.13 * adds string replace functions
244.1 --- a/docs/src/install.md Mon Dec 30 09:54:10 2019 +0100 244.2 +++ b/docs/src/install.md Sat Feb 06 19:11:44 2021 +0100 244.3 @@ -2,14 +2,32 @@ 244.4 title: Build Instructions 244.5 --- 244.6 244.7 -The install procedure is the same on all supported platforms. 244.8 -For Microsoft Windows, however, you will need an appropriate port of the linux 244.9 -tools (like MinGW or Cygwin). 244.10 +The build processes uses CMake starting with UCX 3.0. 244.11 First, download the source code from [Source Forge][1]. 244.12 244.13 wget https://sourceforge.net/projects/ucx/files/ucx-latest.tar.gz 244.14 tar -xzf ucx-latest.tar.gz 244.15 cd ucx-latest 244.16 + 244.17 +Then create a build directory and issue the cmake command and then make. 244.18 + 244.19 + mkdir build 244.20 + cd build 244.21 + cmake .. 244.22 + make 244.23 + 244.24 +--- 244.25 + 244.26 +### UCX 2.1 244.27 + 244.28 +The build procedure for UCX 2.1 uses a configure script. 244.29 +For Microsoft Windows, you will need an appropriate port of the linux 244.30 +tools (like MinGW or Cygwin). 244.31 +First, download the source code from [Source Forge][1]. 244.32 + 244.33 + wget https://sourceforge.net/projects/ucx/files/ucx-2.1.0.tar.gz 244.34 + tar -xzf ucx-2.1.0.tar.gz 244.35 + cd ucx-2.1.0 244.36 244.37 Then issue the `configure` and `make` commands. 244.38
245.1 --- a/docs/src/license.md Mon Dec 30 09:54:10 2019 +0100 245.2 +++ b/docs/src/license.md Sat Feb 06 19:11:44 2021 +0100 245.3 @@ -2,7 +2,7 @@ 245.4 title: License 245.5 --- 245.6 245.7 -Copyright 2017 Mike Becker, Olaf Wintermann. All rights reserved. 245.8 +Copyright 2021 Mike Becker, Olaf Wintermann. All rights reserved. 245.9 245.10 Redistribution and use in source and binary forms, with or without 245.11 modification, are permitted provided that the following conditions are met:
246.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 246.2 +++ b/docs/src/modules-ucx2.md Sat Feb 06 19:11:44 2021 +0100 246.3 @@ -0,0 +1,873 @@ 246.4 +--- 246.5 +title: UCX 2.1 Modules 246.6 +--- 246.7 + 246.8 +UCX 2.1 provided several modules for data structures and algorithms. 246.9 +You may choose to use specific modules by inclueding the corresponding header 246.10 +file. 246.11 +Please note, that some modules make use of other UCX 2.1 modules. 246.12 +For instance, the [Allocator](#allocator) module is used by many other modules 246.13 +to allow flexible memory allocation. 246.14 +By default the header files are placed into an `ucx` directory within your 246.15 +systems include directory. In this case you can use a module by including it 246.16 +via `#include <ucx/MODULENAME.h>`. 246.17 +Required modules are included automatically. 246.18 + 246.19 +<div id="modules" align="center"> 246.20 + 246.21 +----------------------- ---------------------- -------------------------------- --------------------------- 246.22 +[String](#string) [Buffer](#buffer) 246.23 +[Allocator](#allocator) [Stack](#stack) [Memory Pool](#memory-pool) 246.24 +[Array](#array) [List](#list) [Map](#map) [AVL Tree](#avl-tree) 246.25 +[Logging](#logging) [Testing](#testing) [Utilities](#utilities) [Properties](#properties) 246.26 +----------------------- ---------------------- -------------------------------- --------------------------- 246.27 + 246.28 +</div> 246.29 + 246.30 +## Allocator 246.31 + 246.32 +*Header file:* [allocator.h](api-2.1/allocator_8h.html) 246.33 +*Required modules:* None. 246.34 + 246.35 +A UCX allocator consists of a pointer to the memory area / pool and four 246.36 +function pointers to memory management functions operating on this memory 246.37 +area / pool. These functions shall behave equivalent to the standard libc 246.38 +functions `malloc`, `calloc`, `realloc` and `free`. 246.39 + 246.40 +The signature of the memory management functions is based on the signature 246.41 +of the respective libc function but each of them takes the pointer to the 246.42 +memory area / pool as first argument. 246.43 + 246.44 +As the pointer to the memory area / pool can be arbitrarily chosen, any data 246.45 +can be provided to the memory management functions. One example is the 246.46 +[UCX Memory Pool](#memory-pool). 246.47 + 246.48 +## Array 246.49 + 246.50 +*Header file:* [array.h](api-2.1/array_8h.html) 246.51 +*Required modules:* [Allocator](#allocator) 246.52 + 246.53 +The UCX Array is an implementation of a dynamic array with automatic 246.54 +reallocation. The array structure contains a capacity, the current size, 246.55 +the size of each element, the raw pointer to the memory area and an allocator. 246.56 +Arrays are in most cases much faster than linked list. 246.57 +One can decide, whether to create a new array on the heap with `ucx_array_new()` 246.58 +or to save one indirection by initializing a `UcxArray` structure on the stack 246.59 +with `ucx_array_init()`. 246.60 + 246.61 +### Remove duplicates from an array of strings 246.62 + 246.63 +The following example shows, how a `UcxArray` can be built with 246.64 +a standard dynamic C array (pointer+length) as basis. 246.65 + 246.66 +```C 246.67 +UcxArray* create_unique(sstr_t* array, size_t arrlen) { 246.68 + // worst case is no duplicates, hence the capacity is set to arrlen 246.69 + UcxArray* result = ucx_array_new(arrlen, sizeof(sstr_t)); 246.70 + // only append elements, if they are not already present in the array 246.71 + for (size_t i = 0 ; i < arrlen ; ++i) { 246.72 + if (!ucx_array_contains(result, array+i, ucx_cmp_sstr, NULL)) { 246.73 + ucx_array_append_from(result, array+i, 1); 246.74 + } 246.75 + } 246.76 + // make the array as small as possible 246.77 + ucx_array_shrink(result); 246.78 + return result; 246.79 +} 246.80 + 246.81 +/* ... */ 246.82 + 246.83 +sstr_t* array = /* some standard array of strings */ 246.84 +size_t arrlen = /* the length of the array */ 246.85 + 246.86 +UcxArray* result = create_unique(array,arrlen); 246.87 + 246.88 +/* Iterate over the array and print the elements */ 246.89 +sstr_t* unique = result->data; 246.90 +for (size_t i = 0 ; i < result->size ; i++) { 246.91 + printf("%" PRIsstr "\n", SFMT(unique[i])); 246.92 +} 246.93 + 246.94 +/* Free the array. */ 246.95 +ucx_array_free(result); 246.96 +``` 246.97 +### Preventing out of bounds writes 246.98 + 246.99 +The functions `ucx_array_reserve()`, `ucx_array_resize()`, `ucx_array_grow()`, 246.100 +and `ucx_array_shrink()` allow easy management of the array capacity. 246.101 +Imagine you want to add `n` elements to an array. If your `n` elements are 246.102 +already somewhere else consecutively in memory, you can use 246.103 +`ucx_array_append_from()` and benefit from the autogrow facility in this family 246.104 +of functions. Otherwise, you can ask the array to have enough capacity for 246.105 +holding additional `n` elements. 246.106 + 246.107 +```C 246.108 +size_t n = // ... elements to add 246.109 +if (ucx_array_grow(array, n)) { 246.110 + fprintf(stderr, "Cannot add %zu elements to the array.\n", n); 246.111 + return 1; 246.112 +} 246.113 +for (size_t i = 0 ; i < n ; i++) { 246.114 + ((int*)array->data)[array->size++] = 80; 246.115 +} 246.116 +``` 246.117 + 246.118 +## AVL Tree 246.119 + 246.120 +*Header file:* [avl.h](api-2.1/avl_8h.html) 246.121 +*Required modules:* [Allocator](#allocator) 246.122 + 246.123 +This binary search tree implementation allows average O(1) insertion and 246.124 +removal of elements (excluding binary search time). 246.125 +All common binary tree operations are implemented. Furthermore, this module 246.126 +provides search functions via lower and upper bounds. 246.127 + 246.128 +### Filtering items with a time window 246.129 + 246.130 +Suppose you have a list of items which contain a `time_t` value and your task 246.131 +is to find all items within a time window `[t_start, t_end]`. 246.132 +With AVL Trees this is easy: 246.133 +```C 246.134 +/* --------------------- 246.135 + * Somewhere in a header 246.136 + */ 246.137 +typedef struct { 246.138 + time_t ts; 246.139 + /* other important data */ 246.140 +} MyObject; 246.141 + 246.142 +/* ----------- 246.143 + * Source code 246.144 + */ 246.145 + 246.146 +UcxAVLTree* tree = ucx_avl_new(ucx_cmp_longint); 246.147 +/* ... populate tree with objects, use '& MyObject.ts' as key ... */ 246.148 + 246.149 + 246.150 +/* Now find every item, with 30 <= ts <= 70 */ 246.151 +time_t ts_start = 30; 246.152 +time_t ts_end = 70; 246.153 + 246.154 +printf("Values in range:\n"); 246.155 +for ( 246.156 + UcxAVLNode* node = ucx_avl_find_node( 246.157 + tree, (intptr_t) &ts_start, 246.158 + ucx_dist_longint, UCX_AVL_FIND_LOWER_BOUNDED); 246.159 + node && (*(time_t*)node->key) <= ts_end; 246.160 + node = ucx_avl_succ(node) 246.161 + ) { 246.162 + printf(" ts: %ld\n", ((MyObject*)node->value)->ts); 246.163 +} 246.164 + 246.165 +ucx_avl_free_content(tree, free); 246.166 +ucx_avl_free(tree); 246.167 +``` 246.168 + 246.169 +## Buffer 246.170 + 246.171 +*Header file:* [buffer.h](api-2.1/buffer_8h.html) 246.172 +*Required modules:* None. 246.173 + 246.174 +Instances of this buffer implementation can be used to read from or to write to 246.175 +memory like you would do with a stream. This allows the use of 246.176 +`ucx_stream_copy()` from the [Utilities](#utilities) module to copy contents 246.177 +from one buffer to another or from file or network streams to the buffer and 246.178 +vice-versa. 246.179 + 246.180 +More features for convenient use of the buffer can be enabled, like automatic 246.181 +memory management and automatic resizing of the buffer space. 246.182 +See the documentation of the macro constants in the header file for more 246.183 +information. 246.184 + 246.185 +### Add line numbers to a file 246.186 + 246.187 +When reading a file line by line, you have three options: first, you could limit 246.188 +the maximum supported line length. 246.189 +Second, you allocate a god buffer large 246.190 +enough for the most lines a text file could have. 246.191 +And third, undoubtedly the best option, you start with a small buffer, which 246.192 +adjusts on demand. 246.193 +An `UcxBuffer` can be created to do just that for you. 246.194 +Just pass the `UCX_BUFFER_AUTOEXTEND` option to the initialization function. 246.195 +Here is a full working program, which adds line numbers to a file. 246.196 +```C 246.197 +#include <stdio.h> 246.198 +#include <ucx/buffer.h> 246.199 +#include <ucx/utils.h> 246.200 + 246.201 +int main(int argc, char** argv) { 246.202 + 246.203 + if (argc != 2) { 246.204 + fprintf(stderr, "Usage: %s <file>\n", argv[0]); 246.205 + return 1; 246.206 + } 246.207 + 246.208 + FILE* input = fopen(argv[1], "r"); 246.209 + if (!input) { 246.210 + perror("Canno read input"); 246.211 + return 1; 246.212 + } 246.213 + 246.214 + const size_t chunksize = 256; 246.215 + 246.216 + UcxBuffer* linebuf = 246.217 + ucx_buffer_new( 246.218 + NULL, /* the buffer should manage the memory area for us */ 246.219 + 2*chunksize, /* initial size should be twice the chunk size */ 246.220 + UCX_BUFFER_AUTOEXTEND); /* the buffer will grow when necessary */ 246.221 + 246.222 + size_t lineno = 1; 246.223 + do { 246.224 + /* read line chunk */ 246.225 + size_t read = ucx_stream_ncopy( 246.226 + input, linebuf, fread, ucx_buffer_write, chunksize); 246.227 + if (read == 0) break; 246.228 + 246.229 + /* handle line endings */ 246.230 + do { 246.231 + sstr_t bufstr = ucx_buffer_to_sstr(linebuf); 246.232 + sstr_t nl = sstrchr(bufstr, '\n'); 246.233 + if (nl.length == 0) break; 246.234 + 246.235 + size_t linelen = bufstr.length - nl.length; 246.236 + sstr_t linestr = sstrsubsl(bufstr, 0, linelen); 246.237 + 246.238 + printf("%zu: %" PRIsstr "\n", lineno++, SFMT(linestr)); 246.239 + 246.240 + /* shift the buffer to the next line */ 246.241 + ucx_buffer_shift_left(linebuf, linelen+1); 246.242 + } while(1); 246.243 + 246.244 + } while(1); 246.245 + 246.246 + /* print the 'noeol' line, if any */ 246.247 + sstr_t lastline = ucx_buffer_to_sstr(linebuf); 246.248 + if (lastline.length > 0) { 246.249 + printf("%zu: %" PRIsstr, lineno, SFMT(lastline)); 246.250 + } 246.251 + 246.252 + fclose(input); 246.253 + ucx_buffer_free(linebuf); 246.254 + 246.255 + return 0; 246.256 +} 246.257 +``` 246.258 + 246.259 +## List 246.260 + 246.261 +*Header file:* [list.h](api-2.1/list_8h.html) 246.262 +*Required modules:* [Allocator](#allocator) 246.263 + 246.264 +This module provides the data structure and several functions for a doubly 246.265 +linked list. Among the common operations like insert, remove, search and sort, 246.266 +we allow convenient iteration via a special `UCX_FOREACH` macro. 246.267 + 246.268 +### Remove duplicates from an array of strings 246.269 + 246.270 +Assume you are given an array of `sstr_t` and want to create a list of these 246.271 +strings without duplicates. 246.272 +This is a similar example to the one [above](#array), but here we are 246.273 +using a `UcxList`. 246.274 +```C 246.275 +#include <stdio.h> 246.276 +#include <ucx/list.h> 246.277 +#include <ucx/string.h> 246.278 +#include <ucx/utils.h> 246.279 + 246.280 +UcxList* remove_duplicates(sstr_t* array, size_t arrlen) { 246.281 + UcxList* list = NULL; 246.282 + for (size_t i = 0 ; i < arrlen ; ++i) { 246.283 + if (ucx_list_find(list, array+i, ucx_cmp_sstr, NULL) == -1) { 246.284 + sstr_t* s = malloc(sizeof(sstr_t)); 246.285 + *s = sstrdup(array[i]); 246.286 + list = ucx_list_append(list, s); 246.287 + } 246.288 + } 246.289 + return list; 246.290 +} 246.291 + 246.292 +/* we will need this function to clean up the list contents later */ 246.293 +void free_sstr(void* ptr) { 246.294 + sstr_t* s = ptr; 246.295 + free(s->ptr); 246.296 + free(s); 246.297 +} 246.298 + 246.299 +/* ... */ 246.300 + 246.301 +sstr_t* array = /* some array of strings */ 246.302 +size_t arrlen = /* the length of the array */ 246.303 + 246.304 +UcxList* list = remove_duplicates(array,arrlen); 246.305 + 246.306 +/* Iterate over the list and print the elements */ 246.307 +UCX_FOREACH(elem, list) { 246.308 + sstr_t s = *((sstr_t*)elem->data); 246.309 + printf("%" PRIsstr "\n", SFMT(s)); 246.310 +} 246.311 + 246.312 +/* Use our free function to free the duplicated strings. */ 246.313 +ucx_list_free_content(list, free_sstr); 246.314 +ucx_list_free(list); 246.315 +``` 246.316 + 246.317 +## Logging 246.318 + 246.319 +*Header file:* [logging.h](api-2.1/logging_8h.html) 246.320 +*Required modules:* [Map](#map), [String](#string) 246.321 + 246.322 +The logging module comes with some predefined log levels and allows some more 246.323 +customization. You may choose if you want to get timestamps or source file and 246.324 +line number logged automatically when outputting a message. 246.325 +The following function call initializes a debug logger with all of the above 246.326 +information: 246.327 +```C 246.328 + log = ucx_logger_new(stdout, UCX_LOGGER_DEBUG, 246.329 + UCX_LOGGER_LEVEL | UCX_LOGGER_TIMESTAMP | UCX_LOGGER_SOURCE); 246.330 +``` 246.331 +Afterwards you can use this logger with the predefined macros 246.332 +```C 246.333 + ucx_logger_trace(log, "Verbose output"); 246.334 + ucx_logger_debug(log, "Debug message"); 246.335 + ucx_logger_info(log, "Information"); 246.336 + ucx_logger_warn(log, "Warning"); 246.337 + ucx_logger_error(log, "Error message"); 246.338 +``` 246.339 +or you use 246.340 +```C 246.341 + ucx_logger_log(log, CUSTOM_LEVEL, "Some message") 246.342 +``` 246.343 +When you use your custom log level, don't forget to register it with 246.344 +```C 246.345 + ucx_logger_register_level(log, CUSTOM_LEVEL, "CUSTOM") 246.346 +``` 246.347 +where the last argument must be a string literal. 246.348 + 246.349 +## Map 246.350 + 246.351 +*Header file:* [map.h](api-2.1/map_8h.html) 246.352 +*Required modules:* [Allocator](#allocator), [String](#string) 246.353 + 246.354 +This module provides a hash map implementation using murmur hash 2 and separate 246.355 +chaining with linked lists. Similarly to the list module, we provide a 246.356 +`UCX_MAP_FOREACH` macro to conveniently iterate through the key/value pairs. 246.357 + 246.358 +### Parsing command line options 246.359 + 246.360 +Assume you want to parse command line options and record them within a map. 246.361 +One way to do this is shown by the following code sample: 246.362 +```C 246.363 + UcxMap* options = ucx_map_new(16); 246.364 + const char *NOARG = ""; 246.365 + 246.366 + char *option = NULL; 246.367 + char optchar = 0; 246.368 + for(int i=1;i<argc;i++) { 246.369 + char *arg = argv[i]; 246.370 + size_t len = strlen(arg); 246.371 + if(len > 1 && arg[0] == '-') { 246.372 + for(int c=1;c<len;c++) { 246.373 + if(option) { 246.374 + fprintf(stderr, 246.375 + "Missing argument for option -%c\n", optchar); 246.376 + return 1; 246.377 + } 246.378 + switch(arg[c]) { 246.379 + default: { 246.380 + fprintf(stderr, "Unknown option -%c\n\n", arg[c]); 246.381 + return 1; 246.382 + } 246.383 + case 'v': { 246.384 + ucx_map_cstr_put(options, "verbose", NOARG); 246.385 + break; 246.386 + } 246.387 + case 'o': { 246.388 + option = "output"; 246.389 + optchar = 'o'; 246.390 + break; 246.391 + } 246.392 + } 246.393 + } 246.394 + } else if(option) { 246.395 + ucx_map_cstr_put(options, option, arg); 246.396 + option = NULL; 246.397 + } else { 246.398 + /* ... handle argument that is not an option ... */ 246.399 + } 246.400 + } 246.401 + if(option) { 246.402 + fprintf(stderr, 246.403 + "Missing argument for option -%c\n", optchar); 246.404 + return 1; 246.405 + } 246.406 +``` 246.407 +With the following loop, you can access the previously recorded options: 246.408 +```C 246.409 + UcxMapIterator iter = ucx_map_iterator(options); 246.410 + char *arg; 246.411 + UCX_MAP_FOREACH(optkey, arg, iter) { 246.412 + char* opt = optkey.data; 246.413 + if (*arg) { 246.414 + printf("%s = %s\n", opt, arg); 246.415 + } else { 246.416 + printf("%s active\n", opt); 246.417 + } 246.418 + } 246.419 +``` 246.420 +Don't forget to call `ucx_map_free()`, when you are done with the map. 246.421 + 246.422 +## Memory Pool 246.423 + 246.424 +*Header file:* [mempool.h](api-2.1/mempool_8h.html) 246.425 +*Required modules:* [Allocator](#allocator) 246.426 + 246.427 +Here we have a concrete allocator implementation in the sense of a memory pool. 246.428 +This pool allows you to register destructor functions for the allocated memory, 246.429 +which are automatically called on the destruction of the pool. 246.430 +But you may also register *independent* destructor functions within a pool in 246.431 +case some external library allocated memory for you, which should be 246.432 +destroyed together with this pool. 246.433 + 246.434 +Many UCX modules support the use of an allocator. 246.435 +The [String Module](#string), for instance, provides the `sstrdup_a()` function, 246.436 +which uses the specified allocator to allocate the memory for the duplicated 246.437 +string. 246.438 +This way, you can use a `UcxMempool` to keep track of the memory occupied by 246.439 +duplicated strings and cleanup everything with just a single call to 246.440 +`ucx_mempool_destroy()`. 246.441 + 246.442 +### Read CSV data into a structure 246.443 + 246.444 +The following code example shows some of the basic memory pool functions and 246.445 +how they can be used with other UCX modules. 246.446 +```C 246.447 +#include <stdio.h> 246.448 +#include <ucx/mempool.h> 246.449 +#include <ucx/list.h> 246.450 +#include <ucx/string.h> 246.451 +#include <ucx/buffer.h> 246.452 +#include <ucx/utils.h> 246.453 + 246.454 +typedef struct { 246.455 + sstr_t column_a; 246.456 + sstr_t column_b; 246.457 + sstr_t column_c; 246.458 +} CSVData; 246.459 + 246.460 +int main(int argc, char** argv) { 246.461 + 246.462 + UcxMempool* pool = ucx_mempool_new(128); 246.463 + 246.464 + FILE *f = fopen("test.csv", "r"); 246.465 + if (!f) { 246.466 + perror("Cannot open file"); 246.467 + return 1; 246.468 + } 246.469 + /* close the file automatically at pool destruction*/ 246.470 + ucx_mempool_reg_destr(pool, f, (ucx_destructor) fclose); 246.471 + 246.472 + /* create a buffer and register it at the memory pool for destruction */ 246.473 + UcxBuffer* content = ucx_buffer_new(NULL, 256, UCX_BUFFER_AUTOEXTEND); 246.474 + ucx_mempool_reg_destr(pool, content, (ucx_destructor) ucx_buffer_free); 246.475 + 246.476 + /* read the file and split it by lines first */ 246.477 + ucx_stream_copy(f, content, fread, ucx_buffer_write); 246.478 + sstr_t contentstr = ucx_buffer_to_sstr(content); 246.479 + ssize_t lc = 0; 246.480 + sstr_t* lines = sstrsplit_a(pool->allocator, contentstr, S("\n"), &lc); 246.481 + 246.482 + /* skip the header and parse the remaining data */ 246.483 + UcxList* datalist = NULL; 246.484 + for (size_t i = 1 ; i < lc ; i++) { 246.485 + if (lines[i].length == 0) continue; 246.486 + ssize_t fc = 3; 246.487 + sstr_t* fields = sstrsplit_a(pool->allocator, lines[i], S(";"), &fc); 246.488 + if (fc != 3) { 246.489 + fprintf(stderr, "Syntax error in line %zu.\n", i); 246.490 + ucx_mempool_destroy(pool); 246.491 + return 1; 246.492 + } 246.493 + CSVData* data = ucx_mempool_malloc(pool, sizeof(CSVData)); 246.494 + data->column_a = fields[0]; 246.495 + data->column_b = fields[1]; 246.496 + data->column_c = fields[2]; 246.497 + datalist = ucx_list_append_a(pool->allocator, datalist, data); 246.498 + } 246.499 + 246.500 + /* control output */ 246.501 + UCX_FOREACH(elem, datalist) { 246.502 + CSVData* data = elem->data; 246.503 + printf("Column A: %" PRIsstr " | " 246.504 + "Column B: %" PRIsstr " | " 246.505 + "Column C: %" PRIsstr "\n", 246.506 + SFMT(data->column_a), SFMT(data->column_b), SFMT(data->column_c) 246.507 + ); 246.508 + } 246.509 + 246.510 + /* cleanup everything, no manual free() needed */ 246.511 + ucx_mempool_destroy(pool); 246.512 + 246.513 + return 0; 246.514 +} 246.515 +``` 246.516 + 246.517 +### Overriding the default destructor 246.518 + 246.519 +Sometimes you need to allocate memory with `ucx_mempool_malloc()`, but the 246.520 +memory is not supposed to be freed with a simple call to `free()`. 246.521 +In this case, you can overwrite the default destructor as follows: 246.522 +```C 246.523 + MyObject* obj = ucx_mempool_malloc(pool, sizeof(MyObject)); 246.524 + 246.525 + /* some special initialization with own resource management */ 246.526 + my_object_init(obj); 246.527 + 246.528 + /* register destructor function */ 246.529 + ucx_mempool_set_destr(obj, (ucx_destructor) my_object_destroy); 246.530 +``` 246.531 +Be aware, that your destructor function should not free any memory, that is 246.532 +also managed by the pool. 246.533 +Otherwise you might be risking a double-free. 246.534 +More precisely, a destructor function set with `ucx_mempool_set_destr()` MUST 246.535 +NOT call `free()` on the specified pointer whereas a desructor function 246.536 +registered with `ucx_mempool_reg_destr()` MAY (and in most cases will) call 246.537 +`free()`. 246.538 + 246.539 +## Properties 246.540 + 246.541 +*Header file:* [properties.h](api-2.1/properties_8h.html) 246.542 +*Required modules:* [Map](#map) 246.543 + 246.544 +This module provides load and store function for `*.properties` files. 246.545 +The key/value pairs are stored within an UCX Map. 246.546 + 246.547 +### Example: Loading properties from a file 246.548 + 246.549 +```C 246.550 +/* Open the file as usual */ 246.551 +FILE* file = fopen("myprops.properties", "r"); 246.552 +if (!file) { 246.553 + // error handling 246.554 + return 1; 246.555 +} 246.556 + 246.557 +/* Load the properties from the file */ 246.558 +UcxMap* myprops = ucx_map_new(16); 246.559 +if (ucx_properties_load(myprops, file)) { 246.560 + /* ... error handling ... */ 246.561 + fclose(file); 246.562 + ucx_map_free(myprops); 246.563 + return 1; 246.564 +} 246.565 + 246.566 +/* Print out the key/value pairs */ 246.567 +char* propval; 246.568 +UcxMapIterator propiter = ucx_map_iterator(myprops); 246.569 +UCX_MAP_FOREACH(key, propval, propiter) { 246.570 + printf("%s = %s\n", (char*)key.data, propval); 246.571 +} 246.572 + 246.573 +/* Don't forget to free the values before freeing the map */ 246.574 +ucx_map_free_content(myprops, NULL); 246.575 +ucx_map_free(myprops); 246.576 +fclose(file); 246.577 +``` 246.578 + 246.579 +## Stack 246.580 + 246.581 +*Header file:* [stack.h](api-2.1/stack_8h.html) 246.582 +*Required modules:* [Allocator](#allocator) 246.583 + 246.584 +This concrete implementation of an UCX Allocator allows you to grab some amount 246.585 +of memory which is then handled as a stack. 246.586 +Please note, that the term *stack* only refers to the behavior of this 246.587 +allocator. You may still choose to use either stack or heap memory 246.588 +for the underlying space. 246.589 +A typical use case is an algorithm where you need to allocate and free large 246.590 +amounts of memory very frequently. 246.591 + 246.592 +The following code sample shows how to initialize a stack and push and pop 246.593 +simple data. 246.594 +```C 246.595 + const size_t len = 1024; 246.596 + char space[len]; 246.597 + UcxStack stack; 246.598 + ucx_stack_init(&stack, space, len); 246.599 + 246.600 + int i = 42; 246.601 + float f = 3.14f; 246.602 + const char* str = "Hello!"; 246.603 + size_t strn = 7; 246.604 + 246.605 + /* push the integer */ 246.606 + ucx_stack_push(&stack, sizeof(int), &i); 246.607 + 246.608 + /* push the float and rember the address */ 246.609 + float* remember = ucx_stack_push(&stack, sizeof(float), &f); 246.610 + 246.611 + /* push the string with zero terminator */ 246.612 + ucx_stack_push(&stack, strn, str); 246.613 + 246.614 + /* if we forget, how big an element was, we can ask the stack */ 246.615 + printf("Length of string: %zu\n", ucx_stack_topsize(&stack)-1); 246.616 + 246.617 + /* retrieve the string as sstr_t, without zero terminator! */ 246.618 + sstr_t s; 246.619 + s.length = ucx_stack_topsize(&stack)-1; 246.620 + s.ptr = malloc(s.length); 246.621 + ucx_stack_popn(&stack, s.ptr, s.length); 246.622 + printf("%" PRIsstr "\n", SFMT(s)); 246.623 + 246.624 + /* print the float directly from the stack and free it */ 246.625 + printf("Float: %f\n", *remember); 246.626 + ucx_stack_free(&stack, remember); 246.627 + 246.628 + /* the last element is the integer */ 246.629 + int j; 246.630 + ucx_stack_pop(&stack, &j); 246.631 + printf("Integer: %d\n", j); 246.632 +``` 246.633 + 246.634 + 246.635 + 246.636 +## String 246.637 + 246.638 +*Header file:* [string.h](api-2.1/string_8h.html) 246.639 +*Required modules:* [Allocator](#allocator) 246.640 + 246.641 +This module provides a safe implementation of bounded string. 246.642 +Usually C strings do not carry a length. While for zero-terminated strings you 246.643 +can easily get the length with `strlen`, this is not generally possible for 246.644 +arbitrary strings. 246.645 +The `sstr_t` type of this module always carries the string and its length to 246.646 +reduce the risk of buffer overflows dramatically. 246.647 + 246.648 +### Initialization 246.649 + 246.650 +There are several ways to create an `sstr_t`: 246.651 + 246.652 +```C 246.653 +/* (1) sstr() uses strlen() internally, hence cstr MUST be zero-terminated */ 246.654 +sstr_t a = sstr(cstr); 246.655 + 246.656 +/* (2) cstr does not need to be zero-terminated, if length is specified */ 246.657 +sstr_t b = sstrn(cstr, len); 246.658 + 246.659 +/* (3) S() macro creates sstr_t from a string using sizeof() and using sstrn(). 246.660 + This version is especially useful for function arguments */ 246.661 +sstr_t c = S("hello"); 246.662 + 246.663 +/* (4) SC() macro works like S(), but makes the string immutable using scstr_t. 246.664 + (available since UCX 2.0) */ 246.665 +scstr_t d = SC("hello"); 246.666 + 246.667 +/* (5) ST() macro creates sstr_t struct literal using sizeof() */ 246.668 +sstr_t e = ST("hello"); 246.669 +``` 246.670 + 246.671 +You should not use the `S()`, `SC()`, or `ST()` macro with string of unknown 246.672 +origin, since the `sizeof()` call might not coincide with the string length in 246.673 +those cases. If you know what you are doing, it can save you some performance, 246.674 +because you do not need the `strlen()` call. 246.675 + 246.676 +### Handling immutable strings 246.677 + 246.678 +*(Since: UCX 2.0)* 246.679 + 246.680 +For immutable strings (i.e. `const char*` strings), UCX provides the `scstr_t` 246.681 +type, which works exactly as the `sstr_t` type but with a pointer 246.682 +to `const char`. All UCX string functions come in two flavors: one that enforces 246.683 +the `scstr_t` type, and another that usually accepts both types and performs 246.684 +a conversion automatically, if necessary. 246.685 + 246.686 +There are some exceptions to this rule, as the return type may depend on the 246.687 +argument type. 246.688 +E.g. the `sstrchr()` function returns a substring starting at 246.689 +the first occurrence of the specified character. 246.690 +Since this substring points to the memory of the argument string, it does not 246.691 +accept `scstr_t` as input argument, because the return type would break the 246.692 +constness. 246.693 + 246.694 + 246.695 +### Finding the position of a substring 246.696 + 246.697 +The `sstrstr()` function gives you a new `sstr_t` object starting with the 246.698 +requested substring. Thus determining the position comes down to a simple 246.699 +subtraction. 246.700 + 246.701 +```C 246.702 +sstr_t haystack = ST("Here we go!"); 246.703 +sstr_t needle = ST("we"); 246.704 +sstr_t result = sstrstr(haystack, needle); 246.705 +if (result.ptr) 246.706 + printf("Found at position %zd.\n", haystack.length-result.length); 246.707 +else 246.708 + printf("Not found.\n"); 246.709 +``` 246.710 + 246.711 +### Spliting a string by a delimiter 246.712 + 246.713 +The `sstrsplit()` function (and its allocator based version `sstrsplit_a()`) is 246.714 +very powerful and might look a bit nasty at a first glance. But it is indeed 246.715 +very simple to use. It is even more convenient in combination with a memory 246.716 +pool. 246.717 + 246.718 +```C 246.719 +sstr_t test = ST("here::are::some::strings"); 246.720 +sstr_t delim = ST("::"); 246.721 + 246.722 +ssize_t count = 0; /* no limit */ 246.723 +UcxMempool* pool = ucx_mempool_new_default(); 246.724 + 246.725 +sstr_t* result = sstrsplit_a(pool->allocator, test, delim, &count); 246.726 +for (ssize_t i = 0 ; i < count ; i++) { 246.727 + /* don't forget to specify the length via the %*s format specifier */ 246.728 + printf("%*s\n", result[i].length, result[i].ptr); 246.729 +} 246.730 + 246.731 +ucx_mempool_destroy(pool); 246.732 +``` 246.733 +The output is: 246.734 + 246.735 + here 246.736 + are 246.737 + some 246.738 + strings 246.739 + 246.740 +The memory pool ensures, that all strings are freed. 246.741 + 246.742 +### Disabling convenience macros 246.743 + 246.744 +If you are experiencing any troubles with the short convenience macros `S()`, 246.745 +`SC()`, or `ST()`, you can disable them by setting the macro 246.746 +`UCX_NO_SSTR_SHORTCUTS` before including the header (or via a compiler option). 246.747 +For the formatting macros `SFMT()` and `PRIsstr` you can use the macro 246.748 +`UCX_NO_SSTR_FORMAT_MACROS` to disable them. 246.749 + 246.750 +Please keep in mind, that after disabling the macros, you cannot use them in 246.751 +your code *and* foreign code that you might have included. 246.752 +You should only disable the macros, if you are experiencing a nasty name clash 246.753 +which cannot be otherwise resolved. 246.754 + 246.755 +## Testing 246.756 + 246.757 +*Header file:* [test.h](api-2.1/test_8h.html) 246.758 +*Required modules:* None. 246.759 + 246.760 +This module provides a testing framework which allows you to execute test cases 246.761 +within test suites. 246.762 +To avoid code duplication within tests, we also provide the possibility to 246.763 +define test subroutines. 246.764 + 246.765 +You should declare test cases and subroutines in a header file per test unit 246.766 +and implement them as you would implement normal functions. 246.767 +```C 246.768 + /* myunit.h */ 246.769 + UCX_TEST(function_name); 246.770 + UCX_TEST_SUBROUTINE(subroutine_name, paramlist); /* optional */ 246.771 + 246.772 + 246.773 + /* myunit.c */ 246.774 + UCX_TEST_SUBROUTINE(subroutine_name, paramlist) { 246.775 + /* ... reusable tests with UCX_TEST_ASSERT() ... */ 246.776 + } 246.777 + 246.778 + UCX_TEST(function_name) { 246.779 + /* ... resource allocation and other test preparation ... */ 246.780 + 246.781 + /* mandatory marker for the start of the tests */ 246.782 + UCX_TEST_BEGIN 246.783 + 246.784 + /* ... verifications with UCX_TEST_ASSERT() ... 246.785 + * (and/or calls with UCX_TEST_CALL_SUBROUTINE()) 246.786 + */ 246.787 + 246.788 + /* mandatory marker for the end of the tests */ 246.789 + UCX_TEST_END 246.790 + 246.791 + /* ... resource cleanup ... 246.792 + * (all code after UCX_TEST_END is always executed) 246.793 + */ 246.794 + } 246.795 +``` 246.796 +If you want to use the `UCX_TEST_ASSERT()` macro in a function, you are 246.797 +*required* to use a `UCX_TEST_SUBROUTINE`. 246.798 +Otherwise the testing framework does not know where to jump, when the assertion 246.799 +fails. 246.800 + 246.801 +After implementing the tests, you can easily build a test suite and execute it: 246.802 +```C 246.803 + UcxTestSuite* suite = ucx_test_suite_new(); 246.804 + ucx_test_register(suite, testMyTestCase01); 246.805 + ucx_test_register(suite, testMyTestCase02); 246.806 + /* ... */ 246.807 + ucx_test_run(suite, stdout); /* stdout, or any other FILE stream */ 246.808 +``` 246.809 + 246.810 +## Utilities 246.811 + 246.812 +*Header file:* [utils.h](api-2.1/utils_8h.html) 246.813 +*Required modules:* [Allocator](#allocator), [String](#string) 246.814 + 246.815 +In this module we provide very general utility function for copy and compare 246.816 +operations. 246.817 +We also provide several `printf` variants to conveniently print formatted data 246.818 +to streams or strings. 246.819 + 246.820 +### A simple copy program 246.821 + 246.822 +The utilities package provides several stream copy functions. 246.823 +One of them has a very simple interface and can, for instance, be used to copy 246.824 +whole files in a single call. 246.825 +This is a minimal working example: 246.826 +```C 246.827 +#include <stdio.h> 246.828 +#include <ucx/utils.h> 246.829 + 246.830 +int main(int argc, char** argv) { 246.831 + 246.832 + if (argc != 3) { 246.833 + fprintf(stderr, "Use %s <src> <dest>", argv[0]); 246.834 + return 1; 246.835 + } 246.836 + 246.837 + FILE *srcf = fopen(argv[1], "r"); /* insert error handling on your own */ 246.838 + FILE *destf = fopen(argv[2], "w"); 246.839 + 246.840 + size_t n = ucx_stream_copy(srcf, destf, fread, fwrite); 246.841 + printf("%zu bytes copied.\n", n); 246.842 + 246.843 + fclose(srcf); 246.844 + fclose(destf); 246.845 + 246.846 + 246.847 + return 0; 246.848 +} 246.849 +``` 246.850 + 246.851 +### Automatic allocation for formatted strings 246.852 + 246.853 +The UCX utility function `ucx_asprintf()` and it's convenient shortcut 246.854 +`ucx_sprintf` allow easy formatting of strings, without ever having to worry 246.855 +about the required space. 246.856 +```C 246.857 +sstr_t mystring = ucx_sprintf("The answer is: %d!", 42); 246.858 +``` 246.859 +Still, you have to pass `mystring.ptr` to `free()` (or the free function of 246.860 +your allocator, if you use `ucx_asprintf`). 246.861 +If you don't have all the information ready to build your string, you can even 246.862 +use a [UcxBuffer](#buffer) as a target with the utility function 246.863 +`ucx_bprintf()`. 246.864 +```C 246.865 +UcxBuffer* strbuffer = ucx_buffer_new(NULL, 512, UCX_BUFFER_AUTOEXTEND); 246.866 + 246.867 +for (unsigned int i = 2 ; i < 100 ; i++) { 246.868 + ucx_bprintf(strbuffer, "Integer %d is %s\n", 246.869 + i, prime(i) ? "prime" : "not prime"); 246.870 +} 246.871 + 246.872 +/* print the result to stdout */ 246.873 +printf("%s", (char*)strbuffer->space); 246.874 + 246.875 +ucx_buffer_free(strbuffer); 246.876 +```
247.1 --- a/docs/src/modules.md Mon Dec 30 09:54:10 2019 +0100 247.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 247.3 @@ -1,873 +0,0 @@ 247.4 ---- 247.5 -title: Modules 247.6 ---- 247.7 - 247.8 -UCX provides several modules for data structures and algorithms. 247.9 -You may choose to use specific modules by inclueding the corresponding header 247.10 -file. 247.11 -Please note, that some modules make use of other UCX modules. 247.12 -For instance, the [Allocator](#allocator) module is used by many other modules 247.13 -to allow flexible memory allocation. 247.14 -By default the header files are placed into an `ucx` directory within your 247.15 -systems include directory. In this case you can use a module by including it 247.16 -via `#include <ucx/MODULENAME.h>`. 247.17 -Required modules are included automatically. 247.18 - 247.19 -<div id="modules" align="center"> 247.20 - 247.21 ------------------------ ---------------------- -------------------------------- --------------------------- 247.22 -[String](#string) [Buffer](#buffer) 247.23 -[Allocator](#allocator) [Stack](#stack) [Memory Pool](#memory-pool) 247.24 -[Array](#array) [List](#list) [Map](#map) [AVL Tree](#avl-tree) 247.25 -[Logging](#logging) [Testing](#testing) [Utilities](#utilities) [Properties](#properties) 247.26 ------------------------ ---------------------- -------------------------------- --------------------------- 247.27 - 247.28 -</div> 247.29 - 247.30 -## Allocator 247.31 - 247.32 -*Header file:* [allocator.h](api/allocator_8h.html) 247.33 -*Required modules:* None. 247.34 - 247.35 -A UCX allocator consists of a pointer to the memory area / pool and four 247.36 -function pointers to memory management functions operating on this memory 247.37 -area / pool. These functions shall behave equivalent to the standard libc 247.38 -functions `malloc`, `calloc`, `realloc` and `free`. 247.39 - 247.40 -The signature of the memory management functions is based on the signature 247.41 -of the respective libc function but each of them takes the pointer to the 247.42 -memory area / pool as first argument. 247.43 - 247.44 -As the pointer to the memory area / pool can be arbitrarily chosen, any data 247.45 -can be provided to the memory management functions. One example is the 247.46 -[UCX Memory Pool](#memory-pool). 247.47 - 247.48 -## Array 247.49 - 247.50 -*Header file:* [array.h](api/array_8h.html) 247.51 -*Required modules:* [Allocator](#allocator) 247.52 - 247.53 -The UCX Array is an implementation of a dynamic array with automatic 247.54 -reallocation. The array structure contains a capacity, the current size, 247.55 -the size of each element, the raw pointer to the memory area and an allocator. 247.56 -Arrays are in most cases much faster than linked list. 247.57 -One can decide, whether to create a new array on the heap with `ucx_array_new()` 247.58 -or to save one indirection by initializing a `UcxArray` structure on the stack 247.59 -with `ucx_array_init()`. 247.60 - 247.61 -### Remove duplicates from an array of strings 247.62 - 247.63 -The following example shows, how a `UcxArray` can be built with 247.64 -a standard dynamic C array (pointer+length) as basis. 247.65 - 247.66 -```C 247.67 -UcxArray* create_unique(sstr_t* array, size_t arrlen) { 247.68 - // worst case is no duplicates, hence the capacity is set to arrlen 247.69 - UcxArray* result = ucx_array_new(arrlen, sizeof(sstr_t)); 247.70 - // only append elements, if they are not already present in the array 247.71 - for (size_t i = 0 ; i < arrlen ; ++i) { 247.72 - if (!ucx_array_contains(result, array+i, ucx_cmp_sstr, NULL)) { 247.73 - ucx_array_append_from(result, array+i, 1); 247.74 - } 247.75 - } 247.76 - // make the array as small as possible 247.77 - ucx_array_shrink(result); 247.78 - return result; 247.79 -} 247.80 - 247.81 -/* ... */ 247.82 - 247.83 -sstr_t* array = /* some standard array of strings */ 247.84 -size_t arrlen = /* the length of the array */ 247.85 - 247.86 -UcxArray* result = create_unique(array,arrlen); 247.87 - 247.88 -/* Iterate over the array and print the elements */ 247.89 -sstr_t* unique = result->data; 247.90 -for (size_t i = 0 ; i < result->size ; i++) { 247.91 - printf("%" PRIsstr "\n", SFMT(unique[i])); 247.92 -} 247.93 - 247.94 -/* Free the array. */ 247.95 -ucx_array_free(result); 247.96 -``` 247.97 -### Preventing out of bounds writes 247.98 - 247.99 -The functions `ucx_array_reserve()`, `ucx_array_resize()`, `ucx_array_grow()`, 247.100 -and `ucx_array_shrink()` allow easy management of the array capacity. 247.101 -Imagine you want to add `n` elements to an array. If your `n` elements are 247.102 -already somewhere else consecutively in memory, you can use 247.103 -`ucx_array_append_from()` and benefit from the autogrow facility in this family 247.104 -of functions. Otherwise, you can ask the array to have enough capacity for 247.105 -holding additional `n` elements. 247.106 - 247.107 -```C 247.108 -size_t n = // ... elements to add 247.109 -if (ucx_array_grow(array, n)) { 247.110 - fprintf(stderr, "Cannot add %zu elements to the array.\n", n); 247.111 - return 1; 247.112 -} 247.113 -for (size_t i = 0 ; i < n ; i++) { 247.114 - ((int*)array->data)[array->size++] = 80; 247.115 -} 247.116 -``` 247.117 - 247.118 -## AVL Tree 247.119 - 247.120 -*Header file:* [avl.h](api/avl_8h.html) 247.121 -*Required modules:* [Allocator](#allocator) 247.122 - 247.123 -This binary search tree implementation allows average O(1) insertion and 247.124 -removal of elements (excluding binary search time). 247.125 -All common binary tree operations are implemented. Furthermore, this module 247.126 -provides search functions via lower and upper bounds. 247.127 - 247.128 -### Filtering items with a time window 247.129 - 247.130 -Suppose you have a list of items which contain a `time_t` value and your task 247.131 -is to find all items within a time window `[t_start, t_end]`. 247.132 -With AVL Trees this is easy: 247.133 -```C 247.134 -/* --------------------- 247.135 - * Somewhere in a header 247.136 - */ 247.137 -typedef struct { 247.138 - time_t ts; 247.139 - /* other important data */ 247.140 -} MyObject; 247.141 - 247.142 -/* ----------- 247.143 - * Source code 247.144 - */ 247.145 - 247.146 -UcxAVLTree* tree = ucx_avl_new(ucx_cmp_longint); 247.147 -/* ... populate tree with objects, use '& MyObject.ts' as key ... */ 247.148 - 247.149 - 247.150 -/* Now find every item, with 30 <= ts <= 70 */ 247.151 -time_t ts_start = 30; 247.152 -time_t ts_end = 70; 247.153 - 247.154 -printf("Values in range:\n"); 247.155 -for ( 247.156 - UcxAVLNode* node = ucx_avl_find_node( 247.157 - tree, (intptr_t) &ts_start, 247.158 - ucx_dist_longint, UCX_AVL_FIND_LOWER_BOUNDED); 247.159 - node && (*(time_t*)node->key) <= ts_end; 247.160 - node = ucx_avl_succ(node) 247.161 - ) { 247.162 - printf(" ts: %ld\n", ((MyObject*)node->value)->ts); 247.163 -} 247.164 - 247.165 -ucx_avl_free_content(tree, free); 247.166 -ucx_avl_free(tree); 247.167 -``` 247.168 - 247.169 -## Buffer 247.170 - 247.171 -*Header file:* [buffer.h](api/buffer_8h.html) 247.172 -*Required modules:* None. 247.173 - 247.174 -Instances of this buffer implementation can be used to read from or to write to 247.175 -memory like you would do with a stream. This allows the use of 247.176 -`ucx_stream_copy()` from the [Utilities](#utilities) module to copy contents 247.177 -from one buffer to another or from file or network streams to the buffer and 247.178 -vice-versa. 247.179 - 247.180 -More features for convenient use of the buffer can be enabled, like automatic 247.181 -memory management and automatic resizing of the buffer space. 247.182 -See the documentation of the macro constants in the header file for more 247.183 -information. 247.184 - 247.185 -### Add line numbers to a file 247.186 - 247.187 -When reading a file line by line, you have three options: first, you could limit 247.188 -the maximum supported line length. 247.189 -Second, you allocate a god buffer large 247.190 -enough for the most lines a text file could have. 247.191 -And third, undoubtedly the best option, you start with a small buffer, which 247.192 -adjusts on demand. 247.193 -An `UcxBuffer` can be created to do just that for you. 247.194 -Just pass the `UCX_BUFFER_AUTOEXTEND` option to the initialization function. 247.195 -Here is a full working program, which adds line numbers to a file. 247.196 -```C 247.197 -#include <stdio.h> 247.198 -#include <ucx/buffer.h> 247.199 -#include <ucx/utils.h> 247.200 - 247.201 -int main(int argc, char** argv) { 247.202 - 247.203 - if (argc != 2) { 247.204 - fprintf(stderr, "Usage: %s <file>\n", argv[0]); 247.205 - return 1; 247.206 - } 247.207 - 247.208 - FILE* input = fopen(argv[1], "r"); 247.209 - if (!input) { 247.210 - perror("Canno read input"); 247.211 - return 1; 247.212 - } 247.213 - 247.214 - const size_t chunksize = 256; 247.215 - 247.216 - UcxBuffer* linebuf = 247.217 - ucx_buffer_new( 247.218 - NULL, /* the buffer should manage the memory area for us */ 247.219 - 2*chunksize, /* initial size should be twice the chunk size */ 247.220 - UCX_BUFFER_AUTOEXTEND); /* the buffer will grow when necessary */ 247.221 - 247.222 - size_t lineno = 1; 247.223 - do { 247.224 - /* read line chunk */ 247.225 - size_t read = ucx_stream_ncopy( 247.226 - input, linebuf, fread, ucx_buffer_write, chunksize); 247.227 - if (read == 0) break; 247.228 - 247.229 - /* handle line endings */ 247.230 - do { 247.231 - sstr_t bufstr = ucx_buffer_to_sstr(linebuf); 247.232 - sstr_t nl = sstrchr(bufstr, '\n'); 247.233 - if (nl.length == 0) break; 247.234 - 247.235 - size_t linelen = bufstr.length - nl.length; 247.236 - sstr_t linestr = sstrsubsl(bufstr, 0, linelen); 247.237 - 247.238 - printf("%zu: %" PRIsstr "\n", lineno++, SFMT(linestr)); 247.239 - 247.240 - /* shift the buffer to the next line */ 247.241 - ucx_buffer_shift_left(linebuf, linelen+1); 247.242 - } while(1); 247.243 - 247.244 - } while(1); 247.245 - 247.246 - /* print the 'noeol' line, if any */ 247.247 - sstr_t lastline = ucx_buffer_to_sstr(linebuf); 247.248 - if (lastline.length > 0) { 247.249 - printf("%zu: %" PRIsstr, lineno, SFMT(lastline)); 247.250 - } 247.251 - 247.252 - fclose(input); 247.253 - ucx_buffer_free(linebuf); 247.254 - 247.255 - return 0; 247.256 -} 247.257 -``` 247.258 - 247.259 -## List 247.260 - 247.261 -*Header file:* [list.h](api/list_8h.html) 247.262 -*Required modules:* [Allocator](#allocator) 247.263 - 247.264 -This module provides the data structure and several functions for a doubly 247.265 -linked list. Among the common operations like insert, remove, search and sort, 247.266 -we allow convenient iteration via a special `UCX_FOREACH` macro. 247.267 - 247.268 -### Remove duplicates from an array of strings 247.269 - 247.270 -Assume you are given an array of `sstr_t` and want to create a list of these 247.271 -strings without duplicates. 247.272 -This is a similar example to the one [above](#array), but here we are 247.273 -using a `UcxList`. 247.274 -```C 247.275 -#include <stdio.h> 247.276 -#include <ucx/list.h> 247.277 -#include <ucx/string.h> 247.278 -#include <ucx/utils.h> 247.279 - 247.280 -UcxList* remove_duplicates(sstr_t* array, size_t arrlen) { 247.281 - UcxList* list = NULL; 247.282 - for (size_t i = 0 ; i < arrlen ; ++i) { 247.283 - if (ucx_list_find(list, array+i, ucx_cmp_sstr, NULL) == -1) { 247.284 - sstr_t* s = malloc(sizeof(sstr_t)); 247.285 - *s = sstrdup(array[i]); 247.286 - list = ucx_list_append(list, s); 247.287 - } 247.288 - } 247.289 - return list; 247.290 -} 247.291 - 247.292 -/* we will need this function to clean up the list contents later */ 247.293 -void free_sstr(void* ptr) { 247.294 - sstr_t* s = ptr; 247.295 - free(s->ptr); 247.296 - free(s); 247.297 -} 247.298 - 247.299 -/* ... */ 247.300 - 247.301 -sstr_t* array = /* some array of strings */ 247.302 -size_t arrlen = /* the length of the array */ 247.303 - 247.304 -UcxList* list = remove_duplicates(array,arrlen); 247.305 - 247.306 -/* Iterate over the list and print the elements */ 247.307 -UCX_FOREACH(elem, list) { 247.308 - sstr_t s = *((sstr_t*)elem->data); 247.309 - printf("%" PRIsstr "\n", SFMT(s)); 247.310 -} 247.311 - 247.312 -/* Use our free function to free the duplicated strings. */ 247.313 -ucx_list_free_content(list, free_sstr); 247.314 -ucx_list_free(list); 247.315 -``` 247.316 - 247.317 -## Logging 247.318 - 247.319 -*Header file:* [logging.h](api/logging_8h.html) 247.320 -*Required modules:* [Map](#map), [String](#string) 247.321 - 247.322 -The logging module comes with some predefined log levels and allows some more 247.323 -customization. You may choose if you want to get timestamps or source file and 247.324 -line number logged automatically when outputting a message. 247.325 -The following function call initializes a debug logger with all of the above 247.326 -information: 247.327 -```C 247.328 - log = ucx_logger_new(stdout, UCX_LOGGER_DEBUG, 247.329 - UCX_LOGGER_LEVEL | UCX_LOGGER_TIMESTAMP | UCX_LOGGER_SOURCE); 247.330 -``` 247.331 -Afterwards you can use this logger with the predefined macros 247.332 -```C 247.333 - ucx_logger_trace(log, "Verbose output"); 247.334 - ucx_logger_debug(log, "Debug message"); 247.335 - ucx_logger_info(log, "Information"); 247.336 - ucx_logger_warn(log, "Warning"); 247.337 - ucx_logger_error(log, "Error message"); 247.338 -``` 247.339 -or you use 247.340 -```C 247.341 - ucx_logger_log(log, CUSTOM_LEVEL, "Some message") 247.342 -``` 247.343 -When you use your custom log level, don't forget to register it with 247.344 -```C 247.345 - ucx_logger_register_level(log, CUSTOM_LEVEL, "CUSTOM") 247.346 -``` 247.347 -where the last argument must be a string literal. 247.348 - 247.349 -## Map 247.350 - 247.351 -*Header file:* [map.h](api/map_8h.html) 247.352 -*Required modules:* [Allocator](#allocator), [String](#string) 247.353 - 247.354 -This module provides a hash map implementation using murmur hash 2 and separate 247.355 -chaining with linked lists. Similarly to the list module, we provide a 247.356 -`UCX_MAP_FOREACH` macro to conveniently iterate through the key/value pairs. 247.357 - 247.358 -### Parsing command line options 247.359 - 247.360 -Assume you want to parse command line options and record them within a map. 247.361 -One way to do this is shown by the following code sample: 247.362 -```C 247.363 - UcxMap* options = ucx_map_new(16); 247.364 - const char *NOARG = ""; 247.365 - 247.366 - char *option = NULL; 247.367 - char optchar = 0; 247.368 - for(int i=1;i<argc;i++) { 247.369 - char *arg = argv[i]; 247.370 - size_t len = strlen(arg); 247.371 - if(len > 1 && arg[0] == '-') { 247.372 - for(int c=1;c<len;c++) { 247.373 - if(option) { 247.374 - fprintf(stderr, 247.375 - "Missing argument for option -%c\n", optchar); 247.376 - return 1; 247.377 - } 247.378 - switch(arg[c]) { 247.379 - default: { 247.380 - fprintf(stderr, "Unknown option -%c\n\n", arg[c]); 247.381 - return 1; 247.382 - } 247.383 - case 'v': { 247.384 - ucx_map_cstr_put(options, "verbose", NOARG); 247.385 - break; 247.386 - } 247.387 - case 'o': { 247.388 - option = "output"; 247.389 - optchar = 'o'; 247.390 - break; 247.391 - } 247.392 - } 247.393 - } 247.394 - } else if(option) { 247.395 - ucx_map_cstr_put(options, option, arg); 247.396 - option = NULL; 247.397 - } else { 247.398 - /* ... handle argument that is not an option ... */ 247.399 - } 247.400 - } 247.401 - if(option) { 247.402 - fprintf(stderr, 247.403 - "Missing argument for option -%c\n", optchar); 247.404 - return 1; 247.405 - } 247.406 -``` 247.407 -With the following loop, you can access the previously recorded options: 247.408 -```C 247.409 - UcxMapIterator iter = ucx_map_iterator(options); 247.410 - char *arg; 247.411 - UCX_MAP_FOREACH(optkey, arg, iter) { 247.412 - char* opt = optkey.data; 247.413 - if (*arg) { 247.414 - printf("%s = %s\n", opt, arg); 247.415 - } else { 247.416 - printf("%s active\n", opt); 247.417 - } 247.418 - } 247.419 -``` 247.420 -Don't forget to call `ucx_map_free()`, when you are done with the map. 247.421 - 247.422 -## Memory Pool 247.423 - 247.424 -*Header file:* [mempool.h](api/mempool_8h.html) 247.425 -*Required modules:* [Allocator](#allocator) 247.426 - 247.427 -Here we have a concrete allocator implementation in the sense of a memory pool. 247.428 -This pool allows you to register destructor functions for the allocated memory, 247.429 -which are automatically called on the destruction of the pool. 247.430 -But you may also register *independent* destructor functions within a pool in 247.431 -case some external library allocated memory for you, which should be 247.432 -destroyed together with this pool. 247.433 - 247.434 -Many UCX modules support the use of an allocator. 247.435 -The [String Module](#string), for instance, provides the `sstrdup_a()` function, 247.436 -which uses the specified allocator to allocate the memory for the duplicated 247.437 -string. 247.438 -This way, you can use a `UcxMempool` to keep track of the memory occupied by 247.439 -duplicated strings and cleanup everything with just a single call to 247.440 -`ucx_mempool_destroy()`. 247.441 - 247.442 -### Read CSV data into a structure 247.443 - 247.444 -The following code example shows some of the basic memory pool functions and 247.445 -how they can be used with other UCX modules. 247.446 -```C 247.447 -#include <stdio.h> 247.448 -#include <ucx/mempool.h> 247.449 -#include <ucx/list.h> 247.450 -#include <ucx/string.h> 247.451 -#include <ucx/buffer.h> 247.452 -#include <ucx/utils.h> 247.453 - 247.454 -typedef struct { 247.455 - sstr_t column_a; 247.456 - sstr_t column_b; 247.457 - sstr_t column_c; 247.458 -} CSVData; 247.459 - 247.460 -int main(int argc, char** argv) { 247.461 - 247.462 - UcxMempool* pool = ucx_mempool_new(128); 247.463 - 247.464 - FILE *f = fopen("test.csv", "r"); 247.465 - if (!f) { 247.466 - perror("Cannot open file"); 247.467 - return 1; 247.468 - } 247.469 - /* close the file automatically at pool destruction*/ 247.470 - ucx_mempool_reg_destr(pool, f, (ucx_destructor) fclose); 247.471 - 247.472 - /* create a buffer and register it at the memory pool for destruction */ 247.473 - UcxBuffer* content = ucx_buffer_new(NULL, 256, UCX_BUFFER_AUTOEXTEND); 247.474 - ucx_mempool_reg_destr(pool, content, (ucx_destructor) ucx_buffer_free); 247.475 - 247.476 - /* read the file and split it by lines first */ 247.477 - ucx_stream_copy(f, content, fread, ucx_buffer_write); 247.478 - sstr_t contentstr = ucx_buffer_to_sstr(content); 247.479 - ssize_t lc = 0; 247.480 - sstr_t* lines = sstrsplit_a(pool->allocator, contentstr, S("\n"), &lc); 247.481 - 247.482 - /* skip the header and parse the remaining data */ 247.483 - UcxList* datalist = NULL; 247.484 - for (size_t i = 1 ; i < lc ; i++) { 247.485 - if (lines[i].length == 0) continue; 247.486 - ssize_t fc = 3; 247.487 - sstr_t* fields = sstrsplit_a(pool->allocator, lines[i], S(";"), &fc); 247.488 - if (fc != 3) { 247.489 - fprintf(stderr, "Syntax error in line %zu.\n", i); 247.490 - ucx_mempool_destroy(pool); 247.491 - return 1; 247.492 - } 247.493 - CSVData* data = ucx_mempool_malloc(pool, sizeof(CSVData)); 247.494 - data->column_a = fields[0]; 247.495 - data->column_b = fields[1]; 247.496 - data->column_c = fields[2]; 247.497 - datalist = ucx_list_append_a(pool->allocator, datalist, data); 247.498 - } 247.499 - 247.500 - /* control output */ 247.501 - UCX_FOREACH(elem, datalist) { 247.502 - CSVData* data = elem->data; 247.503 - printf("Column A: %" PRIsstr " | " 247.504 - "Column B: %" PRIsstr " | " 247.505 - "Column C: %" PRIsstr "\n", 247.506 - SFMT(data->column_a), SFMT(data->column_b), SFMT(data->column_c) 247.507 - ); 247.508 - } 247.509 - 247.510 - /* cleanup everything, no manual free() needed */ 247.511 - ucx_mempool_destroy(pool); 247.512 - 247.513 - return 0; 247.514 -} 247.515 -``` 247.516 - 247.517 -### Overriding the default destructor 247.518 - 247.519 -Sometimes you need to allocate memory with `ucx_mempool_malloc()`, but the 247.520 -memory is not supposed to be freed with a simple call to `free()`. 247.521 -In this case, you can overwrite the default destructor as follows: 247.522 -```C 247.523 - MyObject* obj = ucx_mempool_malloc(pool, sizeof(MyObject)); 247.524 - 247.525 - /* some special initialization with own resource management */ 247.526 - my_object_init(obj); 247.527 - 247.528 - /* register destructor function */ 247.529 - ucx_mempool_set_destr(obj, (ucx_destructor) my_object_destroy); 247.530 -``` 247.531 -Be aware, that your destructor function should not free any memory, that is 247.532 -also managed by the pool. 247.533 -Otherwise you might be risking a double-free. 247.534 -More precisely, a destructor function set with `ucx_mempool_set_destr()` MUST 247.535 -NOT call `free()` on the specified pointer whereas a desructor function 247.536 -registered with `ucx_mempool_reg_destr()` MAY (and in most cases will) call 247.537 -`free()`. 247.538 - 247.539 -## Properties 247.540 - 247.541 -*Header file:* [properties.h](api/properties_8h.html) 247.542 -*Required modules:* [Map](#map) 247.543 - 247.544 -This module provides load and store function for `*.properties` files. 247.545 -The key/value pairs are stored within an UCX Map. 247.546 - 247.547 -### Example: Loading properties from a file 247.548 - 247.549 -```C 247.550 -/* Open the file as usual */ 247.551 -FILE* file = fopen("myprops.properties", "r"); 247.552 -if (!file) { 247.553 - // error handling 247.554 - return 1; 247.555 -} 247.556 - 247.557 -/* Load the properties from the file */ 247.558 -UcxMap* myprops = ucx_map_new(16); 247.559 -if (ucx_properties_load(myprops, file)) { 247.560 - /* ... error handling ... */ 247.561 - fclose(file); 247.562 - ucx_map_free(myprops); 247.563 - return 1; 247.564 -} 247.565 - 247.566 -/* Print out the key/value pairs */ 247.567 -char* propval; 247.568 -UcxMapIterator propiter = ucx_map_iterator(myprops); 247.569 -UCX_MAP_FOREACH(key, propval, propiter) { 247.570 - printf("%s = %s\n", (char*)key.data, propval); 247.571 -} 247.572 - 247.573 -/* Don't forget to free the values before freeing the map */ 247.574 -ucx_map_free_content(myprops, NULL); 247.575 -ucx_map_free(myprops); 247.576 -fclose(file); 247.577 -``` 247.578 - 247.579 -## Stack 247.580 - 247.581 -*Header file:* [stack.h](api/stack_8h.html) 247.582 -*Required modules:* [Allocator](#allocator) 247.583 - 247.584 -This concrete implementation of an UCX Allocator allows you to grab some amount 247.585 -of memory which is then handled as a stack. 247.586 -Please note, that the term *stack* only refers to the behavior of this 247.587 -allocator. You may still choose to use either stack or heap memory 247.588 -for the underlying space. 247.589 -A typical use case is an algorithm where you need to allocate and free large 247.590 -amounts of memory very frequently. 247.591 - 247.592 -The following code sample shows how to initialize a stack and push and pop 247.593 -simple data. 247.594 -```C 247.595 - const size_t len = 1024; 247.596 - char space[len]; 247.597 - UcxStack stack; 247.598 - ucx_stack_init(&stack, space, len); 247.599 - 247.600 - int i = 42; 247.601 - float f = 3.14f; 247.602 - const char* str = "Hello!"; 247.603 - size_t strn = 7; 247.604 - 247.605 - /* push the integer */ 247.606 - ucx_stack_push(&stack, sizeof(int), &i); 247.607 - 247.608 - /* push the float and rember the address */ 247.609 - float* remember = ucx_stack_push(&stack, sizeof(float), &f); 247.610 - 247.611 - /* push the string with zero terminator */ 247.612 - ucx_stack_push(&stack, strn, str); 247.613 - 247.614 - /* if we forget, how big an element was, we can ask the stack */ 247.615 - printf("Length of string: %zu\n", ucx_stack_topsize(&stack)-1); 247.616 - 247.617 - /* retrieve the string as sstr_t, without zero terminator! */ 247.618 - sstr_t s; 247.619 - s.length = ucx_stack_topsize(&stack)-1; 247.620 - s.ptr = malloc(s.length); 247.621 - ucx_stack_popn(&stack, s.ptr, s.length); 247.622 - printf("%" PRIsstr "\n", SFMT(s)); 247.623 - 247.624 - /* print the float directly from the stack and free it */ 247.625 - printf("Float: %f\n", *remember); 247.626 - ucx_stack_free(&stack, remember); 247.627 - 247.628 - /* the last element is the integer */ 247.629 - int j; 247.630 - ucx_stack_pop(&stack, &j); 247.631 - printf("Integer: %d\n", j); 247.632 -``` 247.633 - 247.634 - 247.635 - 247.636 -## String 247.637 - 247.638 -*Header file:* [string.h](api/string_8h.html) 247.639 -*Required modules:* [Allocator](#allocator) 247.640 - 247.641 -This module provides a safe implementation of bounded string. 247.642 -Usually C strings do not carry a length. While for zero-terminated strings you 247.643 -can easily get the length with `strlen`, this is not generally possible for 247.644 -arbitrary strings. 247.645 -The `sstr_t` type of this module always carries the string and its length to 247.646 -reduce the risk of buffer overflows dramatically. 247.647 - 247.648 -### Initialization 247.649 - 247.650 -There are several ways to create an `sstr_t`: 247.651 - 247.652 -```C 247.653 -/* (1) sstr() uses strlen() internally, hence cstr MUST be zero-terminated */ 247.654 -sstr_t a = sstr(cstr); 247.655 - 247.656 -/* (2) cstr does not need to be zero-terminated, if length is specified */ 247.657 -sstr_t b = sstrn(cstr, len); 247.658 - 247.659 -/* (3) S() macro creates sstr_t from a string using sizeof() and using sstrn(). 247.660 - This version is especially useful for function arguments */ 247.661 -sstr_t c = S("hello"); 247.662 - 247.663 -/* (4) SC() macro works like S(), but makes the string immutable using scstr_t. 247.664 - (available since UCX 2.0) */ 247.665 -scstr_t d = SC("hello"); 247.666 - 247.667 -/* (5) ST() macro creates sstr_t struct literal using sizeof() */ 247.668 -sstr_t e = ST("hello"); 247.669 -``` 247.670 - 247.671 -You should not use the `S()`, `SC()`, or `ST()` macro with string of unknown 247.672 -origin, since the `sizeof()` call might not coincide with the string length in 247.673 -those cases. If you know what you are doing, it can save you some performance, 247.674 -because you do not need the `strlen()` call. 247.675 - 247.676 -### Handling immutable strings 247.677 - 247.678 -*(Since: UCX 2.0)* 247.679 - 247.680 -For immutable strings (i.e. `const char*` strings), UCX provides the `scstr_t` 247.681 -type, which works exactly as the `sstr_t` type but with a pointer 247.682 -to `const char`. All UCX string functions come in two flavors: one that enforces 247.683 -the `scstr_t` type, and another that usually accepts both types and performs 247.684 -a conversion automatically, if necessary. 247.685 - 247.686 -There are some exceptions to this rule, as the return type may depend on the 247.687 -argument type. 247.688 -E.g. the `sstrchr()` function returns a substring starting at 247.689 -the first occurrence of the specified character. 247.690 -Since this substring points to the memory of the argument string, it does not 247.691 -accept `scstr_t` as input argument, because the return type would break the 247.692 -constness. 247.693 - 247.694 - 247.695 -### Finding the position of a substring 247.696 - 247.697 -The `sstrstr()` function gives you a new `sstr_t` object starting with the 247.698 -requested substring. Thus determining the position comes down to a simple 247.699 -subtraction. 247.700 - 247.701 -```C 247.702 -sstr_t haystack = ST("Here we go!"); 247.703 -sstr_t needle = ST("we"); 247.704 -sstr_t result = sstrstr(haystack, needle); 247.705 -if (result.ptr) 247.706 - printf("Found at position %zd.\n", haystack.length-result.length); 247.707 -else 247.708 - printf("Not found.\n"); 247.709 -``` 247.710 - 247.711 -### Spliting a string by a delimiter 247.712 - 247.713 -The `sstrsplit()` function (and its allocator based version `sstrsplit_a()`) is 247.714 -very powerful and might look a bit nasty at a first glance. But it is indeed 247.715 -very simple to use. It is even more convenient in combination with a memory 247.716 -pool. 247.717 - 247.718 -```C 247.719 -sstr_t test = ST("here::are::some::strings"); 247.720 -sstr_t delim = ST("::"); 247.721 - 247.722 -ssize_t count = 0; /* no limit */ 247.723 -UcxMempool* pool = ucx_mempool_new_default(); 247.724 - 247.725 -sstr_t* result = sstrsplit_a(pool->allocator, test, delim, &count); 247.726 -for (ssize_t i = 0 ; i < count ; i++) { 247.727 - /* don't forget to specify the length via the %*s format specifier */ 247.728 - printf("%*s\n", result[i].length, result[i].ptr); 247.729 -} 247.730 - 247.731 -ucx_mempool_destroy(pool); 247.732 -``` 247.733 -The output is: 247.734 - 247.735 - here 247.736 - are 247.737 - some 247.738 - strings 247.739 - 247.740 -The memory pool ensures, that all strings are freed. 247.741 - 247.742 -### Disabling convenience macros 247.743 - 247.744 -If you are experiencing any troubles with the short convenience macros `S()`, 247.745 -`SC()`, or `ST()`, you can disable them by setting the macro 247.746 -`UCX_NO_SSTR_SHORTCUTS` before including the header (or via a compiler option). 247.747 -For the formatting macros `SFMT()` and `PRIsstr` you can use the macro 247.748 -`UCX_NO_SSTR_FORMAT_MACROS` to disable them. 247.749 - 247.750 -Please keep in mind, that after disabling the macros, you cannot use them in 247.751 -your code *and* foreign code that you might have included. 247.752 -You should only disable the macros, if you are experiencing a nasty name clash 247.753 -which cannot be otherwise resolved. 247.754 - 247.755 -## Testing 247.756 - 247.757 -*Header file:* [test.h](api/test_8h.html) 247.758 -*Required modules:* None. 247.759 - 247.760 -This module provides a testing framework which allows you to execute test cases 247.761 -within test suites. 247.762 -To avoid code duplication within tests, we also provide the possibility to 247.763 -define test subroutines. 247.764 - 247.765 -You should declare test cases and subroutines in a header file per test unit 247.766 -and implement them as you would implement normal functions. 247.767 -```C 247.768 - /* myunit.h */ 247.769 - UCX_TEST(function_name); 247.770 - UCX_TEST_SUBROUTINE(subroutine_name, paramlist); /* optional */ 247.771 - 247.772 - 247.773 - /* myunit.c */ 247.774 - UCX_TEST_SUBROUTINE(subroutine_name, paramlist) { 247.775 - /* ... reusable tests with UCX_TEST_ASSERT() ... */ 247.776 - } 247.777 - 247.778 - UCX_TEST(function_name) { 247.779 - /* ... resource allocation and other test preparation ... */ 247.780 - 247.781 - /* mandatory marker for the start of the tests */ 247.782 - UCX_TEST_BEGIN 247.783 - 247.784 - /* ... verifications with UCX_TEST_ASSERT() ... 247.785 - * (and/or calls with UCX_TEST_CALL_SUBROUTINE()) 247.786 - */ 247.787 - 247.788 - /* mandatory marker for the end of the tests */ 247.789 - UCX_TEST_END 247.790 - 247.791 - /* ... resource cleanup ... 247.792 - * (all code after UCX_TEST_END is always executed) 247.793 - */ 247.794 - } 247.795 -``` 247.796 -If you want to use the `UCX_TEST_ASSERT()` macro in a function, you are 247.797 -*required* to use a `UCX_TEST_SUBROUTINE`. 247.798 -Otherwise the testing framework does not know where to jump, when the assertion 247.799 -fails. 247.800 - 247.801 -After implementing the tests, you can easily build a test suite and execute it: 247.802 -```C 247.803 - UcxTestSuite* suite = ucx_test_suite_new(); 247.804 - ucx_test_register(suite, testMyTestCase01); 247.805 - ucx_test_register(suite, testMyTestCase02); 247.806 - /* ... */ 247.807 - ucx_test_run(suite, stdout); /* stdout, or any other FILE stream */ 247.808 -``` 247.809 - 247.810 -## Utilities 247.811 - 247.812 -*Header file:* [utils.h](api/utils_8h.html) 247.813 -*Required modules:* [Allocator](#allocator), [String](#string) 247.814 - 247.815 -In this module we provide very general utility function for copy and compare 247.816 -operations. 247.817 -We also provide several `printf` variants to conveniently print formatted data 247.818 -to streams or strings. 247.819 - 247.820 -### A simple copy program 247.821 - 247.822 -The utilities package provides several stream copy functions. 247.823 -One of them has a very simple interface and can, for instance, be used to copy 247.824 -whole files in a single call. 247.825 -This is a minimal working example: 247.826 -```C 247.827 -#include <stdio.h> 247.828 -#include <ucx/utils.h> 247.829 - 247.830 -int main(int argc, char** argv) { 247.831 - 247.832 - if (argc != 3) { 247.833 - fprintf(stderr, "Use %s <src> <dest>", argv[0]); 247.834 - return 1; 247.835 - } 247.836 - 247.837 - FILE *srcf = fopen(argv[1], "r"); /* insert error handling on your own */ 247.838 - FILE *destf = fopen(argv[2], "w"); 247.839 - 247.840 - size_t n = ucx_stream_copy(srcf, destf, fread, fwrite); 247.841 - printf("%zu bytes copied.\n", n); 247.842 - 247.843 - fclose(srcf); 247.844 - fclose(destf); 247.845 - 247.846 - 247.847 - return 0; 247.848 -} 247.849 -``` 247.850 - 247.851 -### Automatic allocation for formatted strings 247.852 - 247.853 -The UCX utility function `ucx_asprintf()` and it's convenient shortcut 247.854 -`ucx_sprintf` allow easy formatting of strings, without ever having to worry 247.855 -about the required space. 247.856 -```C 247.857 -sstr_t mystring = ucx_sprintf("The answer is: %d!", 42); 247.858 -``` 247.859 -Still, you have to pass `mystring.ptr` to `free()` (or the free function of 247.860 -your allocator, if you use `ucx_asprintf`). 247.861 -If you don't have all the information ready to build your string, you can even 247.862 -use a [UcxBuffer](#buffer) as a target with the utility function 247.863 -`ucx_bprintf()`. 247.864 -```C 247.865 -UcxBuffer* strbuffer = ucx_buffer_new(NULL, 512, UCX_BUFFER_AUTOEXTEND); 247.866 - 247.867 -for (unsigned int i = 2 ; i < 100 ; i++) { 247.868 - ucx_bprintf(strbuffer, "Integer %d is %s\n", 247.869 - i, prime(i) ? "prime" : "not prime"); 247.870 -} 247.871 - 247.872 -/* print the result to stdout */ 247.873 -printf("%s", (char*)strbuffer->space); 247.874 - 247.875 -ucx_buffer_free(strbuffer); 247.876 -```
248.1 --- a/src/CMakeLists.txt Mon Dec 30 09:54:10 2019 +0100 248.2 +++ b/src/CMakeLists.txt Sat Feb 06 19:11:44 2021 +0100 248.3 @@ -1,34 +1,8 @@ 248.4 set(sources 248.5 - allocator.c 248.6 - array.c 248.7 - avl.c 248.8 - buffer.c 248.9 list.c 248.10 - logging.c 248.11 - map.c 248.12 - mempool.c 248.13 - properties.c 248.14 - stack.c 248.15 - string.c 248.16 - test.c 248.17 - ucx.c 248.18 - utils.c 248.19 ) 248.20 set(headers 248.21 - ucx/allocator.h 248.22 - ucx/array.h 248.23 - ucx/avl.h 248.24 - ucx/buffer.h 248.25 - ucx/list.h 248.26 - ucx/logging.h 248.27 - ucx/map.h 248.28 - ucx/mempool.h 248.29 - ucx/properties.h 248.30 - ucx/stack.h 248.31 - ucx/string.h 248.32 - ucx/test.h 248.33 - ucx/ucx.h 248.34 - ucx/utils.h 248.35 + cx/list.h 248.36 ) 248.37 248.38 add_library(ucx SHARED ${sources}) 248.39 @@ -37,7 +11,7 @@ 248.40 target_include_directories(ucx PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) 248.41 target_include_directories(ucx_static PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) 248.42 248.43 -set_target_properties(ucx PROPERTIES SOVERSION 3 VERSION 3.1.0) 248.44 +set_target_properties(ucx PROPERTIES SOVERSION 4 VERSION 4.0.0) 248.45 set_target_properties(ucx_static PROPERTIES VERSION ${CMAKE_PROJECT_VERSION}) 248.46 248.47 # it is sufficient to specify the headers for one of the targets
249.1 --- a/src/Makefile.am Mon Dec 30 09:54:10 2019 +0100 249.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 249.3 @@ -1,62 +0,0 @@ 249.4 -# 249.5 -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 249.6 -# 249.7 -# Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 249.8 -# 249.9 -# Redistribution and use in source and binary forms, with or without 249.10 -# modification, are permitted provided that the following conditions are met: 249.11 -# 249.12 -# 1. Redistributions of source code must retain the above copyright 249.13 -# notice, this list of conditions and the following disclaimer. 249.14 -# 249.15 -# 2. Redistributions in binary form must reproduce the above copyright 249.16 -# notice, this list of conditions and the following disclaimer in the 249.17 -# documentation and/or other materials provided with the distribution. 249.18 -# 249.19 -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 249.20 -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 249.21 -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 249.22 -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 249.23 -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 249.24 -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 249.25 -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 249.26 -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 249.27 -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 249.28 -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 249.29 -# POSSIBILITY OF SUCH DAMAGE. 249.30 -# 249.31 - 249.32 -lib_LTLIBRARIES = libucx.la 249.33 -libucx_la_LDFLAGS = -version-info $(UCX_LIB_VERSION) 249.34 -libucx_la_SOURCES = utils.c 249.35 -libucx_la_SOURCES += array.c 249.36 -libucx_la_SOURCES += list.c 249.37 -libucx_la_SOURCES += map.c 249.38 -libucx_la_SOURCES += avl.c 249.39 -libucx_la_SOURCES += properties.c 249.40 -libucx_la_SOURCES += mempool.c 249.41 -libucx_la_SOURCES += string.c 249.42 -libucx_la_SOURCES += test.c 249.43 -libucx_la_SOURCES += allocator.c 249.44 -libucx_la_SOURCES += logging.c 249.45 -libucx_la_SOURCES += buffer.c 249.46 -libucx_la_SOURCES += stack.c 249.47 -libucx_la_SOURCES += ucx.c 249.48 - 249.49 -ucxdir = $(includedir)/ucx 249.50 -ucx_HEADERS = ucx/allocator.h 249.51 -ucx_HEADERS += ucx/array.h 249.52 -ucx_HEADERS += ucx/avl.h 249.53 -ucx_HEADERS += ucx/buffer.h 249.54 -ucx_HEADERS += ucx/list.h 249.55 -ucx_HEADERS += ucx/logging.h 249.56 -ucx_HEADERS += ucx/map.h 249.57 -ucx_HEADERS += ucx/mempool.h 249.58 -ucx_HEADERS += ucx/properties.h 249.59 -ucx_HEADERS += ucx/stack.h 249.60 -ucx_HEADERS += ucx/string.h 249.61 -ucx_HEADERS += ucx/test.h 249.62 -ucx_HEADERS += ucx/ucx.h 249.63 -ucx_HEADERS += ucx/utils.h 249.64 - 249.65 -
250.1 --- a/src/allocator.c Mon Dec 30 09:54:10 2019 +0100 250.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 250.3 @@ -1,60 +0,0 @@ 250.4 -/* 250.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 250.6 - * 250.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 250.8 - * 250.9 - * Redistribution and use in source and binary forms, with or without 250.10 - * modification, are permitted provided that the following conditions are met: 250.11 - * 250.12 - * 1. Redistributions of source code must retain the above copyright 250.13 - * notice, this list of conditions and the following disclaimer. 250.14 - * 250.15 - * 2. Redistributions in binary form must reproduce the above copyright 250.16 - * notice, this list of conditions and the following disclaimer in the 250.17 - * documentation and/or other materials provided with the distribution. 250.18 - * 250.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 250.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 250.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 250.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 250.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 250.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 250.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 250.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 250.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 250.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 250.29 - * POSSIBILITY OF SUCH DAMAGE. 250.30 - */ 250.31 - 250.32 -#include "ucx/allocator.h" 250.33 - 250.34 -#include <stdlib.h> 250.35 - 250.36 -static UcxAllocator default_allocator = { 250.37 - NULL, 250.38 - ucx_default_malloc, 250.39 - ucx_default_calloc, 250.40 - ucx_default_realloc, 250.41 - ucx_default_free 250.42 -}; 250.43 - 250.44 -UcxAllocator *ucx_default_allocator() { 250.45 - UcxAllocator *allocator = &default_allocator; 250.46 - return allocator; 250.47 -} 250.48 - 250.49 -void *ucx_default_malloc(void *ignore, size_t n) { 250.50 - return malloc(n); 250.51 -} 250.52 - 250.53 -void *ucx_default_calloc(void *ignore, size_t n, size_t size) { 250.54 - return calloc(n, size); 250.55 -} 250.56 - 250.57 -void *ucx_default_realloc(void *ignore, void *data, size_t n) { 250.58 - return realloc(data, n); 250.59 -} 250.60 - 250.61 -void ucx_default_free(void *ignore, void *data) { 250.62 - free(data); 250.63 -}
251.1 --- a/src/array.c Mon Dec 30 09:54:10 2019 +0100 251.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 251.3 @@ -1,467 +0,0 @@ 251.4 -/* 251.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 251.6 - * 251.7 - * Copyright 2019 Mike Becker, Olaf Wintermann All rights reserved. 251.8 - * 251.9 - * Redistribution and use in source and binary forms, with or without 251.10 - * modification, are permitted provided that the following conditions are met: 251.11 - * 251.12 - * 1. Redistributions of source code must retain the above copyright 251.13 - * notice, this list of conditions and the following disclaimer. 251.14 - * 251.15 - * 2. Redistributions in binary form must reproduce the above copyright 251.16 - * notice, this list of conditions and the following disclaimer in the 251.17 - * documentation and/or other materials provided with the distribution. 251.18 - * 251.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 251.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 251.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 251.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 251.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 251.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 251.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 251.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 251.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 251.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 251.29 - * POSSIBILITY OF SUCH DAMAGE. 251.30 - */ 251.31 - 251.32 -#define _GNU_SOURCE /* we want to use qsort_r(), if available */ 251.33 -#define __STDC_WANT_LIB_EXT1__ 1 /* use qsort_s, if available */ 251.34 - 251.35 - 251.36 -#include "ucx/array.h" 251.37 -#include "ucx/utils.h" 251.38 - 251.39 -#include <string.h> 251.40 -#include <stdlib.h> 251.41 -#include <errno.h> 251.42 - 251.43 -#ifndef UCX_ARRAY_DISABLE_QSORT 251.44 -#ifdef __GLIBC__ 251.45 -#if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 8) 251.46 -#define ucx_array_sort_impl qsort_r 251.47 -#endif /* glibc version >= 2.8 */ 251.48 -#elif /* not __GLIBC__ */ defined(__APPLE__) || defined(__FreeBSD__) 251.49 -#define ucx_array_sort_impl ucx_qsort_r 251.50 -#define USE_UCX_QSORT_R 251.51 -#elif /* not (__APPLE || __FreeBSD__) */ defined(__sun) 251.52 -#if __STDC_VERSION__ >= 201112L 251.53 -#define ucx_array_sort_impl qsort_s 251.54 -#endif 251.55 -#endif /* __GLIBC__, __APLE__, __FreeBSD__, __sun */ 251.56 -#endif /* UCX_ARRAY_DISABLE_QSORT */ 251.57 - 251.58 -#ifndef ucx_array_sort_impl 251.59 -#define ucx_array_sort_impl ucx_mergesort 251.60 -#endif 251.61 - 251.62 -static int ucx_array_ensurecap(UcxArray *array, size_t reqcap) { 251.63 - size_t required_capacity = array->capacity; 251.64 - while (reqcap > required_capacity) { 251.65 - if (required_capacity * 2 < required_capacity) 251.66 - return 1; 251.67 - required_capacity <<= 1; 251.68 - } 251.69 - if (ucx_array_reserve(array, required_capacity)) { 251.70 - return 1; 251.71 - } 251.72 - return 0; 251.73 -} 251.74 - 251.75 -int ucx_array_util_set_a(UcxAllocator* alloc, void** array, size_t* capacity, 251.76 - size_t elmsize, size_t index, void* data) { 251.77 - 251.78 - if(!alloc || !capacity || !array) { 251.79 - errno = EINVAL; 251.80 - return 1; 251.81 - } 251.82 - 251.83 - size_t newcapacity = *capacity; 251.84 - while(index >= newcapacity) { 251.85 - if(ucx_szmul(newcapacity, 2, &newcapacity)) { 251.86 - errno = EOVERFLOW; 251.87 - return 1; 251.88 - } 251.89 - } 251.90 - 251.91 - size_t memlen, offset; 251.92 - if(ucx_szmul(newcapacity, elmsize, &memlen)) { 251.93 - errno = EOVERFLOW; 251.94 - return 1; 251.95 - } 251.96 - /* we don't need to check index*elmsize - it is smaller than memlen */ 251.97 - 251.98 - 251.99 - void* newptr = alrealloc(alloc, *array, memlen); 251.100 - if(newptr == NULL) { 251.101 - errno = ENOMEM; /* we cannot assume that every allocator sets this */ 251.102 - return 1; 251.103 - } 251.104 - *array = newptr; 251.105 - *capacity = newcapacity; 251.106 - 251.107 - 251.108 - char* dest = *array; 251.109 - dest += elmsize*index; 251.110 - memcpy(dest, data, elmsize); 251.111 - 251.112 - return 0; 251.113 -} 251.114 - 251.115 -int ucx_array_util_setptr_a(UcxAllocator* alloc, void** array, size_t* capacity, 251.116 - size_t index, void* data) { 251.117 - 251.118 - return ucx_array_util_set_a(alloc, array, capacity, sizeof(void*), 251.119 - index, &data); 251.120 -} 251.121 - 251.122 -UcxArray* ucx_array_new(size_t capacity, size_t elemsize) { 251.123 - return ucx_array_new_a(capacity, elemsize, ucx_default_allocator()); 251.124 -} 251.125 - 251.126 -UcxArray* ucx_array_new_a(size_t capacity, size_t elemsize, 251.127 - UcxAllocator* allocator) { 251.128 - UcxArray* array = almalloc(allocator, sizeof(UcxArray)); 251.129 - if(array) { 251.130 - ucx_array_init_a(array, capacity, elemsize, allocator); 251.131 - } 251.132 - return array; 251.133 -} 251.134 - 251.135 -void ucx_array_init(UcxArray* array, size_t capacity, size_t elemsize) { 251.136 - ucx_array_init_a(array, capacity, elemsize, ucx_default_allocator()); 251.137 -} 251.138 - 251.139 -void ucx_array_init_a(UcxArray* array, size_t capacity, size_t elemsize, 251.140 - UcxAllocator* allocator) { 251.141 - 251.142 - array->allocator = allocator; 251.143 - array->elemsize = elemsize; 251.144 - array->size = 0; 251.145 - array->data = alcalloc(allocator, capacity, elemsize); 251.146 - 251.147 - if (array->data) { 251.148 - array->capacity = capacity; 251.149 - } else { 251.150 - array->capacity = 0; 251.151 - } 251.152 -} 251.153 - 251.154 -int ucx_array_clone(UcxArray* dest, UcxArray const* src) { 251.155 - if (ucx_array_ensurecap(dest, src->capacity)) { 251.156 - return 1; 251.157 - } 251.158 - 251.159 - dest->elemsize = src->elemsize; 251.160 - dest->size = src->size; 251.161 - 251.162 - if (dest->data) { 251.163 - memcpy(dest->data, src->data, src->size*src->elemsize); 251.164 - } 251.165 - 251.166 - return 0; 251.167 -} 251.168 - 251.169 -int ucx_array_equals(UcxArray const *array1, UcxArray const *array2, 251.170 - cmp_func cmpfnc, void* data) { 251.171 - 251.172 - if (array1->size != array2->size || array1->elemsize != array2->elemsize) { 251.173 - return 0; 251.174 - } else { 251.175 - if (array1->size == 0) 251.176 - return 1; 251.177 - 251.178 - size_t elemsize; 251.179 - if (cmpfnc == NULL) { 251.180 - cmpfnc = ucx_cmp_mem; 251.181 - elemsize = array1->elemsize; 251.182 - data = &elemsize; 251.183 - } 251.184 - 251.185 - for (size_t i = 0 ; i < array1->size ; i++) { 251.186 - int r = cmpfnc( 251.187 - ucx_array_at(array1, i), 251.188 - ucx_array_at(array2, i), 251.189 - data); 251.190 - if (r != 0) 251.191 - return 0; 251.192 - } 251.193 - return 1; 251.194 - } 251.195 -} 251.196 - 251.197 -void ucx_array_destroy(UcxArray *array) { 251.198 - if(array->data) 251.199 - alfree(array->allocator, array->data); 251.200 - array->data = NULL; 251.201 - array->capacity = array->size = 0; 251.202 -} 251.203 - 251.204 -void ucx_array_free(UcxArray *array) { 251.205 - ucx_array_destroy(array); 251.206 - alfree(array->allocator, array); 251.207 -} 251.208 - 251.209 -int ucx_array_append_from(UcxArray *array, void *data, size_t count) { 251.210 - if (ucx_array_ensurecap(array, array->size + count)) 251.211 - return 1; 251.212 - 251.213 - void* dest = ucx_array_at(array, array->size); 251.214 - if (data) { 251.215 - memcpy(dest, data, array->elemsize*count); 251.216 - } else { 251.217 - memset(dest, 0, array->elemsize*count); 251.218 - } 251.219 - array->size += count; 251.220 - 251.221 - return 0; 251.222 -} 251.223 - 251.224 -int ucx_array_prepend_from(UcxArray *array, void *data, size_t count) { 251.225 - if (ucx_array_ensurecap(array, array->size + count)) 251.226 - return 1; 251.227 - 251.228 - if (array->size > 0) { 251.229 - void *dest = ucx_array_at(array, count); 251.230 - memmove(dest, array->data, array->elemsize*array->size); 251.231 - } 251.232 - 251.233 - if (data) { 251.234 - memcpy(array->data, data, array->elemsize*count); 251.235 - } else { 251.236 - memset(array->data, 0, array->elemsize*count); 251.237 - } 251.238 - array->size += count; 251.239 - 251.240 - return 0; 251.241 -} 251.242 - 251.243 -int ucx_array_set_from(UcxArray *array, size_t index, 251.244 - void *data, size_t count) { 251.245 - if (ucx_array_ensurecap(array, index + count)) 251.246 - return 1; 251.247 - 251.248 - if (index+count > array->size) { 251.249 - array->size = index+count; 251.250 - } 251.251 - 251.252 - void *dest = ucx_array_at(array, index); 251.253 - if (data) { 251.254 - memcpy(dest, data, array->elemsize*count); 251.255 - } else { 251.256 - memset(dest, 0, array->elemsize*count); 251.257 - } 251.258 - 251.259 - return 0; 251.260 -} 251.261 - 251.262 -int ucx_array_concat(UcxArray *array1, const UcxArray *array2) { 251.263 - 251.264 - if (array1->elemsize != array2->elemsize) 251.265 - return 1; 251.266 - 251.267 - size_t capacity = array1->capacity+array2->capacity; 251.268 - 251.269 - if (array1->capacity < capacity) { 251.270 - if (ucx_array_reserve(array1, capacity)) { 251.271 - return 1; 251.272 - } 251.273 - } 251.274 - 251.275 - void* dest = ucx_array_at(array1, array1->size); 251.276 - memcpy(dest, array2->data, array2->size*array2->elemsize); 251.277 - 251.278 - array1->size += array2->size; 251.279 - 251.280 - return 0; 251.281 -} 251.282 - 251.283 -void *ucx_array_at(UcxArray const *array, size_t index) { 251.284 - char* memory = array->data; 251.285 - char* loc = memory + index*array->elemsize; 251.286 - return loc; 251.287 -} 251.288 - 251.289 -size_t ucx_array_find(UcxArray const *array, void *elem, 251.290 - cmp_func cmpfnc, void *data) { 251.291 - 251.292 - size_t elemsize; 251.293 - if (cmpfnc == NULL) { 251.294 - cmpfnc = ucx_cmp_mem; 251.295 - elemsize = array->elemsize; 251.296 - data = &elemsize; 251.297 - } 251.298 - 251.299 - if (array->size > 0) { 251.300 - for (size_t i = 0 ; i < array->size ; i++) { 251.301 - void* ptr = ucx_array_at(array, i); 251.302 - if (cmpfnc(ptr, elem, data) == 0) { 251.303 - return i; 251.304 - } 251.305 - } 251.306 - return array->size; 251.307 - } else { 251.308 - return 0; 251.309 - } 251.310 -} 251.311 - 251.312 -int ucx_array_contains(UcxArray const *array, void *elem, 251.313 - cmp_func cmpfnc, void *data) { 251.314 - return ucx_array_find(array, elem, cmpfnc, data) != array->size; 251.315 -} 251.316 - 251.317 -static void ucx_mergesort_merge(void *arrdata,size_t elemsize, 251.318 - cmp_func cmpfnc, void *data, 251.319 - size_t start, size_t mid, size_t end) { 251.320 - 251.321 - char* array = arrdata; 251.322 - 251.323 - size_t rightstart = mid + 1; 251.324 - 251.325 - if (cmpfnc(array + mid*elemsize, 251.326 - array + rightstart*elemsize, data) <= 0) { 251.327 - /* already sorted */ 251.328 - return; 251.329 - } 251.330 - 251.331 - /* we need memory for one element */ 251.332 - void *value = malloc(elemsize); 251.333 - 251.334 - while (start <= mid && rightstart <= end) { 251.335 - if (cmpfnc(array + start*elemsize, 251.336 - array + rightstart*elemsize, data) <= 0) { 251.337 - start++; 251.338 - } else { 251.339 - /* save the value from the right */ 251.340 - memcpy(value, array + rightstart*elemsize, elemsize); 251.341 - 251.342 - /* shift all left elements one element to the right */ 251.343 - size_t shiftcount = rightstart-start; 251.344 - void *startptr = array + start*elemsize; 251.345 - void *dest = array + (start+1)*elemsize; 251.346 - memmove(dest, startptr, shiftcount*elemsize); 251.347 - 251.348 - /* bring the first value from the right to the left */ 251.349 - memcpy(startptr, value, elemsize); 251.350 - 251.351 - start++; 251.352 - mid++; 251.353 - rightstart++; 251.354 - } 251.355 - } 251.356 - 251.357 - /* free the temporary memory */ 251.358 - free(value); 251.359 -} 251.360 - 251.361 -static void ucx_mergesort_impl(void *arrdata, size_t elemsize, 251.362 - cmp_func cmpfnc, void *data, size_t l, size_t r) { 251.363 - if (l < r) { 251.364 - size_t m = l + (r - l) / 2; 251.365 - 251.366 - ucx_mergesort_impl(arrdata, elemsize, cmpfnc, data, l, m); 251.367 - ucx_mergesort_impl(arrdata, elemsize, cmpfnc, data, m + 1, r); 251.368 - ucx_mergesort_merge(arrdata, elemsize, cmpfnc, data, l, m, r); 251.369 - } 251.370 -} 251.371 - 251.372 -static void ucx_mergesort(void *arrdata, size_t count, size_t elemsize, 251.373 - cmp_func cmpfnc, void *data) { 251.374 - 251.375 - ucx_mergesort_impl(arrdata, elemsize, cmpfnc, data, 0, count-1); 251.376 -} 251.377 - 251.378 -#ifdef USE_UCX_QSORT_R 251.379 -struct cmpfnc_swapargs_info { 251.380 - cmp_func func; 251.381 - void *data; 251.382 -}; 251.383 - 251.384 -static int cmp_func_swap_args(void *data, const void *x, const void *y) { 251.385 - struct cmpfnc_swapargs_info* info = data; 251.386 - return info->func(x, y, info->data); 251.387 -} 251.388 - 251.389 -static void ucx_qsort_r(void *array, size_t count, size_t elemsize, 251.390 - cmp_func cmpfnc, void *data) { 251.391 - struct cmpfnc_swapargs_info info; 251.392 - info.func = cmpfnc; 251.393 - info.data = data; 251.394 - qsort_r(array, count, elemsize, &info, cmp_func_swap_args); 251.395 -} 251.396 -#endif /* USE_UCX_QSORT_R */ 251.397 - 251.398 -void ucx_array_sort(UcxArray* array, cmp_func cmpfnc, void *data) { 251.399 - ucx_array_sort_impl(array->data, array->size, array->elemsize, 251.400 - cmpfnc, data); 251.401 -} 251.402 - 251.403 -void ucx_array_remove(UcxArray *array, size_t index) { 251.404 - array->size--; 251.405 - if (index < array->size) { 251.406 - void* dest = ucx_array_at(array, index); 251.407 - void* src = ucx_array_at(array, index+1); 251.408 - memmove(dest, src, (array->size - index)*array->elemsize); 251.409 - } 251.410 -} 251.411 - 251.412 -void ucx_array_remove_fast(UcxArray *array, size_t index) { 251.413 - array->size--; 251.414 - if (index < array->size) { 251.415 - void* dest = ucx_array_at(array, index); 251.416 - void* src = ucx_array_at(array, array->size); 251.417 - memcpy(dest, src, array->elemsize); 251.418 - } 251.419 -} 251.420 - 251.421 -int ucx_array_shrink(UcxArray* array) { 251.422 - void* newptr = alrealloc(array->allocator, array->data, 251.423 - array->size*array->elemsize); 251.424 - if (newptr) { 251.425 - array->data = newptr; 251.426 - array->capacity = array->size; 251.427 - return 0; 251.428 - } else { 251.429 - return 1; 251.430 - } 251.431 -} 251.432 - 251.433 -int ucx_array_resize(UcxArray* array, size_t capacity) { 251.434 - if (array->capacity >= capacity) { 251.435 - void* newptr = alrealloc(array->allocator, array->data, 251.436 - capacity*array->elemsize); 251.437 - if (newptr) { 251.438 - array->data = newptr; 251.439 - array->capacity = capacity; 251.440 - if (array->size > array->capacity) { 251.441 - array->size = array->capacity; 251.442 - } 251.443 - return 0; 251.444 - } else { 251.445 - return 1; 251.446 - } 251.447 - } else { 251.448 - return ucx_array_reserve(array, capacity); 251.449 - } 251.450 -} 251.451 - 251.452 -int ucx_array_reserve(UcxArray* array, size_t capacity) { 251.453 - if (array->capacity > capacity) { 251.454 - return 0; 251.455 - } else { 251.456 - void* newptr = alrealloc(array->allocator, array->data, 251.457 - capacity*array->elemsize); 251.458 - if (newptr) { 251.459 - array->data = newptr; 251.460 - array->capacity = capacity; 251.461 - return 0; 251.462 - } else { 251.463 - return 1; 251.464 - } 251.465 - } 251.466 -} 251.467 - 251.468 -int ucx_array_grow(UcxArray* array, size_t count) { 251.469 - return ucx_array_reserve(array, array->size+count); 251.470 -}
252.1 --- a/src/avl.c Mon Dec 30 09:54:10 2019 +0100 252.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 252.3 @@ -1,373 +0,0 @@ 252.4 -/* 252.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 252.6 - * 252.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 252.8 - * 252.9 - * Redistribution and use in source and binary forms, with or without 252.10 - * modification, are permitted provided that the following conditions are met: 252.11 - * 252.12 - * 1. Redistributions of source code must retain the above copyright 252.13 - * notice, this list of conditions and the following disclaimer. 252.14 - * 252.15 - * 2. Redistributions in binary form must reproduce the above copyright 252.16 - * notice, this list of conditions and the following disclaimer in the 252.17 - * documentation and/or other materials provided with the distribution. 252.18 - * 252.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 252.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 252.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 252.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 252.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 252.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 252.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 252.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 252.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 252.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 252.29 - * POSSIBILITY OF SUCH DAMAGE. 252.30 - */ 252.31 - 252.32 -#include "ucx/avl.h" 252.33 - 252.34 -#include <limits.h> 252.35 - 252.36 -#define ptrcast(ptr) ((void*)(ptr)) 252.37 -#define alloc_tree(al) (UcxAVLTree*) almalloc((al), sizeof(UcxAVLTree)) 252.38 -#define alloc_node(al) (UcxAVLNode*) almalloc((al), sizeof(UcxAVLNode)) 252.39 - 252.40 -static void ucx_avl_connect(UcxAVLTree *tree, 252.41 - UcxAVLNode *node, UcxAVLNode *child, intptr_t nullkey) { 252.42 - if (child) { 252.43 - child->parent = node; 252.44 - } 252.45 - // if child is NULL, nullkey decides if left or right pointer is cleared 252.46 - if (tree->cmpfunc( 252.47 - ptrcast(child ? child->key : nullkey), 252.48 - ptrcast(node->key), tree->userdata) > 0) { 252.49 - node->right = child; 252.50 - } else { 252.51 - node->left = child; 252.52 - } 252.53 - size_t lh = node->left ? node->left->height : 0; 252.54 - size_t rh = node->right ? node->right->height : 0; 252.55 - node->height = 1 + (lh > rh ? lh : rh); 252.56 -} 252.57 - 252.58 -#define avlheight(node) ((node) ? (node)->height : 0) 252.59 - 252.60 -static UcxAVLNode* avl_rotright(UcxAVLTree *tree, UcxAVLNode *l0) { 252.61 - UcxAVLNode *p = l0->parent; 252.62 - UcxAVLNode *l1 = l0->left; 252.63 - if (p) { 252.64 - ucx_avl_connect(tree, p, l1, 0); 252.65 - } else { 252.66 - l1->parent = NULL; 252.67 - } 252.68 - ucx_avl_connect(tree, l0, l1->right, l1->key); 252.69 - ucx_avl_connect(tree, l1, l0, 0); 252.70 - return l1; 252.71 -} 252.72 - 252.73 -static UcxAVLNode* avl_rotleft(UcxAVLTree *tree, UcxAVLNode *l0) { 252.74 - UcxAVLNode *p = l0->parent; 252.75 - UcxAVLNode *l1 = l0->right; 252.76 - if (p) { 252.77 - ucx_avl_connect(tree, p, l1, 0); 252.78 - } else { 252.79 - l1->parent = NULL; 252.80 - } 252.81 - ucx_avl_connect(tree, l0, l1->left, l1->key); 252.82 - ucx_avl_connect(tree, l1, l0, 0); 252.83 - return l1; 252.84 -} 252.85 - 252.86 -static void ucx_avl_balance(UcxAVLTree *tree, UcxAVLNode *n) { 252.87 - int lh = avlheight(n->left); 252.88 - int rh = avlheight(n->right); 252.89 - n->height = 1 + (lh > rh ? lh : rh); 252.90 - 252.91 - if (lh - rh == 2) { 252.92 - UcxAVLNode *c = n->left; 252.93 - if (avlheight(c->right) - avlheight(c->left) == 1) { 252.94 - avl_rotleft(tree, c); 252.95 - } 252.96 - n = avl_rotright(tree, n); 252.97 - } else if (rh - lh == 2) { 252.98 - UcxAVLNode *c = n->right; 252.99 - if (avlheight(c->left) - avlheight(c->right) == 1) { 252.100 - avl_rotright(tree, c); 252.101 - } 252.102 - n = avl_rotleft(tree, n); 252.103 - } 252.104 - 252.105 - if (n->parent) { 252.106 - ucx_avl_balance(tree, n->parent); 252.107 - } else { 252.108 - tree->root = n; 252.109 - } 252.110 -} 252.111 - 252.112 -UcxAVLTree *ucx_avl_new(cmp_func cmpfunc) { 252.113 - return ucx_avl_new_a(cmpfunc, ucx_default_allocator()); 252.114 -} 252.115 - 252.116 -UcxAVLTree *ucx_avl_new_a(cmp_func cmpfunc, UcxAllocator *allocator) { 252.117 - UcxAVLTree* tree = alloc_tree(allocator); 252.118 - if (tree) { 252.119 - tree->allocator = allocator; 252.120 - tree->cmpfunc = cmpfunc; 252.121 - tree->root = NULL; 252.122 - tree->userdata = NULL; 252.123 - } 252.124 - 252.125 - return tree; 252.126 -} 252.127 - 252.128 -static void ucx_avl_free_node(UcxAllocator *al, UcxAVLNode *node) { 252.129 - if (node) { 252.130 - ucx_avl_free_node(al, node->left); 252.131 - ucx_avl_free_node(al, node->right); 252.132 - alfree(al, node); 252.133 - } 252.134 -} 252.135 - 252.136 -void ucx_avl_free(UcxAVLTree *tree) { 252.137 - UcxAllocator *al = tree->allocator; 252.138 - ucx_avl_free_node(al, tree->root); 252.139 - alfree(al, tree); 252.140 -} 252.141 - 252.142 -static void ucx_avl_free_content_node(UcxAllocator *al, UcxAVLNode *node, 252.143 - ucx_destructor destr) { 252.144 - if (node) { 252.145 - ucx_avl_free_content_node(al, node->left, destr); 252.146 - ucx_avl_free_content_node(al, node->right, destr); 252.147 - if (destr) { 252.148 - destr(node->value); 252.149 - } else { 252.150 - alfree(al, node->value); 252.151 - } 252.152 - } 252.153 -} 252.154 - 252.155 -void ucx_avl_free_content(UcxAVLTree *tree, ucx_destructor destr) { 252.156 - ucx_avl_free_content_node(tree->allocator, tree->root, destr); 252.157 -} 252.158 - 252.159 -UcxAVLNode *ucx_avl_get_node(UcxAVLTree *tree, intptr_t key) { 252.160 - UcxAVLNode *n = tree->root; 252.161 - int cmpresult; 252.162 - while (n && (cmpresult = tree->cmpfunc( 252.163 - ptrcast(key), ptrcast(n->key), tree->userdata))) { 252.164 - n = cmpresult > 0 ? n->right : n->left; 252.165 - } 252.166 - return n; 252.167 -} 252.168 - 252.169 -void *ucx_avl_get(UcxAVLTree *tree, intptr_t key) { 252.170 - UcxAVLNode *n = ucx_avl_get_node(tree, key); 252.171 - return n ? n->value : NULL; 252.172 -} 252.173 - 252.174 -UcxAVLNode *ucx_avl_find_node(UcxAVLTree *tree, intptr_t key, 252.175 - distance_func dfnc, int mode) { 252.176 - UcxAVLNode *n = tree->root; 252.177 - UcxAVLNode *closest = NULL; 252.178 - 252.179 - intmax_t cmpresult; 252.180 - intmax_t closest_dist; 252.181 - closest_dist = mode == UCX_AVL_FIND_LOWER_BOUNDED ? INTMAX_MIN : INTMAX_MAX; 252.182 - 252.183 - while (n && (cmpresult = dfnc( 252.184 - ptrcast(key), ptrcast(n->key), tree->userdata))) { 252.185 - if (mode == UCX_AVL_FIND_CLOSEST) { 252.186 - intmax_t dist = cmpresult; 252.187 - if (dist < 0) dist *= -1; 252.188 - if (dist < closest_dist) { 252.189 - closest_dist = dist; 252.190 - closest = n; 252.191 - } 252.192 - } else if (mode == UCX_AVL_FIND_LOWER_BOUNDED && cmpresult <= 0) { 252.193 - if (cmpresult > closest_dist) { 252.194 - closest_dist = cmpresult; 252.195 - closest = n; 252.196 - } 252.197 - } else if (mode == UCX_AVL_FIND_UPPER_BOUNDED && cmpresult >= 0) { 252.198 - if (cmpresult < closest_dist) { 252.199 - closest_dist = cmpresult; 252.200 - closest = n; 252.201 - } 252.202 - } 252.203 - n = cmpresult > 0 ? n->right : n->left; 252.204 - } 252.205 - return n ? n : closest; 252.206 -} 252.207 - 252.208 -void *ucx_avl_find(UcxAVLTree *tree, intptr_t key, 252.209 - distance_func dfnc, int mode) { 252.210 - UcxAVLNode *n = ucx_avl_find_node(tree, key, dfnc, mode); 252.211 - return n ? n->value : NULL; 252.212 -} 252.213 - 252.214 -int ucx_avl_put(UcxAVLTree *tree, intptr_t key, void *value) { 252.215 - return ucx_avl_put_s(tree, key, value, NULL); 252.216 -} 252.217 - 252.218 -int ucx_avl_put_s(UcxAVLTree *tree, intptr_t key, void *value, 252.219 - void **oldvalue) { 252.220 - if (tree->root) { 252.221 - UcxAVLNode *n = tree->root; 252.222 - int cmpresult; 252.223 - while ((cmpresult = tree->cmpfunc( 252.224 - ptrcast(key), ptrcast(n->key), tree->userdata))) { 252.225 - UcxAVLNode *m = cmpresult > 0 ? n->right : n->left; 252.226 - if (m) { 252.227 - n = m; 252.228 - } else { 252.229 - break; 252.230 - } 252.231 - } 252.232 - 252.233 - if (cmpresult) { 252.234 - UcxAVLNode* e = alloc_node(tree->allocator); 252.235 - if (e) { 252.236 - e->key = key; e->value = value; e->height = 1; 252.237 - e->parent = e->left = e->right = NULL; 252.238 - ucx_avl_connect(tree, n, e, 0); 252.239 - ucx_avl_balance(tree, n); 252.240 - return 0; 252.241 - } else { 252.242 - return 1; 252.243 - } 252.244 - } else { 252.245 - if (oldvalue) { 252.246 - *oldvalue = n->value; 252.247 - } 252.248 - n->value = value; 252.249 - return 0; 252.250 - } 252.251 - } else { 252.252 - tree->root = alloc_node(tree->allocator); 252.253 - if (tree->root) { 252.254 - tree->root->key = key; tree->root->value = value; 252.255 - tree->root->height = 1; 252.256 - tree->root->parent = tree->root->left = tree->root->right = NULL; 252.257 - 252.258 - if (oldvalue) { 252.259 - *oldvalue = NULL; 252.260 - } 252.261 - 252.262 - return 0; 252.263 - } else { 252.264 - return 1; 252.265 - } 252.266 - } 252.267 -} 252.268 - 252.269 -int ucx_avl_remove(UcxAVLTree *tree, intptr_t key) { 252.270 - return ucx_avl_remove_s(tree, key, NULL, NULL); 252.271 -} 252.272 - 252.273 -int ucx_avl_remove_node(UcxAVLTree *tree, UcxAVLNode *node) { 252.274 - return ucx_avl_remove_s(tree, node->key, NULL, NULL); 252.275 -} 252.276 - 252.277 -int ucx_avl_remove_s(UcxAVLTree *tree, intptr_t key, 252.278 - intptr_t *oldkey, void **oldvalue) { 252.279 - 252.280 - UcxAVLNode *n = tree->root; 252.281 - int cmpresult; 252.282 - while (n && (cmpresult = tree->cmpfunc( 252.283 - ptrcast(key), ptrcast(n->key), tree->userdata))) { 252.284 - n = cmpresult > 0 ? n->right : n->left; 252.285 - } 252.286 - if (n) { 252.287 - if (oldkey) { 252.288 - *oldkey = n->key; 252.289 - } 252.290 - if (oldvalue) { 252.291 - *oldvalue = n->value; 252.292 - } 252.293 - 252.294 - UcxAVLNode *p = n->parent; 252.295 - if (n->left && n->right) { 252.296 - UcxAVLNode *s = n->right; 252.297 - while (s->left) { 252.298 - s = s->left; 252.299 - } 252.300 - ucx_avl_connect(tree, s->parent, s->right, s->key); 252.301 - n->key = s->key; n->value = s->value; 252.302 - p = s->parent; 252.303 - alfree(tree->allocator, s); 252.304 - } else { 252.305 - if (p) { 252.306 - ucx_avl_connect(tree, p, n->right ? n->right:n->left, n->key); 252.307 - } else { 252.308 - tree->root = n->right ? n->right : n->left; 252.309 - if (tree->root) { 252.310 - tree->root->parent = NULL; 252.311 - } 252.312 - } 252.313 - alfree(tree->allocator, n); 252.314 - } 252.315 - 252.316 - if (p) { 252.317 - ucx_avl_balance(tree, p); 252.318 - } 252.319 - 252.320 - return 0; 252.321 - } else { 252.322 - return 1; 252.323 - } 252.324 -} 252.325 - 252.326 -static size_t ucx_avl_countn(UcxAVLNode *node) { 252.327 - if (node) { 252.328 - return 1 + ucx_avl_countn(node->left) + ucx_avl_countn(node->right); 252.329 - } else { 252.330 - return 0; 252.331 - } 252.332 -} 252.333 - 252.334 -size_t ucx_avl_count(UcxAVLTree *tree) { 252.335 - return ucx_avl_countn(tree->root); 252.336 -} 252.337 - 252.338 -UcxAVLNode* ucx_avl_pred(UcxAVLNode* node) { 252.339 - if (node->left) { 252.340 - UcxAVLNode* n = node->left; 252.341 - while (n->right) { 252.342 - n = n->right; 252.343 - } 252.344 - return n; 252.345 - } else { 252.346 - UcxAVLNode* n = node; 252.347 - while (n->parent) { 252.348 - if (n->parent->right == n) { 252.349 - return n->parent; 252.350 - } else { 252.351 - n = n->parent; 252.352 - } 252.353 - } 252.354 - return NULL; 252.355 - } 252.356 -} 252.357 - 252.358 -UcxAVLNode* ucx_avl_succ(UcxAVLNode* node) { 252.359 - if (node->right) { 252.360 - UcxAVLNode* n = node->right; 252.361 - while (n->left) { 252.362 - n = n->left; 252.363 - } 252.364 - return n; 252.365 - } else { 252.366 - UcxAVLNode* n = node; 252.367 - while (n->parent) { 252.368 - if (n->parent->left == n) { 252.369 - return n->parent; 252.370 - } else { 252.371 - n = n->parent; 252.372 - } 252.373 - } 252.374 - return NULL; 252.375 - } 252.376 -}
253.1 --- a/src/buffer.c Mon Dec 30 09:54:10 2019 +0100 253.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 253.3 @@ -1,297 +0,0 @@ 253.4 -/* 253.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 253.6 - * 253.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 253.8 - * 253.9 - * Redistribution and use in source and binary forms, with or without 253.10 - * modification, are permitted provided that the following conditions are met: 253.11 - * 253.12 - * 1. Redistributions of source code must retain the above copyright 253.13 - * notice, this list of conditions and the following disclaimer. 253.14 - * 253.15 - * 2. Redistributions in binary form must reproduce the above copyright 253.16 - * notice, this list of conditions and the following disclaimer in the 253.17 - * documentation and/or other materials provided with the distribution. 253.18 - * 253.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 253.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 253.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 253.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 253.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 253.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 253.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 253.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 253.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 253.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 253.29 - * POSSIBILITY OF SUCH DAMAGE. 253.30 - */ 253.31 - 253.32 -#include "ucx/buffer.h" 253.33 - 253.34 -#include <stdarg.h> 253.35 -#include <stdlib.h> 253.36 -#include <string.h> 253.37 - 253.38 -UcxBuffer *ucx_buffer_new(void *space, size_t capacity, int flags) { 253.39 - UcxBuffer *buffer = (UcxBuffer*) malloc(sizeof(UcxBuffer)); 253.40 - if (buffer) { 253.41 - buffer->flags = flags; 253.42 - if (!space) { 253.43 - buffer->space = (char*)malloc(capacity); 253.44 - if (!buffer->space) { 253.45 - free(buffer); 253.46 - return NULL; 253.47 - } 253.48 - memset(buffer->space, 0, capacity); 253.49 - buffer->flags |= UCX_BUFFER_AUTOFREE; 253.50 - } else { 253.51 - buffer->space = (char*)space; 253.52 - } 253.53 - buffer->capacity = capacity; 253.54 - buffer->size = 0; 253.55 - 253.56 - buffer->pos = 0; 253.57 - } 253.58 - 253.59 - return buffer; 253.60 -} 253.61 - 253.62 -void ucx_buffer_free(UcxBuffer *buffer) { 253.63 - if ((buffer->flags & UCX_BUFFER_AUTOFREE) == UCX_BUFFER_AUTOFREE) { 253.64 - free(buffer->space); 253.65 - } 253.66 - free(buffer); 253.67 -} 253.68 - 253.69 -UcxBuffer* ucx_buffer_extract( 253.70 - UcxBuffer *src, size_t start, size_t length, int flags) { 253.71 - if (src->size == 0 || length == 0 || 253.72 - ((size_t)-1) - start < length || start+length > src->capacity) 253.73 - { 253.74 - return NULL; 253.75 - } 253.76 - 253.77 - UcxBuffer *dst = (UcxBuffer*) malloc(sizeof(UcxBuffer)); 253.78 - if (dst) { 253.79 - dst->space = (char*)malloc(length); 253.80 - if (!dst->space) { 253.81 - free(dst); 253.82 - return NULL; 253.83 - } 253.84 - dst->capacity = length; 253.85 - dst->size = length; 253.86 - dst->flags = flags | UCX_BUFFER_AUTOFREE; 253.87 - dst->pos = 0; 253.88 - memcpy(dst->space, src->space+start, length); 253.89 - } 253.90 - return dst; 253.91 -} 253.92 - 253.93 -int ucx_buffer_seek(UcxBuffer *buffer, off_t offset, int whence) { 253.94 - size_t npos; 253.95 - switch (whence) { 253.96 - case SEEK_CUR: 253.97 - npos = buffer->pos; 253.98 - break; 253.99 - case SEEK_END: 253.100 - npos = buffer->size; 253.101 - break; 253.102 - case SEEK_SET: 253.103 - npos = 0; 253.104 - break; 253.105 - default: 253.106 - return -1; 253.107 - } 253.108 - 253.109 - size_t opos = npos; 253.110 - npos += offset; 253.111 - 253.112 - if ((offset > 0 && npos < opos) || (offset < 0 && npos > opos)) { 253.113 - return -1; 253.114 - } 253.115 - 253.116 - if (npos >= buffer->size) { 253.117 - return -1; 253.118 - } else { 253.119 - buffer->pos = npos; 253.120 - return 0; 253.121 - } 253.122 - 253.123 -} 253.124 - 253.125 -int ucx_buffer_eof(UcxBuffer *buffer) { 253.126 - return buffer->pos >= buffer->size; 253.127 -} 253.128 - 253.129 -int ucx_buffer_extend(UcxBuffer *buffer, size_t len) { 253.130 - size_t newcap = buffer->capacity; 253.131 - 253.132 - if (buffer->capacity + len < buffer->capacity) { 253.133 - return -1; 253.134 - } 253.135 - 253.136 - while (buffer->capacity + len > newcap) { 253.137 - newcap <<= 1; 253.138 - if (newcap < buffer->capacity) { 253.139 - return -1; 253.140 - } 253.141 - } 253.142 - 253.143 - char *newspace = (char*)realloc(buffer->space, newcap); 253.144 - if (newspace) { 253.145 - memset(newspace+buffer->size, 0, newcap-buffer->size); 253.146 - buffer->space = newspace; 253.147 - buffer->capacity = newcap; 253.148 - } else { 253.149 - return -1; 253.150 - } 253.151 - 253.152 - return 0; 253.153 -} 253.154 - 253.155 -size_t ucx_buffer_write(const void *ptr, size_t size, size_t nitems, 253.156 - UcxBuffer *buffer) { 253.157 - size_t len; 253.158 - if(ucx_szmul(size, nitems, &len)) { 253.159 - return 0; 253.160 - } 253.161 - size_t required = buffer->pos + len; 253.162 - if (buffer->pos > required) { 253.163 - return 0; 253.164 - } 253.165 - 253.166 - if (required > buffer->capacity) { 253.167 - if ((buffer->flags & UCX_BUFFER_AUTOEXTEND) == UCX_BUFFER_AUTOEXTEND) { 253.168 - if (ucx_buffer_extend(buffer, required - buffer->capacity)) { 253.169 - return 0; 253.170 - } 253.171 - } else { 253.172 - len = buffer->capacity - buffer->pos; 253.173 - if (size > 1) { 253.174 - len -= len%size; 253.175 - } 253.176 - } 253.177 - } 253.178 - 253.179 - if (len == 0) { 253.180 - return len; 253.181 - } 253.182 - 253.183 - memcpy(buffer->space + buffer->pos, ptr, len); 253.184 - buffer->pos += len; 253.185 - if(buffer->pos > buffer->size) { 253.186 - buffer->size = buffer->pos; 253.187 - } 253.188 - 253.189 - return len / size; 253.190 -} 253.191 - 253.192 -size_t ucx_buffer_read(void *ptr, size_t size, size_t nitems, 253.193 - UcxBuffer *buffer) { 253.194 - size_t len; 253.195 - if(ucx_szmul(size, nitems, &len)) { 253.196 - return 0; 253.197 - } 253.198 - if (buffer->pos + len > buffer->size) { 253.199 - len = buffer->size - buffer->pos; 253.200 - if (size > 1) len -= len%size; 253.201 - } 253.202 - 253.203 - if (len <= 0) { 253.204 - return len; 253.205 - } 253.206 - 253.207 - memcpy(ptr, buffer->space + buffer->pos, len); 253.208 - buffer->pos += len; 253.209 - 253.210 - return len / size; 253.211 -} 253.212 - 253.213 -int ucx_buffer_putc(UcxBuffer *buffer, int c) { 253.214 - if(buffer->pos >= buffer->capacity) { 253.215 - if ((buffer->flags & UCX_BUFFER_AUTOEXTEND) == UCX_BUFFER_AUTOEXTEND) { 253.216 - if(ucx_buffer_extend(buffer, 1)) { 253.217 - return EOF; 253.218 - } 253.219 - } else { 253.220 - return EOF; 253.221 - } 253.222 - } 253.223 - 253.224 - c &= 0xFF; 253.225 - buffer->space[buffer->pos] = (char) c; 253.226 - buffer->pos++; 253.227 - if(buffer->pos > buffer->size) { 253.228 - buffer->size = buffer->pos; 253.229 - } 253.230 - return c; 253.231 -} 253.232 - 253.233 -int ucx_buffer_getc(UcxBuffer *buffer) { 253.234 - if (ucx_buffer_eof(buffer)) { 253.235 - return EOF; 253.236 - } else { 253.237 - int c = ((unsigned char*)buffer->space)[buffer->pos]; 253.238 - buffer->pos++; 253.239 - return c; 253.240 - } 253.241 -} 253.242 - 253.243 -size_t ucx_buffer_puts(UcxBuffer *buffer, const char *str) { 253.244 - return ucx_buffer_write((const void*)str, 1, strlen(str), buffer); 253.245 -} 253.246 - 253.247 -int ucx_buffer_shift_left(UcxBuffer* buffer, size_t shift) { 253.248 - if (shift >= buffer->size) { 253.249 - buffer->pos = buffer->size = 0; 253.250 - } else { 253.251 - memmove(buffer->space, buffer->space + shift, buffer->size - shift); 253.252 - buffer->size -= shift; 253.253 - 253.254 - if (buffer->pos >= shift) { 253.255 - buffer->pos -= shift; 253.256 - } else { 253.257 - buffer->pos = 0; 253.258 - } 253.259 - } 253.260 - return 0; 253.261 -} 253.262 - 253.263 -int ucx_buffer_shift_right(UcxBuffer* buffer, size_t shift) { 253.264 - size_t req_capacity = buffer->size + shift; 253.265 - size_t movebytes; 253.266 - 253.267 - // auto extend buffer, if required and enabled 253.268 - if (buffer->capacity < req_capacity) { 253.269 - if ((buffer->flags & UCX_BUFFER_AUTOEXTEND) == UCX_BUFFER_AUTOEXTEND) { 253.270 - if (ucx_buffer_extend(buffer, req_capacity - buffer->capacity)) { 253.271 - return 1; 253.272 - } 253.273 - movebytes = buffer->size; 253.274 - } else { 253.275 - movebytes = buffer->capacity - shift; 253.276 - } 253.277 - } else { 253.278 - movebytes = buffer->size; 253.279 - } 253.280 - 253.281 - memmove(buffer->space + shift, buffer->space, movebytes); 253.282 - buffer->size = shift+movebytes; 253.283 - 253.284 - buffer->pos += shift; 253.285 - if (buffer->pos > buffer->size) { 253.286 - buffer->pos = buffer->size; 253.287 - } 253.288 - 253.289 - return 0; 253.290 -} 253.291 - 253.292 -int ucx_buffer_shift(UcxBuffer* buffer, off_t shift) { 253.293 - if (shift < 0) { 253.294 - return ucx_buffer_shift_left(buffer, (size_t) (-shift)); 253.295 - } else if (shift > 0) { 253.296 - return ucx_buffer_shift_right(buffer, (size_t) shift); 253.297 - } else { 253.298 - return 0; 253.299 - } 253.300 -}
254.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 254.2 +++ b/src/cx/list.h Sat Feb 06 19:11:44 2021 +0100 254.3 @@ -0,0 +1,32 @@ 254.4 +/* 254.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 254.6 + * 254.7 + * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved. 254.8 + * 254.9 + * Redistribution and use in source and binary forms, with or without 254.10 + * modification, are permitted provided that the following conditions are met: 254.11 + * 254.12 + * 1. Redistributions of source code must retain the above copyright 254.13 + * notice, this list of conditions and the following disclaimer. 254.14 + * 254.15 + * 2. Redistributions in binary form must reproduce the above copyright 254.16 + * notice, this list of conditions and the following disclaimer in the 254.17 + * documentation and/or other materials provided with the distribution. 254.18 + * 254.19 + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 254.20 + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 254.21 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 254.22 + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 254.23 + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 254.24 + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 254.25 + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 254.26 + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 254.27 + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 254.28 + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 254.29 + * POSSIBILITY OF SUCH DAMAGE. 254.30 + */ 254.31 + 254.32 +#ifndef UCX_LIST_H 254.33 +#define UCX_LIST_H 254.34 + 254.35 +#endif //UCX_LIST_H
255.1 --- a/src/list.c Mon Dec 30 09:54:10 2019 +0100 255.2 +++ b/src/list.c Sat Feb 06 19:11:44 2021 +0100 255.3 @@ -1,7 +1,7 @@ 255.4 /* 255.5 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 255.6 * 255.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 255.8 + * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved. 255.9 * 255.10 * Redistribution and use in source and binary forms, with or without 255.11 * modification, are permitted provided that the following conditions are met: 255.12 @@ -26,403 +26,4 @@ 255.13 * POSSIBILITY OF SUCH DAMAGE. 255.14 */ 255.15 255.16 -#include "ucx/list.h" 255.17 - 255.18 -UcxList *ucx_list_clone(const UcxList *l, copy_func fnc, void *data) { 255.19 - return ucx_list_clone_a(ucx_default_allocator(), l, fnc, data); 255.20 -} 255.21 - 255.22 -UcxList *ucx_list_clone_a(UcxAllocator *alloc, const UcxList *l, 255.23 - copy_func fnc, void *data) { 255.24 - UcxList *ret = NULL; 255.25 - while (l) { 255.26 - if (fnc) { 255.27 - ret = ucx_list_append_a(alloc, ret, fnc(l->data, data)); 255.28 - } else { 255.29 - ret = ucx_list_append_a(alloc, ret, l->data); 255.30 - } 255.31 - l = l->next; 255.32 - } 255.33 - return ret; 255.34 -} 255.35 - 255.36 -int ucx_list_equals(const UcxList *l1, const UcxList *l2, 255.37 - cmp_func fnc, void* data) { 255.38 - if (l1 == l2) return 1; 255.39 - 255.40 - while (l1 != NULL && l2 != NULL) { 255.41 - if (fnc == NULL) { 255.42 - if (l1->data != l2->data) return 0; 255.43 - } else { 255.44 - if (fnc(l1->data, l2->data, data) != 0) return 0; 255.45 - } 255.46 - l1 = l1->next; 255.47 - l2 = l2->next; 255.48 - } 255.49 - 255.50 - return (l1 == NULL && l2 == NULL); 255.51 -} 255.52 - 255.53 -void ucx_list_free(UcxList *l) { 255.54 - ucx_list_free_a(ucx_default_allocator(), l); 255.55 -} 255.56 - 255.57 -void ucx_list_free_a(UcxAllocator *alloc, UcxList *l) { 255.58 - UcxList *e = l, *f; 255.59 - while (e != NULL) { 255.60 - f = e; 255.61 - e = e->next; 255.62 - alfree(alloc, f); 255.63 - } 255.64 -} 255.65 - 255.66 -void ucx_list_free_content(UcxList* list, ucx_destructor destr) { 255.67 - if (!destr) destr = free; 255.68 - while (list != NULL) { 255.69 - destr(list->data); 255.70 - list = list->next; 255.71 - } 255.72 -} 255.73 - 255.74 -UcxList *ucx_list_append(UcxList *l, void *data) { 255.75 - return ucx_list_append_a(ucx_default_allocator(), l, data); 255.76 -} 255.77 - 255.78 -UcxList *ucx_list_append_a(UcxAllocator *alloc, UcxList *l, void *data) { 255.79 - UcxList *nl = (UcxList*) almalloc(alloc, sizeof(UcxList)); 255.80 - if (!nl) { 255.81 - return NULL; 255.82 - } 255.83 - 255.84 - nl->data = data; 255.85 - nl->next = NULL; 255.86 - if (l) { 255.87 - UcxList *t = ucx_list_last(l); 255.88 - t->next = nl; 255.89 - nl->prev = t; 255.90 - return l; 255.91 - } else { 255.92 - nl->prev = NULL; 255.93 - return nl; 255.94 - } 255.95 -} 255.96 - 255.97 -UcxList *ucx_list_prepend(UcxList *l, void *data) { 255.98 - return ucx_list_prepend_a(ucx_default_allocator(), l, data); 255.99 -} 255.100 - 255.101 -UcxList *ucx_list_prepend_a(UcxAllocator *alloc, UcxList *l, void *data) { 255.102 - UcxList *nl = ucx_list_append_a(alloc, NULL, data); 255.103 - if (!nl) { 255.104 - return NULL; 255.105 - } 255.106 - l = ucx_list_first(l); 255.107 - 255.108 - if (l) { 255.109 - nl->next = l; 255.110 - l->prev = nl; 255.111 - } 255.112 - return nl; 255.113 -} 255.114 - 255.115 -UcxList *ucx_list_concat(UcxList *l1, UcxList *l2) { 255.116 - if (l1) { 255.117 - UcxList *last = ucx_list_last(l1); 255.118 - last->next = l2; 255.119 - if (l2) { 255.120 - l2->prev = last; 255.121 - } 255.122 - return l1; 255.123 - } else { 255.124 - return l2; 255.125 - } 255.126 -} 255.127 - 255.128 -UcxList *ucx_list_last(const UcxList *l) { 255.129 - if (l == NULL) return NULL; 255.130 - 255.131 - const UcxList *e = l; 255.132 - while (e->next != NULL) { 255.133 - e = e->next; 255.134 - } 255.135 - return (UcxList*)e; 255.136 -} 255.137 - 255.138 -ssize_t ucx_list_indexof(const UcxList *list, const UcxList *elem) { 255.139 - ssize_t index = 0; 255.140 - while (list) { 255.141 - if (list == elem) { 255.142 - return index; 255.143 - } 255.144 - list = list->next; 255.145 - index++; 255.146 - } 255.147 - return -1; 255.148 -} 255.149 - 255.150 -UcxList *ucx_list_get(const UcxList *l, size_t index) { 255.151 - if (l == NULL) return NULL; 255.152 - 255.153 - const UcxList *e = l; 255.154 - while (e->next && index > 0) { 255.155 - e = e->next; 255.156 - index--; 255.157 - } 255.158 - 255.159 - return (UcxList*)(index == 0 ? e : NULL); 255.160 -} 255.161 - 255.162 -ssize_t ucx_list_find(const UcxList *l, void *elem, 255.163 - cmp_func fnc, void *cmpdata) { 255.164 - ssize_t index = 0; 255.165 - UCX_FOREACH(e, l) { 255.166 - if (fnc) { 255.167 - if (fnc(elem, e->data, cmpdata) == 0) { 255.168 - return index; 255.169 - } 255.170 - } else { 255.171 - if (elem == e->data) { 255.172 - return index; 255.173 - } 255.174 - } 255.175 - index++; 255.176 - } 255.177 - return -1; 255.178 -} 255.179 - 255.180 -int ucx_list_contains(const UcxList *l, void *elem, 255.181 - cmp_func fnc, void *cmpdata) { 255.182 - return ucx_list_find(l, elem, fnc, cmpdata) > -1; 255.183 -} 255.184 - 255.185 -size_t ucx_list_size(const UcxList *l) { 255.186 - if (l == NULL) return 0; 255.187 - 255.188 - const UcxList *e = l; 255.189 - size_t s = 1; 255.190 - while (e->next != NULL) { 255.191 - e = e->next; 255.192 - s++; 255.193 - } 255.194 - 255.195 - return s; 255.196 -} 255.197 - 255.198 -static UcxList *ucx_list_sort_merge(size_t length, 255.199 - UcxList* ls, UcxList* le, UcxList* re, 255.200 - cmp_func fnc, void* data) { 255.201 - 255.202 - UcxList** sorted = (UcxList**) malloc(sizeof(UcxList*)*length); 255.203 - UcxList *rc, *lc; 255.204 - 255.205 - lc = ls; rc = le; 255.206 - size_t n = 0; 255.207 - while (lc && lc != le && rc != re) { 255.208 - if (fnc(lc->data, rc->data, data) <= 0) { 255.209 - sorted[n] = lc; 255.210 - lc = lc->next; 255.211 - } else { 255.212 - sorted[n] = rc; 255.213 - rc = rc->next; 255.214 - } 255.215 - n++; 255.216 - } 255.217 - while (lc && lc != le) { 255.218 - sorted[n] = lc; 255.219 - lc = lc->next; 255.220 - n++; 255.221 - } 255.222 - while (rc && rc != re) { 255.223 - sorted[n] = rc; 255.224 - rc = rc->next; 255.225 - n++; 255.226 - } 255.227 - 255.228 - // Update pointer 255.229 - sorted[0]->prev = NULL; 255.230 - for (int i = 0 ; i < length-1 ; i++) { 255.231 - sorted[i]->next = sorted[i+1]; 255.232 - sorted[i+1]->prev = sorted[i]; 255.233 - } 255.234 - sorted[length-1]->next = NULL; 255.235 - 255.236 - UcxList *ret = sorted[0]; 255.237 - free(sorted); 255.238 - return ret; 255.239 -} 255.240 - 255.241 -UcxList *ucx_list_sort(UcxList *l, cmp_func fnc, void *data) { 255.242 - if (l == NULL) { 255.243 - return NULL; 255.244 - } 255.245 - 255.246 - UcxList *lc; 255.247 - size_t ln = 1; 255.248 - 255.249 - UcxList *ls = l, *le, *re; 255.250 - 255.251 - // check how many elements are already sorted 255.252 - lc = ls; 255.253 - while (lc->next != NULL && fnc(lc->next->data, lc->data, data) > 0) { 255.254 - lc = lc->next; 255.255 - ln++; 255.256 - } 255.257 - le = lc->next; 255.258 - 255.259 - if (le == NULL) { 255.260 - return l; // this list is already sorted :) 255.261 - } else { 255.262 - UcxList *rc; 255.263 - size_t rn = 1; 255.264 - rc = le; 255.265 - // skip already sorted elements 255.266 - while (rc->next != NULL && fnc(rc->next->data, rc->data, data) > 0) { 255.267 - rc = rc->next; 255.268 - rn++; 255.269 - } 255.270 - re = rc->next; 255.271 - 255.272 - // {ls,...,le->prev} and {rs,...,re->prev} are sorted - merge them 255.273 - UcxList *sorted = ucx_list_sort_merge(ln+rn, 255.274 - ls, le, re, 255.275 - fnc, data); 255.276 - 255.277 - // Something left? Sort it! 255.278 - size_t remainder_length = ucx_list_size(re); 255.279 - if (remainder_length > 0) { 255.280 - UcxList *remainder = ucx_list_sort(re, fnc, data); 255.281 - 255.282 - // merge sorted list with (also sorted) remainder 255.283 - l = ucx_list_sort_merge(ln+rn+remainder_length, 255.284 - sorted, remainder, NULL, fnc, data); 255.285 - } else { 255.286 - // no remainder - we've got our sorted list 255.287 - l = sorted; 255.288 - } 255.289 - 255.290 - return l; 255.291 - } 255.292 -} 255.293 - 255.294 -UcxList *ucx_list_first(const UcxList *l) { 255.295 - if (!l) { 255.296 - return NULL; 255.297 - } 255.298 - 255.299 - const UcxList *e = l; 255.300 - while (e->prev) { 255.301 - e = e->prev; 255.302 - } 255.303 - return (UcxList *)e; 255.304 -} 255.305 - 255.306 -UcxList *ucx_list_remove(UcxList *l, UcxList *e) { 255.307 - return ucx_list_remove_a(ucx_default_allocator(), l, e); 255.308 -} 255.309 - 255.310 -UcxList *ucx_list_remove_a(UcxAllocator *alloc, UcxList *l, UcxList *e) { 255.311 - if (l == e) { 255.312 - l = e->next; 255.313 - } 255.314 - 255.315 - if (e->next) { 255.316 - e->next->prev = e->prev; 255.317 - } 255.318 - 255.319 - if (e->prev) { 255.320 - e->prev->next = e->next; 255.321 - } 255.322 - 255.323 - alfree(alloc, e); 255.324 - return l; 255.325 -} 255.326 - 255.327 - 255.328 -static UcxList* ucx_list_setoperation_a(UcxAllocator *allocator, 255.329 - UcxList const *left, UcxList const *right, 255.330 - cmp_func cmpfnc, void* cmpdata, 255.331 - copy_func cpfnc, void* cpdata, 255.332 - int op) { 255.333 - 255.334 - UcxList *res = NULL; 255.335 - UcxList *cur = NULL; 255.336 - const UcxList *src = left; 255.337 - 255.338 - do { 255.339 - UCX_FOREACH(node, src) { 255.340 - void* elem = node->data; 255.341 - if ( 255.342 - (op == 0 && !ucx_list_contains(res, elem, cmpfnc, cmpdata)) || 255.343 - (op == 1 && ucx_list_contains(right, elem, cmpfnc, cmpdata)) || 255.344 - (op == 2 && !ucx_list_contains(right, elem, cmpfnc, cmpdata))) { 255.345 - UcxList *nl = almalloc(allocator, sizeof(UcxList)); 255.346 - nl->prev = cur; 255.347 - nl->next = NULL; 255.348 - if (cpfnc) { 255.349 - nl->data = cpfnc(elem, cpdata); 255.350 - } else { 255.351 - nl->data = elem; 255.352 - } 255.353 - if (cur != NULL) 255.354 - cur->next = nl; 255.355 - cur = nl; 255.356 - if (res == NULL) 255.357 - res = cur; 255.358 - } 255.359 - } 255.360 - if (op == 0 && src == left) 255.361 - src = right; 255.362 - else 255.363 - src = NULL; 255.364 - } while (src != NULL); 255.365 - 255.366 - return res; 255.367 -} 255.368 - 255.369 -UcxList* ucx_list_union(UcxList const *left, UcxList const *right, 255.370 - cmp_func cmpfnc, void* cmpdata, 255.371 - copy_func cpfnc, void* cpdata) { 255.372 - return ucx_list_union_a(ucx_default_allocator(), 255.373 - left, right, cmpfnc, cmpdata, cpfnc, cpdata); 255.374 -} 255.375 - 255.376 -UcxList* ucx_list_union_a(UcxAllocator *allocator, 255.377 - UcxList const *left, UcxList const *right, 255.378 - cmp_func cmpfnc, void* cmpdata, 255.379 - copy_func cpfnc, void* cpdata) { 255.380 - 255.381 - return ucx_list_setoperation_a(allocator, left, right, 255.382 - cmpfnc, cmpdata, cpfnc, cpdata, 0); 255.383 -} 255.384 - 255.385 -UcxList* ucx_list_intersection(UcxList const *left, UcxList const *right, 255.386 - cmp_func cmpfnc, void* cmpdata, 255.387 - copy_func cpfnc, void* cpdata) { 255.388 - return ucx_list_intersection_a(ucx_default_allocator(), left, right, 255.389 - cmpfnc, cmpdata, cpfnc, cpdata); 255.390 -} 255.391 - 255.392 -UcxList* ucx_list_intersection_a(UcxAllocator *allocator, 255.393 - UcxList const *left, UcxList const *right, 255.394 - cmp_func cmpfnc, void* cmpdata, 255.395 - copy_func cpfnc, void* cpdata) { 255.396 - 255.397 - return ucx_list_setoperation_a(allocator, left, right, 255.398 - cmpfnc, cmpdata, cpfnc, cpdata, 1); 255.399 -} 255.400 - 255.401 -UcxList* ucx_list_difference(UcxList const *left, UcxList const *right, 255.402 - cmp_func cmpfnc, void* cmpdata, 255.403 - copy_func cpfnc, void* cpdata) { 255.404 - return ucx_list_difference_a(ucx_default_allocator(), left, right, 255.405 - cmpfnc, cmpdata, cpfnc, cpdata); 255.406 -} 255.407 - 255.408 -UcxList* ucx_list_difference_a(UcxAllocator *allocator, 255.409 - UcxList const *left, UcxList const *right, 255.410 - cmp_func cmpfnc, void* cmpdata, 255.411 - copy_func cpfnc, void* cpdata) { 255.412 - 255.413 - return ucx_list_setoperation_a(allocator, left, right, 255.414 - cmpfnc, cmpdata, cpfnc, cpdata, 2); 255.415 -} 255.416 +#include "cx/list.h"
256.1 --- a/src/logging.c Mon Dec 30 09:54:10 2019 +0100 256.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 256.3 @@ -1,117 +0,0 @@ 256.4 -/* 256.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 256.6 - * 256.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 256.8 - * 256.9 - * Redistribution and use in source and binary forms, with or without 256.10 - * modification, are permitted provided that the following conditions are met: 256.11 - * 256.12 - * 1. Redistributions of source code must retain the above copyright 256.13 - * notice, this list of conditions and the following disclaimer. 256.14 - * 256.15 - * 2. Redistributions in binary form must reproduce the above copyright 256.16 - * notice, this list of conditions and the following disclaimer in the 256.17 - * documentation and/or other materials provided with the distribution. 256.18 - * 256.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 256.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 256.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 256.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 256.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 256.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 256.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 256.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 256.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 256.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 256.29 - * POSSIBILITY OF SUCH DAMAGE. 256.30 - */ 256.31 - 256.32 -#include "ucx/logging.h" 256.33 - 256.34 -#include <stdlib.h> 256.35 -#include <string.h> 256.36 -#include <stdarg.h> 256.37 -#include <time.h> 256.38 - 256.39 -UcxLogger *ucx_logger_new(void *stream, unsigned int level, unsigned int mask) { 256.40 - UcxLogger *logger = (UcxLogger*) malloc(sizeof(UcxLogger)); 256.41 - if (logger != NULL) { 256.42 - logger->stream = stream; 256.43 - logger->writer = (write_func)fwrite; 256.44 - logger->dateformat = (char*) "%F %T %z "; 256.45 - logger->level = level; 256.46 - logger->mask = mask; 256.47 - logger->levels = ucx_map_new(8); 256.48 - 256.49 - unsigned int l; 256.50 - l = UCX_LOGGER_ERROR; 256.51 - ucx_map_int_put(logger->levels, l, (void*) "[ERROR]"); 256.52 - l = UCX_LOGGER_WARN; 256.53 - ucx_map_int_put(logger->levels, l, (void*) "[WARNING]"); 256.54 - l = UCX_LOGGER_INFO; 256.55 - ucx_map_int_put(logger->levels, l, (void*) "[INFO]"); 256.56 - l = UCX_LOGGER_DEBUG; 256.57 - ucx_map_int_put(logger->levels, l, (void*) "[DEBUG]"); 256.58 - l = UCX_LOGGER_TRACE; 256.59 - ucx_map_int_put(logger->levels, l, (void*) "[TRACE]"); 256.60 - } 256.61 - 256.62 - return logger; 256.63 -} 256.64 - 256.65 -void ucx_logger_free(UcxLogger *logger) { 256.66 - ucx_map_free(logger->levels); 256.67 - free(logger); 256.68 -} 256.69 - 256.70 -// estimated max. message length (documented) 256.71 -#define UCX_LOGGER_MSGMAX 4096 256.72 - 256.73 -void ucx_logger_logf(UcxLogger *logger, unsigned int level, const char* file, 256.74 - const unsigned int line, const char *format, ...) { 256.75 - if (level <= logger->level) { 256.76 - char msg[UCX_LOGGER_MSGMAX]; 256.77 - const char *text; 256.78 - size_t k = 0; 256.79 - size_t n; 256.80 - 256.81 - if ((logger->mask & UCX_LOGGER_LEVEL) > 0) { 256.82 - text = (const char*) ucx_map_int_get(logger->levels, level); 256.83 - if (!text) { 256.84 - text = "[UNKNOWN]"; 256.85 - } 256.86 - n = strlen(text); 256.87 - n = n > 256 ? 256 : n; 256.88 - memcpy(msg+k, text, n); 256.89 - k += n; 256.90 - msg[k++] = ' '; 256.91 - } 256.92 - if ((logger->mask & UCX_LOGGER_TIMESTAMP) > 0) { 256.93 - time_t now = time(NULL); 256.94 - k += strftime(msg+k, 128, logger->dateformat, localtime(&now)); 256.95 - } 256.96 - if ((logger->mask & UCX_LOGGER_SOURCE) > 0) { 256.97 - char *fpart = strrchr(file, '/'); 256.98 - if (fpart) file = fpart+1; 256.99 - fpart = strrchr(file, '\\'); 256.100 - if (fpart) file = fpart+1; 256.101 - n = strlen(file); 256.102 - memcpy(msg+k, file, n); 256.103 - k += n; 256.104 - k += sprintf(msg+k, ":%u ", line); 256.105 - } 256.106 - 256.107 - if (k > 0) { 256.108 - msg[k++] = '-'; msg[k++] = ' '; 256.109 - } 256.110 - 256.111 - va_list args; 256.112 - va_start (args, format); 256.113 - k += vsnprintf(msg+k, UCX_LOGGER_MSGMAX-k-1, format, args); 256.114 - va_end (args); 256.115 - 256.116 - msg[k++] = '\n'; 256.117 - 256.118 - logger->writer(msg, 1, k, logger->stream); 256.119 - } 256.120 -}
257.1 --- a/src/map.c Mon Dec 30 09:54:10 2019 +0100 257.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 257.3 @@ -1,402 +0,0 @@ 257.4 -/* 257.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 257.6 - * 257.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 257.8 - * 257.9 - * Redistribution and use in source and binary forms, with or without 257.10 - * modification, are permitted provided that the following conditions are met: 257.11 - * 257.12 - * 1. Redistributions of source code must retain the above copyright 257.13 - * notice, this list of conditions and the following disclaimer. 257.14 - * 257.15 - * 2. Redistributions in binary form must reproduce the above copyright 257.16 - * notice, this list of conditions and the following disclaimer in the 257.17 - * documentation and/or other materials provided with the distribution. 257.18 - * 257.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 257.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 257.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 257.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 257.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 257.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 257.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 257.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 257.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 257.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 257.29 - * POSSIBILITY OF SUCH DAMAGE. 257.30 - */ 257.31 - 257.32 -#include "ucx/map.h" 257.33 - 257.34 -#include <stdlib.h> 257.35 -#include <string.h> 257.36 - 257.37 -UcxMap *ucx_map_new(size_t size) { 257.38 - return ucx_map_new_a(NULL, size); 257.39 -} 257.40 - 257.41 -UcxMap *ucx_map_new_a(UcxAllocator *allocator, size_t size) { 257.42 - if(size == 0) { 257.43 - size = 16; 257.44 - } 257.45 - 257.46 - if(!allocator) { 257.47 - allocator = ucx_default_allocator(); 257.48 - } 257.49 - 257.50 - UcxMap *map = (UcxMap*)almalloc(allocator, sizeof(UcxMap)); 257.51 - if (!map) { 257.52 - return NULL; 257.53 - } 257.54 - 257.55 - map->allocator = allocator; 257.56 - map->map = (UcxMapElement**)alcalloc( 257.57 - allocator, size, sizeof(UcxMapElement*)); 257.58 - if(map->map == NULL) { 257.59 - alfree(allocator, map); 257.60 - return NULL; 257.61 - } 257.62 - map->size = size; 257.63 - map->count = 0; 257.64 - 257.65 - return map; 257.66 -} 257.67 - 257.68 -static void ucx_map_free_elmlist_contents(UcxMap *map) { 257.69 - for (size_t n = 0 ; n < map->size ; n++) { 257.70 - UcxMapElement *elem = map->map[n]; 257.71 - if (elem != NULL) { 257.72 - do { 257.73 - UcxMapElement *next = elem->next; 257.74 - alfree(map->allocator, elem->key.data); 257.75 - alfree(map->allocator, elem); 257.76 - elem = next; 257.77 - } while (elem != NULL); 257.78 - } 257.79 - } 257.80 -} 257.81 - 257.82 -void ucx_map_free(UcxMap *map) { 257.83 - ucx_map_free_elmlist_contents(map); 257.84 - alfree(map->allocator, map->map); 257.85 - alfree(map->allocator, map); 257.86 -} 257.87 - 257.88 -void ucx_map_free_content(UcxMap *map, ucx_destructor destr) { 257.89 - UcxMapIterator iter = ucx_map_iterator(map); 257.90 - void *val; 257.91 - UCX_MAP_FOREACH(key, val, iter) { 257.92 - if (destr) { 257.93 - destr(val); 257.94 - } else { 257.95 - alfree(map->allocator, val); 257.96 - } 257.97 - } 257.98 -} 257.99 - 257.100 -void ucx_map_clear(UcxMap *map) { 257.101 - if (map->count == 0) { 257.102 - return; // nothing to do 257.103 - } 257.104 - ucx_map_free_elmlist_contents(map); 257.105 - memset(map->map, 0, map->size*sizeof(UcxMapElement*)); 257.106 - map->count = 0; 257.107 -} 257.108 - 257.109 -int ucx_map_copy(UcxMap const *from, UcxMap *to, copy_func fnc, void *data) { 257.110 - UcxMapIterator i = ucx_map_iterator(from); 257.111 - void *value; 257.112 - UCX_MAP_FOREACH(key, value, i) { 257.113 - if (ucx_map_put(to, key, fnc ? fnc(value, data) : value)) { 257.114 - return 1; 257.115 - } 257.116 - } 257.117 - return 0; 257.118 -} 257.119 - 257.120 -UcxMap *ucx_map_clone(UcxMap const *map, copy_func fnc, void *data) { 257.121 - return ucx_map_clone_a(ucx_default_allocator(), map, fnc, data); 257.122 -} 257.123 - 257.124 -UcxMap *ucx_map_clone_a(UcxAllocator *allocator, 257.125 - UcxMap const *map, copy_func fnc, void *data) { 257.126 - size_t bs = (map->count * 5) >> 1; 257.127 - UcxMap *newmap = ucx_map_new_a(allocator, bs > map->size ? bs : map->size); 257.128 - if (!newmap) { 257.129 - return NULL; 257.130 - } 257.131 - ucx_map_copy(map, newmap, fnc, data); 257.132 - return newmap; 257.133 -} 257.134 - 257.135 -int ucx_map_rehash(UcxMap *map) { 257.136 - size_t load = (map->size * 3) >> 2; 257.137 - if (map->count > load) { 257.138 - UcxMap oldmap; 257.139 - oldmap.map = map->map; 257.140 - oldmap.size = map->size; 257.141 - oldmap.count = map->count; 257.142 - oldmap.allocator = map->allocator; 257.143 - 257.144 - map->size = (map->count * 5) >> 1; 257.145 - map->map = (UcxMapElement**)alcalloc( 257.146 - map->allocator, map->size, sizeof(UcxMapElement*)); 257.147 - if (!map->map) { 257.148 - *map = oldmap; 257.149 - return 1; 257.150 - } 257.151 - map->count = 0; 257.152 - ucx_map_copy(&oldmap, map, NULL, NULL); 257.153 - 257.154 - /* free the UcxMapElement list of oldmap */ 257.155 - ucx_map_free_elmlist_contents(&oldmap); 257.156 - alfree(map->allocator, oldmap.map); 257.157 - } 257.158 - return 0; 257.159 -} 257.160 - 257.161 -int ucx_map_put(UcxMap *map, UcxKey key, void *data) { 257.162 - UcxAllocator *allocator = map->allocator; 257.163 - 257.164 - if (key.hash == 0) { 257.165 - key.hash = ucx_hash((const char*)key.data, key.len); 257.166 - } 257.167 - 257.168 - struct UcxMapKey mapkey; 257.169 - mapkey.hash = key.hash; 257.170 - 257.171 - size_t slot = mapkey.hash%map->size; 257.172 - UcxMapElement *elm = map->map[slot]; 257.173 - UcxMapElement *prev = NULL; 257.174 - 257.175 - while (elm && elm->key.hash < mapkey.hash) { 257.176 - prev = elm; 257.177 - elm = elm->next; 257.178 - } 257.179 - 257.180 - if (!elm || elm->key.hash != mapkey.hash) { 257.181 - UcxMapElement *e = (UcxMapElement*)almalloc( 257.182 - allocator, sizeof(UcxMapElement)); 257.183 - if (!e) { 257.184 - return -1; 257.185 - } 257.186 - e->key.data = NULL; 257.187 - if (prev) { 257.188 - prev->next = e; 257.189 - } else { 257.190 - map->map[slot] = e; 257.191 - } 257.192 - e->next = elm; 257.193 - elm = e; 257.194 - } 257.195 - 257.196 - if (!elm->key.data) { 257.197 - void *kd = almalloc(allocator, key.len); 257.198 - if (!kd) { 257.199 - return -1; 257.200 - } 257.201 - memcpy(kd, key.data, key.len); 257.202 - mapkey.data = kd; 257.203 - mapkey.len = key.len; 257.204 - elm->key = mapkey; 257.205 - map->count++; 257.206 - } 257.207 - elm->data = data; 257.208 - 257.209 - return 0; 257.210 -} 257.211 - 257.212 -static void* ucx_map_get_and_remove(UcxMap *map, UcxKey key, int remove) { 257.213 - if(key.hash == 0) { 257.214 - key.hash = ucx_hash((const char*)key.data, key.len); 257.215 - } 257.216 - 257.217 - size_t slot = key.hash%map->size; 257.218 - UcxMapElement *elm = map->map[slot]; 257.219 - UcxMapElement *pelm = NULL; 257.220 - while (elm && elm->key.hash <= key.hash) { 257.221 - if(elm->key.hash == key.hash) { 257.222 - int n = (key.len > elm->key.len) ? elm->key.len : key.len; 257.223 - if (memcmp(elm->key.data, key.data, n) == 0) { 257.224 - void *data = elm->data; 257.225 - if (remove) { 257.226 - if (pelm) { 257.227 - pelm->next = elm->next; 257.228 - } else { 257.229 - map->map[slot] = elm->next; 257.230 - } 257.231 - alfree(map->allocator, elm->key.data); 257.232 - alfree(map->allocator, elm); 257.233 - map->count--; 257.234 - } 257.235 - 257.236 - return data; 257.237 - } 257.238 - } 257.239 - pelm = elm; 257.240 - elm = pelm->next; 257.241 - } 257.242 - 257.243 - return NULL; 257.244 -} 257.245 - 257.246 -void *ucx_map_get(UcxMap const *map, UcxKey key) { 257.247 - return ucx_map_get_and_remove((UcxMap *)map, key, 0); 257.248 -} 257.249 - 257.250 -void *ucx_map_remove(UcxMap *map, UcxKey key) { 257.251 - return ucx_map_get_and_remove(map, key, 1); 257.252 -} 257.253 - 257.254 -UcxKey ucx_key(const void *data, size_t len) { 257.255 - UcxKey key; 257.256 - key.data = data; 257.257 - key.len = len; 257.258 - key.hash = ucx_hash((const char*)data, len); 257.259 - return key; 257.260 -} 257.261 - 257.262 - 257.263 -int ucx_hash(const char *data, size_t len) { 257.264 - /* murmur hash 2 */ 257.265 - 257.266 - int m = 0x5bd1e995; 257.267 - int r = 24; 257.268 - 257.269 - int h = 25 ^ len; 257.270 - 257.271 - int i = 0; 257.272 - while (len >= 4) { 257.273 - int k = data[i + 0] & 0xFF; 257.274 - k |= (data[i + 1] & 0xFF) << 8; 257.275 - k |= (data[i + 2] & 0xFF) << 16; 257.276 - k |= (data[i + 3] & 0xFF) << 24; 257.277 - 257.278 - k *= m; 257.279 - k ^= k >> r; 257.280 - k *= m; 257.281 - 257.282 - h *= m; 257.283 - h ^= k; 257.284 - 257.285 - i += 4; 257.286 - len -= 4; 257.287 - } 257.288 - 257.289 - switch (len) { 257.290 - case 3: h ^= (data[i + 2] & 0xFF) << 16; 257.291 - /* no break */ 257.292 - case 2: h ^= (data[i + 1] & 0xFF) << 8; 257.293 - /* no break */ 257.294 - case 1: h ^= (data[i + 0] & 0xFF); h *= m; 257.295 - /* no break */ 257.296 - } 257.297 - 257.298 - h ^= h >> 13; 257.299 - h *= m; 257.300 - h ^= h >> 15; 257.301 - 257.302 - return h; 257.303 -} 257.304 - 257.305 -UcxMapIterator ucx_map_iterator(UcxMap const *map) { 257.306 - UcxMapIterator i; 257.307 - i.map = map; 257.308 - i.cur = NULL; 257.309 - i.index = 0; 257.310 - return i; 257.311 -} 257.312 - 257.313 -int ucx_map_iter_next(UcxMapIterator *i, UcxKey *key, void **elm) { 257.314 - UcxMapElement *e = i->cur; 257.315 - 257.316 - if (e) { 257.317 - e = e->next; 257.318 - } else { 257.319 - e = i->map->map[0]; 257.320 - } 257.321 - 257.322 - while (i->index < i->map->size) { 257.323 - if (e) { 257.324 - if (e->data) { 257.325 - i->cur = e; 257.326 - *elm = e->data; 257.327 - key->data = e->key.data; 257.328 - key->hash = e->key.hash; 257.329 - key->len = e->key.len; 257.330 - return 1; 257.331 - } 257.332 - 257.333 - e = e->next; 257.334 - } else { 257.335 - i->index++; 257.336 - 257.337 - if (i->index < i->map->size) { 257.338 - e = i->map->map[i->index]; 257.339 - } 257.340 - } 257.341 - } 257.342 - 257.343 - return 0; 257.344 -} 257.345 - 257.346 -UcxMap* ucx_map_union(const UcxMap *first, const UcxMap *second, 257.347 - copy_func cpfnc, void* cpdata) { 257.348 - return ucx_map_union_a(ucx_default_allocator(), 257.349 - first, second, cpfnc, cpdata); 257.350 -} 257.351 - 257.352 -UcxMap* ucx_map_union_a(UcxAllocator *allocator, 257.353 - const UcxMap *first, const UcxMap *second, 257.354 - copy_func cpfnc, void* cpdata) { 257.355 - UcxMap* result = ucx_map_clone_a(allocator, first, cpfnc, cpdata); 257.356 - ucx_map_copy(second, result, cpfnc, cpdata); 257.357 - return result; 257.358 -} 257.359 - 257.360 -UcxMap* ucx_map_intersection(const UcxMap *first, const UcxMap *second, 257.361 - copy_func cpfnc, void* cpdata) { 257.362 - return ucx_map_intersection_a(ucx_default_allocator(), 257.363 - first, second, cpfnc, cpdata); 257.364 -} 257.365 - 257.366 -UcxMap* ucx_map_intersection_a(UcxAllocator *allocator, 257.367 - const UcxMap *first, const UcxMap *second, 257.368 - copy_func cpfnc, void* cpdata) { 257.369 - UcxMap *result = ucx_map_new_a(allocator, first->size < second->size ? 257.370 - first->size : second->size); 257.371 - 257.372 - UcxMapIterator iter = ucx_map_iterator(first); 257.373 - void* value; 257.374 - UCX_MAP_FOREACH(key, value, iter) { 257.375 - if (ucx_map_get(second, key)) { 257.376 - ucx_map_put(result, key, cpfnc ? cpfnc(value, cpdata) : value); 257.377 - } 257.378 - } 257.379 - 257.380 - return result; 257.381 -} 257.382 - 257.383 -UcxMap* ucx_map_difference(const UcxMap *first, const UcxMap *second, 257.384 - copy_func cpfnc, void* cpdata) { 257.385 - return ucx_map_difference_a(ucx_default_allocator(), 257.386 - first, second, cpfnc, cpdata); 257.387 -} 257.388 - 257.389 -UcxMap* ucx_map_difference_a(UcxAllocator *allocator, 257.390 - const UcxMap *first, const UcxMap *second, 257.391 - copy_func cpfnc, void* cpdata) { 257.392 - 257.393 - UcxMap *result = ucx_map_new_a(allocator, first->size - second->count); 257.394 - 257.395 - UcxMapIterator iter = ucx_map_iterator(first); 257.396 - void* value; 257.397 - UCX_MAP_FOREACH(key, value, iter) { 257.398 - if (!ucx_map_get(second, key)) { 257.399 - ucx_map_put(result, key, cpfnc ? cpfnc(value, cpdata) : value); 257.400 - } 257.401 - } 257.402 - 257.403 - ucx_map_rehash(result); 257.404 - return result; 257.405 -} 257.406 \ No newline at end of file
258.1 --- a/src/mempool.c Mon Dec 30 09:54:10 2019 +0100 258.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 258.3 @@ -1,237 +0,0 @@ 258.4 -/* 258.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 258.6 - * 258.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 258.8 - * 258.9 - * Redistribution and use in source and binary forms, with or without 258.10 - * modification, are permitted provided that the following conditions are met: 258.11 - * 258.12 - * 1. Redistributions of source code must retain the above copyright 258.13 - * notice, this list of conditions and the following disclaimer. 258.14 - * 258.15 - * 2. Redistributions in binary form must reproduce the above copyright 258.16 - * notice, this list of conditions and the following disclaimer in the 258.17 - * documentation and/or other materials provided with the distribution. 258.18 - * 258.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 258.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 258.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 258.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 258.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 258.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 258.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 258.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 258.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 258.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 258.29 - * POSSIBILITY OF SUCH DAMAGE. 258.30 - */ 258.31 - 258.32 -#include "ucx/mempool.h" 258.33 - 258.34 -#include <stdlib.h> 258.35 -#include <string.h> 258.36 -#include <stdio.h> 258.37 -#ifdef __cplusplus 258.38 -#define __STDC_FORMAT_MACROS 258.39 -#endif 258.40 -#include <inttypes.h> 258.41 - 258.42 -/** Capsule for destructible memory chunks. */ 258.43 -typedef struct { 258.44 - /** The destructor for the memory chunk. */ 258.45 - ucx_destructor destructor; 258.46 - /** 258.47 - * First byte of the memory chunk. 258.48 - * Note, that the address <code>&c</code> is also the address 258.49 - * of the whole memory chunk. 258.50 - */ 258.51 - char c; 258.52 -} ucx_memchunk; 258.53 - 258.54 -/** Capsule for data and its destructor. */ 258.55 -typedef struct { 258.56 - /** The destructor for the data. */ 258.57 - ucx_destructor destructor; 258.58 - /** A pointer to the data. */ 258.59 - void *ptr; 258.60 -} ucx_regdestr; 258.61 - 258.62 -#ifdef __cplusplus 258.63 -extern "C" 258.64 -#endif 258.65 -void ucx_mempool_shared_destr(void* ptr) { 258.66 - ucx_regdestr *rd = (ucx_regdestr*)ptr; 258.67 - rd->destructor(rd->ptr); 258.68 -} 258.69 - 258.70 -UcxMempool *ucx_mempool_new(size_t n) { 258.71 - size_t poolsz; 258.72 - if(ucx_szmul(n, sizeof(void*), &poolsz)) { 258.73 - return NULL; 258.74 - } 258.75 - 258.76 - UcxMempool *pool = (UcxMempool*)malloc(sizeof(UcxMempool)); 258.77 - if (!pool) { 258.78 - return NULL; 258.79 - } 258.80 - 258.81 - pool->data = (void**) malloc(poolsz); 258.82 - if (pool->data == NULL) { 258.83 - free(pool); 258.84 - return NULL; 258.85 - } 258.86 - 258.87 - pool->ndata = 0; 258.88 - pool->size = n; 258.89 - 258.90 - UcxAllocator *allocator = (UcxAllocator*)malloc(sizeof(UcxAllocator)); 258.91 - if(!allocator) { 258.92 - free(pool->data); 258.93 - free(pool); 258.94 - return NULL; 258.95 - } 258.96 - allocator->malloc = (ucx_allocator_malloc)ucx_mempool_malloc; 258.97 - allocator->calloc = (ucx_allocator_calloc)ucx_mempool_calloc; 258.98 - allocator->realloc = (ucx_allocator_realloc)ucx_mempool_realloc; 258.99 - allocator->free = (ucx_allocator_free)ucx_mempool_free; 258.100 - allocator->pool = pool; 258.101 - pool->allocator = allocator; 258.102 - 258.103 - return pool; 258.104 -} 258.105 - 258.106 -int ucx_mempool_chcap(UcxMempool *pool, size_t newcap) { 258.107 - if (newcap < pool->ndata) { 258.108 - return 1; 258.109 - } 258.110 - 258.111 - size_t newcapsz; 258.112 - if(ucx_szmul(newcap, sizeof(void*), &newcapsz)) { 258.113 - return 1; 258.114 - } 258.115 - 258.116 - void **data = (void**) realloc(pool->data, newcapsz); 258.117 - if (data) { 258.118 - pool->data = data; 258.119 - pool->size = newcap; 258.120 - return 0; 258.121 - } else { 258.122 - return 1; 258.123 - } 258.124 -} 258.125 - 258.126 -void *ucx_mempool_malloc(UcxMempool *pool, size_t n) { 258.127 - if(((size_t)-1) - sizeof(ucx_destructor) < n) { 258.128 - return NULL; 258.129 - } 258.130 - 258.131 - if (pool->ndata >= pool->size) { 258.132 - size_t newcap = pool->size*2; 258.133 - if (newcap < pool->size || ucx_mempool_chcap(pool, newcap)) { 258.134 - return NULL; 258.135 - } 258.136 - } 258.137 - 258.138 - void *p = malloc(sizeof(ucx_destructor) + n); 258.139 - ucx_memchunk *mem = (ucx_memchunk*)p; 258.140 - if (!mem) { 258.141 - return NULL; 258.142 - } 258.143 - 258.144 - mem->destructor = NULL; 258.145 - pool->data[pool->ndata] = mem; 258.146 - pool->ndata++; 258.147 - 258.148 - return &(mem->c); 258.149 -} 258.150 - 258.151 -void *ucx_mempool_calloc(UcxMempool *pool, size_t nelem, size_t elsize) { 258.152 - size_t msz; 258.153 - if(ucx_szmul(nelem, elsize, &msz)) { 258.154 - return NULL; 258.155 - } 258.156 - 258.157 - void *ptr = ucx_mempool_malloc(pool, msz); 258.158 - if (!ptr) { 258.159 - return NULL; 258.160 - } 258.161 - memset(ptr, 0, nelem * elsize); 258.162 - return ptr; 258.163 -} 258.164 - 258.165 -void *ucx_mempool_realloc(UcxMempool *pool, void *ptr, size_t n) { 258.166 - if(((size_t)-1) - sizeof(ucx_destructor) < n) { 258.167 - return NULL; 258.168 - } 258.169 - 258.170 - char *mem = ((char*)ptr) - sizeof(ucx_destructor); 258.171 - char *newm = (char*) realloc(mem, n + sizeof(ucx_destructor)); 258.172 - if (!newm) { 258.173 - return NULL; 258.174 - } 258.175 - if (mem != newm) { 258.176 - for(size_t i=0 ; i < pool->ndata ; i++) { 258.177 - if(pool->data[i] == mem) { 258.178 - pool->data[i] = newm; 258.179 - return newm + sizeof(ucx_destructor); 258.180 - } 258.181 - } 258.182 - fprintf(stderr, "FATAL: 0x%08" PRIxPTR" not in mpool 0x%08" PRIxPTR"\n", 258.183 - (intptr_t)ptr, (intptr_t)pool); 258.184 - abort(); 258.185 - } else { 258.186 - return newm + sizeof(ucx_destructor); 258.187 - } 258.188 -} 258.189 - 258.190 -void ucx_mempool_free(UcxMempool *pool, void *ptr) { 258.191 - ucx_memchunk *chunk = (ucx_memchunk*)((char*)ptr-sizeof(ucx_destructor)); 258.192 - for(size_t i=0 ; i<pool->ndata ; i++) { 258.193 - if(chunk == pool->data[i]) { 258.194 - if(chunk->destructor != NULL) { 258.195 - chunk->destructor(&(chunk->c)); 258.196 - } 258.197 - free(chunk); 258.198 - size_t last_index = pool->ndata - 1; 258.199 - if(i != last_index) { 258.200 - pool->data[i] = pool->data[last_index]; 258.201 - pool->data[last_index] = NULL; 258.202 - } 258.203 - pool->ndata--; 258.204 - return; 258.205 - } 258.206 - } 258.207 - fprintf(stderr, "FATAL: 0x%08" PRIxPTR" not in mpool 0x%08" PRIxPTR"\n", 258.208 - (intptr_t)ptr, (intptr_t)pool); 258.209 - abort(); 258.210 -} 258.211 - 258.212 -void ucx_mempool_destroy(UcxMempool *pool) { 258.213 - ucx_memchunk *chunk; 258.214 - for(size_t i=0 ; i<pool->ndata ; i++) { 258.215 - chunk = (ucx_memchunk*) pool->data[i]; 258.216 - if(chunk) { 258.217 - if(chunk->destructor) { 258.218 - chunk->destructor(&(chunk->c)); 258.219 - } 258.220 - free(chunk); 258.221 - } 258.222 - } 258.223 - free(pool->data); 258.224 - free(pool->allocator); 258.225 - free(pool); 258.226 -} 258.227 - 258.228 -void ucx_mempool_set_destr(void *ptr, ucx_destructor func) { 258.229 - *(ucx_destructor*)((char*)ptr-sizeof(ucx_destructor)) = func; 258.230 -} 258.231 - 258.232 -void ucx_mempool_reg_destr(UcxMempool *pool, void *ptr, ucx_destructor destr) { 258.233 - ucx_regdestr *rd = (ucx_regdestr*)ucx_mempool_malloc( 258.234 - pool, 258.235 - sizeof(ucx_regdestr)); 258.236 - rd->destructor = destr; 258.237 - rd->ptr = ptr; 258.238 - ucx_mempool_set_destr(rd, ucx_mempool_shared_destr); 258.239 -} 258.240 -
259.1 --- a/src/properties.c Mon Dec 30 09:54:10 2019 +0100 259.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 259.3 @@ -1,264 +0,0 @@ 259.4 -/* 259.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 259.6 - * 259.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 259.8 - * 259.9 - * Redistribution and use in source and binary forms, with or without 259.10 - * modification, are permitted provided that the following conditions are met: 259.11 - * 259.12 - * 1. Redistributions of source code must retain the above copyright 259.13 - * notice, this list of conditions and the following disclaimer. 259.14 - * 259.15 - * 2. Redistributions in binary form must reproduce the above copyright 259.16 - * notice, this list of conditions and the following disclaimer in the 259.17 - * documentation and/or other materials provided with the distribution. 259.18 - * 259.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 259.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 259.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 259.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 259.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 259.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 259.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 259.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 259.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 259.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 259.29 - * POSSIBILITY OF SUCH DAMAGE. 259.30 - */ 259.31 - 259.32 -#include "ucx/properties.h" 259.33 - 259.34 -#include <stdio.h> 259.35 -#include <stdlib.h> 259.36 -#include <string.h> 259.37 - 259.38 -UcxProperties *ucx_properties_new() { 259.39 - UcxProperties *parser = (UcxProperties*)malloc( 259.40 - sizeof(UcxProperties)); 259.41 - if(!parser) { 259.42 - return NULL; 259.43 - } 259.44 - 259.45 - parser->buffer = NULL; 259.46 - parser->buflen = 0; 259.47 - parser->pos = 0; 259.48 - parser->tmp = NULL; 259.49 - parser->tmplen = 0; 259.50 - parser->tmpcap = 0; 259.51 - parser->error = 0; 259.52 - parser->delimiter = '='; 259.53 - parser->comment1 = '#'; 259.54 - parser->comment2 = 0; 259.55 - parser->comment3 = 0; 259.56 - 259.57 - return parser; 259.58 -} 259.59 - 259.60 -void ucx_properties_free(UcxProperties *parser) { 259.61 - if(parser->tmp) { 259.62 - free(parser->tmp); 259.63 - } 259.64 - free(parser); 259.65 -} 259.66 - 259.67 -void ucx_properties_fill(UcxProperties *parser, char *buf, size_t len) { 259.68 - parser->buffer = buf; 259.69 - parser->buflen = len; 259.70 - parser->pos = 0; 259.71 -} 259.72 - 259.73 -static void parser_tmp_append(UcxProperties *parser, char *buf, size_t len) { 259.74 - if(parser->tmpcap - parser->tmplen < len) { 259.75 - size_t newcap = parser->tmpcap + len + 64; 259.76 - parser->tmp = (char*)realloc(parser->tmp, newcap); 259.77 - parser->tmpcap = newcap; 259.78 - } 259.79 - memcpy(parser->tmp + parser->tmplen, buf, len); 259.80 - parser->tmplen += len; 259.81 -} 259.82 - 259.83 -int ucx_properties_next(UcxProperties *parser, sstr_t *name, sstr_t *value) { 259.84 - if(parser->tmplen > 0) { 259.85 - char *buf = parser->buffer + parser->pos; 259.86 - size_t len = parser->buflen - parser->pos; 259.87 - sstr_t str = sstrn(buf, len); 259.88 - sstr_t nl = sstrchr(str, '\n'); 259.89 - if(nl.ptr) { 259.90 - size_t newlen = (size_t)(nl.ptr - buf) + 1; 259.91 - parser_tmp_append(parser, buf, newlen); 259.92 - // the tmp buffer contains exactly one line now 259.93 - 259.94 - char *orig_buf = parser->buffer; 259.95 - size_t orig_len = parser->buflen; 259.96 - 259.97 - parser->buffer = parser->tmp; 259.98 - parser->buflen = parser->tmplen; 259.99 - parser->pos = 0; 259.100 - parser->tmp = NULL; 259.101 - parser->tmpcap = 0; 259.102 - parser->tmplen = 0; 259.103 - // run ucx_properties_next with the tmp buffer as main buffer 259.104 - int ret = ucx_properties_next(parser, name, value); 259.105 - 259.106 - // restore original buffer 259.107 - parser->tmp = parser->buffer; 259.108 - parser->buffer = orig_buf; 259.109 - parser->buflen = orig_len; 259.110 - parser->pos = newlen; 259.111 - 259.112 - /* 259.113 - * if ret == 0 the tmp buffer contained just space or a comment 259.114 - * we parse again with the original buffer to get a name/value 259.115 - * or a new tmp buffer 259.116 - */ 259.117 - return ret ? ret : ucx_properties_next(parser, name, value); 259.118 - } else { 259.119 - parser_tmp_append(parser, buf, len); 259.120 - return 0; 259.121 - } 259.122 - } else if(parser->tmp) { 259.123 - free(parser->tmp); 259.124 - parser->tmp = NULL; 259.125 - } 259.126 - 259.127 - char comment1 = parser->comment1; 259.128 - char comment2 = parser->comment2; 259.129 - char comment3 = parser->comment3; 259.130 - char delimiter = parser->delimiter; 259.131 - 259.132 - // get one line and parse it 259.133 - while(parser->pos < parser->buflen) { 259.134 - char *buf = parser->buffer + parser->pos; 259.135 - size_t len = parser->buflen - parser->pos; 259.136 - 259.137 - /* 259.138 - * First we check if we have at least one line. We also get indices of 259.139 - * delimiter and comment chars 259.140 - */ 259.141 - size_t delimiter_index = 0; 259.142 - size_t comment_index = 0; 259.143 - int has_comment = 0; 259.144 - 259.145 - size_t i = 0; 259.146 - char c = 0; 259.147 - for(;i<len;i++) { 259.148 - c = buf[i]; 259.149 - if(c == comment1 || c == comment2 || c == comment3) { 259.150 - if(comment_index == 0) { 259.151 - comment_index = i; 259.152 - has_comment = 1; 259.153 - } 259.154 - } else if(c == delimiter) { 259.155 - if(delimiter_index == 0 && !has_comment) { 259.156 - delimiter_index = i; 259.157 - } 259.158 - } else if(c == '\n') { 259.159 - break; 259.160 - } 259.161 - } 259.162 - 259.163 - if(c != '\n') { 259.164 - // we don't have enough data for a line 259.165 - // store remaining bytes in temporary buffer for next round 259.166 - parser->tmpcap = len + 128; 259.167 - parser->tmp = (char*)malloc(parser->tmpcap); 259.168 - parser->tmplen = len; 259.169 - memcpy(parser->tmp, buf, len); 259.170 - return 0; 259.171 - } 259.172 - 259.173 - sstr_t line = has_comment ? sstrn(buf, comment_index) : sstrn(buf, i); 259.174 - // check line 259.175 - if(delimiter_index == 0) { 259.176 - line = sstrtrim(line); 259.177 - if(line.length != 0) { 259.178 - parser->error = 1; 259.179 - } 259.180 - } else { 259.181 - sstr_t n = sstrn(buf, delimiter_index); 259.182 - sstr_t v = sstrn( 259.183 - buf + delimiter_index + 1, 259.184 - line.length - delimiter_index - 1); 259.185 - n = sstrtrim(n); 259.186 - v = sstrtrim(v); 259.187 - if(n.length != 0 || v.length != 0) { 259.188 - *name = n; 259.189 - *value = v; 259.190 - parser->pos += i + 1; 259.191 - return 1; 259.192 - } else { 259.193 - parser->error = 1; 259.194 - } 259.195 - } 259.196 - 259.197 - parser->pos += i + 1; 259.198 - } 259.199 - 259.200 - return 0; 259.201 -} 259.202 - 259.203 -int ucx_properties2map(UcxProperties *parser, UcxMap *map) { 259.204 - sstr_t name; 259.205 - sstr_t value; 259.206 - while(ucx_properties_next(parser, &name, &value)) { 259.207 - value = sstrdup_a(map->allocator, value); 259.208 - if(!value.ptr) { 259.209 - return 1; 259.210 - } 259.211 - if(ucx_map_sstr_put(map, name, value.ptr)) { 259.212 - alfree(map->allocator, value.ptr); 259.213 - return 1; 259.214 - } 259.215 - } 259.216 - if (parser->error) { 259.217 - return parser->error; 259.218 - } else { 259.219 - return 0; 259.220 - } 259.221 -} 259.222 - 259.223 -// buffer size is documented - change doc, when you change bufsize! 259.224 -#define UCX_PROPLOAD_BUFSIZE 1024 259.225 -int ucx_properties_load(UcxMap *map, FILE *file) { 259.226 - UcxProperties *parser = ucx_properties_new(); 259.227 - if(!(parser && map && file)) { 259.228 - return 1; 259.229 - } 259.230 - 259.231 - int error = 0; 259.232 - size_t r; 259.233 - char buf[UCX_PROPLOAD_BUFSIZE]; 259.234 - while((r = fread(buf, 1, UCX_PROPLOAD_BUFSIZE, file)) != 0) { 259.235 - ucx_properties_fill(parser, buf, r); 259.236 - error = ucx_properties2map(parser, map); 259.237 - if (error) { 259.238 - break; 259.239 - } 259.240 - } 259.241 - ucx_properties_free(parser); 259.242 - return error; 259.243 -} 259.244 - 259.245 -int ucx_properties_store(UcxMap *map, FILE *file) { 259.246 - UcxMapIterator iter = ucx_map_iterator(map); 259.247 - void *v; 259.248 - sstr_t value; 259.249 - size_t written; 259.250 - 259.251 - UCX_MAP_FOREACH(k, v, iter) { 259.252 - value = sstr((char*)v); 259.253 - 259.254 - written = 0; 259.255 - written += fwrite(k.data, 1, k.len, file); 259.256 - written += fwrite(" = ", 1, 3, file); 259.257 - written += fwrite(value.ptr, 1, value.length, file); 259.258 - written += fwrite("\n", 1, 1, file); 259.259 - 259.260 - if (written != k.len + value.length + 4) { 259.261 - return 1; 259.262 - } 259.263 - } 259.264 - 259.265 - return 0; 259.266 -} 259.267 -
260.1 --- a/src/stack.c Mon Dec 30 09:54:10 2019 +0100 260.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 260.3 @@ -1,165 +0,0 @@ 260.4 -/* 260.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 260.6 - * 260.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 260.8 - * 260.9 - * Redistribution and use in source and binary forms, with or without 260.10 - * modification, are permitted provided that the following conditions are met: 260.11 - * 260.12 - * 1. Redistributions of source code must retain the above copyright 260.13 - * notice, this list of conditions and the following disclaimer. 260.14 - * 260.15 - * 2. Redistributions in binary form must reproduce the above copyright 260.16 - * notice, this list of conditions and the following disclaimer in the 260.17 - * documentation and/or other materials provided with the distribution. 260.18 - * 260.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 260.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 260.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 260.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 260.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 260.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 260.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 260.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 260.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 260.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 260.29 - * POSSIBILITY OF SUCH DAMAGE. 260.30 - */ 260.31 - 260.32 -#include "ucx/stack.h" 260.33 - 260.34 -#include <string.h> 260.35 - 260.36 -static size_t ucx_stack_align(size_t n) { 260.37 - int align = n % sizeof(void*); 260.38 - if (align) { 260.39 - n += sizeof(void*) - align; 260.40 - } 260.41 - return n; 260.42 -} 260.43 - 260.44 -void ucx_stack_init(UcxStack *stack, char* space, size_t size) { 260.45 - stack->size = size - size % sizeof(void*); 260.46 - stack->space = space; 260.47 - stack->top = NULL; 260.48 - 260.49 - stack->allocator.pool = stack; 260.50 - stack->allocator.malloc = (ucx_allocator_malloc) ucx_stack_malloc; 260.51 - stack->allocator.calloc = (ucx_allocator_calloc) ucx_stack_calloc; 260.52 - stack->allocator.realloc = (ucx_allocator_realloc) ucx_stack_realloc; 260.53 - stack->allocator.free = (ucx_allocator_free) ucx_stack_free; 260.54 -} 260.55 - 260.56 -void *ucx_stack_malloc(UcxStack *stack, size_t n) { 260.57 - 260.58 - if (ucx_stack_avail(stack) < ucx_stack_align(n)) { 260.59 - return NULL; 260.60 - } else { 260.61 - char *prev = stack->top; 260.62 - if (stack->top) { 260.63 - stack->top += ucx_stack_align(ucx_stack_topsize(stack)); 260.64 - } else { 260.65 - stack->top = stack->space; 260.66 - } 260.67 - 260.68 - ((struct ucx_stack_metadata*)stack->top)->prev = prev; 260.69 - ((struct ucx_stack_metadata*)stack->top)->size = n; 260.70 - stack->top += sizeof(struct ucx_stack_metadata); 260.71 - 260.72 - return stack->top; 260.73 - } 260.74 -} 260.75 - 260.76 -void *ucx_stack_calloc(UcxStack *stack, size_t nelem, size_t elsize) { 260.77 - void *mem = ucx_stack_malloc(stack, nelem*elsize); 260.78 - memset(mem, 0, nelem*elsize); 260.79 - return mem; 260.80 -} 260.81 - 260.82 -void *ucx_stack_realloc(UcxStack *stack, void *ptr, size_t n) { 260.83 - if (ptr == stack->top) { 260.84 - if (stack->size - (stack->top - stack->space) < ucx_stack_align(n)) { 260.85 - return NULL; 260.86 - } else { 260.87 - ((struct ucx_stack_metadata*)stack->top - 1)->size = n; 260.88 - return ptr; 260.89 - } 260.90 - } else { 260.91 - if (ucx_stack_align(((struct ucx_stack_metadata*)ptr - 1)->size) < 260.92 - ucx_stack_align(n)) { 260.93 - void *nptr = ucx_stack_malloc(stack, n); 260.94 - if (nptr) { 260.95 - memcpy(nptr, ptr, n); 260.96 - ucx_stack_free(stack, ptr); 260.97 - 260.98 - return nptr; 260.99 - } else { 260.100 - return NULL; 260.101 - } 260.102 - } else { 260.103 - ((struct ucx_stack_metadata*)ptr - 1)->size = n; 260.104 - return ptr; 260.105 - } 260.106 - } 260.107 -} 260.108 - 260.109 -void ucx_stack_free(UcxStack *stack, void *ptr) { 260.110 - if (ptr == stack->top) { 260.111 - stack->top = ((struct ucx_stack_metadata*) stack->top - 1)->prev; 260.112 - } else { 260.113 - struct ucx_stack_metadata *next = (struct ucx_stack_metadata*)( 260.114 - (char*)ptr + 260.115 - ucx_stack_align(((struct ucx_stack_metadata*) ptr - 1)->size) 260.116 - ); 260.117 - next->prev = ((struct ucx_stack_metadata*) ptr - 1)->prev; 260.118 - } 260.119 -} 260.120 - 260.121 -void ucx_stack_popn(UcxStack *stack, void *dest, size_t n) { 260.122 - if (ucx_stack_empty(stack)) { 260.123 - return; 260.124 - } 260.125 - 260.126 - if (dest) { 260.127 - size_t len = ucx_stack_topsize(stack); 260.128 - if (len > n) { 260.129 - len = n; 260.130 - } 260.131 - 260.132 - memcpy(dest, stack->top, len); 260.133 - } 260.134 - 260.135 - ucx_stack_free(stack, stack->top); 260.136 -} 260.137 - 260.138 -size_t ucx_stack_avail(UcxStack *stack) { 260.139 - size_t avail = ((stack->top ? (stack->size 260.140 - - (stack->top - stack->space) 260.141 - - ucx_stack_align(ucx_stack_topsize(stack))) 260.142 - : stack->size)); 260.143 - 260.144 - if (avail > sizeof(struct ucx_stack_metadata)) { 260.145 - return avail - sizeof(struct ucx_stack_metadata); 260.146 - } else { 260.147 - return 0; 260.148 - } 260.149 -} 260.150 - 260.151 -void *ucx_stack_push(UcxStack *stack, size_t n, const void *data) { 260.152 - void *space = ucx_stack_malloc(stack, n); 260.153 - if (space) { 260.154 - memcpy(space, data, n); 260.155 - } 260.156 - return space; 260.157 -} 260.158 - 260.159 -void *ucx_stack_pusharr(UcxStack *stack, 260.160 - size_t nelem, size_t elsize, const void *data) { 260.161 - 260.162 - // skip the memset by using malloc 260.163 - void *space = ucx_stack_malloc(stack, nelem*elsize); 260.164 - if (space) { 260.165 - memcpy(space, data, nelem*elsize); 260.166 - } 260.167 - return space; 260.168 -}
261.1 --- a/src/string.c Mon Dec 30 09:54:10 2019 +0100 261.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 261.3 @@ -1,807 +0,0 @@ 261.4 -/* 261.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 261.6 - * 261.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 261.8 - * 261.9 - * Redistribution and use in source and binary forms, with or without 261.10 - * modification, are permitted provided that the following conditions are met: 261.11 - * 261.12 - * 1. Redistributions of source code must retain the above copyright 261.13 - * notice, this list of conditions and the following disclaimer. 261.14 - * 261.15 - * 2. Redistributions in binary form must reproduce the above copyright 261.16 - * notice, this list of conditions and the following disclaimer in the 261.17 - * documentation and/or other materials provided with the distribution. 261.18 - * 261.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 261.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 261.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 261.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 261.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 261.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 261.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 261.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 261.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 261.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 261.29 - * POSSIBILITY OF SUCH DAMAGE. 261.30 - */ 261.31 - 261.32 -#include "ucx/string.h" 261.33 - 261.34 -#include "ucx/allocator.h" 261.35 - 261.36 -#include <stdlib.h> 261.37 -#include <string.h> 261.38 -#include <stdarg.h> 261.39 -#include <stdint.h> 261.40 -#include <ctype.h> 261.41 - 261.42 -#ifndef _WIN32 261.43 -#include <strings.h> /* for strncasecmp() */ 261.44 -#endif /* _WIN32 */ 261.45 - 261.46 -sstr_t sstr(char *cstring) { 261.47 - sstr_t string; 261.48 - string.ptr = cstring; 261.49 - string.length = strlen(cstring); 261.50 - return string; 261.51 -} 261.52 - 261.53 -sstr_t sstrn(char *cstring, size_t length) { 261.54 - sstr_t string; 261.55 - string.ptr = cstring; 261.56 - string.length = length; 261.57 - return string; 261.58 -} 261.59 - 261.60 -scstr_t scstr(const char *cstring) { 261.61 - scstr_t string; 261.62 - string.ptr = cstring; 261.63 - string.length = strlen(cstring); 261.64 - return string; 261.65 -} 261.66 - 261.67 -scstr_t scstrn(const char *cstring, size_t length) { 261.68 - scstr_t string; 261.69 - string.ptr = cstring; 261.70 - string.length = length; 261.71 - return string; 261.72 -} 261.73 - 261.74 - 261.75 -size_t scstrnlen(size_t n, ...) { 261.76 - if (n == 0) return 0; 261.77 - 261.78 - va_list ap; 261.79 - va_start(ap, n); 261.80 - 261.81 - size_t size = 0; 261.82 - 261.83 - for (size_t i = 0 ; i < n ; i++) { 261.84 - scstr_t str = va_arg(ap, scstr_t); 261.85 - if(SIZE_MAX - str.length < size) { 261.86 - size = SIZE_MAX; 261.87 - break; 261.88 - } 261.89 - size += str.length; 261.90 - } 261.91 - va_end(ap); 261.92 - 261.93 - return size; 261.94 -} 261.95 - 261.96 -static sstr_t sstrvcat_a( 261.97 - UcxAllocator *a, 261.98 - size_t count, 261.99 - scstr_t s1, 261.100 - va_list ap) { 261.101 - sstr_t str; 261.102 - str.ptr = NULL; 261.103 - str.length = 0; 261.104 - if(count < 2) { 261.105 - return str; 261.106 - } 261.107 - 261.108 - scstr_t s2 = va_arg (ap, scstr_t); 261.109 - 261.110 - if(((size_t)-1) - s1.length < s2.length) { 261.111 - return str; 261.112 - } 261.113 - 261.114 - scstr_t *strings = (scstr_t*) calloc(count, sizeof(scstr_t)); 261.115 - if(!strings) { 261.116 - return str; 261.117 - } 261.118 - 261.119 - // get all args and overall length 261.120 - strings[0] = s1; 261.121 - strings[1] = s2; 261.122 - size_t slen = s1.length + s2.length; 261.123 - int error = 0; 261.124 - for (size_t i=2;i<count;i++) { 261.125 - scstr_t s = va_arg (ap, scstr_t); 261.126 - strings[i] = s; 261.127 - if(((size_t)-1) - s.length < slen) { 261.128 - error = 1; 261.129 - break; 261.130 - } 261.131 - slen += s.length; 261.132 - } 261.133 - if(error) { 261.134 - free(strings); 261.135 - return str; 261.136 - } 261.137 - 261.138 - // create new string 261.139 - str.ptr = (char*) almalloc(a, slen + 1); 261.140 - str.length = slen; 261.141 - if(!str.ptr) { 261.142 - free(strings); 261.143 - str.length = 0; 261.144 - return str; 261.145 - } 261.146 - 261.147 - // concatenate strings 261.148 - size_t pos = 0; 261.149 - for (size_t i=0;i<count;i++) { 261.150 - scstr_t s = strings[i]; 261.151 - memcpy(str.ptr + pos, s.ptr, s.length); 261.152 - pos += s.length; 261.153 - } 261.154 - 261.155 - str.ptr[str.length] = '\0'; 261.156 - 261.157 - free(strings); 261.158 - 261.159 - return str; 261.160 -} 261.161 - 261.162 -sstr_t scstrcat(size_t count, scstr_t s1, ...) { 261.163 - va_list ap; 261.164 - va_start(ap, s1); 261.165 - sstr_t s = sstrvcat_a(ucx_default_allocator(), count, s1, ap); 261.166 - va_end(ap); 261.167 - return s; 261.168 -} 261.169 - 261.170 -sstr_t scstrcat_a(UcxAllocator *a, size_t count, scstr_t s1, ...) { 261.171 - va_list ap; 261.172 - va_start(ap, s1); 261.173 - sstr_t s = sstrvcat_a(a, count, s1, ap); 261.174 - va_end(ap); 261.175 - return s; 261.176 -} 261.177 - 261.178 -static int ucx_substring( 261.179 - size_t str_length, 261.180 - size_t start, 261.181 - size_t length, 261.182 - size_t *newlen, 261.183 - size_t *newpos) 261.184 -{ 261.185 - *newlen = 0; 261.186 - *newpos = 0; 261.187 - 261.188 - if(start > str_length) { 261.189 - return 0; 261.190 - } 261.191 - 261.192 - if(length > str_length - start) { 261.193 - length = str_length - start; 261.194 - } 261.195 - *newlen = length; 261.196 - *newpos = start; 261.197 - return 1; 261.198 -} 261.199 - 261.200 -sstr_t sstrsubs(sstr_t s, size_t start) { 261.201 - return sstrsubsl (s, start, s.length-start); 261.202 -} 261.203 - 261.204 -sstr_t sstrsubsl(sstr_t s, size_t start, size_t length) { 261.205 - size_t pos; 261.206 - sstr_t ret = { NULL, 0 }; 261.207 - if(ucx_substring(s.length, start, length, &ret.length, &pos)) { 261.208 - ret.ptr = s.ptr + pos; 261.209 - } 261.210 - return ret; 261.211 -} 261.212 - 261.213 -scstr_t scstrsubs(scstr_t string, size_t start) { 261.214 - return scstrsubsl(string, start, string.length-start); 261.215 -} 261.216 - 261.217 -scstr_t scstrsubsl(scstr_t s, size_t start, size_t length) { 261.218 - size_t pos; 261.219 - scstr_t ret = { NULL, 0 }; 261.220 - if(ucx_substring(s.length, start, length, &ret.length, &pos)) { 261.221 - ret.ptr = s.ptr + pos; 261.222 - } 261.223 - return ret; 261.224 -} 261.225 - 261.226 - 261.227 -static int ucx_strchr(const char *str, size_t length, int chr, size_t *pos) { 261.228 - for(size_t i=0;i<length;i++) { 261.229 - if(str[i] == chr) { 261.230 - *pos = i; 261.231 - return 1; 261.232 - } 261.233 - } 261.234 - return 0; 261.235 -} 261.236 - 261.237 -static int ucx_strrchr(const char *str, size_t length, int chr, size_t *pos) { 261.238 - if(length > 0) { 261.239 - for(size_t i=length ; i>0 ; i--) { 261.240 - if(str[i-1] == chr) { 261.241 - *pos = i-1; 261.242 - return 1; 261.243 - } 261.244 - } 261.245 - } 261.246 - return 0; 261.247 -} 261.248 - 261.249 -sstr_t sstrchr(sstr_t s, int c) { 261.250 - size_t pos = 0; 261.251 - if(ucx_strchr(s.ptr, s.length, c, &pos)) { 261.252 - return sstrsubs(s, pos); 261.253 - } 261.254 - return sstrn(NULL, 0); 261.255 -} 261.256 - 261.257 -sstr_t sstrrchr(sstr_t s, int c) { 261.258 - size_t pos = 0; 261.259 - if(ucx_strrchr(s.ptr, s.length, c, &pos)) { 261.260 - return sstrsubs(s, pos); 261.261 - } 261.262 - return sstrn(NULL, 0); 261.263 -} 261.264 - 261.265 -scstr_t scstrchr(scstr_t s, int c) { 261.266 - size_t pos = 0; 261.267 - if(ucx_strchr(s.ptr, s.length, c, &pos)) { 261.268 - return scstrsubs(s, pos); 261.269 - } 261.270 - return scstrn(NULL, 0); 261.271 -} 261.272 - 261.273 -scstr_t scstrrchr(scstr_t s, int c) { 261.274 - size_t pos = 0; 261.275 - if(ucx_strrchr(s.ptr, s.length, c, &pos)) { 261.276 - return scstrsubs(s, pos); 261.277 - } 261.278 - return scstrn(NULL, 0); 261.279 -} 261.280 - 261.281 -#define ptable_r(dest, useheap, ptable, index) (dest = useheap ? \ 261.282 - ((size_t*)ptable)[index] : (size_t) ((uint8_t*)ptable)[index]) 261.283 - 261.284 -#define ptable_w(useheap, ptable, index, src) do {\ 261.285 - if (!useheap) ((uint8_t*)ptable)[index] = (uint8_t) src;\ 261.286 - else ((size_t*)ptable)[index] = src;\ 261.287 - } while (0); 261.288 - 261.289 - 261.290 -static const char* ucx_strstr( 261.291 - const char *str, 261.292 - size_t length, 261.293 - const char *match, 261.294 - size_t matchlen, 261.295 - size_t *newlen) 261.296 -{ 261.297 - *newlen = length; 261.298 - if (matchlen == 0) { 261.299 - return str; 261.300 - } 261.301 - 261.302 - const char *result = NULL; 261.303 - size_t resultlen = 0; 261.304 - 261.305 - /* 261.306 - * IMPORTANT: 261.307 - * our prefix table contains the prefix length PLUS ONE 261.308 - * this is our decision, because we want to use the full range of size_t 261.309 - * the original algorithm needs a (-1) at one single place 261.310 - * and we want to avoid that 261.311 - */ 261.312 - 261.313 - /* static prefix table */ 261.314 - static uint8_t s_prefix_table[256]; 261.315 - 261.316 - /* check pattern length and use appropriate prefix table */ 261.317 - /* if the pattern exceeds static prefix table, allocate on the heap */ 261.318 - register int useheap = matchlen > 255; 261.319 - register void* ptable = useheap ? 261.320 - calloc(matchlen+1, sizeof(size_t)): s_prefix_table; 261.321 - 261.322 - /* keep counter in registers */ 261.323 - register size_t i, j; 261.324 - 261.325 - /* fill prefix table */ 261.326 - i = 0; j = 0; 261.327 - ptable_w(useheap, ptable, i, j); 261.328 - while (i < matchlen) { 261.329 - while (j >= 1 && match[j-1] != match[i]) { 261.330 - ptable_r(j, useheap, ptable, j-1); 261.331 - } 261.332 - i++; j++; 261.333 - ptable_w(useheap, ptable, i, j); 261.334 - } 261.335 - 261.336 - /* search */ 261.337 - i = 0; j = 1; 261.338 - while (i < length) { 261.339 - while (j >= 1 && str[i] != match[j-1]) { 261.340 - ptable_r(j, useheap, ptable, j-1); 261.341 - } 261.342 - i++; j++; 261.343 - if (j-1 == matchlen) { 261.344 - size_t start = i - matchlen; 261.345 - result = str + start; 261.346 - resultlen = length - start; 261.347 - break; 261.348 - } 261.349 - } 261.350 - 261.351 - /* if prefix table was allocated on the heap, free it */ 261.352 - if (ptable != s_prefix_table) { 261.353 - free(ptable); 261.354 - } 261.355 - 261.356 - *newlen = resultlen; 261.357 - return result; 261.358 -} 261.359 - 261.360 -sstr_t scstrsstr(sstr_t string, scstr_t match) { 261.361 - sstr_t result; 261.362 - 261.363 - size_t reslen; 261.364 - const char *resstr = ucx_strstr(string.ptr, string.length, match.ptr, match.length, &reslen); 261.365 - if(!resstr) { 261.366 - result.ptr = NULL; 261.367 - result.length = 0; 261.368 - return result; 261.369 - } 261.370 - 261.371 - size_t pos = resstr - string.ptr; 261.372 - result.ptr = string.ptr + pos; 261.373 - result.length = reslen; 261.374 - 261.375 - return result; 261.376 -} 261.377 - 261.378 -scstr_t scstrscstr(scstr_t string, scstr_t match) { 261.379 - scstr_t result; 261.380 - 261.381 - size_t reslen; 261.382 - const char *resstr = ucx_strstr(string.ptr, string.length, match.ptr, match.length, &reslen); 261.383 - if(!resstr) { 261.384 - result.ptr = NULL; 261.385 - result.length = 0; 261.386 - return result; 261.387 - } 261.388 - 261.389 - size_t pos = resstr - string.ptr; 261.390 - result.ptr = string.ptr + pos; 261.391 - result.length = reslen; 261.392 - 261.393 - return result; 261.394 -} 261.395 - 261.396 -#undef ptable_r 261.397 -#undef ptable_w 261.398 - 261.399 -sstr_t* scstrsplit(scstr_t s, scstr_t d, ssize_t *n) { 261.400 - return scstrsplit_a(ucx_default_allocator(), s, d, n); 261.401 -} 261.402 - 261.403 -sstr_t* scstrsplit_a(UcxAllocator *allocator, scstr_t s, scstr_t d, ssize_t *n) { 261.404 - if (s.length == 0 || d.length == 0) { 261.405 - *n = -1; 261.406 - return NULL; 261.407 - } 261.408 - 261.409 - /* special cases: delimiter is at least as large as the string */ 261.410 - if (d.length >= s.length) { 261.411 - /* exact match */ 261.412 - if (sstrcmp(s, d) == 0) { 261.413 - *n = 0; 261.414 - return NULL; 261.415 - } else /* no match possible */ { 261.416 - *n = 1; 261.417 - sstr_t *result = (sstr_t*) almalloc(allocator, sizeof(sstr_t)); 261.418 - if(result) { 261.419 - *result = sstrdup_a(allocator, s); 261.420 - } else { 261.421 - *n = -2; 261.422 - } 261.423 - return result; 261.424 - } 261.425 - } 261.426 - 261.427 - ssize_t nmax = *n; 261.428 - size_t arrlen = 16; 261.429 - sstr_t* result = (sstr_t*) alcalloc(allocator, arrlen, sizeof(sstr_t)); 261.430 - 261.431 - if (result) { 261.432 - scstr_t curpos = s; 261.433 - ssize_t j = 1; 261.434 - while (1) { 261.435 - scstr_t match; 261.436 - /* optimize for one byte delimiters */ 261.437 - if (d.length == 1) { 261.438 - match = curpos; 261.439 - for (size_t i = 0 ; i < curpos.length ; i++) { 261.440 - if (curpos.ptr[i] == *(d.ptr)) { 261.441 - match.ptr = curpos.ptr + i; 261.442 - break; 261.443 - } 261.444 - match.length--; 261.445 - } 261.446 - } else { 261.447 - match = scstrscstr(curpos, d); 261.448 - } 261.449 - if (match.length > 0) { 261.450 - /* is this our last try? */ 261.451 - if (nmax == 0 || j < nmax) { 261.452 - /* copy the current string to the array */ 261.453 - scstr_t item = scstrn(curpos.ptr, match.ptr - curpos.ptr); 261.454 - result[j-1] = sstrdup_a(allocator, item); 261.455 - size_t processed = item.length + d.length; 261.456 - curpos.ptr += processed; 261.457 - curpos.length -= processed; 261.458 - 261.459 - /* allocate memory for the next string */ 261.460 - j++; 261.461 - if (j > arrlen) { 261.462 - arrlen *= 2; 261.463 - size_t reallocsz; 261.464 - sstr_t* reallocated = NULL; 261.465 - if(!ucx_szmul(arrlen, sizeof(sstr_t), &reallocsz)) { 261.466 - reallocated = (sstr_t*) alrealloc( 261.467 - allocator, result, reallocsz); 261.468 - } 261.469 - if (reallocated) { 261.470 - result = reallocated; 261.471 - } else { 261.472 - for (ssize_t i = 0 ; i < j-1 ; i++) { 261.473 - alfree(allocator, result[i].ptr); 261.474 - } 261.475 - alfree(allocator, result); 261.476 - *n = -2; 261.477 - return NULL; 261.478 - } 261.479 - } 261.480 - } else { 261.481 - /* nmax reached, copy the _full_ remaining string */ 261.482 - result[j-1] = sstrdup_a(allocator, curpos); 261.483 - break; 261.484 - } 261.485 - } else { 261.486 - /* no more matches, copy last string */ 261.487 - result[j-1] = sstrdup_a(allocator, curpos); 261.488 - break; 261.489 - } 261.490 - } 261.491 - *n = j; 261.492 - } else { 261.493 - *n = -2; 261.494 - } 261.495 - 261.496 - return result; 261.497 -} 261.498 - 261.499 -int scstrcmp(scstr_t s1, scstr_t s2) { 261.500 - if (s1.length == s2.length) { 261.501 - return memcmp(s1.ptr, s2.ptr, s1.length); 261.502 - } else if (s1.length > s2.length) { 261.503 - return 1; 261.504 - } else { 261.505 - return -1; 261.506 - } 261.507 -} 261.508 - 261.509 -int scstrcasecmp(scstr_t s1, scstr_t s2) { 261.510 - if (s1.length == s2.length) { 261.511 -#ifdef _WIN32 261.512 - return _strnicmp(s1.ptr, s2.ptr, s1.length); 261.513 -#else 261.514 - return strncasecmp(s1.ptr, s2.ptr, s1.length); 261.515 -#endif 261.516 - } else if (s1.length > s2.length) { 261.517 - return 1; 261.518 - } else { 261.519 - return -1; 261.520 - } 261.521 -} 261.522 - 261.523 -sstr_t scstrdup(scstr_t s) { 261.524 - return sstrdup_a(ucx_default_allocator(), s); 261.525 -} 261.526 - 261.527 -sstr_t scstrdup_a(UcxAllocator *allocator, scstr_t s) { 261.528 - sstr_t newstring; 261.529 - newstring.ptr = (char*)almalloc(allocator, s.length + 1); 261.530 - if (newstring.ptr) { 261.531 - newstring.length = s.length; 261.532 - newstring.ptr[newstring.length] = 0; 261.533 - 261.534 - memcpy(newstring.ptr, s.ptr, s.length); 261.535 - } else { 261.536 - newstring.length = 0; 261.537 - } 261.538 - 261.539 - return newstring; 261.540 -} 261.541 - 261.542 - 261.543 -static size_t ucx_strtrim(const char *s, size_t len, size_t *newlen) { 261.544 - const char *newptr = s; 261.545 - size_t length = len; 261.546 - 261.547 - while(length > 0 && isspace(*newptr)) { 261.548 - newptr++; 261.549 - length--; 261.550 - } 261.551 - while(length > 0 && isspace(newptr[length-1])) { 261.552 - length--; 261.553 - } 261.554 - 261.555 - *newlen = length; 261.556 - return newptr - s; 261.557 -} 261.558 - 261.559 -sstr_t sstrtrim(sstr_t string) { 261.560 - sstr_t newstr; 261.561 - newstr.ptr = string.ptr 261.562 - + ucx_strtrim(string.ptr, string.length, &newstr.length); 261.563 - return newstr; 261.564 -} 261.565 - 261.566 -scstr_t scstrtrim(scstr_t string) { 261.567 - scstr_t newstr; 261.568 - newstr.ptr = string.ptr 261.569 - + ucx_strtrim(string.ptr, string.length, &newstr.length); 261.570 - return newstr; 261.571 -} 261.572 - 261.573 -int scstrprefix(scstr_t string, scstr_t prefix) { 261.574 - if (string.length == 0) { 261.575 - return prefix.length == 0; 261.576 - } 261.577 - if (prefix.length == 0) { 261.578 - return 1; 261.579 - } 261.580 - 261.581 - if (prefix.length > string.length) { 261.582 - return 0; 261.583 - } else { 261.584 - return memcmp(string.ptr, prefix.ptr, prefix.length) == 0; 261.585 - } 261.586 -} 261.587 - 261.588 -int scstrsuffix(scstr_t string, scstr_t suffix) { 261.589 - if (string.length == 0) { 261.590 - return suffix.length == 0; 261.591 - } 261.592 - if (suffix.length == 0) { 261.593 - return 1; 261.594 - } 261.595 - 261.596 - if (suffix.length > string.length) { 261.597 - return 0; 261.598 - } else { 261.599 - return memcmp(string.ptr+string.length-suffix.length, 261.600 - suffix.ptr, suffix.length) == 0; 261.601 - } 261.602 -} 261.603 - 261.604 -int scstrcaseprefix(scstr_t string, scstr_t prefix) { 261.605 - if (string.length == 0) { 261.606 - return prefix.length == 0; 261.607 - } 261.608 - if (prefix.length == 0) { 261.609 - return 1; 261.610 - } 261.611 - 261.612 - if (prefix.length > string.length) { 261.613 - return 0; 261.614 - } else { 261.615 - scstr_t subs = scstrsubsl(string, 0, prefix.length); 261.616 - return scstrcasecmp(subs, prefix) == 0; 261.617 - } 261.618 -} 261.619 - 261.620 -int scstrcasesuffix(scstr_t string, scstr_t suffix) { 261.621 - if (string.length == 0) { 261.622 - return suffix.length == 0; 261.623 - } 261.624 - if (suffix.length == 0) { 261.625 - return 1; 261.626 - } 261.627 - 261.628 - if (suffix.length > string.length) { 261.629 - return 0; 261.630 - } else { 261.631 - scstr_t subs = scstrsubs(string, string.length-suffix.length); 261.632 - return scstrcasecmp(subs, suffix) == 0; 261.633 - } 261.634 -} 261.635 - 261.636 -sstr_t scstrlower(scstr_t string) { 261.637 - sstr_t ret = sstrdup(string); 261.638 - for (size_t i = 0; i < ret.length ; i++) { 261.639 - ret.ptr[i] = tolower(ret.ptr[i]); 261.640 - } 261.641 - return ret; 261.642 -} 261.643 - 261.644 -sstr_t scstrlower_a(UcxAllocator *allocator, scstr_t string) { 261.645 - sstr_t ret = sstrdup_a(allocator, string); 261.646 - for (size_t i = 0; i < ret.length ; i++) { 261.647 - ret.ptr[i] = tolower(ret.ptr[i]); 261.648 - } 261.649 - return ret; 261.650 -} 261.651 - 261.652 -sstr_t scstrupper(scstr_t string) { 261.653 - sstr_t ret = sstrdup(string); 261.654 - for (size_t i = 0; i < ret.length ; i++) { 261.655 - ret.ptr[i] = toupper(ret.ptr[i]); 261.656 - } 261.657 - return ret; 261.658 -} 261.659 - 261.660 -sstr_t scstrupper_a(UcxAllocator *allocator, scstr_t string) { 261.661 - sstr_t ret = sstrdup_a(allocator, string); 261.662 - for (size_t i = 0; i < ret.length ; i++) { 261.663 - ret.ptr[i] = toupper(ret.ptr[i]); 261.664 - } 261.665 - return ret; 261.666 -} 261.667 - 261.668 -#define REPLACE_INDEX_BUFFER_MAX 100 261.669 - 261.670 -struct scstrreplace_ibuf { 261.671 - size_t* buf; 261.672 - unsigned int len; /* small indices */ 261.673 - struct scstrreplace_ibuf* next; 261.674 -}; 261.675 - 261.676 -static void scstrrepl_free_ibuf(struct scstrreplace_ibuf *buf) { 261.677 - while (buf) { 261.678 - struct scstrreplace_ibuf *next = buf->next; 261.679 - free(buf->buf); 261.680 - free(buf); 261.681 - buf = next; 261.682 - } 261.683 -} 261.684 - 261.685 -sstr_t scstrreplacen_a(UcxAllocator *allocator, scstr_t str, 261.686 - scstr_t pattern, scstr_t replacement, size_t replmax) { 261.687 - 261.688 - if (pattern.length == 0 || pattern.length > str.length || replmax == 0) 261.689 - return sstrdup(str); 261.690 - 261.691 - /* Compute expected buffer length */ 261.692 - size_t ibufmax = str.length / pattern.length; 261.693 - size_t ibuflen = replmax < ibufmax ? replmax : ibufmax; 261.694 - if (ibuflen > REPLACE_INDEX_BUFFER_MAX) { 261.695 - ibuflen = REPLACE_INDEX_BUFFER_MAX; 261.696 - } 261.697 - 261.698 - /* Allocate first index buffer */ 261.699 - struct scstrreplace_ibuf *firstbuf, *curbuf; 261.700 - firstbuf = curbuf = calloc(1, sizeof(struct scstrreplace_ibuf)); 261.701 - if (!firstbuf) return sstrn(NULL, 0); 261.702 - firstbuf->buf = calloc(ibuflen, sizeof(size_t)); 261.703 - if (!firstbuf->buf) { 261.704 - free(firstbuf); 261.705 - return sstrn(NULL, 0); 261.706 - } 261.707 - 261.708 - /* Search occurrences */ 261.709 - scstr_t searchstr = str; 261.710 - size_t found = 0; 261.711 - do { 261.712 - scstr_t match = scstrscstr(searchstr, pattern); 261.713 - if (match.length > 0) { 261.714 - /* Allocate next buffer in chain, if required */ 261.715 - if (curbuf->len == ibuflen) { 261.716 - struct scstrreplace_ibuf *nextbuf = 261.717 - calloc(1, sizeof(struct scstrreplace_ibuf)); 261.718 - if (!nextbuf) { 261.719 - scstrrepl_free_ibuf(firstbuf); 261.720 - return sstrn(NULL, 0); 261.721 - } 261.722 - nextbuf->buf = calloc(ibuflen, sizeof(size_t)); 261.723 - if (!nextbuf->buf) { 261.724 - free(nextbuf); 261.725 - scstrrepl_free_ibuf(firstbuf); 261.726 - return sstrn(NULL, 0); 261.727 - } 261.728 - curbuf->next = nextbuf; 261.729 - curbuf = nextbuf; 261.730 - } 261.731 - 261.732 - /* Record match index */ 261.733 - found++; 261.734 - size_t idx = match.ptr - str.ptr; 261.735 - curbuf->buf[curbuf->len++] = idx; 261.736 - searchstr.ptr = match.ptr + pattern.length; 261.737 - searchstr.length = str.length - idx - pattern.length; 261.738 - } else { 261.739 - break; 261.740 - } 261.741 - } while (searchstr.length > 0 && found < replmax); 261.742 - 261.743 - /* Allocate result string */ 261.744 - sstr_t result; 261.745 - { 261.746 - ssize_t adjlen = (ssize_t) replacement.length - (ssize_t) pattern.length; 261.747 - size_t rcount = 0; 261.748 - curbuf = firstbuf; 261.749 - do { 261.750 - rcount += curbuf->len; 261.751 - curbuf = curbuf->next; 261.752 - } while (curbuf); 261.753 - result.length = str.length + rcount * adjlen; 261.754 - result.ptr = almalloc(allocator, result.length); 261.755 - if (!result.ptr) { 261.756 - scstrrepl_free_ibuf(firstbuf); 261.757 - return sstrn(NULL, 0); 261.758 - } 261.759 - } 261.760 - 261.761 - /* Build result string */ 261.762 - curbuf = firstbuf; 261.763 - size_t srcidx = 0; 261.764 - char* destptr = result.ptr; 261.765 - do { 261.766 - for (size_t i = 0; i < curbuf->len; i++) { 261.767 - /* Copy source part up to next match*/ 261.768 - size_t idx = curbuf->buf[i]; 261.769 - size_t srclen = idx - srcidx; 261.770 - if (srclen > 0) { 261.771 - memcpy(destptr, str.ptr+srcidx, srclen); 261.772 - destptr += srclen; 261.773 - srcidx += srclen; 261.774 - } 261.775 - 261.776 - /* Copy the replacement and skip the source pattern */ 261.777 - srcidx += pattern.length; 261.778 - memcpy(destptr, replacement.ptr, replacement.length); 261.779 - destptr += replacement.length; 261.780 - } 261.781 - curbuf = curbuf->next; 261.782 - } while (curbuf); 261.783 - memcpy(destptr, str.ptr+srcidx, str.length-srcidx); 261.784 - 261.785 - /* Free index buffer */ 261.786 - scstrrepl_free_ibuf(firstbuf); 261.787 - 261.788 - return result; 261.789 -} 261.790 - 261.791 -sstr_t scstrreplacen(scstr_t str, scstr_t pattern, 261.792 - scstr_t replacement, size_t replmax) { 261.793 - return scstrreplacen_a(ucx_default_allocator(), 261.794 - str, pattern, replacement, replmax); 261.795 -} 261.796 - 261.797 - 261.798 -// type adjustment functions 261.799 -scstr_t ucx_sc2sc(scstr_t str) { 261.800 - return str; 261.801 -} 261.802 -scstr_t ucx_ss2sc(sstr_t str) { 261.803 - scstr_t cs; 261.804 - cs.ptr = str.ptr; 261.805 - cs.length = str.length; 261.806 - return cs; 261.807 -} 261.808 -scstr_t ucx_ss2c_s(scstr_t c) { 261.809 - return c; 261.810 -}
262.1 --- a/src/test.c Mon Dec 30 09:54:10 2019 +0100 262.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 262.3 @@ -1,91 +0,0 @@ 262.4 -/* 262.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 262.6 - * 262.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 262.8 - * 262.9 - * Redistribution and use in source and binary forms, with or without 262.10 - * modification, are permitted provided that the following conditions are met: 262.11 - * 262.12 - * 1. Redistributions of source code must retain the above copyright 262.13 - * notice, this list of conditions and the following disclaimer. 262.14 - * 262.15 - * 2. Redistributions in binary form must reproduce the above copyright 262.16 - * notice, this list of conditions and the following disclaimer in the 262.17 - * documentation and/or other materials provided with the distribution. 262.18 - * 262.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 262.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 262.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 262.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 262.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 262.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 262.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 262.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 262.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 262.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 262.29 - * POSSIBILITY OF SUCH DAMAGE. 262.30 - */ 262.31 - 262.32 -#include "ucx/test.h" 262.33 - 262.34 -UcxTestSuite* ucx_test_suite_new() { 262.35 - UcxTestSuite* suite = (UcxTestSuite*) malloc(sizeof(UcxTestSuite)); 262.36 - if (suite != NULL) { 262.37 - suite->success = 0; 262.38 - suite->failure = 0; 262.39 - suite->tests = NULL; 262.40 - } 262.41 - 262.42 - return suite; 262.43 -} 262.44 - 262.45 -void ucx_test_suite_free(UcxTestSuite* suite) { 262.46 - UcxTestList *l = suite->tests; 262.47 - while (l != NULL) { 262.48 - UcxTestList *e = l; 262.49 - l = l->next; 262.50 - free(e); 262.51 - } 262.52 - free(suite); 262.53 -} 262.54 - 262.55 -int ucx_test_register(UcxTestSuite* suite, UcxTest test) { 262.56 - if (suite->tests) { 262.57 - UcxTestList *newelem = (UcxTestList*) malloc(sizeof(UcxTestList)); 262.58 - if (newelem) { 262.59 - newelem->test = test; 262.60 - newelem->next = NULL; 262.61 - 262.62 - UcxTestList *last = suite->tests; 262.63 - while (last->next) { 262.64 - last = last->next; 262.65 - } 262.66 - last->next = newelem; 262.67 - 262.68 - return EXIT_SUCCESS; 262.69 - } else { 262.70 - return EXIT_FAILURE; 262.71 - } 262.72 - } else { 262.73 - suite->tests = (UcxTestList*) malloc(sizeof(UcxTestList)); 262.74 - if (suite->tests) { 262.75 - suite->tests->test = test; 262.76 - suite->tests->next = NULL; 262.77 - 262.78 - return EXIT_SUCCESS; 262.79 - } else { 262.80 - return EXIT_FAILURE; 262.81 - } 262.82 - } 262.83 -} 262.84 - 262.85 -void ucx_test_run(UcxTestSuite* suite, FILE* output) { 262.86 - suite->success = 0; 262.87 - suite->failure = 0; 262.88 - for (UcxTestList* elem = suite->tests ; elem ; elem = elem->next) { 262.89 - elem->test(suite, output); 262.90 - } 262.91 - fwrite("\nAll test completed.\n", 1, 21, output); 262.92 - fprintf(output, " Total: %u\n Success: %u\n Failure: %u\n", 262.93 - suite->success+suite->failure, suite->success, suite->failure); 262.94 -}
263.1 --- a/src/ucx.c Mon Dec 30 09:54:10 2019 +0100 263.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 263.3 @@ -1,62 +0,0 @@ 263.4 -/** 263.5 - * @mainpage UAP Common Extensions 263.6 - * Library with common and useful functions, macros and data structures. 263.7 - * <p> 263.8 - * Latest available source:<br> 263.9 - * <a href="https://sourceforge.net/projects/ucx/files/"> 263.10 - * https://sourceforge.net/projects/ucx/files/</a> 263.11 - * </p> 263.12 - * 263.13 - * <p> 263.14 - * Repositories:<br> 263.15 - * <a href="https://sourceforge.net/p/ucx/code"> 263.16 - * https://sourceforge.net/p/ucx/code</a> 263.17 - * - or - 263.18 - * <a href="https://develop.uap-core.de/hg/ucx"> 263.19 - * https://develop.uap-core.de/hg/ucx</a> 263.20 - * </p> 263.21 - * 263.22 - * <h2>LICENCE</h2> 263.23 - * 263.24 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 263.25 - * 263.26 - * Redistribution and use in source and binary forms, with or without 263.27 - * modification, are permitted provided that the following conditions are met: 263.28 - * 263.29 - * 1. Redistributions of source code must retain the above copyright 263.30 - * notice, this list of conditions and the following disclaimer. 263.31 - * 263.32 - * 2. Redistributions in binary form must reproduce the above copyright 263.33 - * notice, this list of conditions and the following disclaimer in the 263.34 - * documentation and/or other materials provided with the distribution. 263.35 - * 263.36 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 263.37 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 263.38 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 263.39 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 263.40 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 263.41 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 263.42 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 263.43 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 263.44 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 263.45 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 263.46 - * POSSIBILITY OF SUCH DAMAGE. 263.47 - */ 263.48 - 263.49 -#include "ucx/ucx.h" 263.50 - 263.51 -int ucx_szmul_impl(size_t a, size_t b, size_t *result) { 263.52 - if(a == 0 || b == 0) { 263.53 - *result = 0; 263.54 - return 0; 263.55 - } 263.56 - size_t r = a * b; 263.57 - if(r / b == a) { 263.58 - *result = r; 263.59 - return 0; 263.60 - } else { 263.61 - *result = 0; 263.62 - return 1; 263.63 - } 263.64 -} 263.65 -
264.1 --- a/src/ucx/allocator.h Mon Dec 30 09:54:10 2019 +0100 264.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 264.3 @@ -1,206 +0,0 @@ 264.4 -/* 264.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 264.6 - * 264.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 264.8 - * 264.9 - * Redistribution and use in source and binary forms, with or without 264.10 - * modification, are permitted provided that the following conditions are met: 264.11 - * 264.12 - * 1. Redistributions of source code must retain the above copyright 264.13 - * notice, this list of conditions and the following disclaimer. 264.14 - * 264.15 - * 2. Redistributions in binary form must reproduce the above copyright 264.16 - * notice, this list of conditions and the following disclaimer in the 264.17 - * documentation and/or other materials provided with the distribution. 264.18 - * 264.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 264.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 264.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 264.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 264.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 264.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 264.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 264.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 264.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 264.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 264.29 - * POSSIBILITY OF SUCH DAMAGE. 264.30 - */ 264.31 -/** 264.32 - * Allocator for custom memory management. 264.33 - * 264.34 - * A UCX allocator consists of a pointer to the memory area / pool and four 264.35 - * function pointers to memory management functions operating on this memory 264.36 - * area / pool. These functions shall behave equivalent to the standard libc 264.37 - * functions <code>malloc(), calloc(), realloc()</code> and <code>free()</code>. 264.38 - * 264.39 - * The signature of the memory management functions is based on the signature 264.40 - * of the respective libc function but each of them takes the pointer to the 264.41 - * memory area / pool as first argument. 264.42 - * 264.43 - * As the pointer to the memory area / pool can be arbitrarily chosen, any data 264.44 - * can be provided to the memory management functions. A UcxMempool is just 264.45 - * one example. 264.46 - * 264.47 - * @see mempool.h 264.48 - * @see UcxMap 264.49 - * 264.50 - * @file allocator.h 264.51 - * @author Mike Becker 264.52 - * @author Olaf Wintermann 264.53 - */ 264.54 - 264.55 -#ifndef UCX_ALLOCATOR_H 264.56 -#define UCX_ALLOCATOR_H 264.57 - 264.58 -#include "ucx.h" 264.59 - 264.60 -#ifdef __cplusplus 264.61 -extern "C" { 264.62 -#endif 264.63 - 264.64 -/** 264.65 - * A function pointer to the allocators <code>malloc()</code> function. 264.66 - * @see UcxAllocator 264.67 - */ 264.68 -typedef void*(*ucx_allocator_malloc)(void *pool, size_t n); 264.69 - 264.70 -/** 264.71 - * A function pointer to the allocators <code>calloc()</code> function. 264.72 - * @see UcxAllocator 264.73 - */ 264.74 -typedef void*(*ucx_allocator_calloc)(void *pool, size_t n, size_t size); 264.75 - 264.76 -/** 264.77 - * A function pointer to the allocators <code>realloc()</code> function. 264.78 - * @see UcxAllocator 264.79 - */ 264.80 -typedef void*(*ucx_allocator_realloc)(void *pool, void *data, size_t n); 264.81 - 264.82 -/** 264.83 - * A function pointer to the allocators <code>free()</code> function. 264.84 - * @see UcxAllocator 264.85 - */ 264.86 -typedef void(*ucx_allocator_free)(void *pool, void *data); 264.87 - 264.88 -/** 264.89 - * UCX allocator data structure containing memory management functions. 264.90 - */ 264.91 -typedef struct { 264.92 - /** Pointer to an area of memory or a complex memory pool. 264.93 - * This pointer will be passed to any memory management function as first 264.94 - * argument. 264.95 - */ 264.96 - void *pool; 264.97 - /** 264.98 - * The <code>malloc()</code> function for this allocator. 264.99 - */ 264.100 - ucx_allocator_malloc malloc; 264.101 - /** 264.102 - * The <code>calloc()</code> function for this allocator. 264.103 - */ 264.104 - ucx_allocator_calloc calloc; 264.105 - /** 264.106 - * The <code>realloc()</code> function for this allocator. 264.107 - */ 264.108 - ucx_allocator_realloc realloc; 264.109 - /** 264.110 - * The <code>free()</code> function for this allocator. 264.111 - */ 264.112 - ucx_allocator_free free; 264.113 -} UcxAllocator; 264.114 - 264.115 -/** 264.116 - * Returns a pointer to the default allocator. 264.117 - * 264.118 - * The default allocator contains wrappers to the standard libc memory 264.119 - * management functions. Use this function to get a pointer to a globally 264.120 - * available allocator. You may also define an own UcxAllocator by assigning 264.121 - * #UCX_ALLOCATOR_DEFAULT to a variable and pass the address of this variable 264.122 - * to any function that takes a UcxAllocator as argument. Note that using 264.123 - * this function is the recommended way of passing a default allocator, thus 264.124 - * it never runs out of scope. 264.125 - * 264.126 - * @return a pointer to the default allocator 264.127 - * 264.128 - * @see UCX_ALLOCATOR_DEFAULT 264.129 - */ 264.130 -UcxAllocator *ucx_default_allocator(); 264.131 - 264.132 -/** 264.133 - * A wrapper for the standard libc <code>malloc()</code> function. 264.134 - * @param ignore ignored (may be used by allocators for pooled memory) 264.135 - * @param n argument passed to <code>malloc()</code> 264.136 - * @return return value of <code>malloc()</code> 264.137 - */ 264.138 -void *ucx_default_malloc(void *ignore, size_t n); 264.139 -/** 264.140 - * A wrapper for the standard libc <code>calloc()</code> function. 264.141 - * @param ignore ignored (may be used by allocators for pooled memory) 264.142 - * @param n argument passed to <code>calloc()</code> 264.143 - * @param size argument passed to <code>calloc()</code> 264.144 - * @return return value of <code>calloc()</code> 264.145 - */ 264.146 -void *ucx_default_calloc(void *ignore, size_t n, size_t size); 264.147 -/** 264.148 - * A wrapper for the standard libc <code>realloc()</code> function. 264.149 - * @param ignore ignored (may be used by allocators for pooled memory) 264.150 - * @param data argumend passed to <code>realloc()</code> 264.151 - * @param n argument passed to <code>realloc()</code> 264.152 - * @return return value of <code>realloc()</code> 264.153 - */ 264.154 -void *ucx_default_realloc(void *ignore, void *data, size_t n); 264.155 -/** 264.156 - * A wrapper for the standard libc <code>free()</code> function. 264.157 - * @param ignore ignored (may be used by allocators for pooled memory) 264.158 - * @param data argument passed to <code>free()</code> 264.159 - */ 264.160 -void ucx_default_free(void *ignore, void *data); 264.161 - 264.162 -/** 264.163 - * Shorthand for calling an allocators malloc function. 264.164 - * @param allocator the allocator to use 264.165 - * @param n size of space to allocate 264.166 - * @return a pointer to the allocated memory area 264.167 - */ 264.168 -#define almalloc(allocator, n) ((allocator)->malloc((allocator)->pool, n)) 264.169 - 264.170 -/** 264.171 - * Shorthand for calling an allocators calloc function. 264.172 - * @param allocator the allocator to use 264.173 - * @param n the count of elements the space should be allocated for 264.174 - * @param size the size of each element 264.175 - * @return a pointer to the allocated memory area 264.176 - */ 264.177 -#define alcalloc(allocator, n, size) \ 264.178 - ((allocator)->calloc((allocator)->pool, n, size)) 264.179 - 264.180 -/** 264.181 - * Shorthand for calling an allocators realloc function. 264.182 - * @param allocator the allocator to use 264.183 - * @param ptr the pointer to the memory area that shall be reallocated 264.184 - * @param n the new size of the allocated memory area 264.185 - * @return a pointer to the reallocated memory area 264.186 - */ 264.187 -#define alrealloc(allocator, ptr, n) \ 264.188 - ((allocator)->realloc((allocator)->pool, ptr, n)) 264.189 - 264.190 -/** 264.191 - * Shorthand for calling an allocators free function. 264.192 - * @param allocator the allocator to use 264.193 - * @param ptr the pointer to the memory area that shall be freed 264.194 - */ 264.195 -#define alfree(allocator, ptr) ((allocator)->free((allocator)->pool, ptr)) 264.196 - 264.197 -/** 264.198 - * Convenient macro for a default allocator <code>struct</code> definition. 264.199 - */ 264.200 -#define UCX_ALLOCATOR_DEFAULT {NULL, \ 264.201 - ucx_default_malloc, ucx_default_calloc, ucx_default_realloc, \ 264.202 - ucx_default_free } 264.203 - 264.204 -#ifdef __cplusplus 264.205 -} 264.206 -#endif 264.207 - 264.208 -#endif /* UCX_ALLOCATOR_H */ 264.209 -
265.1 --- a/src/ucx/array.h Mon Dec 30 09:54:10 2019 +0100 265.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 265.3 @@ -1,460 +0,0 @@ 265.4 -/* 265.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 265.6 - * 265.7 - * Copyright 2019 Mike Becker, Olaf Wintermann All rights reserved. 265.8 - * 265.9 - * Redistribution and use in source and binary forms, with or without 265.10 - * modification, are permitted provided that the following conditions are met: 265.11 - * 265.12 - * 1. Redistributions of source code must retain the above copyright 265.13 - * notice, this list of conditions and the following disclaimer. 265.14 - * 265.15 - * 2. Redistributions in binary form must reproduce the above copyright 265.16 - * notice, this list of conditions and the following disclaimer in the 265.17 - * documentation and/or other materials provided with the distribution. 265.18 - * 265.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 265.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 265.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 265.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 265.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 265.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 265.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 265.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 265.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 265.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 265.29 - * POSSIBILITY OF SUCH DAMAGE. 265.30 - */ 265.31 -/** 265.32 - * Dynamically allocated array implementation. 265.33 - * 265.34 - * @file array.h 265.35 - * @author Mike Becker 265.36 - * @author Olaf Wintermann 265.37 - */ 265.38 - 265.39 -#ifndef UCX_ARRAY_H 265.40 -#define UCX_ARRAY_H 265.41 - 265.42 -#include "ucx.h" 265.43 -#include "allocator.h" 265.44 - 265.45 -#ifdef __cplusplus 265.46 -extern "C" { 265.47 -#endif 265.48 - 265.49 -/** 265.50 - * UCX array type. 265.51 - */ 265.52 -typedef struct { 265.53 - /** 265.54 - * The current capacity of the array. 265.55 - */ 265.56 - size_t capacity; 265.57 - /** 265.58 - * The actual number of elements in the array. 265.59 - */ 265.60 - size_t size; 265.61 - /** 265.62 - * The size of an individual element in bytes. 265.63 - */ 265.64 - size_t elemsize; 265.65 - /** 265.66 - * A pointer to the data. 265.67 - */ 265.68 - void* data; 265.69 - /** 265.70 - * The allocator used for the data. 265.71 - */ 265.72 - UcxAllocator* allocator; 265.73 -} UcxArray; 265.74 - 265.75 -/** 265.76 - * Sets an element in an arbitrary user defined array. 265.77 - * The data is copied from the specified data location. 265.78 - * 265.79 - * If the capacity is insufficient, the array is automatically reallocated and 265.80 - * the possibly new pointer is stored in the <code>array</code> argument. 265.81 - * 265.82 - * On reallocation the capacity of the array is doubled until it is sufficient. 265.83 - * The new capacity is stored back to <code>capacity</code>. 265.84 - * 265.85 - * @param array a pointer to location of the array pointer 265.86 - * @param capacity a pointer to the capacity 265.87 - * @param elmsize the size of each element 265.88 - * @param idx the index of the element to set 265.89 - * @param data a pointer to the element data 265.90 - * @return zero on success or non-zero on error (errno will be set) 265.91 - */ 265.92 -#define ucx_array_util_set(array, capacity, elmsize, idx, data) \ 265.93 - ucx_array_util_set_a(ucx_default_allocator(), (void**)(array), capacity, \ 265.94 - elmsize, idx, data) 265.95 - 265.96 -/** 265.97 - * Sets an element in an arbitrary user defined array. 265.98 - * The data is copied from the specified data location. 265.99 - * 265.100 - * If the capacity is insufficient, the array is automatically reallocated 265.101 - * using the specified allocator and the possibly new pointer is stored in 265.102 - * the <code>array</code> argument. 265.103 - * 265.104 - * On reallocation the capacity of the array is doubled until it is sufficient. 265.105 - * The new capacity is stored back to <code>capacity</code>. 265.106 - * 265.107 - * @param alloc the allocator that shall be used to reallocate the array 265.108 - * @param array a pointer to location of the array pointer 265.109 - * @param capacity a pointer to the capacity 265.110 - * @param elmsize the size of each element 265.111 - * @param idx the index of the element to set 265.112 - * @param data a pointer to the element data 265.113 - * @return zero on success or non-zero on error (errno will be set) 265.114 - */ 265.115 -int ucx_array_util_set_a(UcxAllocator* alloc, void** array, size_t* capacity, 265.116 - size_t elmsize, size_t idx, void* data); 265.117 - 265.118 -/** 265.119 - * Stores a pointer in an arbitrary user defined array. 265.120 - * The element size of the array must be sizeof(void*). 265.121 - * 265.122 - * If the capacity is insufficient, the array is automatically reallocated and 265.123 - * the possibly new pointer is stored in the <code>array</code> argument. 265.124 - * 265.125 - * On reallocation the capacity of the array is doubled until it is sufficient. 265.126 - * The new capacity is stored back to <code>capacity</code>. 265.127 - * 265.128 - * @param array a pointer to location of the array pointer 265.129 - * @param capacity a pointer to the capacity 265.130 - * @param idx the index of the element to set 265.131 - * @param ptr the pointer to store 265.132 - * @return zero on success or non-zero on error (errno will be set) 265.133 - */ 265.134 -#define ucx_array_util_setptr(array, capacity, idx, ptr) \ 265.135 - ucx_array_util_setptr_a(ucx_default_allocator(), (void**)(array), \ 265.136 - capacity, idx, ptr) 265.137 - 265.138 -/** 265.139 - * Stores a pointer in an arbitrary user defined array. 265.140 - * The element size of the array must be sizeof(void*). 265.141 - * 265.142 - * If the capacity is insufficient, the array is automatically reallocated 265.143 - * using the specified allocator and the possibly new pointer is stored in 265.144 - * the <code>array</code> argument. 265.145 - * 265.146 - * On reallocation the capacity of the array is doubled until it is sufficient. 265.147 - * The new capacity is stored back to <code>capacity</code>. 265.148 - * 265.149 - * @param alloc the allocator that shall be used to reallocate the array 265.150 - * @param array a pointer to location of the array pointer 265.151 - * @param capacity a pointer to the capacity 265.152 - * @param idx the index of the element to set 265.153 - * @param ptr the pointer to store 265.154 - * @return zero on success or non-zero on error (errno will be set) 265.155 - */ 265.156 -int ucx_array_util_setptr_a(UcxAllocator* alloc, void** array, size_t* capacity, 265.157 - size_t idx, void* ptr); 265.158 - 265.159 - 265.160 -/** 265.161 - * Creates a new UCX array with the given capacity and element size. 265.162 - * @param capacity the initial capacity 265.163 - * @param elemsize the element size 265.164 - * @return a pointer to a new UCX array structure 265.165 - */ 265.166 -UcxArray* ucx_array_new(size_t capacity, size_t elemsize); 265.167 - 265.168 -/** 265.169 - * Creates a new UCX array using the specified allocator. 265.170 - * 265.171 - * @param capacity the initial capacity 265.172 - * @param elemsize the element size 265.173 - * @param allocator the allocator to use 265.174 - * @return a pointer to new UCX array structure 265.175 - */ 265.176 -UcxArray* ucx_array_new_a(size_t capacity, size_t elemsize, 265.177 - UcxAllocator* allocator); 265.178 - 265.179 -/** 265.180 - * Initializes a UCX array structure with the given capacity and element size. 265.181 - * The structure must be uninitialized as the data pointer will be overwritten. 265.182 - * 265.183 - * @param array the structure to initialize 265.184 - * @param capacity the initial capacity 265.185 - * @param elemsize the element size 265.186 - */ 265.187 -void ucx_array_init(UcxArray* array, size_t capacity, size_t elemsize); 265.188 - 265.189 -/** 265.190 - * Initializes a UCX array structure using the specified allocator. 265.191 - * The structure must be uninitialized as the data pointer will be overwritten. 265.192 - * 265.193 - * @param array the structure to initialize 265.194 - * @param capacity the initial capacity 265.195 - * @param elemsize the element size 265.196 - * @param allocator the allocator to use 265.197 - */ 265.198 -void ucx_array_init_a(UcxArray* array, size_t capacity, size_t elemsize, 265.199 - UcxAllocator* allocator); 265.200 - 265.201 -/** 265.202 - * Creates an shallow copy of an array. 265.203 - * 265.204 - * This function clones the specified array by using memcpy(). 265.205 - * If the destination capacity is insufficient, an automatic reallocation is 265.206 - * attempted. 265.207 - * 265.208 - * Note: if the destination array is uninitialized, the behavior is undefined. 265.209 - * 265.210 - * @param dest the array to copy to 265.211 - * @param src the array to copy from 265.212 - * @return zero on success, non-zero on reallocation failure. 265.213 - */ 265.214 -int ucx_array_clone(UcxArray* dest, UcxArray const* src); 265.215 - 265.216 - 265.217 -/** 265.218 - * Compares two UCX arrays element-wise by using a compare function. 265.219 - * 265.220 - * Elements of the two specified arrays are compared by using the specified 265.221 - * compare function and the additional data. The type and content of this 265.222 - * additional data depends on the cmp_func() used. 265.223 - * 265.224 - * This function always returns zero, if the element sizes of the arrays do 265.225 - * not match and performs no comparisons in this case. 265.226 - * 265.227 - * @param array1 the first array 265.228 - * @param array2 the second array 265.229 - * @param cmpfnc the compare function 265.230 - * @param data additional data for the compare function 265.231 - * @return 1, if and only if the two arrays equal element-wise, 0 otherwise 265.232 - */ 265.233 -int ucx_array_equals(UcxArray const *array1, UcxArray const *array2, 265.234 - cmp_func cmpfnc, void* data); 265.235 - 265.236 -/** 265.237 - * Destroys the array. 265.238 - * 265.239 - * The data is freed and both capacity and count are reset to zero. 265.240 - * If the array structure itself has been dynamically allocated, it has to be 265.241 - * freed separately. 265.242 - * 265.243 - * @param array the array to destroy 265.244 - */ 265.245 -void ucx_array_destroy(UcxArray *array); 265.246 - 265.247 -/** 265.248 - * Destroys and frees the array. 265.249 - * 265.250 - * @param array the array to free 265.251 - */ 265.252 -void ucx_array_free(UcxArray *array); 265.253 - 265.254 -/** 265.255 - * Inserts elements at the end of the array. 265.256 - * 265.257 - * This is an O(1) operation. 265.258 - * The array will automatically grow, if the capacity is exceeded. 265.259 - * If a pointer to data is provided, the data is copied into the array with 265.260 - * memcpy(). Otherwise the new elements are completely zeroed. 265.261 - * 265.262 - * @param array a pointer the array where to append the data 265.263 - * @param data a pointer to the data to insert (may be <code>NULL</code>) 265.264 - * @param count number of elements to copy from data (if data is 265.265 - * <code>NULL</code>, zeroed elements are appended) 265.266 - * @return zero on success, non-zero if a reallocation was necessary but failed 265.267 - * @see ucx_array_set_from() 265.268 - * @see ucx_array_append() 265.269 - */ 265.270 -int ucx_array_append_from(UcxArray *array, void *data, size_t count); 265.271 - 265.272 - 265.273 -/** 265.274 - * Inserts elements at the beginning of the array. 265.275 - * 265.276 - * This is an expensive operation, because the contents must be moved. 265.277 - * If there is no particular reason to prepend data, you should use 265.278 - * ucx_array_append_from() instead. 265.279 - * 265.280 - * @param array a pointer the array where to prepend the data 265.281 - * @param data a pointer to the data to insert (may be <code>NULL</code>) 265.282 - * @param count number of elements to copy from data (if data is 265.283 - * <code>NULL</code>, zeroed elements are inserted) 265.284 - * @return zero on success, non-zero if a reallocation was necessary but failed 265.285 - * @see ucx_array_append_from() 265.286 - * @see ucx_array_set_from() 265.287 - * @see ucx_array_prepend() 265.288 - */ 265.289 -int ucx_array_prepend_from(UcxArray *array, void *data, size_t count); 265.290 - 265.291 - 265.292 -/** 265.293 - * Sets elements starting at the specified index. 265.294 - * 265.295 - * If the any index is out of bounds, the array automatically grows. 265.296 - * The pointer to the data may be NULL, in which case the elements are zeroed. 265.297 - * 265.298 - * @param array a pointer the array where to set the data 265.299 - * @param index the index of the element to set 265.300 - * @param data a pointer to the data to insert (may be <code>NULL</code>) 265.301 - * @param count number of elements to copy from data (if data is 265.302 - * <code>NULL</code>, the memory in the array is zeroed) 265.303 - * @return zero on success, non-zero if a reallocation was necessary but failed 265.304 - * @see ucx_array_append_from() 265.305 - * @see ucx_array_set() 265.306 - */ 265.307 -int ucx_array_set_from(UcxArray *array, size_t index, void *data, size_t count); 265.308 - 265.309 -/** 265.310 - * Concatenates two arrays. 265.311 - * 265.312 - * The contents of the second array are appended to the first array in one 265.313 - * single operation. The second array is otherwise left untouched. 265.314 - * 265.315 - * The first array may grow automatically. If this fails, both arrays remain 265.316 - * unmodified. 265.317 - * 265.318 - * @param array1 first array 265.319 - * @param array2 second array 265.320 - * @return zero on success, non-zero if reallocation was necessary but failed 265.321 - * or the element size does not match 265.322 - */ 265.323 -int ucx_array_concat(UcxArray *array1, const UcxArray *array2); 265.324 - 265.325 -/** 265.326 - * Returns a pointer to the array element at the specified index. 265.327 - * 265.328 - * @param array the array to retrieve the element from 265.329 - * @param index index of the element to return 265.330 - * @return a pointer to the element at the specified index or <code>NULL</code>, 265.331 - * if the index is greater than the array size 265.332 - */ 265.333 -void *ucx_array_at(UcxArray const* array, size_t index); 265.334 - 265.335 -/** 265.336 - * Returns the index of an element containing the specified data. 265.337 - * 265.338 - * This function uses a cmp_func() to compare the data of each list element 265.339 - * with the specified data. If no cmp_func is provided, memcmp() is used. 265.340 - * 265.341 - * If the array contains the data more than once, the index of the first 265.342 - * occurrence is returned. 265.343 - * If the array does not contain the data, the size of array is returned. 265.344 - * 265.345 - * @param array the array where to search for the data 265.346 - * @param elem the element data 265.347 - * @param cmpfnc the compare function 265.348 - * @param data additional data for the compare function 265.349 - * @return the index of the element containing the specified data or the size of 265.350 - * the array, if the data is not found in this array 265.351 - */ 265.352 -size_t ucx_array_find(UcxArray const *array, void *elem, 265.353 - cmp_func cmpfnc, void *data); 265.354 - 265.355 -/** 265.356 - * Checks, if an array contains a specific element. 265.357 - * 265.358 - * An element is found, if ucx_array_find() returns a value less than the size. 265.359 - * 265.360 - * @param array the array where to search for the data 265.361 - * @param elem the element data 265.362 - * @param cmpfnc the compare function 265.363 - * @param data additional data for the compare function 265.364 - * @return 1, if and only if the array contains the specified element data 265.365 - * @see ucx_array_find() 265.366 - */ 265.367 -int ucx_array_contains(UcxArray const *array, void *elem, 265.368 - cmp_func cmpfnc, void *data); 265.369 - 265.370 -/** 265.371 - * Sorts a UcxArray with the best available sort algorithm. 265.372 - * 265.373 - * The qsort_r() function is used, if available (glibc, FreeBSD or MacOS). 265.374 - * The order of arguments is automatically adjusted for the FreeBSD and MacOS 265.375 - * version of qsort_r(). 265.376 - * 265.377 - * If qsort_r() is not available, a merge sort algorithm is used, which is 265.378 - * guaranteed to use no more additional memory than for exactly one element. 265.379 - * 265.380 - * @param array the array to sort 265.381 - * @param cmpfnc the function that shall be used to compare the element data 265.382 - * @param data additional data for the cmp_func() or <code>NULL</code> 265.383 - */ 265.384 -void ucx_array_sort(UcxArray* array, cmp_func cmpfnc, void *data); 265.385 - 265.386 -/** 265.387 - * Removes an element from the array. 265.388 - * 265.389 - * This is in general an expensive operation, because several elements may 265.390 - * be moved. If the order of the elements is not relevant, use 265.391 - * ucx_array_remove_fast() instead. 265.392 - * 265.393 - * @param array pointer to the array from which the element shall be removed 265.394 - * @param index the index of the element to remove 265.395 - */ 265.396 -void ucx_array_remove(UcxArray *array, size_t index); 265.397 - 265.398 -/** 265.399 - * Removes an element from the array. 265.400 - * 265.401 - * This is an O(1) operation, but does not maintain the order of the elements. 265.402 - * The last element in the array is moved to the location of the removed 265.403 - * element. 265.404 - * 265.405 - * @param array pointer to the array from which the element shall be removed 265.406 - * @param index the index of the element to remove 265.407 - */ 265.408 -void ucx_array_remove_fast(UcxArray *array, size_t index); 265.409 - 265.410 -/** 265.411 - * Shrinks the memory to exactly fit the contents. 265.412 - * 265.413 - * After this operation, the capacity equals the size. 265.414 - * 265.415 - * @param array a pointer to the array 265.416 - * @return zero on success, non-zero if reallocation failed 265.417 - */ 265.418 -int ucx_array_shrink(UcxArray* array); 265.419 - 265.420 -/** 265.421 - * Sets the capacity of the array. 265.422 - * 265.423 - * If the new capacity is smaller than the size of the array, the elements 265.424 - * are removed and the size is adjusted accordingly. 265.425 - * 265.426 - * @param array a pointer to the array 265.427 - * @param capacity the new capacity 265.428 - * @return zero on success, non-zero if reallocation failed 265.429 - */ 265.430 -int ucx_array_resize(UcxArray* array, size_t capacity); 265.431 - 265.432 -/** 265.433 - * Resizes the array only, if the capacity is insufficient. 265.434 - * 265.435 - * If the requested capacity is smaller than the current capacity, this 265.436 - * function does nothing. 265.437 - * 265.438 - * @param array a pointer to the array 265.439 - * @param capacity the guaranteed capacity 265.440 - * @return zero on success, non-zero if reallocation failed 265.441 - */ 265.442 -int ucx_array_reserve(UcxArray* array, size_t capacity); 265.443 - 265.444 -/** 265.445 - * Resizes the capacity, if the specified number of elements would not fit. 265.446 - * 265.447 - * A call to ucx_array_grow(array, count) is effectively the same as 265.448 - * ucx_array_reserve(array, array->size+count). 265.449 - * 265.450 - * @param array a pointer to the array 265.451 - * @param count the number of elements that should additionally fit 265.452 - * into the array 265.453 - * @return zero on success, non-zero if reallocation failed 265.454 - */ 265.455 -int ucx_array_grow(UcxArray* array, size_t count); 265.456 - 265.457 - 265.458 -#ifdef __cplusplus 265.459 -} 265.460 -#endif 265.461 - 265.462 -#endif /* UCX_ARRAY_H */ 265.463 -
266.1 --- a/src/ucx/avl.h Mon Dec 30 09:54:10 2019 +0100 266.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 266.3 @@ -1,353 +0,0 @@ 266.4 -/* 266.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 266.6 - * 266.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 266.8 - * 266.9 - * Redistribution and use in source and binary forms, with or without 266.10 - * modification, are permitted provided that the following conditions are met: 266.11 - * 266.12 - * 1. Redistributions of source code must retain the above copyright 266.13 - * notice, this list of conditions and the following disclaimer. 266.14 - * 266.15 - * 2. Redistributions in binary form must reproduce the above copyright 266.16 - * notice, this list of conditions and the following disclaimer in the 266.17 - * documentation and/or other materials provided with the distribution. 266.18 - * 266.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 266.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 266.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 266.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 266.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 266.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 266.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 266.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 266.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 266.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 266.29 - * POSSIBILITY OF SUCH DAMAGE. 266.30 - */ 266.31 - 266.32 - 266.33 -/** 266.34 - * @file avl.h 266.35 - * 266.36 - * AVL tree implementation. 266.37 - * 266.38 - * This binary search tree implementation allows average O(1) insertion and 266.39 - * removal of elements (excluding binary search time). 266.40 - * 266.41 - * @author Mike Becker 266.42 - * @author Olaf Wintermann 266.43 - */ 266.44 - 266.45 -#ifndef UCX_AVL_H 266.46 -#define UCX_AVL_H 266.47 - 266.48 -#include "ucx.h" 266.49 -#include "allocator.h" 266.50 -#include <inttypes.h> 266.51 - 266.52 -#ifdef __cplusplus 266.53 -extern "C" { 266.54 -#endif 266.55 - 266.56 -/** 266.57 - * UCX AVL Node type. 266.58 - * 266.59 - * @see UcxAVLNode 266.60 - */ 266.61 -typedef struct UcxAVLNode UcxAVLNode; 266.62 - 266.63 -/** 266.64 - * UCX AVL Node. 266.65 - */ 266.66 -struct UcxAVLNode { 266.67 - /** 266.68 - * The key for this node. 266.69 - */ 266.70 - intptr_t key; 266.71 - /** 266.72 - * Data contained by this node. 266.73 - */ 266.74 - void *value; 266.75 - /** 266.76 - * The height of this (sub)-tree. 266.77 - */ 266.78 - size_t height; 266.79 - /** 266.80 - * Parent node. 266.81 - */ 266.82 - UcxAVLNode *parent; 266.83 - /** 266.84 - * Root node of left subtree. 266.85 - */ 266.86 - UcxAVLNode *left; 266.87 - /** 266.88 - * Root node of right subtree. 266.89 - */ 266.90 - UcxAVLNode *right; 266.91 -}; 266.92 - 266.93 -/** 266.94 - * UCX AVL Tree. 266.95 - */ 266.96 -typedef struct { 266.97 - /** 266.98 - * The UcxAllocator that shall be used to manage the memory for node data. 266.99 - */ 266.100 - UcxAllocator *allocator; 266.101 - /** 266.102 - * Root node of the tree. 266.103 - */ 266.104 - UcxAVLNode *root; 266.105 - /** 266.106 - * Compare function that shall be used to compare the UcxAVLNode keys. 266.107 - * @see UcxAVLNode.key 266.108 - */ 266.109 - cmp_func cmpfunc; 266.110 - /** 266.111 - * Custom user data. 266.112 - * This data will also be provided to the cmpfunc. 266.113 - */ 266.114 - void *userdata; 266.115 -} UcxAVLTree; 266.116 - 266.117 -/** 266.118 - * Initializes a new UcxAVLTree with a default allocator. 266.119 - * 266.120 - * @param cmpfunc the compare function that shall be used 266.121 - * @return a new UcxAVLTree object 266.122 - * @see ucx_avl_new_a() 266.123 - */ 266.124 -UcxAVLTree *ucx_avl_new(cmp_func cmpfunc); 266.125 - 266.126 -/** 266.127 - * Initializes a new UcxAVLTree with the specified allocator. 266.128 - * 266.129 - * The cmpfunc should be capable of comparing two keys within this AVL tree. 266.130 - * So if you want to use null terminated strings as keys, you could use the 266.131 - * ucx_cmp_str() function here. 266.132 - * 266.133 - * @param cmpfunc the compare function that shall be used 266.134 - * @param allocator the UcxAllocator that shall be used 266.135 - * @return a new UcxAVLTree object 266.136 - */ 266.137 -UcxAVLTree *ucx_avl_new_a(cmp_func cmpfunc, UcxAllocator *allocator); 266.138 - 266.139 -/** 266.140 - * Destroys a UcxAVLTree. 266.141 - * 266.142 - * Note, that the contents are not automatically freed. 266.143 - * Use may use #ucx_avl_free_content() before calling this function. 266.144 - * 266.145 - * @param tree the tree to destroy 266.146 - * @see ucx_avl_free_content() 266.147 - */ 266.148 -void ucx_avl_free(UcxAVLTree *tree); 266.149 - 266.150 -/** 266.151 - * Frees the contents of a UcxAVLTree. 266.152 - * 266.153 - * This is a convenience function that iterates over the tree and passes all 266.154 - * values to the specified destructor function. 266.155 - * 266.156 - * If no destructor is specified (<code>NULL</code>), the free() function of 266.157 - * the tree's own allocator is used. 266.158 - * 266.159 - * You must ensure, that it is valid to pass each value in the map to the same 266.160 - * destructor function. 266.161 - * 266.162 - * You should free the entire tree afterwards, as the contents will be invalid. 266.163 - * 266.164 - * @param tree for which the contents shall be freed 266.165 - * @param destr optional pointer to a destructor function 266.166 - * @see ucx_avl_free() 266.167 - */ 266.168 -void ucx_avl_free_content(UcxAVLTree *tree, ucx_destructor destr); 266.169 - 266.170 -/** 266.171 - * Macro for initializing a new UcxAVLTree with the default allocator and a 266.172 - * ucx_cmp_ptr() compare function. 266.173 - * 266.174 - * @return a new default UcxAVLTree object 266.175 - */ 266.176 -#define ucx_avl_default_new() \ 266.177 - ucx_avl_new_a(ucx_cmp_ptr, ucx_default_allocator()) 266.178 - 266.179 -/** 266.180 - * Gets the node from the tree, that is associated with the specified key. 266.181 - * @param tree the UcxAVLTree 266.182 - * @param key the key 266.183 - * @return the node (or <code>NULL</code>, if the key is not present) 266.184 - */ 266.185 -UcxAVLNode *ucx_avl_get_node(UcxAVLTree *tree, intptr_t key); 266.186 - 266.187 -/** 266.188 - * Gets the value from the tree, that is associated with the specified key. 266.189 - * @param tree the UcxAVLTree 266.190 - * @param key the key 266.191 - * @return the value (or <code>NULL</code>, if the key is not present) 266.192 - */ 266.193 -void *ucx_avl_get(UcxAVLTree *tree, intptr_t key); 266.194 - 266.195 -/** 266.196 - * A mode for #ucx_avl_find_node() with the same behavior as 266.197 - * #ucx_avl_get_node(). 266.198 - */ 266.199 -#define UCX_AVL_FIND_EXACT 0 266.200 -/** 266.201 - * A mode for #ucx_avl_find_node() finding the node whose key is at least 266.202 - * as large as the specified key. 266.203 - */ 266.204 -#define UCX_AVL_FIND_LOWER_BOUNDED 1 266.205 -/** 266.206 - * A mode for #ucx_avl_find_node() finding the node whose key is at most 266.207 - * as large as the specified key. 266.208 - */ 266.209 -#define UCX_AVL_FIND_UPPER_BOUNDED 2 266.210 -/** 266.211 - * A mode for #ucx_avl_find_node() finding the node with a key that is as close 266.212 - * to the specified key as possible. If the key is present, the behavior is 266.213 - * like #ucx_avl_get_node(). This mode only returns <code>NULL</code> on 266.214 - * empty trees. 266.215 - */ 266.216 -#define UCX_AVL_FIND_CLOSEST 3 266.217 - 266.218 -/** 266.219 - * Finds a node within the tree. The following modes are supported: 266.220 - * <ul> 266.221 - * <li>#UCX_AVL_FIND_EXACT: the same behavior as #ucx_avl_get_node()</li> 266.222 - * <li>#UCX_AVL_FIND_LOWER_BOUNDED: finds the node whose key is at least 266.223 - * as large as the specified key</li> 266.224 - * <li>#UCX_AVL_FIND_UPPER_BOUNDED: finds the node whose key is at most 266.225 - * as large as the specified key</li> 266.226 - * <li>#UCX_AVL_FIND_CLOSEST: finds the node with a key that is as close to 266.227 - * the specified key as possible. If the key is present, the behavior is 266.228 - * like #ucx_avl_get_node(). This mode only returns <code>NULL</code> on 266.229 - * empty trees.</li> 266.230 - * </ul> 266.231 - * 266.232 - * The distance function provided MUST agree with the compare function of 266.233 - * the AVL tree. 266.234 - * 266.235 - * @param tree the UcxAVLTree 266.236 - * @param key the key 266.237 - * @param dfnc the distance function 266.238 - * @param mode the find mode 266.239 - * @return the node (or <code>NULL</code>, if no node can be found) 266.240 - */ 266.241 -UcxAVLNode *ucx_avl_find_node(UcxAVLTree *tree, intptr_t key, 266.242 - distance_func dfnc, int mode); 266.243 - 266.244 -/** 266.245 - * Finds a value within the tree. 266.246 - * See #ucx_avl_find_node() for details. 266.247 - * 266.248 - * @param tree the UcxAVLTree 266.249 - * @param key the key 266.250 - * @param dfnc the distance function 266.251 - * @param mode the find mode 266.252 - * @return the value (or <code>NULL</code>, if no value can be found) 266.253 - */ 266.254 -void *ucx_avl_find(UcxAVLTree *tree, intptr_t key, 266.255 - distance_func dfnc, int mode); 266.256 - 266.257 -/** 266.258 - * Puts a key/value pair into the tree. 266.259 - * 266.260 - * Attention: use this function only, if a possible old value does not need 266.261 - * to be preserved. 266.262 - * 266.263 - * @param tree the UcxAVLTree 266.264 - * @param key the key 266.265 - * @param value the new value 266.266 - * @return zero, if and only if the operation succeeded 266.267 - */ 266.268 -int ucx_avl_put(UcxAVLTree *tree, intptr_t key, void *value); 266.269 - 266.270 -/** 266.271 - * Puts a key/value pair into the tree. 266.272 - * 266.273 - * This is a secure function which saves the old value to the variable pointed 266.274 - * at by oldvalue. 266.275 - * 266.276 - * @param tree the UcxAVLTree 266.277 - * @param key the key 266.278 - * @param value the new value 266.279 - * @param oldvalue optional: a pointer to the location where a possible old 266.280 - * value shall be stored 266.281 - * @return zero, if and only if the operation succeeded 266.282 - */ 266.283 -int ucx_avl_put_s(UcxAVLTree *tree, intptr_t key, void *value, void **oldvalue); 266.284 - 266.285 -/** 266.286 - * Removes a node from the AVL tree. 266.287 - * 266.288 - * Note: the specified node is logically removed. The tree implementation 266.289 - * decides which memory area is freed. In most cases the here provided node 266.290 - * is freed, so its further use is generally undefined. 266.291 - * 266.292 - * @param tree the UcxAVLTree 266.293 - * @param node the node to remove 266.294 - * @return zero, if and only if an element has been removed 266.295 - */ 266.296 -int ucx_avl_remove_node(UcxAVLTree *tree, UcxAVLNode *node); 266.297 - 266.298 -/** 266.299 - * Removes an element from the AVL tree. 266.300 - * 266.301 - * @param tree the UcxAVLTree 266.302 - * @param key the key 266.303 - * @return zero, if and only if an element has been removed 266.304 - */ 266.305 -int ucx_avl_remove(UcxAVLTree *tree, intptr_t key); 266.306 - 266.307 -/** 266.308 - * Removes an element from the AVL tree. 266.309 - * 266.310 - * This is a secure function which saves the old key and value data from node 266.311 - * to the variables at the location of oldkey and oldvalue (if specified), so 266.312 - * they can be freed afterwards (if necessary). 266.313 - * 266.314 - * Note: the returned key in oldkey is possibly not the same as the provided 266.315 - * key for the lookup (in terms of memory location). 266.316 - * 266.317 - * @param tree the UcxAVLTree 266.318 - * @param key the key of the element to remove 266.319 - * @param oldkey optional: a pointer to the location where the old key shall be 266.320 - * stored 266.321 - * @param oldvalue optional: a pointer to the location where the old value 266.322 - * shall be stored 266.323 - * @return zero, if and only if an element has been removed 266.324 - */ 266.325 -int ucx_avl_remove_s(UcxAVLTree *tree, intptr_t key, 266.326 - intptr_t *oldkey, void **oldvalue); 266.327 - 266.328 -/** 266.329 - * Counts the nodes in the specified UcxAVLTree. 266.330 - * @param tree the AVL tree 266.331 - * @return the node count 266.332 - */ 266.333 -size_t ucx_avl_count(UcxAVLTree *tree); 266.334 - 266.335 -/** 266.336 - * Finds the in-order predecessor of the given node. 266.337 - * @param node an AVL node 266.338 - * @return the in-order predecessor of the given node, or <code>NULL</code> if 266.339 - * the given node is the in-order minimum 266.340 - */ 266.341 -UcxAVLNode* ucx_avl_pred(UcxAVLNode* node); 266.342 - 266.343 -/** 266.344 - * Finds the in-order successor of the given node. 266.345 - * @param node an AVL node 266.346 - * @return the in-order successor of the given node, or <code>NULL</code> if 266.347 - * the given node is the in-order maximum 266.348 - */ 266.349 -UcxAVLNode* ucx_avl_succ(UcxAVLNode* node); 266.350 - 266.351 -#ifdef __cplusplus 266.352 -} 266.353 -#endif 266.354 - 266.355 -#endif /* UCX_AVL_H */ 266.356 -
267.1 --- a/src/ucx/buffer.h Mon Dec 30 09:54:10 2019 +0100 267.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 267.3 @@ -1,339 +0,0 @@ 267.4 -/* 267.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 267.6 - * 267.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 267.8 - * 267.9 - * Redistribution and use in source and binary forms, with or without 267.10 - * modification, are permitted provided that the following conditions are met: 267.11 - * 267.12 - * 1. Redistributions of source code must retain the above copyright 267.13 - * notice, this list of conditions and the following disclaimer. 267.14 - * 267.15 - * 2. Redistributions in binary form must reproduce the above copyright 267.16 - * notice, this list of conditions and the following disclaimer in the 267.17 - * documentation and/or other materials provided with the distribution. 267.18 - * 267.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 267.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 267.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 267.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 267.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 267.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 267.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 267.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 267.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 267.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 267.29 - * POSSIBILITY OF SUCH DAMAGE. 267.30 - */ 267.31 - 267.32 -/** 267.33 - * @file buffer.h 267.34 - * 267.35 - * Advanced buffer implementation. 267.36 - * 267.37 - * Instances of UcxBuffer can be used to read from or to write to like one 267.38 - * would do with a stream. This allows the use of ucx_stream_copy() to copy 267.39 - * contents from one buffer to another. 267.40 - * 267.41 - * Some features for convenient use of the buffer 267.42 - * can be enabled. See the documentation of the macro constants for more 267.43 - * information. 267.44 - * 267.45 - * @author Mike Becker 267.46 - * @author Olaf Wintermann 267.47 - */ 267.48 - 267.49 -#ifndef UCX_BUFFER_H 267.50 -#define UCX_BUFFER_H 267.51 - 267.52 -#include "ucx.h" 267.53 -#include <sys/types.h> 267.54 -#include <stdio.h> 267.55 - 267.56 -#ifdef __cplusplus 267.57 -extern "C" { 267.58 -#endif 267.59 - 267.60 -/** 267.61 - * No buffer features enabled (all flags cleared). 267.62 - */ 267.63 -#define UCX_BUFFER_DEFAULT 0x00 267.64 - 267.65 -/** 267.66 - * If this flag is enabled, the buffer will automatically free its contents. 267.67 - */ 267.68 -#define UCX_BUFFER_AUTOFREE 0x01 267.69 - 267.70 -/** 267.71 - * If this flag is enabled, the buffer will automatically extends its capacity. 267.72 - */ 267.73 -#define UCX_BUFFER_AUTOEXTEND 0x02 267.74 - 267.75 -/** UCX Buffer. */ 267.76 -typedef struct { 267.77 - /** A pointer to the buffer contents. */ 267.78 - char *space; 267.79 - /** Current position of the buffer. */ 267.80 - size_t pos; 267.81 - /** Current capacity (i.e. maximum size) of the buffer. */ 267.82 - size_t capacity; 267.83 - /** Current size of the buffer content. */ 267.84 - size_t size; 267.85 - /** 267.86 - * Flag register for buffer features. 267.87 - * @see #UCX_BUFFER_DEFAULT 267.88 - * @see #UCX_BUFFER_AUTOFREE 267.89 - * @see #UCX_BUFFER_AUTOEXTEND 267.90 - */ 267.91 - int flags; 267.92 -} UcxBuffer; 267.93 - 267.94 -/** 267.95 - * Creates a new buffer. 267.96 - * 267.97 - * <b>Note:</b> you may provide <code>NULL</code> as argument for 267.98 - * <code>space</code>. Then this function will allocate the space and enforce 267.99 - * the #UCX_BUFFER_AUTOFREE flag. 267.100 - * 267.101 - * @param space pointer to the memory area, or <code>NULL</code> to allocate 267.102 - * new memory 267.103 - * @param capacity the capacity of the buffer 267.104 - * @param flags buffer features (see UcxBuffer.flags) 267.105 - * @return the new buffer 267.106 - */ 267.107 -UcxBuffer *ucx_buffer_new(void *space, size_t capacity, int flags); 267.108 - 267.109 -/** 267.110 - * Destroys a buffer. 267.111 - * 267.112 - * If the #UCX_BUFFER_AUTOFREE feature is enabled, the contents of the buffer 267.113 - * are also freed. 267.114 - * 267.115 - * @param buffer the buffer to destroy 267.116 - */ 267.117 -void ucx_buffer_free(UcxBuffer* buffer); 267.118 - 267.119 -/** 267.120 - * Creates a new buffer and fills it with extracted content from another buffer. 267.121 - * 267.122 - * <b>Note:</b> the #UCX_BUFFER_AUTOFREE feature is enforced for the new buffer. 267.123 - * 267.124 - * @param src the source buffer 267.125 - * @param start the start position of extraction 267.126 - * @param length the count of bytes to extract (must not be zero) 267.127 - * @param flags feature mask for the new buffer 267.128 - * @return a new buffer containing the extraction 267.129 - */ 267.130 -UcxBuffer* ucx_buffer_extract(UcxBuffer *src, 267.131 - size_t start, size_t length, int flags); 267.132 - 267.133 -/** 267.134 - * A shorthand macro for the full extraction of the buffer. 267.135 - * 267.136 - * @param src the source buffer 267.137 - * @param flags feature mask for the new buffer 267.138 - * @return a new buffer with the extracted content 267.139 - */ 267.140 -#define ucx_buffer_clone(src,flags) \ 267.141 - ucx_buffer_extract(src, 0, (src)->capacity, flags) 267.142 - 267.143 - 267.144 -/** 267.145 - * Shifts the contents of the buffer by the given offset. 267.146 - * 267.147 - * If the offset is positive, the contents are shifted to the right. 267.148 - * If auto extension is enabled, the buffer grows, if necessary. 267.149 - * In case the auto extension fails, this function returns a non-zero value and 267.150 - * no contents are changed. 267.151 - * If auto extension is disabled, the contents that do not fit into the buffer 267.152 - * are discarded. 267.153 - * 267.154 - * If the offset is negative, the contents are shifted to the left where the 267.155 - * first <code>shift</code> bytes are discarded. 267.156 - * The new size of the buffer is the old size minus 267.157 - * the absolute shift value. 267.158 - * If this value is larger than the buffer size, the buffer is emptied (but 267.159 - * not cleared, see the security note below). 267.160 - * 267.161 - * The buffer position gets shifted alongside with the content but is kept 267.162 - * within the boundaries of the buffer. 267.163 - * 267.164 - * <b>Security note:</b> the shifting operation does <em>not</em> erase the 267.165 - * previously occupied memory cells. You can easily do that manually, e.g. by 267.166 - * calling <code>memset(buffer->space, 0, shift)</code> for a right shift or 267.167 - * <code>memset(buffer->size, 0, buffer->capacity-buffer->size)</code> 267.168 - * for a left shift. 267.169 - * 267.170 - * @param buffer the buffer 267.171 - * @param shift the shift offset (negative means left shift) 267.172 - * @return 0 on success, non-zero if a required auto-extension fails 267.173 - */ 267.174 -int ucx_buffer_shift(UcxBuffer* buffer, off_t shift); 267.175 - 267.176 -/** 267.177 - * Shifts the buffer to the right. 267.178 - * See ucx_buffer_shift() for details. 267.179 - * 267.180 - * @param buffer the buffer 267.181 - * @param shift the shift offset 267.182 - * @return 0 on success, non-zero if a required auto-extension fails 267.183 - * @see ucx_buffer_shift() 267.184 - */ 267.185 -int ucx_buffer_shift_right(UcxBuffer* buffer, size_t shift); 267.186 - 267.187 -/** 267.188 - * Shifts the buffer to the left. 267.189 - * 267.190 - * See ucx_buffer_shift() for details. Note, however, that this method expects 267.191 - * a positive shift offset. 267.192 - * 267.193 - * Since a left shift cannot fail due to memory allocation problems, this 267.194 - * function always returns zero. 267.195 - * 267.196 - * @param buffer the buffer 267.197 - * @param shift the shift offset 267.198 - * @return always zero 267.199 - * @see ucx_buffer_shift() 267.200 - */ 267.201 -int ucx_buffer_shift_left(UcxBuffer* buffer, size_t shift); 267.202 - 267.203 - 267.204 -/** 267.205 - * Moves the position of the buffer. 267.206 - * 267.207 - * The new position is relative to the <code>whence</code> argument. 267.208 - * 267.209 - * SEEK_SET marks the start of the buffer. 267.210 - * SEEK_CUR marks the current position. 267.211 - * SEEK_END marks the end of the buffer. 267.212 - * 267.213 - * With an offset of zero, this function sets the buffer position to zero 267.214 - * (SEEK_SET), the buffer size (SEEK_END) or leaves the buffer position 267.215 - * unchanged (SEEK_CUR). 267.216 - * 267.217 - * @param buffer 267.218 - * @param offset position offset relative to <code>whence</code> 267.219 - * @param whence one of SEEK_SET, SEEK_CUR or SEEK_END 267.220 - * @return 0 on success, non-zero if the position is invalid 267.221 - * 267.222 - */ 267.223 -int ucx_buffer_seek(UcxBuffer *buffer, off_t offset, int whence); 267.224 - 267.225 -/** 267.226 - * Clears the buffer by resetting the position and deleting the data. 267.227 - * 267.228 - * The data is deleted by a zeroing it with call to <code>memset()</code>. 267.229 - * 267.230 - * @param buffer the buffer to be cleared 267.231 - */ 267.232 -#define ucx_buffer_clear(buffer) memset((buffer)->space, 0, (buffer)->size); \ 267.233 - (buffer)->size = 0; (buffer)->pos = 0; 267.234 - 267.235 -/** 267.236 - * Tests, if the buffer position has exceeded the buffer capacity. 267.237 - * 267.238 - * @param buffer the buffer to test 267.239 - * @return non-zero, if the current buffer position has exceeded the last 267.240 - * available byte of the buffer. 267.241 - */ 267.242 -int ucx_buffer_eof(UcxBuffer *buffer); 267.243 - 267.244 - 267.245 -/** 267.246 - * Extends the capacity of the buffer. 267.247 - * 267.248 - * <b>Note:</b> The buffer capacity increased by a power of two. I.e. 267.249 - * the buffer capacity is doubled, as long as it would not hold the current 267.250 - * content plus the additional required bytes. 267.251 - * 267.252 - * <b>Attention:</b> the argument provided is the number of <i>additional</i> 267.253 - * bytes the buffer shall hold. It is <b>NOT</b> the total number of bytes the 267.254 - * buffer shall hold. 267.255 - * 267.256 - * @param buffer the buffer to extend 267.257 - * @param additional_bytes the number of additional bytes the buffer shall 267.258 - * <i>at least</i> hold 267.259 - * @return 0 on success or a non-zero value on failure 267.260 - */ 267.261 -int ucx_buffer_extend(UcxBuffer *buffer, size_t additional_bytes); 267.262 - 267.263 -/** 267.264 - * Writes data to a UcxBuffer. 267.265 - * 267.266 - * The position of the buffer is increased by the number of bytes written. 267.267 - * 267.268 - * @param ptr a pointer to the memory area containing the bytes to be written 267.269 - * @param size the length of one element 267.270 - * @param nitems the element count 267.271 - * @param buffer the UcxBuffer to write to 267.272 - * @return the total count of bytes written 267.273 - */ 267.274 -size_t ucx_buffer_write(const void *ptr, size_t size, size_t nitems, 267.275 - UcxBuffer *buffer); 267.276 - 267.277 -/** 267.278 - * Reads data from a UcxBuffer. 267.279 - * 267.280 - * The position of the buffer is increased by the number of bytes read. 267.281 - * 267.282 - * @param ptr a pointer to the memory area where to store the read data 267.283 - * @param size the length of one element 267.284 - * @param nitems the element count 267.285 - * @param buffer the UcxBuffer to read from 267.286 - * @return the total number of elements read 267.287 - */ 267.288 -size_t ucx_buffer_read(void *ptr, size_t size, size_t nitems, 267.289 - UcxBuffer *buffer); 267.290 - 267.291 -/** 267.292 - * Writes a character to a buffer. 267.293 - * 267.294 - * The least significant byte of the argument is written to the buffer. If the 267.295 - * end of the buffer is reached and #UCX_BUFFER_AUTOEXTEND feature is enabled, 267.296 - * the buffer capacity is extended by ucx_buffer_extend(). If the feature is 267.297 - * disabled or buffer extension fails, <code>EOF</code> is returned. 267.298 - * 267.299 - * On successful write the position of the buffer is increased. 267.300 - * 267.301 - * @param buffer the buffer to write to 267.302 - * @param c the character to write as <code>int</code> value 267.303 - * @return the byte that has bean written as <code>int</code> value or 267.304 - * <code>EOF</code> when the end of the stream is reached and automatic 267.305 - * extension is not enabled or not possible 267.306 - */ 267.307 -int ucx_buffer_putc(UcxBuffer *buffer, int c); 267.308 - 267.309 -/** 267.310 - * Gets a character from a buffer. 267.311 - * 267.312 - * The current position of the buffer is increased after a successful read. 267.313 - * 267.314 - * @param buffer the buffer to read from 267.315 - * @return the character as <code>int</code> value or <code>EOF</code>, if the 267.316 - * end of the buffer is reached 267.317 - */ 267.318 -int ucx_buffer_getc(UcxBuffer *buffer); 267.319 - 267.320 -/** 267.321 - * Writes a string to a buffer. 267.322 - * 267.323 - * @param buffer the buffer 267.324 - * @param str the string 267.325 - * @return the number of bytes written 267.326 - */ 267.327 -size_t ucx_buffer_puts(UcxBuffer *buffer, const char *str); 267.328 - 267.329 -/** 267.330 - * Returns the complete buffer content as sstr_t. 267.331 - * @param buffer the buffer 267.332 - * @return the result of <code>sstrn()</code> with the buffer space and size 267.333 - * as arguments 267.334 - */ 267.335 -#define ucx_buffer_to_sstr(buffer) sstrn((buffer)->space, (buffer)->size) 267.336 - 267.337 -#ifdef __cplusplus 267.338 -} 267.339 -#endif 267.340 - 267.341 -#endif /* UCX_BUFFER_H */ 267.342 -
268.1 --- a/src/ucx/list.h Mon Dec 30 09:54:10 2019 +0100 268.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 268.3 @@ -1,512 +0,0 @@ 268.4 -/* 268.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 268.6 - * 268.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 268.8 - * 268.9 - * Redistribution and use in source and binary forms, with or without 268.10 - * modification, are permitted provided that the following conditions are met: 268.11 - * 268.12 - * 1. Redistributions of source code must retain the above copyright 268.13 - * notice, this list of conditions and the following disclaimer. 268.14 - * 268.15 - * 2. Redistributions in binary form must reproduce the above copyright 268.16 - * notice, this list of conditions and the following disclaimer in the 268.17 - * documentation and/or other materials provided with the distribution. 268.18 - * 268.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 268.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 268.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 268.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 268.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 268.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 268.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 268.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 268.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 268.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 268.29 - * POSSIBILITY OF SUCH DAMAGE. 268.30 - */ 268.31 -/** 268.32 - * Doubly linked list implementation. 268.33 - * 268.34 - * @file list.h 268.35 - * @author Mike Becker 268.36 - * @author Olaf Wintermann 268.37 - */ 268.38 - 268.39 -#ifndef UCX_LIST_H 268.40 -#define UCX_LIST_H 268.41 - 268.42 -#include "ucx.h" 268.43 -#include "allocator.h" 268.44 - 268.45 -#ifdef __cplusplus 268.46 -extern "C" { 268.47 -#endif 268.48 - 268.49 -/** 268.50 - * Loop statement for UCX lists. 268.51 - * 268.52 - * The first argument is the name of the iteration variable. The scope of 268.53 - * this variable is limited to the <code>UCX_FOREACH</code> statement. 268.54 - * 268.55 - * The second argument is a pointer to the list. In most cases this will be the 268.56 - * pointer to the first element of the list, but it may also be an arbitrary 268.57 - * element of the list. The iteration will then start with that element. 268.58 - * 268.59 - * @param list The first element of the list 268.60 - * @param elem The variable name of the element 268.61 - */ 268.62 -#define UCX_FOREACH(elem,list) \ 268.63 - for (UcxList* elem = (UcxList*) list ; elem != NULL ; elem = elem->next) 268.64 - 268.65 -/** 268.66 - * UCX list type. 268.67 - * @see UcxList 268.68 - */ 268.69 -typedef struct UcxList UcxList; 268.70 - 268.71 -/** 268.72 - * UCX list structure. 268.73 - */ 268.74 -struct UcxList { 268.75 - /** 268.76 - * List element payload. 268.77 - */ 268.78 - void *data; 268.79 - /** 268.80 - * Pointer to the next list element or <code>NULL</code>, if this is the 268.81 - * last element. 268.82 - */ 268.83 - UcxList *next; 268.84 - /** 268.85 - * Pointer to the previous list element or <code>NULL</code>, if this is 268.86 - * the first element. 268.87 - */ 268.88 - UcxList *prev; 268.89 -}; 268.90 - 268.91 -/** 268.92 - * Creates an element-wise copy of a list. 268.93 - * 268.94 - * This function clones the specified list by creating new list elements and 268.95 - * copying the data with the specified copy_func(). If no copy_func() is 268.96 - * specified, a shallow copy is created and the new list will reference the 268.97 - * same data as the source list. 268.98 - * 268.99 - * @param list the list to copy 268.100 - * @param cpyfnc a pointer to the function that shall copy an element (may be 268.101 - * <code>NULL</code>) 268.102 - * @param data additional data for the copy_func() 268.103 - * @return a pointer to the copy 268.104 - */ 268.105 -UcxList *ucx_list_clone(const UcxList *list, copy_func cpyfnc, void* data); 268.106 - 268.107 -/** 268.108 - * Creates an element-wise copy of a list using a UcxAllocator. 268.109 - * 268.110 - * See ucx_list_clone() for details. 268.111 - * 268.112 - * You might want to pass the allocator via the <code>data</code> parameter, 268.113 - * to access it within the copy function for making deep copies. 268.114 - * 268.115 - * @param allocator the allocator to use 268.116 - * @param list the list to copy 268.117 - * @param cpyfnc a pointer to the function that shall copy an element (may be 268.118 - * <code>NULL</code>) 268.119 - * @param data additional data for the copy_func() 268.120 - * @return a pointer to the copy 268.121 - * @see ucx_list_clone() 268.122 - */ 268.123 -UcxList *ucx_list_clone_a(UcxAllocator *allocator, const UcxList *list, 268.124 - copy_func cpyfnc, void* data); 268.125 - 268.126 -/** 268.127 - * Compares two UCX lists element-wise by using a compare function. 268.128 - * 268.129 - * Each element of the two specified lists are compared by using the specified 268.130 - * compare function and the additional data. The type and content of this 268.131 - * additional data depends on the cmp_func() used. 268.132 - * 268.133 - * If the list pointers denote elements within a list, the lists are compared 268.134 - * starting with the denoted elements. Thus any previous elements are not taken 268.135 - * into account. This might be useful to check, if certain list tails match 268.136 - * each other. 268.137 - * 268.138 - * @param list1 the first list 268.139 - * @param list2 the second list 268.140 - * @param cmpfnc the compare function 268.141 - * @param data additional data for the compare function 268.142 - * @return 1, if and only if the two lists equal element-wise, 0 otherwise 268.143 - */ 268.144 -int ucx_list_equals(const UcxList *list1, const UcxList *list2, 268.145 - cmp_func cmpfnc, void* data); 268.146 - 268.147 -/** 268.148 - * Destroys the entire list. 268.149 - * 268.150 - * The members of the list are not automatically freed, so ensure they are 268.151 - * otherwise referenced or destroyed by ucx_list_free_contents(). 268.152 - * Otherwise, a memory leak is likely to occur. 268.153 - * 268.154 - * <b>Caution:</b> the argument <b>MUST</b> denote an entire list (i.e. a call 268.155 - * to ucx_list_first() on the argument must return the argument itself) 268.156 - * 268.157 - * @param list the list to free 268.158 - * @see ucx_list_free_contents() 268.159 - */ 268.160 -void ucx_list_free(UcxList *list); 268.161 - 268.162 -/** 268.163 - * Destroys the entire list using a UcxAllocator. 268.164 - * 268.165 - * See ucx_list_free() for details. 268.166 - * 268.167 - * @param allocator the allocator to use 268.168 - * @param list the list to free 268.169 - * @see ucx_list_free() 268.170 - */ 268.171 -void ucx_list_free_a(UcxAllocator *allocator, UcxList *list); 268.172 - 268.173 -/** 268.174 - * Destroys the contents of the specified list by calling the specified 268.175 - * destructor on each of them. 268.176 - * 268.177 - * Note, that the contents are not usable afterwards and the list should be 268.178 - * destroyed with ucx_list_free(). 268.179 - * 268.180 - * If no destructor is specified (<code>NULL</code>), stdlib's free() is used. 268.181 - * 268.182 - * @param list the list for which the contents shall be freed 268.183 - * @param destr optional destructor function 268.184 - * @see ucx_list_free() 268.185 - */ 268.186 -void ucx_list_free_content(UcxList* list, ucx_destructor destr); 268.187 - 268.188 - 268.189 -/** 268.190 - * Inserts an element at the end of the list. 268.191 - * 268.192 - * This is generally an O(n) operation, as the end of the list is retrieved with 268.193 - * ucx_list_last(). 268.194 - * 268.195 - * @param list the list where to append the data, or <code>NULL</code> to 268.196 - * create a new list 268.197 - * @param data the data to insert 268.198 - * @return <code>list</code>, if it is not <code>NULL</code> or a pointer to 268.199 - * the newly created list otherwise 268.200 - */ 268.201 -UcxList *ucx_list_append(UcxList *list, void *data); 268.202 - 268.203 -/** 268.204 - * Inserts an element at the end of the list using a UcxAllocator. 268.205 - * 268.206 - * See ucx_list_append() for details. 268.207 - * 268.208 - * @param allocator the allocator to use 268.209 - * @param list the list where to append the data, or <code>NULL</code> to 268.210 - * create a new list 268.211 - * @param data the data to insert 268.212 - * @return <code>list</code>, if it is not <code>NULL</code> or a pointer to 268.213 - * the newly created list otherwise 268.214 - * @see ucx_list_append() 268.215 - */ 268.216 -UcxList *ucx_list_append_a(UcxAllocator *allocator, UcxList *list, void *data); 268.217 - 268.218 - 268.219 -/** 268.220 - * Inserts an element at the beginning of the list. 268.221 - * 268.222 - * You <i>should</i> overwrite the old list pointer by calling 268.223 - * <code>mylist = ucx_list_prepend(mylist, mydata);</code>. However, you may 268.224 - * also perform successive calls of ucx_list_prepend() on the same list pointer, 268.225 - * as this function always searchs for the head of the list with 268.226 - * ucx_list_first(). 268.227 - * 268.228 - * @param list the list where to insert the data or <code>NULL</code> to create 268.229 - * a new list 268.230 - * @param data the data to insert 268.231 - * @return a pointer to the new list head 268.232 - */ 268.233 -UcxList *ucx_list_prepend(UcxList *list, void *data); 268.234 - 268.235 -/** 268.236 - * Inserts an element at the beginning of the list using a UcxAllocator. 268.237 - * 268.238 - * See ucx_list_prepend() for details. 268.239 - * 268.240 - * @param allocator the allocator to use 268.241 - * @param list the list where to insert the data or <code>NULL</code> to create 268.242 - * a new list 268.243 - * @param data the data to insert 268.244 - * @return a pointer to the new list head 268.245 - * @see ucx_list_prepend() 268.246 - */ 268.247 -UcxList *ucx_list_prepend_a(UcxAllocator *allocator, UcxList *list, void *data); 268.248 - 268.249 -/** 268.250 - * Concatenates two lists. 268.251 - * 268.252 - * Either of the two arguments may be <code>NULL</code>. 268.253 - * 268.254 - * This function modifies the references to the next/previous element of 268.255 - * the last/first element of <code>list1</code>/<code> 268.256 - * list2</code>. 268.257 - * 268.258 - * @param list1 first list 268.259 - * @param list2 second list 268.260 - * @return if <code>list1</code> is <code>NULL</code>, <code>list2</code> is 268.261 - * returned, otherwise <code>list1</code> is returned 268.262 - */ 268.263 -UcxList *ucx_list_concat(UcxList *list1, UcxList *list2); 268.264 - 268.265 -/** 268.266 - * Returns the first element of a list. 268.267 - * 268.268 - * If the argument is the list pointer, it is directly returned. Otherwise 268.269 - * this function traverses to the first element of the list and returns the 268.270 - * list pointer. 268.271 - * 268.272 - * @param elem one element of the list 268.273 - * @return the first element of the list, the specified element is a member of 268.274 - */ 268.275 -UcxList *ucx_list_first(const UcxList *elem); 268.276 - 268.277 -/** 268.278 - * Returns the last element of a list. 268.279 - * 268.280 - * If the argument has no successor, it is the last element and therefore 268.281 - * directly returned. Otherwise this function traverses to the last element of 268.282 - * the list and returns it. 268.283 - * 268.284 - * @param elem one element of the list 268.285 - * @return the last element of the list, the specified element is a member of 268.286 - */ 268.287 -UcxList *ucx_list_last(const UcxList *elem); 268.288 - 268.289 -/** 268.290 - * Returns the list element at the specified index. 268.291 - * 268.292 - * @param list the list to retrieve the element from 268.293 - * @param index index of the element to return 268.294 - * @return the element at the specified index or <code>NULL</code>, if the 268.295 - * index is greater than the list size 268.296 - */ 268.297 -UcxList *ucx_list_get(const UcxList *list, size_t index); 268.298 - 268.299 -/** 268.300 - * Returns the index of an element. 268.301 - * 268.302 - * @param list the list where to search for the element 268.303 - * @param elem the element to find 268.304 - * @return the index of the element or -1 if the list does not contain the 268.305 - * element 268.306 - */ 268.307 -ssize_t ucx_list_indexof(const UcxList *list, const UcxList *elem); 268.308 - 268.309 -/** 268.310 - * Returns the element count of the list. 268.311 - * 268.312 - * @param list the list whose elements are counted 268.313 - * @return the element count 268.314 - */ 268.315 -size_t ucx_list_size(const UcxList *list); 268.316 - 268.317 -/** 268.318 - * Returns the index of an element containing the specified data. 268.319 - * 268.320 - * This function uses a cmp_func() to compare the data of each list element 268.321 - * with the specified data. If no cmp_func is provided, the pointers are 268.322 - * compared. 268.323 - * 268.324 - * If the list contains the data more than once, the index of the first 268.325 - * occurrence is returned. 268.326 - * 268.327 - * @param list the list where to search for the data 268.328 - * @param elem the element data 268.329 - * @param cmpfnc the compare function 268.330 - * @param data additional data for the compare function 268.331 - * @return the index of the element containing the specified data or -1 if the 268.332 - * data is not found in this list 268.333 - */ 268.334 -ssize_t ucx_list_find(const UcxList *list, void *elem, 268.335 - cmp_func cmpfnc, void *data); 268.336 - 268.337 -/** 268.338 - * Checks, if a list contains a specific element. 268.339 - * 268.340 - * An element is found, if ucx_list_find() returns a value greater than -1. 268.341 - * 268.342 - * @param list the list where to search for the data 268.343 - * @param elem the element data 268.344 - * @param cmpfnc the compare function 268.345 - * @param data additional data for the compare function 268.346 - * @return 1, if and only if the list contains the specified element data 268.347 - * @see ucx_list_find() 268.348 - */ 268.349 -int ucx_list_contains(const UcxList *list, void *elem, 268.350 - cmp_func cmpfnc, void *data); 268.351 - 268.352 -/** 268.353 - * Sorts a UcxList with natural merge sort. 268.354 - * 268.355 - * This function uses O(n) additional temporary memory for merge operations 268.356 - * that is automatically freed after each merge. 268.357 - * 268.358 - * As the head of the list might change, you <b>MUST</b> call this function 268.359 - * as follows: <code>mylist = ucx_list_sort(mylist, mycmpfnc, mydata);</code>. 268.360 - * 268.361 - * @param list the list to sort 268.362 - * @param cmpfnc the function that shall be used to compare the element data 268.363 - * @param data additional data for the cmp_func() 268.364 - * @return the sorted list 268.365 - */ 268.366 -UcxList *ucx_list_sort(UcxList *list, cmp_func cmpfnc, void *data); 268.367 - 268.368 -/** 268.369 - * Removes an element from the list. 268.370 - * 268.371 - * If the first element is removed, the list pointer changes. So it is 268.372 - * <i>highly recommended</i> to <i>always</i> update the pointer by calling 268.373 - * <code>mylist = ucx_list_remove(mylist, myelem);</code>. 268.374 - * 268.375 - * @param list the list from which the element shall be removed 268.376 - * @param element the element to remove 268.377 - * @return returns the updated list pointer or <code>NULL</code>, if the list 268.378 - * is now empty 268.379 - */ 268.380 -UcxList *ucx_list_remove(UcxList *list, UcxList *element); 268.381 - 268.382 -/** 268.383 - * Removes an element from the list using a UcxAllocator. 268.384 - * 268.385 - * See ucx_list_remove() for details. 268.386 - * 268.387 - * @param allocator the allocator to use 268.388 - * @param list the list from which the element shall be removed 268.389 - * @param element the element to remove 268.390 - * @return returns the updated list pointer or <code>NULL</code>, if the list 268.391 - * @see ucx_list_remove() 268.392 - */ 268.393 -UcxList *ucx_list_remove_a(UcxAllocator *allocator, UcxList *list, 268.394 - UcxList *element); 268.395 - 268.396 -/** 268.397 - * Returns the union of two lists. 268.398 - * 268.399 - * The union is a list of unique elements regarding cmpfnc obtained from 268.400 - * both source lists. 268.401 - * 268.402 - * @param left the left source list 268.403 - * @param right the right source list 268.404 - * @param cmpfnc a function to compare elements 268.405 - * @param cmpdata additional data for the compare function 268.406 - * @param cpfnc a function to copy the elements 268.407 - * @param cpdata additional data for the copy function 268.408 - * @return a new list containing the union 268.409 - */ 268.410 -UcxList* ucx_list_union(const UcxList *left, const UcxList *right, 268.411 - cmp_func cmpfnc, void* cmpdata, 268.412 - copy_func cpfnc, void* cpdata); 268.413 - 268.414 -/** 268.415 - * Returns the union of two lists. 268.416 - * 268.417 - * The union is a list of unique elements regarding cmpfnc obtained from 268.418 - * both source lists. 268.419 - * 268.420 - * @param allocator allocates the new list elements 268.421 - * @param left the left source list 268.422 - * @param right the right source list 268.423 - * @param cmpfnc a function to compare elements 268.424 - * @param cmpdata additional data for the compare function 268.425 - * @param cpfnc a function to copy the elements 268.426 - * @param cpdata additional data for the copy function 268.427 - * @return a new list containing the union 268.428 - */ 268.429 -UcxList* ucx_list_union_a(UcxAllocator *allocator, 268.430 - const UcxList *left, const UcxList *right, 268.431 - cmp_func cmpfnc, void* cmpdata, 268.432 - copy_func cpfnc, void* cpdata); 268.433 - 268.434 -/** 268.435 - * Returns the intersection of two lists. 268.436 - * 268.437 - * The intersection contains all elements of the left list 268.438 - * (including duplicates) that can be found in the right list. 268.439 - * 268.440 - * @param left the left source list 268.441 - * @param right the right source list 268.442 - * @param cmpfnc a function to compare elements 268.443 - * @param cmpdata additional data for the compare function 268.444 - * @param cpfnc a function to copy the elements 268.445 - * @param cpdata additional data for the copy function 268.446 - * @return a new list containing the intersection 268.447 - */ 268.448 -UcxList* ucx_list_intersection(const UcxList *left, const UcxList *right, 268.449 - cmp_func cmpfnc, void* cmpdata, 268.450 - copy_func cpfnc, void* cpdata); 268.451 - 268.452 -/** 268.453 - * Returns the intersection of two lists. 268.454 - * 268.455 - * The intersection contains all elements of the left list 268.456 - * (including duplicates) that can be found in the right list. 268.457 - * 268.458 - * @param allocator allocates the new list elements 268.459 - * @param left the left source list 268.460 - * @param right the right source list 268.461 - * @param cmpfnc a function to compare elements 268.462 - * @param cmpdata additional data for the compare function 268.463 - * @param cpfnc a function to copy the elements 268.464 - * @param cpdata additional data for the copy function 268.465 - * @return a new list containing the intersection 268.466 - */ 268.467 -UcxList* ucx_list_intersection_a(UcxAllocator *allocator, 268.468 - const UcxList *left, const UcxList *right, 268.469 - cmp_func cmpfnc, void* cmpdata, 268.470 - copy_func cpfnc, void* cpdata); 268.471 - 268.472 -/** 268.473 - * Returns the difference of two lists. 268.474 - * 268.475 - * The difference contains all elements of the left list 268.476 - * (including duplicates) that are not equal to any element of the right list. 268.477 - * 268.478 - * @param left the left source list 268.479 - * @param right the right source list 268.480 - * @param cmpfnc a function to compare elements 268.481 - * @param cmpdata additional data for the compare function 268.482 - * @param cpfnc a function to copy the elements 268.483 - * @param cpdata additional data for the copy function 268.484 - * @return a new list containing the difference 268.485 - */ 268.486 -UcxList* ucx_list_difference(const UcxList *left, const UcxList *right, 268.487 - cmp_func cmpfnc, void* cmpdata, 268.488 - copy_func cpfnc, void* cpdata); 268.489 - 268.490 -/** 268.491 - * Returns the difference of two lists. 268.492 - * 268.493 - * The difference contains all elements of the left list 268.494 - * (including duplicates) that are not equal to any element of the right list. 268.495 - * 268.496 - * @param allocator allocates the new list elements 268.497 - * @param left the left source list 268.498 - * @param right the right source list 268.499 - * @param cmpfnc a function to compare elements 268.500 - * @param cmpdata additional data for the compare function 268.501 - * @param cpfnc a function to copy the elements 268.502 - * @param cpdata additional data for the copy function 268.503 - * @return a new list containing the difference 268.504 - */ 268.505 -UcxList* ucx_list_difference_a(UcxAllocator *allocator, 268.506 - const UcxList *left, const UcxList *right, 268.507 - cmp_func cmpfnc, void* cmpdata, 268.508 - copy_func cpfnc, void* cpdata); 268.509 - 268.510 -#ifdef __cplusplus 268.511 -} 268.512 -#endif 268.513 - 268.514 -#endif /* UCX_LIST_H */ 268.515 -
269.1 --- a/src/ucx/logging.h Mon Dec 30 09:54:10 2019 +0100 269.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 269.3 @@ -1,253 +0,0 @@ 269.4 -/* 269.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 269.6 - * 269.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 269.8 - * 269.9 - * Redistribution and use in source and binary forms, with or without 269.10 - * modification, are permitted provided that the following conditions are met: 269.11 - * 269.12 - * 1. Redistributions of source code must retain the above copyright 269.13 - * notice, this list of conditions and the following disclaimer. 269.14 - * 269.15 - * 2. Redistributions in binary form must reproduce the above copyright 269.16 - * notice, this list of conditions and the following disclaimer in the 269.17 - * documentation and/or other materials provided with the distribution. 269.18 - * 269.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 269.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 269.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 269.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 269.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 269.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 269.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 269.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 269.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 269.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 269.29 - * POSSIBILITY OF SUCH DAMAGE. 269.30 - */ 269.31 -/** 269.32 - * Logging API. 269.33 - * 269.34 - * @file logging.h 269.35 - * @author Mike Becker, Olaf Wintermann 269.36 - */ 269.37 -#ifndef UCX_LOGGING_H 269.38 -#define UCX_LOGGING_H 269.39 - 269.40 -#include "ucx.h" 269.41 -#include "map.h" 269.42 -#include "string.h" 269.43 -#include <stdio.h> 269.44 - 269.45 -#ifdef __cplusplus 269.46 -extern "C" { 269.47 -#endif 269.48 - 269.49 -/* leave enough space for custom log levels */ 269.50 - 269.51 -/** Log level for error messages. */ 269.52 -#define UCX_LOGGER_ERROR 0x00 269.53 - 269.54 -/** Log level for warning messages. */ 269.55 -#define UCX_LOGGER_WARN 0x10 269.56 - 269.57 -/** Log level for information messages. */ 269.58 -#define UCX_LOGGER_INFO 0x20 269.59 - 269.60 -/** Log level for debug messages. */ 269.61 -#define UCX_LOGGER_DEBUG 0x30 269.62 - 269.63 -/** Log level for trace messages. */ 269.64 -#define UCX_LOGGER_TRACE 0x40 269.65 - 269.66 -/** 269.67 - * Output flag for the log level. 269.68 - * If this flag is set, the log message will contain the log level. 269.69 - * @see UcxLogger.mask 269.70 - */ 269.71 -#define UCX_LOGGER_LEVEL 0x01 269.72 - 269.73 -/** 269.74 - * Output flag for the timestmap. 269.75 - * If this flag is set, the log message will contain the timestmap. 269.76 - * @see UcxLogger.mask 269.77 - */ 269.78 -#define UCX_LOGGER_TIMESTAMP 0x02 269.79 - 269.80 -/** 269.81 - * Output flag for the source. 269.82 - * If this flag is set, the log message will contain the source file and line 269.83 - * number. 269.84 - * @see UcxLogger.mask 269.85 - */ 269.86 -#define UCX_LOGGER_SOURCE 0x04 269.87 - 269.88 -/** 269.89 - * The UCX Logger object. 269.90 - */ 269.91 -typedef struct { 269.92 - /** The stream this logger writes its messages to.*/ 269.93 - void *stream; 269.94 - 269.95 - /** 269.96 - * The write function that shall be used. 269.97 - * For standard file or stdout loggers this might be standard fwrite 269.98 - * (default). 269.99 - */ 269.100 - write_func writer; 269.101 - 269.102 - /** 269.103 - * The date format for timestamp outputs including the delimiter 269.104 - * (default: <code>"%F %T %z "</code>). 269.105 - * @see UCX_LOGGER_TIMESTAMP 269.106 - */ 269.107 - char *dateformat; 269.108 - 269.109 - /** 269.110 - * The level, this logger operates on. 269.111 - * If a log command is issued, the message will only be logged, if the log 269.112 - * level of the message is less or equal than the log level of the logger. 269.113 - */ 269.114 - unsigned int level; 269.115 - 269.116 - /** 269.117 - * A configuration mask for automatic output. 269.118 - * For each flag that is set, the logger automatically outputs some extra 269.119 - * information like the timestamp or the source file and line number. 269.120 - * See the documentation for the flags for details. 269.121 - */ 269.122 - unsigned int mask; 269.123 - 269.124 - /** 269.125 - * A map of valid log levels for this logger. 269.126 - * 269.127 - * The keys represent all valid log levels and the values provide string 269.128 - * representations, that are used, if the UCX_LOGGER_LEVEL flag is set. 269.129 - * 269.130 - * The exact data types are <code>unsigned int</code> for the key and 269.131 - * <code>const char*</code> for the value. 269.132 - * 269.133 - * @see UCX_LOGGER_LEVEL 269.134 - */ 269.135 - UcxMap* levels; 269.136 -} UcxLogger; 269.137 - 269.138 -/** 269.139 - * Creates a new logger. 269.140 - * @param stream the stream, which the logger shall write to 269.141 - * @param level the level on which the logger shall operate 269.142 - * @param mask configuration mask (cf. UcxLogger.mask) 269.143 - * @return a new logger object 269.144 - */ 269.145 -UcxLogger *ucx_logger_new(void *stream, unsigned int level, unsigned int mask); 269.146 - 269.147 -/** 269.148 - * Destroys the logger. 269.149 - * 269.150 - * The map containing the valid log levels is also automatically destroyed. 269.151 - * 269.152 - * @param logger the logger to destroy 269.153 - */ 269.154 -void ucx_logger_free(UcxLogger* logger); 269.155 - 269.156 -/** 269.157 - * Internal log function - use macros instead. 269.158 - * 269.159 - * This function uses the <code>format</code> and variadic arguments for a 269.160 - * printf()-style output of the log message. 269.161 - * 269.162 - * Dependent on the UcxLogger.mask some information is prepended. The complete 269.163 - * format is: 269.164 - * 269.165 - * <code>[LEVEL] [TIMESTAMP] [SOURCEFILE]:[LINENO] message</code> 269.166 - * 269.167 - * The source file name is reduced to the actual file name. This is necessary to 269.168 - * get consistent behavior over different definitions of the __FILE__ macro. 269.169 - * 269.170 - * <b>Attention:</b> the message (including automatically generated information) 269.171 - * is limited to 4096 characters. The level description is limited to 269.172 - * 256 characters and the timestamp string is limited to 128 characters. 269.173 - * 269.174 - * @param logger the logger to use 269.175 - * @param level the level to log on 269.176 - * @param file information about the source file 269.177 - * @param line information about the source line number 269.178 - * @param format format string 269.179 - * @param ... arguments 269.180 - * @see ucx_logger_log() 269.181 - */ 269.182 -void ucx_logger_logf(UcxLogger *logger, unsigned int level, const char* file, 269.183 - const unsigned int line, const char* format, ...); 269.184 - 269.185 -/** 269.186 - * Registers a custom log level. 269.187 - * @param logger the logger 269.188 - * @param level the log level as unsigned integer 269.189 - * @param name a string literal describing the level 269.190 - */ 269.191 -#define ucx_logger_register_level(logger, level, name) {\ 269.192 - unsigned int l; \ 269.193 - l = level; \ 269.194 - ucx_map_int_put(logger->levels, l, (void*) "[" name "]"); \ 269.195 - } while (0); 269.196 - 269.197 -/** 269.198 - * Logs a message at the specified level. 269.199 - * @param logger the logger to use 269.200 - * @param level the level to log the message on 269.201 - * @param ... format string and arguments 269.202 - * @see ucx_logger_logf() 269.203 - */ 269.204 -#define ucx_logger_log(logger, level, ...) \ 269.205 - ucx_logger_logf(logger, level, __FILE__, __LINE__, __VA_ARGS__) 269.206 - 269.207 -/** 269.208 - * Shortcut for logging an error message. 269.209 - * @param logger the logger to use 269.210 - * @param ... format string and arguments 269.211 - * @see ucx_logger_logf() 269.212 - */ 269.213 -#define ucx_logger_error(logger, ...) \ 269.214 - ucx_logger_log(logger, UCX_LOGGER_ERROR, __VA_ARGS__) 269.215 - 269.216 -/** 269.217 - * Shortcut for logging an information message. 269.218 - * @param logger the logger to use 269.219 - * @param ... format string and arguments 269.220 - * @see ucx_logger_logf() 269.221 - */ 269.222 -#define ucx_logger_info(logger, ...) \ 269.223 - ucx_logger_log(logger, UCX_LOGGER_INFO, __VA_ARGS__) 269.224 - 269.225 -/** 269.226 - * Shortcut for logging a warning message. 269.227 - * @param logger the logger to use 269.228 - * @param ... format string and arguments 269.229 - * @see ucx_logger_logf() 269.230 - */ 269.231 -#define ucx_logger_warn(logger, ...) \ 269.232 - ucx_logger_log(logger, UCX_LOGGER_WARN, __VA_ARGS__) 269.233 - 269.234 -/** 269.235 - * Shortcut for logging a debug message. 269.236 - * @param logger the logger to use 269.237 - * @param ... format string and arguments 269.238 - * @see ucx_logger_logf() 269.239 - */ 269.240 -#define ucx_logger_debug(logger, ...) \ 269.241 - ucx_logger_log(logger, UCX_LOGGER_DEBUG, __VA_ARGS__) 269.242 - 269.243 -/** 269.244 - * Shortcut for logging a trace message. 269.245 - * @param logger the logger to use 269.246 - * @param ... format string and arguments 269.247 - * @see ucx_logger_logf() 269.248 - */ 269.249 -#define ucx_logger_trace(logger, ...) \ 269.250 - ucx_logger_log(logger, UCX_LOGGER_TRACE, __VA_ARGS__) 269.251 - 269.252 -#ifdef __cplusplus 269.253 -} 269.254 -#endif 269.255 - 269.256 -#endif /* UCX_LOGGING_H */
270.1 --- a/src/ucx/map.h Mon Dec 30 09:54:10 2019 +0100 270.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 270.3 @@ -1,549 +0,0 @@ 270.4 -/* 270.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 270.6 - * 270.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 270.8 - * 270.9 - * Redistribution and use in source and binary forms, with or without 270.10 - * modification, are permitted provided that the following conditions are met: 270.11 - * 270.12 - * 1. Redistributions of source code must retain the above copyright 270.13 - * notice, this list of conditions and the following disclaimer. 270.14 - * 270.15 - * 2. Redistributions in binary form must reproduce the above copyright 270.16 - * notice, this list of conditions and the following disclaimer in the 270.17 - * documentation and/or other materials provided with the distribution. 270.18 - * 270.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 270.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 270.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 270.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 270.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 270.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 270.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 270.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 270.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 270.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 270.29 - * POSSIBILITY OF SUCH DAMAGE. 270.30 - */ 270.31 - 270.32 -/** 270.33 - * @file map.h 270.34 - * 270.35 - * Hash map implementation. 270.36 - * 270.37 - * This implementation uses murmur hash 2 and separate chaining with linked 270.38 - * lists. 270.39 - * 270.40 - * @author Mike Becker 270.41 - * @author Olaf Wintermann 270.42 - */ 270.43 - 270.44 -#ifndef UCX_MAP_H 270.45 -#define UCX_MAP_H 270.46 - 270.47 -#include "ucx.h" 270.48 -#include "string.h" 270.49 -#include "allocator.h" 270.50 -#include <stdio.h> 270.51 - 270.52 -#ifdef __cplusplus 270.53 -extern "C" { 270.54 -#endif 270.55 - 270.56 -/** 270.57 - * Loop statement for UCX maps. 270.58 - * 270.59 - * The <code>key</code> variable is implicitly defined, but the 270.60 - * <code>value</code> variable must be already declared as type information 270.61 - * cannot be inferred. 270.62 - * 270.63 - * @param key the variable name for the key 270.64 - * @param value the variable name for the value 270.65 - * @param iter a UcxMapIterator 270.66 - * @see ucx_map_iterator() 270.67 - */ 270.68 -#define UCX_MAP_FOREACH(key,value,iter) \ 270.69 - for(UcxKey key;ucx_map_iter_next(&iter,&key, (void**)&value);) 270.70 - 270.71 -/** Type for the UCX map. @see UcxMap */ 270.72 -typedef struct UcxMap UcxMap; 270.73 - 270.74 -/** Type for a key of a UcxMap. @see UcxKey */ 270.75 -typedef struct UcxKey UcxKey; 270.76 - 270.77 -/** Type for an element of a UcxMap. @see UcxMapElement */ 270.78 -typedef struct UcxMapElement UcxMapElement; 270.79 - 270.80 -/** Type for an iterator over a UcxMap. @see UcxMapIterator */ 270.81 -typedef struct UcxMapIterator UcxMapIterator; 270.82 - 270.83 -/** Structure for the UCX map. */ 270.84 -struct UcxMap { 270.85 - /** An allocator that is used for the map elements. */ 270.86 - UcxAllocator *allocator; 270.87 - /** The array of map element lists. */ 270.88 - UcxMapElement **map; 270.89 - /** The size of the map is the length of the element list array. */ 270.90 - size_t size; 270.91 - /** The count of elements currently stored in this map. */ 270.92 - size_t count; 270.93 -}; 270.94 - 270.95 -/** Structure to publicly denote a key of a UcxMap. */ 270.96 -struct UcxKey { 270.97 - /** The key data. */ 270.98 - const void *data; 270.99 - /** The length of the key data. */ 270.100 - size_t len; 270.101 - /** A cache for the hash value of the key data. */ 270.102 - int hash; 270.103 -}; 270.104 - 270.105 -/** Internal structure for a key of a UcxMap. */ 270.106 -struct UcxMapKey { 270.107 - /** The key data. */ 270.108 - void *data; 270.109 - /** The length of the key data. */ 270.110 - size_t len; 270.111 - /** The hash value of the key data. */ 270.112 - int hash; 270.113 -}; 270.114 - 270.115 -/** Structure for an element of a UcxMap. */ 270.116 -struct UcxMapElement { 270.117 - /** The value data. */ 270.118 - void *data; 270.119 - 270.120 - /** A pointer to the next element in the current list. */ 270.121 - UcxMapElement *next; 270.122 - 270.123 - /** The corresponding key. */ 270.124 - struct UcxMapKey key; 270.125 -}; 270.126 - 270.127 -/** Structure for an iterator over a UcxMap. */ 270.128 -struct UcxMapIterator { 270.129 - /** The map to iterate over. */ 270.130 - UcxMap const *map; 270.131 - 270.132 - /** The current map element. */ 270.133 - UcxMapElement *cur; 270.134 - 270.135 - /** 270.136 - * The current index of the element list array. 270.137 - * <b>Attention: </b> this is <b>NOT</b> the element index! Do <b>NOT</b> 270.138 - * manually iterate over the map by increasing this index. Use 270.139 - * ucx_map_iter_next(). 270.140 - * @see UcxMap.map*/ 270.141 - size_t index; 270.142 -}; 270.143 - 270.144 -/** 270.145 - * Creates a new hash map with the specified size. 270.146 - * @param size the size of the hash map 270.147 - * @return a pointer to the new hash map 270.148 - */ 270.149 -UcxMap *ucx_map_new(size_t size); 270.150 - 270.151 -/** 270.152 - * Creates a new hash map with the specified size using a UcxAllocator. 270.153 - * @param allocator the allocator to use 270.154 - * @param size the size of the hash map 270.155 - * @return a pointer to the new hash map 270.156 - */ 270.157 -UcxMap *ucx_map_new_a(UcxAllocator *allocator, size_t size); 270.158 - 270.159 -/** 270.160 - * Frees a hash map. 270.161 - * 270.162 - * <b>Note:</b> the contents are <b>not</b> freed, use ucx_map_free_content() 270.163 - * before calling this function to achieve that. 270.164 - * 270.165 - * @param map the map to be freed 270.166 - * @see ucx_map_free_content() 270.167 - */ 270.168 -void ucx_map_free(UcxMap *map); 270.169 - 270.170 -/** 270.171 - * Frees the contents of a hash map. 270.172 - * 270.173 - * This is a convenience function that iterates over the map and passes all 270.174 - * values to the specified destructor function. 270.175 - * 270.176 - * If no destructor is specified (<code>NULL</code>), the free() function of 270.177 - * the map's own allocator is used. 270.178 - * 270.179 - * You must ensure, that it is valid to pass each value in the map to the same 270.180 - * destructor function. 270.181 - * 270.182 - * You should free or clear the map afterwards, as the contents will be invalid. 270.183 - * 270.184 - * @param map for which the contents shall be freed 270.185 - * @param destr optional pointer to a destructor function 270.186 - * @see ucx_map_free() 270.187 - * @see ucx_map_clear() 270.188 - */ 270.189 -void ucx_map_free_content(UcxMap *map, ucx_destructor destr); 270.190 - 270.191 -/** 270.192 - * Clears a hash map. 270.193 - * 270.194 - * <b>Note:</b> the contents are <b>not</b> freed, use ucx_map_free_content() 270.195 - * before calling this function to achieve that. 270.196 - * 270.197 - * @param map the map to be cleared 270.198 - * @see ucx_map_free_content() 270.199 - */ 270.200 -void ucx_map_clear(UcxMap *map); 270.201 - 270.202 - 270.203 -/** 270.204 - * Copies contents from a map to another map using a copy function. 270.205 - * 270.206 - * <b>Note:</b> The destination map does not need to be empty. However, if it 270.207 - * contains data with keys that are also present in the source map, the contents 270.208 - * are overwritten. 270.209 - * 270.210 - * @param from the source map 270.211 - * @param to the destination map 270.212 - * @param fnc the copy function or <code>NULL</code> if the pointer address 270.213 - * shall be copied 270.214 - * @param data additional data for the copy function 270.215 - * @return 0 on success or a non-zero value on memory allocation errors 270.216 - */ 270.217 -int ucx_map_copy(UcxMap const *from, UcxMap *to, copy_func fnc, void *data); 270.218 - 270.219 -/** 270.220 - * Clones the map and rehashes if necessary. 270.221 - * 270.222 - * <b>Note:</b> In contrast to ucx_map_rehash() the load factor is irrelevant. 270.223 - * This function <i>always</i> ensures a new UcxMap.size of at least 270.224 - * 2.5*UcxMap.count. 270.225 - * 270.226 - * @param map the map to clone 270.227 - * @param fnc the copy function to use or <code>NULL</code> if the new and 270.228 - * the old map shall share the data pointers 270.229 - * @param data additional data for the copy function 270.230 - * @return the cloned map 270.231 - * @see ucx_map_copy() 270.232 - */ 270.233 -UcxMap *ucx_map_clone(UcxMap const *map, copy_func fnc, void *data); 270.234 - 270.235 -/** 270.236 - * Clones the map and rehashes if necessary. 270.237 - * 270.238 - * <b>Note:</b> In contrast to ucx_map_rehash() the load factor is irrelevant. 270.239 - * This function <i>always</i> ensures a new UcxMap.size of at least 270.240 - * 2.5*UcxMap.count. 270.241 - * 270.242 - * @param allocator the allocator to use for the cloned map 270.243 - * @param map the map to clone 270.244 - * @param fnc the copy function to use or <code>NULL</code> if the new and 270.245 - * the old map shall share the data pointers 270.246 - * @param data additional data for the copy function 270.247 - * @return the cloned map 270.248 - * @see ucx_map_copy() 270.249 - */ 270.250 -UcxMap *ucx_map_clone_a(UcxAllocator *allocator, 270.251 - UcxMap const *map, copy_func fnc, void *data); 270.252 - 270.253 -/** 270.254 - * Increases size of the hash map, if necessary. 270.255 - * 270.256 - * The load value is 0.75*UcxMap.size. If the element count exceeds the load 270.257 - * value, the map needs to be rehashed. Otherwise no action is performed and 270.258 - * this function simply returns 0. 270.259 - * 270.260 - * The rehashing process ensures, that the UcxMap.size is at least 270.261 - * 2.5*UcxMap.count. So there is enough room for additional elements without 270.262 - * the need of another soon rehashing. 270.263 - * 270.264 - * You can use this function to dramatically increase access performance. 270.265 - * 270.266 - * @param map the map to rehash 270.267 - * @return 1, if a memory allocation error occurred, 0 otherwise 270.268 - */ 270.269 -int ucx_map_rehash(UcxMap *map); 270.270 - 270.271 -/** 270.272 - * Puts a key/value-pair into the map. 270.273 - * 270.274 - * @param map the map 270.275 - * @param key the key 270.276 - * @param value the value 270.277 - * @return 0 on success, non-zero value on failure 270.278 - */ 270.279 -int ucx_map_put(UcxMap *map, UcxKey key, void *value); 270.280 - 270.281 -/** 270.282 - * Retrieves a value by using a key. 270.283 - * 270.284 - * @param map the map 270.285 - * @param key the key 270.286 - * @return the value 270.287 - */ 270.288 -void* ucx_map_get(UcxMap const *map, UcxKey key); 270.289 - 270.290 -/** 270.291 - * Removes a key/value-pair from the map by using the key. 270.292 - * 270.293 - * @param map the map 270.294 - * @param key the key 270.295 - * @return the removed value 270.296 - */ 270.297 -void* ucx_map_remove(UcxMap *map, UcxKey key); 270.298 - 270.299 -/** 270.300 - * Shorthand for putting data with a sstr_t key into the map. 270.301 - * @param map the map 270.302 - * @param key the key 270.303 - * @param value the value 270.304 - * @return 0 on success, non-zero value on failure 270.305 - * @see ucx_map_put() 270.306 - */ 270.307 -#define ucx_map_sstr_put(map, key, value) \ 270.308 - ucx_map_put(map, ucx_key(key.ptr, key.length), (void*)value) 270.309 - 270.310 -/** 270.311 - * Shorthand for putting data with a C string key into the map. 270.312 - * @param map the map 270.313 - * @param key the key 270.314 - * @param value the value 270.315 - * @return 0 on success, non-zero value on failure 270.316 - * @see ucx_map_put() 270.317 - */ 270.318 -#define ucx_map_cstr_put(map, key, value) \ 270.319 - ucx_map_put(map, ucx_key(key, strlen(key)), (void*)value) 270.320 - 270.321 -/** 270.322 - * Shorthand for putting data with an integer key into the map. 270.323 - * @param map the map 270.324 - * @param key the key 270.325 - * @param value the value 270.326 - * @return 0 on success, non-zero value on failure 270.327 - * @see ucx_map_put() 270.328 - */ 270.329 -#define ucx_map_int_put(map, key, value) \ 270.330 - ucx_map_put(map, ucx_key(&key, sizeof(key)), (void*)value) 270.331 - 270.332 -/** 270.333 - * Shorthand for getting data from the map with a sstr_t key. 270.334 - * @param map the map 270.335 - * @param key the key 270.336 - * @return the value 270.337 - * @see ucx_map_get() 270.338 - */ 270.339 -#define ucx_map_sstr_get(map, key) \ 270.340 - ucx_map_get(map, ucx_key(key.ptr, key.length)) 270.341 - 270.342 -/** 270.343 - * Shorthand for getting data from the map with a C string key. 270.344 - * @param map the map 270.345 - * @param key the key 270.346 - * @return the value 270.347 - * @see ucx_map_get() 270.348 - */ 270.349 -#define ucx_map_cstr_get(map, key) \ 270.350 - ucx_map_get(map, ucx_key(key, strlen(key))) 270.351 - 270.352 -/** 270.353 - * Shorthand for getting data from the map with an integer key. 270.354 - * @param map the map 270.355 - * @param key the key 270.356 - * @return the value 270.357 - * @see ucx_map_get() 270.358 - */ 270.359 -#define ucx_map_int_get(map, key) \ 270.360 - ucx_map_get(map, ucx_key(&key, sizeof(int))) 270.361 - 270.362 -/** 270.363 - * Shorthand for removing data from the map with a sstr_t key. 270.364 - * @param map the map 270.365 - * @param key the key 270.366 - * @return the removed value 270.367 - * @see ucx_map_remove() 270.368 - */ 270.369 -#define ucx_map_sstr_remove(map, key) \ 270.370 - ucx_map_remove(map, ucx_key(key.ptr, key.length)) 270.371 - 270.372 -/** 270.373 - * Shorthand for removing data from the map with a C string key. 270.374 - * @param map the map 270.375 - * @param key the key 270.376 - * @return the removed value 270.377 - * @see ucx_map_remove() 270.378 - */ 270.379 -#define ucx_map_cstr_remove(map, key) \ 270.380 - ucx_map_remove(map, ucx_key(key, strlen(key))) 270.381 - 270.382 -/** 270.383 - * Shorthand for removing data from the map with an integer key. 270.384 - * @param map the map 270.385 - * @param key the key 270.386 - * @return the removed value 270.387 - * @see ucx_map_remove() 270.388 - */ 270.389 -#define ucx_map_int_remove(map, key) \ 270.390 - ucx_map_remove(map, ucx_key(&key, sizeof(key))) 270.391 - 270.392 -/** 270.393 - * Creates a UcxKey based on the given data. 270.394 - * 270.395 - * This function implicitly computes the hash. 270.396 - * 270.397 - * @param data the data for the key 270.398 - * @param len the length of the data 270.399 - * @return a UcxKey with implicitly computed hash 270.400 - * @see ucx_hash() 270.401 - */ 270.402 -UcxKey ucx_key(const void *data, size_t len); 270.403 - 270.404 -/** 270.405 - * Computes a murmur hash-2. 270.406 - * 270.407 - * @param data the data to hash 270.408 - * @param len the length of the data 270.409 - * @return the murmur hash-2 of the data 270.410 - */ 270.411 -int ucx_hash(const char *data, size_t len); 270.412 - 270.413 -/** 270.414 - * Creates an iterator for a map. 270.415 - * 270.416 - * <b>Note:</b> A UcxMapIterator iterates over all elements in all element 270.417 - * lists successively. Therefore the order highly depends on the key hashes and 270.418 - * may vary under different map sizes. So generally you may <b>NOT</b> rely on 270.419 - * the iteration order. 270.420 - * 270.421 - * <b>Note:</b> The iterator is <b>NOT</b> initialized. You need to call 270.422 - * ucx_map_iter_next() at least once before accessing any information. However, 270.423 - * it is not recommended to access the fields of a UcxMapIterator directly. 270.424 - * 270.425 - * @param map the map to create the iterator for 270.426 - * @return an iterator initialized on the first element of the 270.427 - * first element list 270.428 - * @see ucx_map_iter_next() 270.429 - */ 270.430 -UcxMapIterator ucx_map_iterator(UcxMap const *map); 270.431 - 270.432 -/** 270.433 - * Proceeds to the next element of the map (if any). 270.434 - * 270.435 - * Subsequent calls on the same iterator proceed to the next element and 270.436 - * store the key/value-pair into the memory specified as arguments of this 270.437 - * function. 270.438 - * 270.439 - * If no further elements are found, this function returns zero and leaves the 270.440 - * last found key/value-pair in memory. 270.441 - * 270.442 - * @param iterator the iterator to use 270.443 - * @param key a pointer to the memory where to store the key 270.444 - * @param value a pointer to the memory where to store the value 270.445 - * @return 1, if another element was found, 0 if all elements has been processed 270.446 - * @see ucx_map_iterator() 270.447 - */ 270.448 -int ucx_map_iter_next(UcxMapIterator *iterator, UcxKey *key, void **value); 270.449 - 270.450 -/** 270.451 - * Returns the union of two maps. 270.452 - * 270.453 - * The union is a fresh map which is filled by two successive calls of 270.454 - * ucx_map_copy() on the two input maps. 270.455 - * 270.456 - * @param first the first source map 270.457 - * @param second the second source map 270.458 - * @param cpfnc a function to copy the elements 270.459 - * @param cpdata additional data for the copy function 270.460 - * @return a new map containing the union 270.461 - */ 270.462 -UcxMap* ucx_map_union(const UcxMap *first, const UcxMap *second, 270.463 - copy_func cpfnc, void* cpdata); 270.464 - 270.465 -/** 270.466 - * Returns the union of two maps. 270.467 - * 270.468 - * The union is a fresh map which is filled by two successive calls of 270.469 - * ucx_map_copy() on the two input maps. 270.470 - * 270.471 - * @param allocator the allocator that shall be used by the new map 270.472 - * @param first the first source map 270.473 - * @param second the second source map 270.474 - * @param cpfnc a function to copy the elements 270.475 - * @param cpdata additional data for the copy function 270.476 - * @return a new map containing the union 270.477 - */ 270.478 -UcxMap* ucx_map_union_a(UcxAllocator *allocator, 270.479 - const UcxMap *first, const UcxMap *second, 270.480 - copy_func cpfnc, void* cpdata); 270.481 - 270.482 -/** 270.483 - * Returns the intersection of two maps. 270.484 - * 270.485 - * The intersection is defined as a copy of the first map with every element 270.486 - * removed that has no valid key in the second map. 270.487 - * 270.488 - * @param first the first source map 270.489 - * @param second the second source map 270.490 - * @param cpfnc a function to copy the elements 270.491 - * @param cpdata additional data for the copy function 270.492 - * @return a new map containing the intersection 270.493 - */ 270.494 -UcxMap* ucx_map_intersection(const UcxMap *first, const UcxMap *second, 270.495 - copy_func cpfnc, void* cpdata); 270.496 - 270.497 -/** 270.498 - * Returns the intersection of two maps. 270.499 - * 270.500 - * The intersection is defined as a copy of the first map with every element 270.501 - * removed that has no valid key in the second map. 270.502 - * 270.503 - * @param allocator the allocator that shall be used by the new map 270.504 - * @param first the first source map 270.505 - * @param second the second source map 270.506 - * @param cpfnc a function to copy the elements 270.507 - * @param cpdata additional data for the copy function 270.508 - * @return a new map containing the intersection 270.509 - */ 270.510 -UcxMap* ucx_map_intersection_a(UcxAllocator *allocator, 270.511 - const UcxMap *first, const UcxMap *second, 270.512 - copy_func cpfnc, void* cpdata); 270.513 - 270.514 -/** 270.515 - * Returns the difference of two maps. 270.516 - * 270.517 - * The difference contains a copy of all elements of the first map 270.518 - * for which the corresponding keys cannot be found in the second map. 270.519 - * 270.520 - * @param first the first source map 270.521 - * @param second the second source map 270.522 - * @param cpfnc a function to copy the elements 270.523 - * @param cpdata additional data for the copy function 270.524 - * @return a new list containing the difference 270.525 - */ 270.526 -UcxMap* ucx_map_difference(const UcxMap *first, const UcxMap *second, 270.527 - copy_func cpfnc, void* cpdata); 270.528 - 270.529 -/** 270.530 - * Returns the difference of two maps. 270.531 - * 270.532 - * The difference contains a copy of all elements of the first map 270.533 - * for which the corresponding keys cannot be found in the second map. 270.534 - * 270.535 - * @param allocator the allocator that shall be used by the new map 270.536 - * @param first the first source map 270.537 - * @param second the second source map 270.538 - * @param cpfnc a function to copy the elements 270.539 - * @param cpdata additional data for the copy function 270.540 - * @return a new list containing the difference 270.541 - */ 270.542 -UcxMap* ucx_map_difference_a(UcxAllocator *allocator, 270.543 - const UcxMap *first, const UcxMap *second, 270.544 - copy_func cpfnc, void* cpdata); 270.545 - 270.546 - 270.547 -#ifdef __cplusplus 270.548 -} 270.549 -#endif 270.550 - 270.551 -#endif /* UCX_MAP_H */ 270.552 -
271.1 --- a/src/ucx/mempool.h Mon Dec 30 09:54:10 2019 +0100 271.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 271.3 @@ -1,209 +0,0 @@ 271.4 -/* 271.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 271.6 - * 271.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 271.8 - * 271.9 - * Redistribution and use in source and binary forms, with or without 271.10 - * modification, are permitted provided that the following conditions are met: 271.11 - * 271.12 - * 1. Redistributions of source code must retain the above copyright 271.13 - * notice, this list of conditions and the following disclaimer. 271.14 - * 271.15 - * 2. Redistributions in binary form must reproduce the above copyright 271.16 - * notice, this list of conditions and the following disclaimer in the 271.17 - * documentation and/or other materials provided with the distribution. 271.18 - * 271.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 271.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 271.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 271.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 271.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 271.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 271.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 271.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 271.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 271.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 271.29 - * POSSIBILITY OF SUCH DAMAGE. 271.30 - */ 271.31 - 271.32 -/** 271.33 - * @file mempool.h 271.34 - * 271.35 - * Memory pool implementation. 271.36 - * 271.37 - * @author Mike Becker 271.38 - * @author Olaf Wintermann 271.39 - */ 271.40 - 271.41 -#ifndef UCX_MEMPOOL_H 271.42 -#define UCX_MEMPOOL_H 271.43 - 271.44 -#include "ucx.h" 271.45 -#include "allocator.h" 271.46 -#include <stddef.h> 271.47 - 271.48 -#ifdef __cplusplus 271.49 -extern "C" { 271.50 -#endif 271.51 - 271.52 -/** 271.53 - * UCX mempool structure. 271.54 - */ 271.55 -typedef struct { 271.56 - /** UcxAllocator based on this pool */ 271.57 - UcxAllocator *allocator; 271.58 - 271.59 - /** List of pointers to pooled memory. */ 271.60 - void **data; 271.61 - 271.62 - /** Count of pooled memory items. */ 271.63 - size_t ndata; 271.64 - 271.65 - /** Memory pool size. */ 271.66 - size_t size; 271.67 -} UcxMempool; 271.68 - 271.69 -/** Shorthand for a new default memory pool with a capacity of 16 elements. */ 271.70 -#define ucx_mempool_new_default() ucx_mempool_new(16) 271.71 - 271.72 - 271.73 -/** 271.74 - * Creates a memory pool with the specified initial size. 271.75 - * 271.76 - * As the created memory pool automatically grows in size by factor two when 271.77 - * trying to allocate memory on a full pool, it is recommended that you use 271.78 - * a power of two for the initial size. 271.79 - * 271.80 - * @param n initial pool size (should be a power of two, e.g. 16) 271.81 - * @return a pointer to the new memory pool 271.82 - * @see ucx_mempool_new_default() 271.83 - */ 271.84 -UcxMempool *ucx_mempool_new(size_t n); 271.85 - 271.86 -/** 271.87 - * Resizes a memory pool. 271.88 - * 271.89 - * This function will fail if the new capacity is not sufficient for the 271.90 - * present data. 271.91 - * 271.92 - * @param pool the pool to resize 271.93 - * @param newcap the new capacity 271.94 - * @return zero on success or non-zero on failure 271.95 - */ 271.96 -int ucx_mempool_chcap(UcxMempool *pool, size_t newcap); 271.97 - 271.98 -/** 271.99 - * Allocates pooled memory. 271.100 - * 271.101 - * @param pool the memory pool 271.102 - * @param n amount of memory to allocate 271.103 - * @return a pointer to the allocated memory 271.104 - * @see ucx_allocator_malloc() 271.105 - */ 271.106 -void *ucx_mempool_malloc(UcxMempool *pool, size_t n); 271.107 -/** 271.108 - * Allocates a pooled memory array. 271.109 - * 271.110 - * The content of the allocated memory is set to zero. 271.111 - * 271.112 - * @param pool the memory pool 271.113 - * @param nelem amount of elements to allocate 271.114 - * @param elsize amount of memory per element 271.115 - * @return a pointer to the allocated memory 271.116 - * @see ucx_allocator_calloc() 271.117 - */ 271.118 -void *ucx_mempool_calloc(UcxMempool *pool, size_t nelem, size_t elsize); 271.119 - 271.120 -/** 271.121 - * Reallocates pooled memory. 271.122 - * 271.123 - * If the memory to be reallocated is not contained by the specified pool, the 271.124 - * behavior is undefined. 271.125 - * 271.126 - * @param pool the memory pool 271.127 - * @param ptr a pointer to the memory that shall be reallocated 271.128 - * @param n the new size of the memory 271.129 - * @return a pointer to the new location of the memory 271.130 - * @see ucx_allocator_realloc() 271.131 - */ 271.132 -void *ucx_mempool_realloc(UcxMempool *pool, void *ptr, size_t n); 271.133 - 271.134 -/** 271.135 - * Frees pooled memory. 271.136 - * 271.137 - * Before freeing the memory, the specified destructor function (if any) 271.138 - * is called. 271.139 - * 271.140 - * If you specify memory, that is not pooled by the specified memory pool, the 271.141 - * program will terminate with a call to <code>abort()</code>. 271.142 - * 271.143 - * @param pool the memory pool 271.144 - * @param ptr a pointer to the memory that shall be freed 271.145 - * @see ucx_mempool_set_destr() 271.146 - */ 271.147 -void ucx_mempool_free(UcxMempool *pool, void *ptr); 271.148 - 271.149 -/** 271.150 - * Destroys a memory pool. 271.151 - * 271.152 - * For each element the destructor function (if any) is called and the element 271.153 - * is freed. 271.154 - * 271.155 - * Each of the registered destructor function that has no corresponding element 271.156 - * within the pool (namely those registered by ucx_mempool_reg_destr) is 271.157 - * called interleaving with the element destruction, but with guarantee to the 271.158 - * order in which they were registered (FIFO order). 271.159 - * 271.160 - * 271.161 - * @param pool the mempool to destroy 271.162 - */ 271.163 -void ucx_mempool_destroy(UcxMempool *pool); 271.164 - 271.165 -/** 271.166 - * Sets a destructor function for the specified memory. 271.167 - * 271.168 - * The destructor is automatically called when the memory is freed or the 271.169 - * pool is destroyed. 271.170 - * A destructor for pooled memory <b>MUST NOT</b> free the memory itself, 271.171 - * as this is done by the pool. Use a destructor to free any resources 271.172 - * managed by the pooled object. 271.173 - * 271.174 - * The only requirement for the specified memory is, that it <b>MUST</b> be 271.175 - * pooled memory by a UcxMempool or an element-compatible mempool. The pointer 271.176 - * to the destructor function is saved in a reserved area before the actual 271.177 - * memory. 271.178 - * 271.179 - * @param ptr pooled memory 271.180 - * @param func a pointer to the destructor function 271.181 - * @see ucx_mempool_free() 271.182 - * @see ucx_mempool_destroy() 271.183 - */ 271.184 -void ucx_mempool_set_destr(void *ptr, ucx_destructor func); 271.185 - 271.186 -/** 271.187 - * Registers a destructor function for the specified (non-pooled) memory. 271.188 - * 271.189 - * This is useful, if you have memory that has not been allocated by a mempool, 271.190 - * but shall be managed by a mempool. 271.191 - * 271.192 - * This function creates an entry in the specified mempool and the memory will 271.193 - * therefore (logically) convert to pooled memory. 271.194 - * <b>However, this does not cause the memory to be freed automatically!</b>. 271.195 - * If you want to use this function, make the memory pool free non-pooled 271.196 - * memory, the specified destructor function must call <code>free()</code> 271.197 - * by itself. But keep in mind, that you then MUST NOT use this destructor 271.198 - * function with pooled memory (e.g. in ucx_mempool_set_destr()), as it 271.199 - * would cause a double-free. 271.200 - * 271.201 - * @param pool the memory pool 271.202 - * @param ptr data the destructor is registered for 271.203 - * @param destr a pointer to the destructor function 271.204 - */ 271.205 -void ucx_mempool_reg_destr(UcxMempool *pool, void *ptr, ucx_destructor destr); 271.206 - 271.207 -#ifdef __cplusplus 271.208 -} 271.209 -#endif 271.210 - 271.211 -#endif /* UCX_MEMPOOL_H */ 271.212 -
272.1 --- a/src/ucx/properties.h Mon Dec 30 09:54:10 2019 +0100 272.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 272.3 @@ -1,221 +0,0 @@ 272.4 -/* 272.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 272.6 - * 272.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 272.8 - * 272.9 - * Redistribution and use in source and binary forms, with or without 272.10 - * modification, are permitted provided that the following conditions are met: 272.11 - * 272.12 - * 1. Redistributions of source code must retain the above copyright 272.13 - * notice, this list of conditions and the following disclaimer. 272.14 - * 272.15 - * 2. Redistributions in binary form must reproduce the above copyright 272.16 - * notice, this list of conditions and the following disclaimer in the 272.17 - * documentation and/or other materials provided with the distribution. 272.18 - * 272.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 272.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 272.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 272.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 272.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 272.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 272.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 272.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 272.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 272.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 272.29 - * POSSIBILITY OF SUCH DAMAGE. 272.30 - */ 272.31 -/** 272.32 - * @file properties.h 272.33 - * 272.34 - * Load / store utilities for properties files. 272.35 - * 272.36 - * @author Mike Becker 272.37 - * @author Olaf Wintermann 272.38 - */ 272.39 - 272.40 -#ifndef UCX_PROPERTIES_H 272.41 -#define UCX_PROPERTIES_H 272.42 - 272.43 -#include "ucx.h" 272.44 -#include "map.h" 272.45 - 272.46 -#ifdef __cplusplus 272.47 -extern "C" { 272.48 -#endif 272.49 - 272.50 -/** 272.51 - * UcxProperties object for parsing properties data. 272.52 - * Most of the fields are for internal use only. You may configure the 272.53 - * properties parser, e.g. by changing the used delimiter or specifying 272.54 - * up to three different characters that shall introduce comments. 272.55 - */ 272.56 -typedef struct { 272.57 - /** 272.58 - * Input buffer (don't set manually). 272.59 - * Automatically set by calls to ucx_properties_fill(). 272.60 - */ 272.61 - char *buffer; 272.62 - 272.63 - /** 272.64 - * Length of the input buffer (don't set manually). 272.65 - * Automatically set by calls to ucx_properties_fill(). 272.66 - */ 272.67 - size_t buflen; 272.68 - 272.69 - /** 272.70 - * Current buffer position (don't set manually). 272.71 - * Used by ucx_properties_next(). 272.72 - */ 272.73 - size_t pos; 272.74 - 272.75 - /** 272.76 - * Internal temporary buffer (don't set manually). 272.77 - * Used by ucx_properties_next(). 272.78 - */ 272.79 - char *tmp; 272.80 - 272.81 - /** 272.82 - * Internal temporary buffer length (don't set manually). 272.83 - * Used by ucx_properties_next(). 272.84 - */ 272.85 - size_t tmplen; 272.86 - 272.87 - /** 272.88 - * Internal temporary buffer capacity (don't set manually). 272.89 - * Used by ucx_properties_next(). 272.90 - */ 272.91 - size_t tmpcap; 272.92 - 272.93 - /** 272.94 - * Parser error code. 272.95 - * This is always 0 on success and a nonzero value on syntax errors. 272.96 - * The value is set by ucx_properties_next(). 272.97 - */ 272.98 - int error; 272.99 - 272.100 - /** 272.101 - * The delimiter that shall be used. 272.102 - * This is '=' by default. 272.103 - */ 272.104 - char delimiter; 272.105 - 272.106 - /** 272.107 - * The first comment character. 272.108 - * This is '#' by default. 272.109 - */ 272.110 - char comment1; 272.111 - 272.112 - /** 272.113 - * The second comment character. 272.114 - * This is not set by default. 272.115 - */ 272.116 - char comment2; 272.117 - 272.118 - /** 272.119 - * The third comment character. 272.120 - * This is not set by default. 272.121 - */ 272.122 - char comment3; 272.123 -} UcxProperties; 272.124 - 272.125 - 272.126 -/** 272.127 - * Constructs a new UcxProperties object. 272.128 - * @return a pointer to the new UcxProperties object 272.129 - */ 272.130 -UcxProperties *ucx_properties_new(); 272.131 - 272.132 -/** 272.133 - * Destroys a UcxProperties object. 272.134 - * @param prop the UcxProperties object to destroy 272.135 - */ 272.136 -void ucx_properties_free(UcxProperties *prop); 272.137 - 272.138 -/** 272.139 - * Sets the input buffer for the properties parser. 272.140 - * 272.141 - * After calling this function, you may parse the data by calling 272.142 - * ucx_properties_next() until it returns 0. The function ucx_properties2map() 272.143 - * is a convenience function that reads as much data as possible by using this 272.144 - * function. 272.145 - * 272.146 - * 272.147 - * @param prop the UcxProperties object 272.148 - * @param buf a pointer to the new buffer 272.149 - * @param len the payload length of the buffer 272.150 - * @see ucx_properties_next() 272.151 - * @see ucx_properties2map() 272.152 - */ 272.153 -void ucx_properties_fill(UcxProperties *prop, char *buf, size_t len); 272.154 - 272.155 -/** 272.156 - * Retrieves the next key/value-pair. 272.157 - * 272.158 - * This function returns a nonzero value as long as there are key/value-pairs 272.159 - * found. If no more key/value-pairs are found, you may refill the input buffer 272.160 - * with ucx_properties_fill(). 272.161 - * 272.162 - * <b>Attention:</b> the sstr_t.ptr pointers of the output parameters point to 272.163 - * memory within the input buffer of the parser and will get invalid some time. 272.164 - * If you want long term copies of the key/value-pairs, use sstrdup() after 272.165 - * calling this function. 272.166 - * 272.167 - * @param prop the UcxProperties object 272.168 - * @param name a pointer to the sstr_t that shall contain the property name 272.169 - * @param value a pointer to the sstr_t that shall contain the property value 272.170 - * @return Nonzero, if a key/value-pair was successfully retrieved 272.171 - * @see ucx_properties_fill() 272.172 - */ 272.173 -int ucx_properties_next(UcxProperties *prop, sstr_t *name, sstr_t *value); 272.174 - 272.175 -/** 272.176 - * Retrieves all available key/value-pairs and puts them into a UcxMap. 272.177 - * 272.178 - * This is done by successive calls to ucx_properties_next() until no more 272.179 - * key/value-pairs can be retrieved. 272.180 - * 272.181 - * The memory for the map values is allocated by the map's own allocator. 272.182 - * 272.183 - * @param prop the UcxProperties object 272.184 - * @param map the target map 272.185 - * @return The UcxProperties.error code (i.e. 0 on success). 272.186 - * @see ucx_properties_fill() 272.187 - * @see UcxMap.allocator 272.188 - */ 272.189 -int ucx_properties2map(UcxProperties *prop, UcxMap *map); 272.190 - 272.191 -/** 272.192 - * Loads a properties file to a UcxMap. 272.193 - * 272.194 - * This is a convenience function that reads data from an input 272.195 - * stream until the end of the stream is reached. 272.196 - * 272.197 - * @param map the map object to write the key/value-pairs to 272.198 - * @param file the <code>FILE*</code> stream to read from 272.199 - * @return 0 on success, or a non-zero value on error 272.200 - * 272.201 - * @see ucx_properties_fill() 272.202 - * @see ucx_properties2map() 272.203 - */ 272.204 -int ucx_properties_load(UcxMap *map, FILE *file); 272.205 - 272.206 -/** 272.207 - * Stores a UcxMap to a file. 272.208 - * 272.209 - * The key/value-pairs are written by using the following format: 272.210 - * 272.211 - * <code>[key] = [value]\\n</code> 272.212 - * 272.213 - * @param map the map to store 272.214 - * @param file the <code>FILE*</code> stream to write to 272.215 - * @return 0 on success, or a non-zero value on error 272.216 - */ 272.217 -int ucx_properties_store(UcxMap *map, FILE *file); 272.218 - 272.219 -#ifdef __cplusplus 272.220 -} 272.221 -#endif 272.222 - 272.223 -#endif /* UCX_PROPERTIES_H */ 272.224 -
273.1 --- a/src/ucx/stack.h Mon Dec 30 09:54:10 2019 +0100 273.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 273.3 @@ -1,240 +0,0 @@ 273.4 -/* 273.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 273.6 - * 273.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 273.8 - * 273.9 - * Redistribution and use in source and binary forms, with or without 273.10 - * modification, are permitted provided that the following conditions are met: 273.11 - * 273.12 - * 1. Redistributions of source code must retain the above copyright 273.13 - * notice, this list of conditions and the following disclaimer. 273.14 - * 273.15 - * 2. Redistributions in binary form must reproduce the above copyright 273.16 - * notice, this list of conditions and the following disclaimer in the 273.17 - * documentation and/or other materials provided with the distribution. 273.18 - * 273.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 273.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 273.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 273.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 273.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 273.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 273.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 273.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 273.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 273.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 273.29 - * POSSIBILITY OF SUCH DAMAGE. 273.30 - */ 273.31 - 273.32 -/** 273.33 - * @file stack.h 273.34 - * 273.35 - * Default stack memory allocation implementation. 273.36 - * 273.37 - * @author Mike Becker 273.38 - * @author Olaf Wintermann 273.39 - */ 273.40 - 273.41 -#ifndef UCX_STACK_H 273.42 -#define UCX_STACK_H 273.43 - 273.44 -#include "ucx.h" 273.45 -#include "allocator.h" 273.46 - 273.47 -#ifdef __cplusplus 273.48 -extern "C" { 273.49 -#endif 273.50 - 273.51 - 273.52 -/** 273.53 - * UCX stack structure. 273.54 - */ 273.55 -typedef struct { 273.56 - /** UcxAllocator based on this stack */ 273.57 - UcxAllocator allocator; 273.58 - 273.59 - /** Stack size. */ 273.60 - size_t size; 273.61 - 273.62 - /** Pointer to the bottom of the stack */ 273.63 - char *space; 273.64 - 273.65 - /** Pointer to the top of the stack */ 273.66 - char *top; 273.67 -} UcxStack; 273.68 - 273.69 -/** 273.70 - * Metadata for each UCX stack element. 273.71 - */ 273.72 -struct ucx_stack_metadata { 273.73 - /** 273.74 - * Location of the previous element (<code>NULL</code> if this is the first) 273.75 - */ 273.76 - char *prev; 273.77 - 273.78 - /** Size of this element */ 273.79 - size_t size; 273.80 -}; 273.81 - 273.82 -/** 273.83 - * Initializes UcxStack structure with memory. 273.84 - * 273.85 - * @param stack a pointer to an uninitialized stack structure 273.86 - * @param space the memory area that shall be managed 273.87 - * @param size size of the memory area 273.88 - * @return a new UcxStack structure 273.89 - */ 273.90 -void ucx_stack_init(UcxStack *stack, char* space, size_t size); 273.91 - 273.92 -/** 273.93 - * Allocates stack memory. 273.94 - * 273.95 - * @param stack a pointer to the stack 273.96 - * @param n amount of memory to allocate 273.97 - * @return a pointer to the allocated memory or <code>NULL</code> on stack 273.98 - * overflow 273.99 - * @see ucx_allocator_malloc() 273.100 - */ 273.101 -void *ucx_stack_malloc(UcxStack *stack, size_t n); 273.102 - 273.103 -/** 273.104 - * Allocates memory with #ucx_stack_malloc() and copies the specified data if 273.105 - * the allocation was successful. 273.106 - * 273.107 - * @param stack a pointer to the stack 273.108 - * @param n amount of memory to allocate 273.109 - * @param data a pointer to the data to copy 273.110 - * @return a pointer to the allocated memory 273.111 - * @see ucx_stack_malloc 273.112 - */ 273.113 -void *ucx_stack_push(UcxStack *stack, size_t n, const void *data); 273.114 - 273.115 -/** 273.116 - * Allocates an array of stack memory 273.117 - * 273.118 - * The content of the allocated memory is set to zero. 273.119 - * 273.120 - * @param stack a pointer to the stack 273.121 - * @param nelem amount of elements to allocate 273.122 - * @param elsize amount of memory per element 273.123 - * @return a pointer to the allocated memory 273.124 - * @see ucx_allocator_calloc() 273.125 - */ 273.126 -void *ucx_stack_calloc(UcxStack *stack, size_t nelem, size_t elsize); 273.127 - 273.128 -/** 273.129 - * Allocates memory with #ucx_stack_calloc() and copies the specified data if 273.130 - * the allocation was successful. 273.131 - * 273.132 - * @param stack a pointer to the stack 273.133 - * @param nelem amount of elements to allocate 273.134 - * @param elsize amount of memory per element 273.135 - * @param data a pointer to the data 273.136 - * @return a pointer to the allocated memory 273.137 - * @see ucx_stack_calloc 273.138 - */ 273.139 -void *ucx_stack_pusharr(UcxStack *stack, 273.140 - size_t nelem, size_t elsize, const void *data); 273.141 - 273.142 -/** 273.143 - * Reallocates memory on the stack. 273.144 - * 273.145 - * Shrinking memory is always safe. Extending memory can be very expensive. 273.146 - * 273.147 - * @param stack the stack 273.148 - * @param ptr a pointer to the memory that shall be reallocated 273.149 - * @param n the new size of the memory 273.150 - * @return a pointer to the new location of the memory 273.151 - * @see ucx_allocator_realloc() 273.152 - */ 273.153 -void *ucx_stack_realloc(UcxStack *stack, void *ptr, size_t n); 273.154 - 273.155 -/** 273.156 - * Frees memory on the stack. 273.157 - * 273.158 - * Freeing stack memory behaves in a special way. 273.159 - * 273.160 - * If the element, that should be freed, is the top most element of the stack, 273.161 - * it is removed from the stack. Otherwise it is marked as freed. Marked 273.162 - * elements are removed, when they become the top most elements of the stack. 273.163 - * 273.164 - * @param stack a pointer to the stack 273.165 - * @param ptr a pointer to the memory that shall be freed 273.166 - */ 273.167 -void ucx_stack_free(UcxStack *stack, void *ptr); 273.168 - 273.169 - 273.170 -/** 273.171 - * Returns the size of the top most element. 273.172 - * @param stack a pointer to the stack 273.173 - * @return the size of the top most element 273.174 - */ 273.175 -#define ucx_stack_topsize(stack) ((stack)->top ? ((struct ucx_stack_metadata*)\ 273.176 - (stack)->top - 1)->size : 0) 273.177 - 273.178 -/** 273.179 - * Removes the top most element from the stack and copies the content to <code> 273.180 - * dest</code>, if specified. 273.181 - * 273.182 - * Use #ucx_stack_topsize()# to get the amount of memory that must be available 273.183 - * at the location of <code>dest</code>. 273.184 - * 273.185 - * @param stack a pointer to the stack 273.186 - * @param dest the location where the contents shall be written to, or <code> 273.187 - * NULL</code>, if the element shall only be removed. 273.188 - * @see ucx_stack_free 273.189 - * @see ucx_stack_popn 273.190 - */ 273.191 -#define ucx_stack_pop(stack, dest) ucx_stack_popn(stack, dest, (size_t)-1) 273.192 - 273.193 -/** 273.194 - * Removes the top most element from the stack and copies the content to <code> 273.195 - * dest</code>. 273.196 - * 273.197 - * This function copies at most <code>n</code> bytes to the destination, but 273.198 - * the element is always freed as a whole. 273.199 - * If the element was larger than <code>n</code>, the remaining data is lost. 273.200 - * 273.201 - * @param stack a pointer to the stack 273.202 - * @param dest the location where the contents shall be written to 273.203 - * @param n copies at most n bytes to <code>dest</code> 273.204 - * @see ucx_stack_pop 273.205 - */ 273.206 -void ucx_stack_popn(UcxStack *stack, void *dest, size_t n); 273.207 - 273.208 -/** 273.209 - * Returns the remaining available memory on the specified stack. 273.210 - * 273.211 - * @param stack a pointer to the stack 273.212 - * @return the remaining available memory 273.213 - */ 273.214 -size_t ucx_stack_avail(UcxStack *stack); 273.215 - 273.216 -/** 273.217 - * Checks, if the stack is empty. 273.218 - * 273.219 - * @param stack a pointer to the stack 273.220 - * @return nonzero, if the stack is empty, zero otherwise 273.221 - */ 273.222 -#define ucx_stack_empty(stack) (!(stack)->top) 273.223 - 273.224 -/** 273.225 - * Computes a recommended size for the stack memory area. Note, that 273.226 - * reallocations have not been taken into account, so you might need to reserve 273.227 - * twice as much memory to allow many reallocations. 273.228 - * 273.229 - * @param size the approximate payload 273.230 - * @param elems the approximate count of element allocations 273.231 - * @return a recommended size for the stack space based on the information 273.232 - * provided 273.233 - */ 273.234 -#define ucx_stack_dim(size, elems) (size+sizeof(struct ucx_stack_metadata) * \ 273.235 - (elems + 1)) 273.236 - 273.237 - 273.238 -#ifdef __cplusplus 273.239 -} 273.240 -#endif 273.241 - 273.242 -#endif /* UCX_STACK_H */ 273.243 -
274.1 --- a/src/ucx/string.h Mon Dec 30 09:54:10 2019 +0100 274.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 274.3 @@ -1,1201 +0,0 @@ 274.4 -/* 274.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 274.6 - * 274.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 274.8 - * 274.9 - * Redistribution and use in source and binary forms, with or without 274.10 - * modification, are permitted provided that the following conditions are met: 274.11 - * 274.12 - * 1. Redistributions of source code must retain the above copyright 274.13 - * notice, this list of conditions and the following disclaimer. 274.14 - * 274.15 - * 2. Redistributions in binary form must reproduce the above copyright 274.16 - * notice, this list of conditions and the following disclaimer in the 274.17 - * documentation and/or other materials provided with the distribution. 274.18 - * 274.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 274.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 274.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 274.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 274.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 274.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 274.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 274.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 274.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 274.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 274.29 - * POSSIBILITY OF SUCH DAMAGE. 274.30 - */ 274.31 -/** 274.32 - * Bounded string implementation. 274.33 - * 274.34 - * The UCX strings (<code>sstr_t</code>) provide an alternative to C strings. 274.35 - * The main difference to C strings is, that <code>sstr_t</code> does <b>not 274.36 - * need to be <code>NULL</code>-terminated</b>. Instead the length is stored 274.37 - * within the structure. 274.38 - * 274.39 - * When using <code>sstr_t</code>, developers must be full aware of what type 274.40 - * of string (<code>NULL</code>-terminated) or not) they are using, when 274.41 - * accessing the <code>char* ptr</code> directly. 274.42 - * 274.43 - * The UCX string module provides some common string functions, known from 274.44 - * standard libc, working with <code>sstr_t</code>. 274.45 - * 274.46 - * @file string.h 274.47 - * @author Mike Becker 274.48 - * @author Olaf Wintermann 274.49 - */ 274.50 - 274.51 -#ifndef UCX_STRING_H 274.52 -#define UCX_STRING_H 274.53 - 274.54 -#include "ucx.h" 274.55 -#include "allocator.h" 274.56 -#include <stddef.h> 274.57 - 274.58 -/* 274.59 - * Use this macro to disable the shortcuts if you experience macro collision. 274.60 - */ 274.61 -#ifndef UCX_NO_SSTR_SHORTCUTS 274.62 -/** 274.63 - * Shortcut for a <code>sstr_t struct</code> 274.64 - * or <code>scstr_t struct</code> literal. 274.65 - */ 274.66 -#define ST(s) { s, sizeof(s)-1 } 274.67 - 274.68 -/** Shortcut for the conversion of a C string to a <code>sstr_t</code>. */ 274.69 -#define S(s) sstrn(s, sizeof(s)-1) 274.70 - 274.71 -/** Shortcut for the conversion of a C string to a <code>scstr_t</code>. */ 274.72 -#define SC(s) scstrn(s, sizeof(s)-1) 274.73 -#endif /* UCX_NO_SSTR_SHORTCUTS */ 274.74 - 274.75 -/* 274.76 - * Use this macro to disable the format macros. 274.77 - */ 274.78 -#ifndef UCX_NO_SSTR_FORMAT_MACROS 274.79 -/** Expands a sstr_t or scstr_t to printf arguments. */ 274.80 -#define SFMT(s) (int) (s).length, (s).ptr 274.81 - 274.82 -/** Format specifier for a sstr_t or scstr_t. */ 274.83 -#define PRIsstr ".*s" 274.84 -#endif /* UCX_NO_SSTR_FORMAT_MACROS */ 274.85 - 274.86 -#ifdef __cplusplus 274.87 -extern "C" { 274.88 -#endif 274.89 - 274.90 -/** 274.91 - * The UCX string structure. 274.92 - */ 274.93 -typedef struct { 274.94 - /** A pointer to the string 274.95 - * (<b>not necessarily <code>NULL</code>-terminated</b>) */ 274.96 - char *ptr; 274.97 - /** The length of the string */ 274.98 - size_t length; 274.99 -} sstr_t; 274.100 - 274.101 -/** 274.102 - * The UCX string structure for immutable (constant) strings. 274.103 - */ 274.104 -typedef struct { 274.105 - /** A constant pointer to the immutable string 274.106 - * (<b>not necessarily <code>NULL</code>-terminated</b>) */ 274.107 - const char *ptr; 274.108 - /** The length of the string */ 274.109 - size_t length; 274.110 -} scstr_t; 274.111 - 274.112 -#ifdef __cplusplus 274.113 -} 274.114 -#endif 274.115 - 274.116 - 274.117 -#ifdef __cplusplus 274.118 -/** 274.119 - * One of two type adjustment functions that return an scstr_t. 274.120 - * 274.121 - * Used <b>internally</b> to convert a UCX string to an immutable UCX string. 274.122 - * 274.123 - * <b>Do not use this function manually.</b> 274.124 - * 274.125 - * @param str some sstr_t 274.126 - * @return an immutable (scstr_t) version of the provided string. 274.127 - */ 274.128 -inline scstr_t s2scstr(sstr_t s) { 274.129 - scstr_t c; 274.130 - c.ptr = s.ptr; 274.131 - c.length = s.length; 274.132 - return c; 274.133 -} 274.134 - 274.135 -/** 274.136 - * One of two type adjustment functions that return an scstr_t. 274.137 - * 274.138 - * Used <b>internally</b> to convert a UCX string to an immutable UCX string. 274.139 - * This variant is used, when the string is already immutable and no operation 274.140 - * needs to be performed. 274.141 - * 274.142 - * <b>Do not use this function manually.</b> 274.143 - * 274.144 - * @param str some scstr_t 274.145 - * @return the argument itself 274.146 - */ 274.147 -inline scstr_t s2scstr(scstr_t str) { 274.148 - return str; 274.149 -} 274.150 - 274.151 -/** 274.152 - * Converts a UCX string to an immutable UCX string (scstr_t). 274.153 - * @param str some UCX string 274.154 - * @return an immutable version of the provided string 274.155 - */ 274.156 -#define SCSTR(s) s2scstr(s) 274.157 -#else 274.158 - 274.159 -/** 274.160 - * One of two type adjustment functions that return an scstr_t. 274.161 - * 274.162 - * Used <b>internally</b> to convert a UCX string to an immutable UCX string. 274.163 - * This variant is used, when the string is already immutable and no operation 274.164 - * needs to be performed. 274.165 - * 274.166 - * <b>Do not use this function manually.</b> 274.167 - * 274.168 - * @param str some scstr_t 274.169 - * @return the argument itself 274.170 - */ 274.171 -scstr_t ucx_sc2sc(scstr_t str); 274.172 - 274.173 -/** 274.174 - * One of two type adjustment functions that return an scstr_t. 274.175 - * 274.176 - * Used <b>internally</b> to convert a UCX string to an immutable UCX string. 274.177 - * 274.178 - * <b>Do not use this function manually.</b> 274.179 - * 274.180 - * @param str some sstr_t 274.181 - * @return an immutable (scstr_t) version of the provided string. 274.182 - */ 274.183 -scstr_t ucx_ss2sc(sstr_t str); 274.184 - 274.185 -#if __STDC_VERSION__ >= 201112L 274.186 -/** 274.187 - * Converts a UCX string to an immutable UCX string (scstr_t). 274.188 - * @param str some UCX string 274.189 - * @return an immutable version of the provided string 274.190 - */ 274.191 -#define SCSTR(str) _Generic(str, sstr_t: ucx_ss2sc, scstr_t: ucx_sc2sc)(str) 274.192 - 274.193 -#elif defined(__GNUC__) || defined(__clang__) 274.194 - 274.195 -/** 274.196 - * Converts a UCX string to an immutable UCX string (scstr_t). 274.197 - * @param str some UCX string 274.198 - * @return an immutable version of the provided string 274.199 - */ 274.200 -#define SCSTR(str) __builtin_choose_expr( \ 274.201 - __builtin_types_compatible_p(typeof(str), sstr_t), \ 274.202 - ucx_ss2sc, \ 274.203 - ucx_sc2sc)(str) 274.204 - 274.205 -#elif defined(__sun) 274.206 - 274.207 -/** 274.208 - * Converts a UCX string to an immutable UCX string (scstr_t). 274.209 - * @param str some UCX string 274.210 - * @return the an immutable version of the provided string 274.211 - */ 274.212 -#define SCSTR(str) ({typeof(str) ucx_tmp_var_str = str; \ 274.213 - scstr_t ucx_tmp_var_c; \ 274.214 - ucx_tmp_var_c.ptr = ucx_tmp_var_str.ptr;\ 274.215 - ucx_tmp_var_c.length = ucx_tmp_var_str.length;\ 274.216 - ucx_tmp_var_c; }) 274.217 -#else /* no generics and no builtins */ 274.218 - 274.219 -/** 274.220 - * Converts a UCX string to an immutable UCX string (scstr_t). 274.221 - * 274.222 - * This <b>internal</b> function (ab)uses the C standard an expects one single 274.223 - * argument which is then implicitly converted to scstr_t without a warning. 274.224 - * 274.225 - * <b>Do not use this function manually.</b> 274.226 - * 274.227 - * @return the an immutable version of the provided string 274.228 - */ 274.229 -scstr_t ucx_ss2c_s(); 274.230 - 274.231 -/** 274.232 - * Converts a UCX string to an immutable UCX string (scstr_t). 274.233 - * @param str some UCX string 274.234 - * @return the an immutable version of the provided string 274.235 - */ 274.236 -#define SCSTR(str) ucx_ss2c_s(str) 274.237 -#endif /* C11 feature test */ 274.238 - 274.239 -#endif /* C++ */ 274.240 - 274.241 -#ifdef __cplusplus 274.242 -extern "C" { 274.243 -#endif 274.244 - 274.245 - 274.246 -/** 274.247 - * Creates a new sstr_t based on a C string. 274.248 - * 274.249 - * The length is implicitly inferred by using a call to <code>strlen()</code>. 274.250 - * 274.251 - * <b>Note:</b> the sstr_t will share the specified pointer to the C string. 274.252 - * If you do want a copy, use sstrdup() on the return value of this function. 274.253 - * 274.254 - * If you need to wrap a constant string, use scstr(). 274.255 - * 274.256 - * @param cstring the C string to wrap 274.257 - * @return a new sstr_t containing the C string 274.258 - * 274.259 - * @see sstrn() 274.260 - */ 274.261 -sstr_t sstr(char *cstring); 274.262 - 274.263 -/** 274.264 - * Creates a new sstr_t of the specified length based on a C string. 274.265 - * 274.266 - * <b>Note:</b> the sstr_t will share the specified pointer to the C string. 274.267 - * If you do want a copy, use sstrdup() on the return value of this function. 274.268 - * 274.269 - * If you need to wrap a constant string, use scstrn(). 274.270 - * 274.271 - * @param cstring the C string to wrap 274.272 - * @param length the length of the string 274.273 - * @return a new sstr_t containing the C string 274.274 - * 274.275 - * @see sstr() 274.276 - * @see S() 274.277 - */ 274.278 -sstr_t sstrn(char *cstring, size_t length); 274.279 - 274.280 -/** 274.281 - * Creates a new scstr_t based on a constant C string. 274.282 - * 274.283 - * The length is implicitly inferred by using a call to <code>strlen()</code>. 274.284 - * 274.285 - * <b>Note:</b> the scstr_t will share the specified pointer to the C string. 274.286 - * If you do want a copy, use scstrdup() on the return value of this function. 274.287 - * 274.288 - * @param cstring the C string to wrap 274.289 - * @return a new scstr_t containing the C string 274.290 - * 274.291 - * @see scstrn() 274.292 - */ 274.293 -scstr_t scstr(const char *cstring); 274.294 - 274.295 - 274.296 -/** 274.297 - * Creates a new scstr_t of the specified length based on a constant C string. 274.298 - * 274.299 - * <b>Note:</b> the scstr_t will share the specified pointer to the C string. 274.300 - * If you do want a copy, use scstrdup() on the return value of this function. * 274.301 - * 274.302 - * @param cstring the C string to wrap 274.303 - * @param length the length of the string 274.304 - * @return a new scstr_t containing the C string 274.305 - * 274.306 - * @see scstr() 274.307 - */ 274.308 -scstr_t scstrn(const char *cstring, size_t length); 274.309 - 274.310 -/** 274.311 - * Returns the accumulated length of all specified strings. 274.312 - * 274.313 - * <b>Attention:</b> if the count argument is larger than the count of the 274.314 - * specified strings, the behavior is undefined. 274.315 - * 274.316 - * @param count the total number of specified strings 274.317 - * @param ... all strings 274.318 - * @return the accumulated length of all strings 274.319 - */ 274.320 -size_t scstrnlen(size_t count, ...); 274.321 - 274.322 -/** 274.323 - * Returns the accumulated length of all specified strings. 274.324 - * 274.325 - * <b>Attention:</b> if the count argument is larger than the count of the 274.326 - * specified strings, the behavior is undefined. 274.327 - * 274.328 - * @param count the total number of specified strings 274.329 - * @param ... all strings 274.330 - * @return the cumulated length of all strings 274.331 - */ 274.332 -#define sstrnlen(count, ...) scstrnlen(count, __VA_ARGS__) 274.333 - 274.334 -/** 274.335 - * Concatenates two or more strings. 274.336 - * 274.337 - * The resulting string will be allocated by standard <code>malloc()</code>. 274.338 - * So developers <b>MUST</b> pass the sstr_t.ptr to <code>free()</code>. 274.339 - * 274.340 - * The sstr_t.ptr of the return value will <i>always</i> be <code>NULL</code>- 274.341 - * terminated. 274.342 - * 274.343 - * @param count the total number of strings to concatenate 274.344 - * @param s1 first string 274.345 - * @param ... all remaining strings 274.346 - * @return the concatenated string 274.347 - */ 274.348 -sstr_t scstrcat(size_t count, scstr_t s1, ...); 274.349 - 274.350 -/** 274.351 - * Concatenates two or more strings. 274.352 - * 274.353 - * The resulting string will be allocated by standard <code>malloc()</code>. 274.354 - * So developers <b>MUST</b> pass the sstr_t.ptr to <code>free()</code>. 274.355 - * 274.356 - * The sstr_t.ptr of the return value will <i>always</i> be <code>NULL</code>- 274.357 - * terminated. 274.358 - * 274.359 - * @param count the total number of strings to concatenate 274.360 - * @param s1 first string 274.361 - * @param ... all remaining strings 274.362 - * @return the concatenated string 274.363 - */ 274.364 -#define sstrcat(count, s1, ...) scstrcat(count, SCSTR(s1), __VA_ARGS__) 274.365 - 274.366 -/** 274.367 - * Concatenates two or more strings using a UcxAllocator. 274.368 - * 274.369 - * The resulting string must be freed by the allocators <code>free()</code> 274.370 - * implementation. 274.371 - * 274.372 - * The sstr_t.ptr of the return value will <i>always</i> be <code>NULL</code>- 274.373 - * terminated. 274.374 - * 274.375 - * @param alloc the allocator to use 274.376 - * @param count the total number of strings to concatenate 274.377 - * @param s1 first string 274.378 - * @param ... all remaining strings 274.379 - * @return the concatenated string 274.380 - * 274.381 - * @see scstrcat() 274.382 - */ 274.383 -sstr_t scstrcat_a(UcxAllocator *alloc, size_t count, scstr_t s1, ...); 274.384 - 274.385 -/** 274.386 - * Concatenates two or more strings using a UcxAllocator. 274.387 - * 274.388 - * The resulting string must be freed by the allocators <code>free()</code> 274.389 - * implementation. 274.390 - * 274.391 - * The sstr_t.ptr of the return value will <i>always</i> be <code>NULL</code>- 274.392 - * terminated. 274.393 - * 274.394 - * @param alloc the allocator to use 274.395 - * @param count the total number of strings to concatenate 274.396 - * @param s1 first string 274.397 - * @param ... all remaining strings 274.398 - * @return the concatenated string 274.399 - * 274.400 - * @see sstrcat() 274.401 - */ 274.402 -#define sstrcat_a(alloc, count, s1, ...) \ 274.403 - scstrcat_a(alloc, count, SCSTR(s1), __VA_ARGS__) 274.404 - 274.405 -/** 274.406 - * Returns a substring starting at the specified location. 274.407 - * 274.408 - * <b>Attention:</b> the new string references the same memory area as the 274.409 - * input string and is <b>NOT</b> required to be <code>NULL</code>-terminated. 274.410 - * Use sstrdup() to get a copy. 274.411 - * 274.412 - * @param string input string 274.413 - * @param start start location of the substring 274.414 - * @return a substring of <code>string</code> starting at <code>start</code> 274.415 - * 274.416 - * @see sstrsubsl() 274.417 - * @see sstrchr() 274.418 - */ 274.419 -sstr_t sstrsubs(sstr_t string, size_t start); 274.420 - 274.421 -/** 274.422 - * Returns a substring with the given length starting at the specified location. 274.423 - * 274.424 - * <b>Attention:</b> the new string references the same memory area as the 274.425 - * input string and is <b>NOT</b> required to be <code>NULL</code>-terminated. 274.426 - * Use sstrdup() to get a copy. 274.427 - * 274.428 - * @param string input string 274.429 - * @param start start location of the substring 274.430 - * @param length the maximum length of the substring 274.431 - * @return a substring of <code>string</code> starting at <code>start</code> 274.432 - * with a maximum length of <code>length</code> 274.433 - * 274.434 - * @see sstrsubs() 274.435 - * @see sstrchr() 274.436 - */ 274.437 -sstr_t sstrsubsl(sstr_t string, size_t start, size_t length); 274.438 - 274.439 -/** 274.440 - * Returns a substring of an immutable string starting at the specified 274.441 - * location. 274.442 - * 274.443 - * <b>Attention:</b> the new string references the same memory area as the 274.444 -* input string and is <b>NOT</b> required to be <code>NULL</code>-terminated. 274.445 - * Use scstrdup() to get a copy. 274.446 - * 274.447 - * @param string input string 274.448 - * @param start start location of the substring 274.449 - * @return a substring of <code>string</code> starting at <code>start</code> 274.450 - * 274.451 - * @see scstrsubsl() 274.452 - * @see scstrchr() 274.453 - */ 274.454 -scstr_t scstrsubs(scstr_t string, size_t start); 274.455 - 274.456 -/** 274.457 - * Returns a substring of an immutable string with a maximum length starting 274.458 - * at the specified location. 274.459 - * 274.460 - * <b>Attention:</b> the new string references the same memory area as the 274.461 - * input string and is <b>NOT</b> required to be <code>NULL</code>-terminated. 274.462 - * Use scstrdup() to get a copy. 274.463 - * 274.464 - * @param string input string 274.465 - * @param start start location of the substring 274.466 - * @param length the maximum length of the substring 274.467 - * @return a substring of <code>string</code> starting at <code>start</code> 274.468 - * with a maximum length of <code>length</code> 274.469 - * 274.470 - * @see scstrsubs() 274.471 - * @see scstrchr() 274.472 - */ 274.473 -scstr_t scstrsubsl(scstr_t string, size_t start, size_t length); 274.474 - 274.475 -/** 274.476 - * Returns a substring starting at the location of the first occurrence of the 274.477 - * specified character. 274.478 - * 274.479 - * If the string does not contain the character, an empty string is returned. 274.480 - * 274.481 - * @param string the string where to locate the character 274.482 - * @param chr the character to locate 274.483 - * @return a substring starting at the first location of <code>chr</code> 274.484 - * 274.485 - * @see sstrsubs() 274.486 - */ 274.487 -sstr_t sstrchr(sstr_t string, int chr); 274.488 - 274.489 -/** 274.490 - * Returns a substring starting at the location of the last occurrence of the 274.491 - * specified character. 274.492 - * 274.493 - * If the string does not contain the character, an empty string is returned. 274.494 - * 274.495 - * @param string the string where to locate the character 274.496 - * @param chr the character to locate 274.497 - * @return a substring starting at the last location of <code>chr</code> 274.498 - * 274.499 - * @see sstrsubs() 274.500 - */ 274.501 -sstr_t sstrrchr(sstr_t string, int chr); 274.502 - 274.503 -/** 274.504 - * Returns an immutable substring starting at the location of the first 274.505 - * occurrence of the specified character. 274.506 - * 274.507 - * If the string does not contain the character, an empty string is returned. 274.508 - * 274.509 - * @param string the string where to locate the character 274.510 - * @param chr the character to locate 274.511 - * @return a substring starting at the first location of <code>chr</code> 274.512 - * 274.513 - * @see scstrsubs() 274.514 - */ 274.515 -scstr_t scstrchr(scstr_t string, int chr); 274.516 - 274.517 -/** 274.518 - * Returns an immutable substring starting at the location of the last 274.519 - * occurrence of the specified character. 274.520 - * 274.521 - * If the string does not contain the character, an empty string is returned. 274.522 - * 274.523 - * @param string the string where to locate the character 274.524 - * @param chr the character to locate 274.525 - * @return a substring starting at the last location of <code>chr</code> 274.526 - * 274.527 - * @see scstrsubs() 274.528 - */ 274.529 -scstr_t scstrrchr(scstr_t string, int chr); 274.530 - 274.531 -/** 274.532 - * Returns a substring starting at the location of the first occurrence of the 274.533 - * specified string. 274.534 - * 274.535 - * If the string does not contain the other string, an empty string is returned. 274.536 - * 274.537 - * If <code>match</code> is an empty string, the complete <code>string</code> is 274.538 - * returned. 274.539 - * 274.540 - * @param string the string to be scanned 274.541 - * @param match string containing the sequence of characters to match 274.542 - * @return a substring starting at the first occurrence of 274.543 - * <code>match</code>, or an empty string, if the sequence is not 274.544 - * present in <code>string</code> 274.545 - */ 274.546 -sstr_t scstrsstr(sstr_t string, scstr_t match); 274.547 - 274.548 -/** 274.549 - * Returns a substring starting at the location of the first occurrence of the 274.550 - * specified string. 274.551 - * 274.552 - * If the string does not contain the other string, an empty string is returned. 274.553 - * 274.554 - * If <code>match</code> is an empty string, the complete <code>string</code> is 274.555 - * returned. 274.556 - * 274.557 - * @param string the string to be scanned 274.558 - * @param match string containing the sequence of characters to match 274.559 - * @return a substring starting at the first occurrence of 274.560 - * <code>match</code>, or an empty string, if the sequence is not 274.561 - * present in <code>string</code> 274.562 - */ 274.563 -#define sstrstr(string, match) scstrsstr(string, SCSTR(match)) 274.564 - 274.565 -/** 274.566 - * Returns an immutable substring starting at the location of the 274.567 - * first occurrence of the specified immutable string. 274.568 - * 274.569 - * If the string does not contain the other string, an empty string is returned. 274.570 - * 274.571 - * If <code>match</code> is an empty string, the complete <code>string</code> is 274.572 - * returned. 274.573 - * 274.574 - * @param string the string to be scanned 274.575 - * @param match string containing the sequence of characters to match 274.576 - * @return a substring starting at the first occurrence of 274.577 - * <code>match</code>, or an empty string, if the sequence is not 274.578 - * present in <code>string</code> 274.579 - */ 274.580 -scstr_t scstrscstr(scstr_t string, scstr_t match); 274.581 - 274.582 -/** 274.583 - * Returns an immutable substring starting at the location of the 274.584 - * first occurrence of the specified immutable string. 274.585 - * 274.586 - * If the string does not contain the other string, an empty string is returned. 274.587 - * 274.588 - * If <code>match</code> is an empty string, the complete <code>string</code> is 274.589 - * returned. 274.590 - * 274.591 - * @param string the string to be scanned 274.592 - * @param match string containing the sequence of characters to match 274.593 - * @return a substring starting at the first occurrence of 274.594 - * <code>match</code>, or an empty string, if the sequence is not 274.595 - * present in <code>string</code> 274.596 - */ 274.597 -#define sstrscstr(string, match) scstrscstr(string, SCSTR(match)) 274.598 - 274.599 -/** 274.600 - * Splits a string into parts by using a delimiter string. 274.601 - * 274.602 - * This function will return <code>NULL</code>, if one of the following happens: 274.603 - * <ul> 274.604 - * <li>the string length is zero</li> 274.605 - * <li>the delimeter length is zero</li> 274.606 - * <li>the string equals the delimeter</li> 274.607 - * <li>memory allocation fails</li> 274.608 - * </ul> 274.609 - * 274.610 - * The integer referenced by <code>count</code> is used as input and determines 274.611 - * the maximum size of the resulting array, i.e. the maximum count of splits to 274.612 - * perform + 1. 274.613 - * 274.614 - * The integer referenced by <code>count</code> is also used as output and is 274.615 - * set to 274.616 - * <ul> 274.617 - * <li>-2, on memory allocation errors</li> 274.618 - * <li>-1, if either the string or the delimiter is an empty string</li> 274.619 - * <li>0, if the string equals the delimiter</li> 274.620 - * <li>1, if the string does not contain the delimiter</li> 274.621 - * <li>the count of array items, otherwise</li> 274.622 - * </ul> 274.623 - * 274.624 - * If the string starts with the delimiter, the first item of the resulting 274.625 - * array will be an empty string. 274.626 - * 274.627 - * If the string ends with the delimiter and the maximum list size is not 274.628 - * exceeded, the last array item will be an empty string. 274.629 - * In case the list size would be exceeded, the last array item will be the 274.630 - * remaining string after the last split, <i>including</i> the terminating 274.631 - * delimiter. 274.632 - * 274.633 - * <b>Attention:</b> The array pointer <b>AND</b> all sstr_t.ptr of the array 274.634 - * items must be manually passed to <code>free()</code>. Use scstrsplit_a() with 274.635 - * an allocator to managed memory, to avoid this. 274.636 - * 274.637 - * @param string the string to split 274.638 - * @param delim the delimiter string 274.639 - * @param count IN: the maximum size of the resulting array (0 = no limit), 274.640 - * OUT: the actual size of the array 274.641 - * @return a sstr_t array containing the split strings or 274.642 - * <code>NULL</code> on error 274.643 - * 274.644 - * @see scstrsplit_a() 274.645 - */ 274.646 -sstr_t* scstrsplit(scstr_t string, scstr_t delim, ssize_t *count); 274.647 - 274.648 -/** 274.649 - * Splits a string into parts by using a delimiter string. 274.650 - * 274.651 - * This function will return <code>NULL</code>, if one of the following happens: 274.652 - * <ul> 274.653 - * <li>the string length is zero</li> 274.654 - * <li>the delimeter length is zero</li> 274.655 - * <li>the string equals the delimeter</li> 274.656 - * <li>memory allocation fails</li> 274.657 - * </ul> 274.658 - * 274.659 - * The integer referenced by <code>count</code> is used as input and determines 274.660 - * the maximum size of the resulting array, i.e. the maximum count of splits to 274.661 - * perform + 1. 274.662 - * 274.663 - * The integer referenced by <code>count</code> is also used as output and is 274.664 - * set to 274.665 - * <ul> 274.666 - * <li>-2, on memory allocation errors</li> 274.667 - * <li>-1, if either the string or the delimiter is an empty string</li> 274.668 - * <li>0, if the string equals the delimiter</li> 274.669 - * <li>1, if the string does not contain the delimiter</li> 274.670 - * <li>the count of array items, otherwise</li> 274.671 - * </ul> 274.672 - * 274.673 - * If the string starts with the delimiter, the first item of the resulting 274.674 - * array will be an empty string. 274.675 - * 274.676 - * If the string ends with the delimiter and the maximum list size is not 274.677 - * exceeded, the last array item will be an empty string. 274.678 - * In case the list size would be exceeded, the last array item will be the 274.679 - * remaining string after the last split, <i>including</i> the terminating 274.680 - * delimiter. 274.681 - * 274.682 - * <b>Attention:</b> The array pointer <b>AND</b> all sstr_t.ptr of the array 274.683 - * items must be manually passed to <code>free()</code>. Use sstrsplit_a() with 274.684 - * an allocator to managed memory, to avoid this. 274.685 - * 274.686 - * @param string the string to split 274.687 - * @param delim the delimiter string 274.688 - * @param count IN: the maximum size of the resulting array (0 = no limit), 274.689 - * OUT: the actual size of the array 274.690 - * @return a sstr_t array containing the split strings or 274.691 - * <code>NULL</code> on error 274.692 - * 274.693 - * @see sstrsplit_a() 274.694 - */ 274.695 -#define sstrsplit(string, delim, count) \ 274.696 - scstrsplit(SCSTR(string), SCSTR(delim), count) 274.697 - 274.698 -/** 274.699 - * Performing scstrsplit() using a UcxAllocator. 274.700 - * 274.701 - * <i>Read the description of scstrsplit() for details.</i> 274.702 - * 274.703 - * The memory for the sstr_t.ptr pointers of the array items and the memory for 274.704 - * the sstr_t array itself are allocated by using the UcxAllocator.malloc() 274.705 - * function. 274.706 - * 274.707 - * @param allocator the UcxAllocator used for allocating memory 274.708 - * @param string the string to split 274.709 - * @param delim the delimiter string 274.710 - * @param count IN: the maximum size of the resulting array (0 = no limit), 274.711 - * OUT: the actual size of the array 274.712 - * @return a sstr_t array containing the split strings or 274.713 - * <code>NULL</code> on error 274.714 - * 274.715 - * @see scstrsplit() 274.716 - */ 274.717 -sstr_t* scstrsplit_a(UcxAllocator *allocator, scstr_t string, scstr_t delim, 274.718 - ssize_t *count); 274.719 - 274.720 -/** 274.721 - * Performing sstrsplit() using a UcxAllocator. 274.722 - * 274.723 - * <i>Read the description of sstrsplit() for details.</i> 274.724 - * 274.725 - * The memory for the sstr_t.ptr pointers of the array items and the memory for 274.726 - * the sstr_t array itself are allocated by using the UcxAllocator.malloc() 274.727 - * function. 274.728 - * 274.729 - * @param allocator the UcxAllocator used for allocating memory 274.730 - * @param string the string to split 274.731 - * @param delim the delimiter string 274.732 - * @param count IN: the maximum size of the resulting array (0 = no limit), 274.733 - * OUT: the actual size of the array 274.734 - * @return a sstr_t array containing the split strings or 274.735 - * <code>NULL</code> on error 274.736 - * 274.737 - * @see sstrsplit() 274.738 - */ 274.739 -#define sstrsplit_a(allocator, string, delim, count) \ 274.740 - scstrsplit_a(allocator, SCSTR(string), SCSTR(delim), count) 274.741 - 274.742 -/** 274.743 - * Compares two UCX strings with standard <code>memcmp()</code>. 274.744 - * 274.745 - * At first it compares the scstr_t.length attribute of the two strings. The 274.746 - * <code>memcmp()</code> function is called, if and only if the lengths match. 274.747 - * 274.748 - * @param s1 the first string 274.749 - * @param s2 the second string 274.750 - * @return -1, if the length of s1 is less than the length of s2 or 1, if the 274.751 - * length of s1 is greater than the length of s2 or the result of 274.752 - * <code>memcmp()</code> otherwise (i.e. 0 if the strings match) 274.753 - */ 274.754 -int scstrcmp(scstr_t s1, scstr_t s2); 274.755 - 274.756 -/** 274.757 - * Compares two UCX strings with standard <code>memcmp()</code>. 274.758 - * 274.759 - * At first it compares the sstr_t.length attribute of the two strings. The 274.760 - * <code>memcmp()</code> function is called, if and only if the lengths match. 274.761 - * 274.762 - * @param s1 the first string 274.763 - * @param s2 the second string 274.764 - * @return -1, if the length of s1 is less than the length of s2 or 1, if the 274.765 - * length of s1 is greater than the length of s2 or the result of 274.766 - * <code>memcmp()</code> otherwise (i.e. 0 if the strings match) 274.767 - */ 274.768 -#define sstrcmp(s1, s2) scstrcmp(SCSTR(s1), SCSTR(s2)) 274.769 - 274.770 -/** 274.771 - * Compares two UCX strings ignoring the case. 274.772 - * 274.773 - * At first it compares the scstr_t.length attribute of the two strings. If and 274.774 - * only if the lengths match, both strings are compared char by char ignoring 274.775 - * the case. 274.776 - * 274.777 - * @param s1 the first string 274.778 - * @param s2 the second string 274.779 - * @return -1, if the length of s1 is less than the length of s2 or 1, if the 274.780 - * length of s1 is greater than the length of s2 or the result of the platform 274.781 - * specific string comparison function ignoring the case. 274.782 - */ 274.783 -int scstrcasecmp(scstr_t s1, scstr_t s2); 274.784 - 274.785 -/** 274.786 - * Compares two UCX strings ignoring the case. 274.787 - * 274.788 - * At first it compares the sstr_t.length attribute of the two strings. If and 274.789 - * only if the lengths match, both strings are compared char by char ignoring 274.790 - * the case. 274.791 - * 274.792 - * @param s1 the first string 274.793 - * @param s2 the second string 274.794 - * @return -1, if the length of s1 is less than the length of s2 or 1, if the 274.795 - * length of s1 is greater than the length of s2 or the result of the platform 274.796 - * specific string comparison function ignoring the case. 274.797 - */ 274.798 -#define sstrcasecmp(s1, s2) scstrcasecmp(SCSTR(s1), SCSTR(s2)) 274.799 - 274.800 -/** 274.801 - * Creates a duplicate of the specified string. 274.802 - * 274.803 - * The new sstr_t will contain a copy allocated by standard 274.804 - * <code>malloc()</code>. So developers <b>MUST</b> pass the sstr_t.ptr to 274.805 - * <code>free()</code>. 274.806 - * 274.807 - * The sstr_t.ptr of the return value will <i>always</i> be <code>NULL</code>- 274.808 - * terminated and mutable, regardless of the argument. 274.809 - * 274.810 - * @param string the string to duplicate 274.811 - * @return a duplicate of the string 274.812 - * @see scstrdup_a() 274.813 - */ 274.814 -sstr_t scstrdup(scstr_t string); 274.815 - 274.816 -/** 274.817 - * Creates a duplicate of the specified string. 274.818 - * 274.819 - * The new sstr_t will contain a copy allocated by standard 274.820 - * <code>malloc()</code>. So developers <b>MUST</b> pass the sstr_t.ptr to 274.821 - * <code>free()</code>. 274.822 - * 274.823 - * The sstr_t.ptr of the return value will <i>always</i> be <code>NULL</code>- 274.824 - * terminated, regardless of the argument. 274.825 - * 274.826 - * @param string the string to duplicate 274.827 - * @return a duplicate of the string 274.828 - * @see sstrdup_a() 274.829 - */ 274.830 -#define sstrdup(string) scstrdup(SCSTR(string)) 274.831 - 274.832 -/** 274.833 - * Creates a duplicate of the specified string using a UcxAllocator. 274.834 - * 274.835 - * The new sstr_t will contain a copy allocated by the allocators 274.836 - * UcxAllocator.malloc() function. So it is implementation depended, whether the 274.837 - * returned sstr_t.ptr pointer must be passed to the allocators 274.838 - * UcxAllocator.free() function manually. 274.839 - * 274.840 - * The sstr_t.ptr of the return value will <i>always</i> be <code>NULL</code>- 274.841 - * terminated and mutable, regardless of the argument. 274.842 - * 274.843 - * @param allocator a valid instance of a UcxAllocator 274.844 - * @param string the string to duplicate 274.845 - * @return a duplicate of the string 274.846 - * @see scstrdup() 274.847 - */ 274.848 -sstr_t scstrdup_a(UcxAllocator *allocator, scstr_t string); 274.849 - 274.850 -/** 274.851 - * Creates a duplicate of the specified string using a UcxAllocator. 274.852 - * 274.853 - * The new sstr_t will contain a copy allocated by the allocators 274.854 - * UcxAllocator.malloc() function. So it is implementation depended, whether the 274.855 - * returned sstr_t.ptr pointer must be passed to the allocators 274.856 - * UcxAllocator.free() function manually. 274.857 - * 274.858 - * The sstr_t.ptr of the return value will <i>always</i> be <code>NULL</code>- 274.859 - * terminated, regardless of the argument. 274.860 - * 274.861 - * @param allocator a valid instance of a UcxAllocator 274.862 - * @param string the string to duplicate 274.863 - * @return a duplicate of the string 274.864 - * @see scstrdup() 274.865 - */ 274.866 -#define sstrdup_a(allocator, string) scstrdup_a(allocator, SCSTR(string)) 274.867 - 274.868 - 274.869 -/** 274.870 - * Omits leading and trailing spaces. 274.871 - * 274.872 - * This function returns a new sstr_t containing a trimmed version of the 274.873 - * specified string. 274.874 - * 274.875 - * <b>Note:</b> the new sstr_t references the same memory, thus you 274.876 - * <b>MUST NOT</b> pass the sstr_t.ptr of the return value to 274.877 - * <code>free()</code>. It is also highly recommended to avoid assignments like 274.878 - * <code>mystr = sstrtrim(mystr);</code> as you lose the reference to the 274.879 - * source string. Assignments of this type are only permitted, if the 274.880 - * sstr_t.ptr of the source string does not need to be freed or if another 274.881 - * reference to the source string exists. 274.882 - * 274.883 - * @param string the string that shall be trimmed 274.884 - * @return a new sstr_t containing the trimmed string 274.885 - */ 274.886 -sstr_t sstrtrim(sstr_t string); 274.887 - 274.888 -/** 274.889 - * Omits leading and trailing spaces. 274.890 - * 274.891 - * This function returns a new scstr_t containing a trimmed version of the 274.892 - * specified string. 274.893 - * 274.894 - * <b>Note:</b> the new scstr_t references the same memory, thus you 274.895 - * <b>MUST NOT</b> pass the scstr_t.ptr of the return value to 274.896 - * <code>free()</code>. It is also highly recommended to avoid assignments like 274.897 - * <code>mystr = scstrtrim(mystr);</code> as you lose the reference to the 274.898 - * source string. Assignments of this type are only permitted, if the 274.899 - * scstr_t.ptr of the source string does not need to be freed or if another 274.900 - * reference to the source string exists. 274.901 - * 274.902 - * @param string the string that shall be trimmed 274.903 - * @return a new scstr_t containing the trimmed string 274.904 - */ 274.905 -scstr_t scstrtrim(scstr_t string); 274.906 - 274.907 -/** 274.908 - * Checks, if a string has a specific prefix. 274.909 - * 274.910 - * @param string the string to check 274.911 - * @param prefix the prefix the string should have 274.912 - * @return 1, if and only if the string has the specified prefix, 0 otherwise 274.913 - */ 274.914 -int scstrprefix(scstr_t string, scstr_t prefix); 274.915 - 274.916 -/** 274.917 - * Checks, if a string has a specific prefix. 274.918 - * 274.919 - * @param string the string to check 274.920 - * @param prefix the prefix the string should have 274.921 - * @return 1, if and only if the string has the specified prefix, 0 otherwise 274.922 - */ 274.923 -#define sstrprefix(string, prefix) scstrprefix(SCSTR(string), SCSTR(prefix)) 274.924 - 274.925 -/** 274.926 - * Checks, if a string has a specific suffix. 274.927 - * 274.928 - * @param string the string to check 274.929 - * @param suffix the suffix the string should have 274.930 - * @return 1, if and only if the string has the specified suffix, 0 otherwise 274.931 - */ 274.932 -int scstrsuffix(scstr_t string, scstr_t suffix); 274.933 - 274.934 -/** 274.935 - * Checks, if a string has a specific suffix. 274.936 - * 274.937 - * @param string the string to check 274.938 - * @param suffix the suffix the string should have 274.939 - * @return 1, if and only if the string has the specified suffix, 0 otherwise 274.940 - */ 274.941 -#define sstrsuffix(string, suffix) scstrsuffix(SCSTR(string), SCSTR(suffix)) 274.942 - 274.943 -/** 274.944 - * Checks, if a string has a specific prefix, ignoring the case. 274.945 - * 274.946 - * @param string the string to check 274.947 - * @param prefix the prefix the string should have 274.948 - * @return 1, if and only if the string has the specified prefix, 0 otherwise 274.949 - */ 274.950 -int scstrcaseprefix(scstr_t string, scstr_t prefix); 274.951 - 274.952 -/** 274.953 - * Checks, if a string has a specific prefix, ignoring the case. 274.954 - * 274.955 - * @param string the string to check 274.956 - * @param prefix the prefix the string should have 274.957 - * @return 1, if and only if the string has the specified prefix, 0 otherwise 274.958 - */ 274.959 -#define sstrcaseprefix(string, prefix) \ 274.960 - scstrcaseprefix(SCSTR(string), SCSTR(prefix)) 274.961 - 274.962 -/** 274.963 - * Checks, if a string has a specific suffix, ignoring the case. 274.964 - * 274.965 - * @param string the string to check 274.966 - * @param suffix the suffix the string should have 274.967 - * @return 1, if and only if the string has the specified suffix, 0 otherwise 274.968 - */ 274.969 -int scstrcasesuffix(scstr_t string, scstr_t suffix); 274.970 - 274.971 -/** 274.972 - * Checks, if a string has a specific suffix, ignoring the case. 274.973 - * 274.974 - * @param string the string to check 274.975 - * @param suffix the suffix the string should have 274.976 - * @return 1, if and only if the string has the specified suffix, 0 otherwise 274.977 - */ 274.978 -#define sstrcasesuffix(string, suffix) \ 274.979 - scstrcasesuffix(SCSTR(string), SCSTR(suffix)) 274.980 - 274.981 -/** 274.982 - * Returns a lower case version of a string. 274.983 - * 274.984 - * This function creates a duplicate of the input string, first 274.985 - * (see scstrdup()). 274.986 - * 274.987 - * @param string the input string 274.988 - * @return the resulting lower case string 274.989 - * @see scstrdup() 274.990 - */ 274.991 -sstr_t scstrlower(scstr_t string); 274.992 - 274.993 -/** 274.994 - * Returns a lower case version of a string. 274.995 - * 274.996 - * This function creates a duplicate of the input string, first 274.997 - * (see sstrdup()). 274.998 - * 274.999 - * @param string the input string 274.1000 - * @return the resulting lower case string 274.1001 - */ 274.1002 -#define sstrlower(string) scstrlower(SCSTR(string)) 274.1003 - 274.1004 -/** 274.1005 - * Returns a lower case version of a string. 274.1006 - * 274.1007 - * This function creates a duplicate of the input string, first 274.1008 - * (see scstrdup_a()). 274.1009 - * 274.1010 - * @param allocator the allocator used for duplicating the string 274.1011 - * @param string the input string 274.1012 - * @return the resulting lower case string 274.1013 - * @see scstrdup_a() 274.1014 - */ 274.1015 -sstr_t scstrlower_a(UcxAllocator *allocator, scstr_t string); 274.1016 - 274.1017 - 274.1018 -/** 274.1019 - * Returns a lower case version of a string. 274.1020 - * 274.1021 - * This function creates a duplicate of the input string, first 274.1022 - * (see sstrdup_a()). 274.1023 - * 274.1024 - * @param allocator the allocator used for duplicating the string 274.1025 - * @param string the input string 274.1026 - * @return the resulting lower case string 274.1027 - */ 274.1028 -#define sstrlower_a(allocator, string) scstrlower_a(allocator, SCSTR(string)) 274.1029 - 274.1030 -/** 274.1031 - * Returns a upper case version of a string. 274.1032 - * 274.1033 - * This function creates a duplicate of the input string, first 274.1034 - * (see scstrdup()). 274.1035 - * 274.1036 - * @param string the input string 274.1037 - * @return the resulting upper case string 274.1038 - * @see scstrdup() 274.1039 - */ 274.1040 -sstr_t scstrupper(scstr_t string); 274.1041 - 274.1042 -/** 274.1043 - * Returns a upper case version of a string. 274.1044 - * 274.1045 - * This function creates a duplicate of the input string, first 274.1046 - * (see sstrdup()). 274.1047 - * 274.1048 - * @param string the input string 274.1049 - * @return the resulting upper case string 274.1050 - */ 274.1051 -#define sstrupper(string) scstrupper(SCSTR(string)) 274.1052 - 274.1053 -/** 274.1054 - * Returns a upper case version of a string. 274.1055 - * 274.1056 - * This function creates a duplicate of the input string, first 274.1057 - * (see scstrdup_a()). 274.1058 - * 274.1059 - * @param allocator the allocator used for duplicating the string 274.1060 - * @param string the input string 274.1061 - * @return the resulting upper case string 274.1062 - * @see scstrdup_a() 274.1063 - */ 274.1064 -sstr_t scstrupper_a(UcxAllocator *allocator, scstr_t string); 274.1065 - 274.1066 -/** 274.1067 - * Returns a upper case version of a string. 274.1068 - * 274.1069 - * This function creates a duplicate of the input string, first 274.1070 - * (see sstrdup_a()). 274.1071 - * 274.1072 - * @param allocator the allocator used for duplicating the string 274.1073 - * @param string the input string 274.1074 - * @return the resulting upper case string 274.1075 - */ 274.1076 -#define sstrupper_a(allocator, string) scstrupper_a(allocator, string) 274.1077 - 274.1078 - 274.1079 -/** 274.1080 - * Replaces a pattern in a string with another string. 274.1081 - * 274.1082 - * The pattern is taken literally and is no regular expression. 274.1083 - * Replaces at most <code>replmax</code> occurrences. 274.1084 - * 274.1085 - * The resulting string is allocated by the specified allocator. I.e. it 274.1086 - * depends on the used allocator, whether the sstr_t.ptr must be freed 274.1087 - * manually. 274.1088 - * 274.1089 - * If allocation fails, the sstr_t.ptr of the return value is NULL. 274.1090 - * 274.1091 - * @param allocator the allocator to use 274.1092 - * @param str the string where replacements should be applied 274.1093 - * @param pattern the pattern to search for 274.1094 - * @param replacement the replacement string 274.1095 - * @param replmax maximum number of replacements 274.1096 - * @return the resulting string after applying the replacements 274.1097 - */ 274.1098 -sstr_t scstrreplacen_a(UcxAllocator *allocator, scstr_t str, 274.1099 - scstr_t pattern, scstr_t replacement, size_t replmax); 274.1100 - 274.1101 -/** 274.1102 - * Replaces a pattern in a string with another string. 274.1103 - * 274.1104 - * The pattern is taken literally and is no regular expression. 274.1105 - * Replaces at most <code>replmax</code> occurrences. 274.1106 - * 274.1107 - * The sstr_t.ptr of the resulting string must be freed manually. 274.1108 - * 274.1109 - * If allocation fails, the sstr_t.ptr of the return value is NULL. 274.1110 - * 274.1111 - * @param str the string where replacements should be applied 274.1112 - * @param pattern the pattern to search for 274.1113 - * @param replacement the replacement string 274.1114 - * @param replmax maximum number of replacements 274.1115 - * @return the resulting string after applying the replacements 274.1116 - */ 274.1117 -sstr_t scstrreplacen(scstr_t str, scstr_t pattern, 274.1118 - scstr_t replacement, size_t replmax); 274.1119 - 274.1120 -/** 274.1121 - * Replaces a pattern in a string with another string. 274.1122 - * 274.1123 - * The pattern is taken literally and is no regular expression. 274.1124 - * Replaces at most <code>replmax</code> occurrences. 274.1125 - * 274.1126 - * The resulting string is allocated by the specified allocator. I.e. it 274.1127 - * depends on the used allocator, whether the sstr_t.ptr must be freed 274.1128 - * manually. 274.1129 - * 274.1130 - * @param allocator the allocator to use 274.1131 - * @param str the string where replacements should be applied 274.1132 - * @param pattern the pattern to search for 274.1133 - * @param replacement the replacement string 274.1134 - * @param replmax maximum number of replacements 274.1135 - * @return the resulting string after applying the replacements 274.1136 - */ 274.1137 -#define sstrreplacen_a(allocator, str, pattern, replacement, replmax) \ 274.1138 - scstrreplacen_a(allocator, SCSTR(str), SCSTR(pattern), \ 274.1139 - SCSTR(replacement), replmax) 274.1140 - 274.1141 -/** 274.1142 - * Replaces a pattern in a string with another string. 274.1143 - * 274.1144 - * The pattern is taken literally and is no regular expression. 274.1145 - * Replaces at most <code>replmax</code> occurrences. 274.1146 - * 274.1147 - * The sstr_t.ptr of the resulting string must be freed manually. 274.1148 - * 274.1149 - * If allocation fails, the sstr_t.ptr of the return value is NULL. 274.1150 - * 274.1151 - * @param str the string where replacements should be applied 274.1152 - * @param pattern the pattern to search for 274.1153 - * @param replacement the replacement string 274.1154 - * @param replmax maximum number of replacements 274.1155 - * @return the resulting string after applying the replacements 274.1156 - */ 274.1157 -#define sstrreplacen(str, pattern, replacement, replmax) \ 274.1158 - scstrreplacen(SCSTR(str), SCSTR(pattern), SCSTR(replacement), replmax) 274.1159 - 274.1160 -/** 274.1161 - * Replaces a pattern in a string with another string. 274.1162 - * 274.1163 - * The pattern is taken literally and is no regular expression. 274.1164 - * Replaces at most <code>replmax</code> occurrences. 274.1165 - * 274.1166 - * The resulting string is allocated by the specified allocator. I.e. it 274.1167 - * depends on the used allocator, whether the sstr_t.ptr must be freed 274.1168 - * manually. 274.1169 - * 274.1170 - * If allocation fails, the sstr_t.ptr of the return value is NULL. 274.1171 - * 274.1172 - * @param allocator the allocator to use 274.1173 - * @param str the string where replacements should be applied 274.1174 - * @param pattern the pattern to search for 274.1175 - * @param replacement the replacement string 274.1176 - * @return the resulting string after applying the replacements 274.1177 - */ 274.1178 -#define sstrreplace_a(allocator, str, pattern, replacement) \ 274.1179 - scstrreplacen_a(allocator, SCSTR(str), SCSTR(pattern), \ 274.1180 - SCSTR(replacement), SIZE_MAX) 274.1181 - 274.1182 -/** 274.1183 - * Replaces a pattern in a string with another string. 274.1184 - * 274.1185 - * The pattern is taken literally and is no regular expression. 274.1186 - * Replaces at most <code>replmax</code> occurrences. 274.1187 - * 274.1188 - * The sstr_t.ptr of the resulting string must be freed manually. 274.1189 - * 274.1190 - * If allocation fails, the sstr_t.ptr of the return value is NULL. 274.1191 - * 274.1192 - * @param str the string where replacements should be applied 274.1193 - * @param pattern the pattern to search for 274.1194 - * @param replacement the replacement string 274.1195 - * @return the resulting string after applying the replacements 274.1196 - */ 274.1197 -#define sstrreplace(str, pattern, replacement) \ 274.1198 - scstrreplacen(SCSTR(str), SCSTR(pattern), SCSTR(replacement), SIZE_MAX) 274.1199 - 274.1200 -#ifdef __cplusplus 274.1201 -} 274.1202 -#endif 274.1203 - 274.1204 -#endif /* UCX_STRING_H */
275.1 --- a/src/ucx/test.h Mon Dec 30 09:54:10 2019 +0100 275.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 275.3 @@ -1,241 +0,0 @@ 275.4 -/* 275.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 275.6 - * 275.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 275.8 - * 275.9 - * Redistribution and use in source and binary forms, with or without 275.10 - * modification, are permitted provided that the following conditions are met: 275.11 - * 275.12 - * 1. Redistributions of source code must retain the above copyright 275.13 - * notice, this list of conditions and the following disclaimer. 275.14 - * 275.15 - * 2. Redistributions in binary form must reproduce the above copyright 275.16 - * notice, this list of conditions and the following disclaimer in the 275.17 - * documentation and/or other materials provided with the distribution. 275.18 - * 275.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 275.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 275.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 275.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 275.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 275.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 275.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 275.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 275.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 275.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 275.29 - * POSSIBILITY OF SUCH DAMAGE. 275.30 - */ 275.31 - 275.32 -/** 275.33 - * @file: test.h 275.34 - * 275.35 - * UCX Test Framework. 275.36 - * 275.37 - * Usage of this test framework: 275.38 - * 275.39 - * **** IN HEADER FILE: **** 275.40 - * 275.41 - * <pre> 275.42 - * UCX_TEST(function_name); 275.43 - * UCX_TEST_SUBROUTINE(subroutine_name, paramlist); // optional 275.44 - * </pre> 275.45 - * 275.46 - * **** IN SOURCE FILE: **** 275.47 - * <pre> 275.48 - * UCX_TEST_SUBROUTINE(subroutine_name, paramlist) { 275.49 - * // tests with UCX_TEST_ASSERT() 275.50 - * } 275.51 - * 275.52 - * UCX_TEST(function_name) { 275.53 - * // memory allocation and other stuff here 275.54 - * #UCX_TEST_BEGIN 275.55 - * // tests with UCX_TEST_ASSERT() and/or 275.56 - * // calls with UCX_TEST_CALL_SUBROUTINE() here 275.57 - * #UCX_TEST_END 275.58 - * // cleanup of memory here 275.59 - * } 275.60 - * </pre> 275.61 - * 275.62 - * <b>Note:</b> if a test fails, a longjump is performed 275.63 - * back to the #UCX_TEST_BEGIN macro! 275.64 - * 275.65 - * <b>Attention:</b> Do not call own functions within a test, that use 275.66 - * UCX_TEST_ASSERT() macros and are not defined by using UCX_TEST_SUBROUTINE(). 275.67 - * 275.68 - * 275.69 - * @author Mike Becker 275.70 - * @author Olaf Wintermann 275.71 - * 275.72 - */ 275.73 - 275.74 -#ifndef UCX_TEST_H 275.75 -#define UCX_TEST_H 275.76 - 275.77 -#include "ucx.h" 275.78 -#include <stdio.h> 275.79 -#include <string.h> 275.80 -#include <setjmp.h> 275.81 - 275.82 -#ifdef __cplusplus 275.83 -extern "C" { 275.84 -#endif 275.85 - 275.86 -#ifndef __FUNCTION__ 275.87 - 275.88 -/** 275.89 - * Alias for the <code>__func__</code> preprocessor macro. 275.90 - * Some compilers use <code>__func__</code> and others use __FUNCTION__. 275.91 - * We use __FUNCTION__ so we define it for those compilers which use 275.92 - * <code>__func__</code>. 275.93 - */ 275.94 -#define __FUNCTION__ __func__ 275.95 -#endif 275.96 - 275.97 -/** Type for the UcxTestSuite. */ 275.98 -typedef struct UcxTestSuite UcxTestSuite; 275.99 - 275.100 -/** Pointer to a test function. */ 275.101 -typedef void(*UcxTest)(UcxTestSuite*,FILE*); 275.102 - 275.103 -/** Type for the internal list of test cases. */ 275.104 -typedef struct UcxTestList UcxTestList; 275.105 - 275.106 -/** Structure for the internal list of test cases. */ 275.107 -struct UcxTestList { 275.108 - 275.109 - /** Test case. */ 275.110 - UcxTest test; 275.111 - 275.112 - /** Pointer to the next list element. */ 275.113 - UcxTestList *next; 275.114 -}; 275.115 - 275.116 -/** 275.117 - * A test suite containing multiple test cases. 275.118 - */ 275.119 -struct UcxTestSuite { 275.120 - 275.121 - /** The number of successful tests after the suite has been run. */ 275.122 - unsigned int success; 275.123 - 275.124 - /** The number of failed tests after the suite has been run. */ 275.125 - unsigned int failure; 275.126 - 275.127 - /** 275.128 - * Internal list of test cases. 275.129 - * Use ucx_test_register() to add tests to this list. 275.130 - */ 275.131 - UcxTestList *tests; 275.132 -}; 275.133 - 275.134 -/** 275.135 - * Creates a new test suite. 275.136 - * @return a new test suite 275.137 - */ 275.138 -UcxTestSuite* ucx_test_suite_new(); 275.139 - 275.140 -/** 275.141 - * Destroys a test suite. 275.142 - * @param suite the test suite to destroy 275.143 - */ 275.144 -void ucx_test_suite_free(UcxTestSuite* suite); 275.145 - 275.146 -/** 275.147 - * Registers a test function with the specified test suite. 275.148 - * 275.149 - * @param suite the suite, the test function shall be added to 275.150 - * @param test the test function to register 275.151 - * @return <code>EXIT_SUCCESS</code> on success or 275.152 - * <code>EXIT_FAILURE</code> on failure 275.153 - */ 275.154 -int ucx_test_register(UcxTestSuite* suite, UcxTest test); 275.155 - 275.156 -/** 275.157 - * Runs a test suite and writes the test log to the specified stream. 275.158 - * @param suite the test suite to run 275.159 - * @param outstream the stream the log shall be written to 275.160 - */ 275.161 -void ucx_test_run(UcxTestSuite* suite, FILE* outstream); 275.162 - 275.163 -/** 275.164 - * Macro for a #UcxTest function header. 275.165 - * 275.166 - * Use this macro to declare and/or define a #UcxTest function. 275.167 - * 275.168 - * @param name the name of the test function 275.169 - */ 275.170 -#define UCX_TEST(name) void name(UcxTestSuite* _suite_,FILE *_output_) 275.171 - 275.172 -/** 275.173 - * Marks the begin of a test. 275.174 - * <b>Note:</b> Any UCX_TEST_ASSERT() calls must be performed <b>after</b> 275.175 - * #UCX_TEST_BEGIN. 275.176 - * 275.177 - * @see #UCX_TEST_END 275.178 - */ 275.179 -#define UCX_TEST_BEGIN fwrite("Running ", 1, 8, _output_);\ 275.180 - fwrite(__FUNCTION__, 1, strlen(__FUNCTION__), _output_);\ 275.181 - fwrite("... ", 1, 4, _output_);\ 275.182 - jmp_buf _env_; \ 275.183 - if (!setjmp(_env_)) { 275.184 - 275.185 -/** 275.186 - * Checks a test assertion. 275.187 - * If the assertion is correct, the test carries on. If the assertion is not 275.188 - * correct, the specified message (terminated by a dot and a line break) is 275.189 - * written to the test suites output stream. 275.190 - * @param condition the condition to check 275.191 - * @param message the message that shall be printed out on failure 275.192 - */ 275.193 -#define UCX_TEST_ASSERT(condition,message) if (!(condition)) { \ 275.194 - fwrite(message".\n", 1, 2+strlen(message), _output_); \ 275.195 - _suite_->failure++; \ 275.196 - longjmp(_env_, 1);\ 275.197 - } 275.198 - 275.199 -/** 275.200 - * Macro for a test subroutine function header. 275.201 - * 275.202 - * Use this to declare and/or define a subroutine that can be called by using 275.203 - * UCX_TEST_CALL_SUBROUTINE(). 275.204 - * 275.205 - * @param name the name of the subroutine 275.206 - * @param ... the parameter list 275.207 - * 275.208 - * @see UCX_TEST_CALL_SUBROUTINE() 275.209 - */ 275.210 -#define UCX_TEST_SUBROUTINE(name,...) void name(UcxTestSuite* _suite_,\ 275.211 - FILE *_output_, jmp_buf _env_, __VA_ARGS__) 275.212 - 275.213 -/** 275.214 - * Macro for calling a test subroutine. 275.215 - * 275.216 - * Subroutines declared with UCX_TEST_SUBROUTINE() can be called by using this 275.217 - * macro. 275.218 - * 275.219 - * <b>Note:</b> You may <b>only</b> call subroutines within a #UCX_TEST_BEGIN- 275.220 - * #UCX_TEST_END-block. 275.221 - * 275.222 - * @param name the name of the subroutine 275.223 - * @param ... the argument list 275.224 - * 275.225 - * @see UCX_TEST_SUBROUTINE() 275.226 - */ 275.227 -#define UCX_TEST_CALL_SUBROUTINE(name,...) \ 275.228 - name(_suite_,_output_,_env_,__VA_ARGS__); 275.229 - 275.230 -/** 275.231 - * Marks the end of a test. 275.232 - * <b>Note:</b> Any UCX_TEST_ASSERT() calls must be performed <b>before</b> 275.233 - * #UCX_TEST_END. 275.234 - * 275.235 - * @see #UCX_TEST_BEGIN 275.236 - */ 275.237 -#define UCX_TEST_END fwrite("success.\n", 1, 9, _output_); _suite_->success++;} 275.238 - 275.239 -#ifdef __cplusplus 275.240 -} 275.241 -#endif 275.242 - 275.243 -#endif /* UCX_TEST_H */ 275.244 -
276.1 --- a/src/ucx/ucx.h Mon Dec 30 09:54:10 2019 +0100 276.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 276.3 @@ -1,204 +0,0 @@ 276.4 -/* 276.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 276.6 - * 276.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 276.8 - * 276.9 - * Redistribution and use in source and binary forms, with or without 276.10 - * modification, are permitted provided that the following conditions are met: 276.11 - * 276.12 - * 1. Redistributions of source code must retain the above copyright 276.13 - * notice, this list of conditions and the following disclaimer. 276.14 - * 276.15 - * 2. Redistributions in binary form must reproduce the above copyright 276.16 - * notice, this list of conditions and the following disclaimer in the 276.17 - * documentation and/or other materials provided with the distribution. 276.18 - * 276.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 276.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 276.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 276.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 276.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 276.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 276.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 276.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 276.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 276.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 276.29 - * POSSIBILITY OF SUCH DAMAGE. 276.30 - */ 276.31 -/** 276.32 - * Main UCX Header providing most common definitions. 276.33 - * 276.34 - * @file ucx.h 276.35 - * @author Mike Becker 276.36 - * @author Olaf Wintermann 276.37 - */ 276.38 - 276.39 -#ifndef UCX_H 276.40 -#define UCX_H 276.41 - 276.42 -/** Major UCX version as integer constant. */ 276.43 -#define UCX_VERSION_MAJOR 2 276.44 - 276.45 -/** Minor UCX version as integer constant. */ 276.46 -#define UCX_VERSION_MINOR 1 276.47 - 276.48 -/** Version constant which ensures to increase monotonically. */ 276.49 -#define UCX_VERSION (((UCX_VERSION_MAJOR)<<16)|UCX_VERSION_MINOR) 276.50 - 276.51 -#include <stdlib.h> 276.52 -#include <stdint.h> 276.53 - 276.54 -#ifdef _WIN32 276.55 -#if !(defined __ssize_t_defined || defined _SSIZE_T_) 276.56 -#include <BaseTsd.h> 276.57 -typedef SSIZE_T ssize_t; 276.58 -#define __ssize_t_defined 276.59 -#define _SSIZE_T_ 276.60 -#endif /* __ssize_t_defined and _SSIZE_T */ 276.61 -#else /* !_WIN32 */ 276.62 -#include <sys/types.h> 276.63 -#endif /* _WIN32 */ 276.64 - 276.65 -#ifdef __cplusplus 276.66 -extern "C" { 276.67 -#endif 276.68 - 276.69 - 276.70 -/** 276.71 - * A function pointer to a destructor function. 276.72 - * @see ucx_mempool_setdestr() 276.73 - * @see ucx_mempool_regdestr() 276.74 - */ 276.75 -typedef void(*ucx_destructor)(void*); 276.76 - 276.77 -/** 276.78 - * Function pointer to a compare function. 276.79 - * 276.80 - * The compare function shall take three arguments: the two values that shall be 276.81 - * compared and optional additional data. 276.82 - * The function shall then return -1 if the first argument is less than the 276.83 - * second argument, 1 if the first argument is greater than the second argument 276.84 - * and 0 if both arguments are equal. If the third argument is 276.85 - * <code>NULL</code>, it shall be ignored. 276.86 - */ 276.87 -typedef int(*cmp_func)(const void*,const void*,void*); 276.88 - 276.89 -/** 276.90 - * Function pointer to a distance function. 276.91 - * 276.92 - * The distance function shall take three arguments: the two values for which 276.93 - * the distance shall be computed and optional additional data. 276.94 - * The function shall then return the signed distance as integer value. 276.95 - */ 276.96 -typedef intmax_t(*distance_func)(const void*,const void*,void*); 276.97 - 276.98 -/** 276.99 - * Function pointer to a copy function. 276.100 - * 276.101 - * The copy function shall create a copy of the first argument and may use 276.102 - * additional data provided by the second argument. If the second argument is 276.103 - * <code>NULL</code>, it shall be ignored. 276.104 - 276.105 - * <b>Attention:</b> if pointers returned by functions of this type may be 276.106 - * passed to <code>free()</code> depends on the implementation of the 276.107 - * respective <code>copy_func</code>. 276.108 - */ 276.109 -typedef void*(*copy_func)(const void*,void*); 276.110 - 276.111 -/** 276.112 - * Function pointer to a write function. 276.113 - * 276.114 - * The signature of the write function shall be compatible to the signature 276.115 - * of standard <code>fwrite</code>, though it may use arbitrary data types for 276.116 - * source and destination. 276.117 - * 276.118 - * The arguments shall contain (in ascending order): a pointer to the source, 276.119 - * the length of one element, the element count and a pointer to the 276.120 - * destination. 276.121 - */ 276.122 -typedef size_t(*write_func)(const void*, size_t, size_t, void*); 276.123 - 276.124 -/** 276.125 - * Function pointer to a read function. 276.126 - * 276.127 - * The signature of the read function shall be compatible to the signature 276.128 - * of standard <code>fread</code>, though it may use arbitrary data types for 276.129 - * source and destination. 276.130 - * 276.131 - * The arguments shall contain (in ascending order): a pointer to the 276.132 - * destination, the length of one element, the element count and a pointer to 276.133 - * the source. 276.134 - */ 276.135 -typedef size_t(*read_func)(void*, size_t, size_t, void*); 276.136 - 276.137 - 276.138 - 276.139 -#if __GNUC__ >= 5 || defined(__clang__) 276.140 -#define UCX_MUL_BUILTIN 276.141 - 276.142 -#if __WORDSIZE == 32 276.143 -/** 276.144 - * Alias for <code>__builtin_umul_overflow</code>. 276.145 - * 276.146 - * Performs a multiplication of size_t values and checks for overflow. 276.147 - * 276.148 - * @param a first operand 276.149 - * @param b second operand 276.150 - * @param result a pointer to a size_t, where the result should 276.151 - * be stored 276.152 - * @return zero, if no overflow occurred and the result is correct, non-zero 276.153 - * otherwise 276.154 - */ 276.155 -#define ucx_szmul(a, b, result) __builtin_umul_overflow(a, b, result) 276.156 -#else /* __WORDSIZE != 32 */ 276.157 -/** 276.158 - * Alias for <code>__builtin_umull_overflow</code>. 276.159 - * 276.160 - * Performs a multiplication of size_t values and checks for overflow. 276.161 - * 276.162 - * @param a first operand 276.163 - * @param b second operand 276.164 - * @param result a pointer to a size_t, where the result should 276.165 - * be stored 276.166 - * @return zero, if no overflow occurred and the result is correct, non-zero 276.167 - * otherwise 276.168 - */ 276.169 -#define ucx_szmul(a, b, result) __builtin_umull_overflow(a, b, result) 276.170 -#endif /* __WORDSIZE */ 276.171 - 276.172 -#else /* no GNUC or clang bultin */ 276.173 - 276.174 -/** 276.175 - * Performs a multiplication of size_t values and checks for overflow. 276.176 - * 276.177 - * @param a first operand 276.178 - * @param b second operand 276.179 - * @param result a pointer to a size_t, where the result should 276.180 - * be stored 276.181 - * @return zero, if no overflow occurred and the result is correct, non-zero 276.182 - * otherwise 276.183 - */ 276.184 -#define ucx_szmul(a, b, result) ucx_szmul_impl(a, b, result) 276.185 - 276.186 -/** 276.187 - * Performs a multiplication of size_t values and checks for overflow. 276.188 - * 276.189 - * This is a custom implementation in case there is no compiler builtin 276.190 - * available. 276.191 - * 276.192 - * @param a first operand 276.193 - * @param b second operand 276.194 - * @param result a pointer to a size_t where the result should be stored 276.195 - * @return zero, if no overflow occurred and the result is correct, non-zero 276.196 - * otherwise 276.197 - */ 276.198 -int ucx_szmul_impl(size_t a, size_t b, size_t *result); 276.199 - 276.200 -#endif 276.201 - 276.202 -#ifdef __cplusplus 276.203 -} 276.204 -#endif 276.205 - 276.206 -#endif /* UCX_H */ 276.207 -
277.1 --- a/src/ucx/utils.h Mon Dec 30 09:54:10 2019 +0100 277.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 277.3 @@ -1,508 +0,0 @@ 277.4 -/* 277.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 277.6 - * 277.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 277.8 - * 277.9 - * Redistribution and use in source and binary forms, with or without 277.10 - * modification, are permitted provided that the following conditions are met: 277.11 - * 277.12 - * 1. Redistributions of source code must retain the above copyright 277.13 - * notice, this list of conditions and the following disclaimer. 277.14 - * 277.15 - * 2. Redistributions in binary form must reproduce the above copyright 277.16 - * notice, this list of conditions and the following disclaimer in the 277.17 - * documentation and/or other materials provided with the distribution. 277.18 - * 277.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 277.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 277.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 277.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 277.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 277.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 277.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 277.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 277.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 277.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 277.29 - * POSSIBILITY OF SUCH DAMAGE. 277.30 - */ 277.31 - 277.32 -/** 277.33 - * @file utils.h 277.34 - * 277.35 - * Compare, copy and printf functions. 277.36 - * 277.37 - * @author Mike Becker 277.38 - * @author Olaf Wintermann 277.39 - */ 277.40 - 277.41 -#ifndef UCX_UTILS_H 277.42 -#define UCX_UTILS_H 277.43 - 277.44 -#include "ucx.h" 277.45 -#include "string.h" 277.46 -#include "allocator.h" 277.47 -#include <inttypes.h> 277.48 -#include <string.h> 277.49 -#include <stdarg.h> 277.50 - 277.51 -#ifdef __cplusplus 277.52 -extern "C" { 277.53 -#endif 277.54 - 277.55 -/** 277.56 - * Default buffer size for ucx_stream_copy() and ucx_stream_ncopy(). 277.57 - */ 277.58 -#define UCX_STREAM_COPY_BUFSIZE 4096 277.59 - 277.60 -/** 277.61 - * Copies a string. 277.62 - * @param s the string to copy 277.63 - * @param data omitted 277.64 - * @return a pointer to a copy of s1 that can be passed to free(void*) 277.65 - */ 277.66 -void *ucx_strcpy(const void *s, void *data); 277.67 - 277.68 -/** 277.69 - * Copies a memory area. 277.70 - * @param m a pointer to the memory area 277.71 - * @param n a pointer to the size_t containing the size of the memory area 277.72 - * @return a pointer to a copy of the specified memory area that can 277.73 - * be passed to free(void*) 277.74 - */ 277.75 -void *ucx_memcpy(const void *m, void *n); 277.76 - 277.77 - 277.78 -/** 277.79 - * Reads data from a stream and writes it to another stream. 277.80 - * 277.81 - * @param src the source stream 277.82 - * @param dest the destination stream 277.83 - * @param rfnc the read function 277.84 - * @param wfnc the write function 277.85 - * @param buf a pointer to the copy buffer or <code>NULL</code> if a buffer 277.86 - * shall be implicitly created on the heap 277.87 - * @param bufsize the size of the copy buffer - if <code>NULL</code> was 277.88 - * provided for <code>buf</code>, this is the size of the buffer that shall be 277.89 - * implicitly created 277.90 - * @param n the maximum number of bytes that shall be copied 277.91 - * @return the total number of bytes copied 277.92 - */ 277.93 -size_t ucx_stream_bncopy(void *src, void *dest, read_func rfnc, write_func wfnc, 277.94 - char* buf, size_t bufsize, size_t n); 277.95 - 277.96 -/** 277.97 - * Shorthand for an unbounded ucx_stream_bncopy call using a default buffer. 277.98 - * 277.99 - * @param src the source stream 277.100 - * @param dest the destination stream 277.101 - * @param rfnc the read function 277.102 - * @param wfnc the write function 277.103 - * @return total number of bytes copied 277.104 - * 277.105 - * @see #UCX_STREAM_COPY_BUFSIZE 277.106 - */ 277.107 -#define ucx_stream_copy(src,dest,rfnc,wfnc) ucx_stream_bncopy(\ 277.108 - src, dest, (read_func)rfnc, (write_func)wfnc, \ 277.109 - NULL, UCX_STREAM_COPY_BUFSIZE, (size_t)-1) 277.110 - 277.111 -/** 277.112 - * Shorthand for ucx_stream_bncopy using a default copy buffer. 277.113 - * 277.114 - * @param src the source stream 277.115 - * @param dest the destination stream 277.116 - * @param rfnc the read function 277.117 - * @param wfnc the write function 277.118 - * @param n maximum number of bytes that shall be copied 277.119 - * @return total number of bytes copied 277.120 - */ 277.121 -#define ucx_stream_ncopy(src,dest,rfnc,wfnc, n) ucx_stream_bncopy(\ 277.122 - src, dest, (read_func)rfnc, (write_func)wfnc, \ 277.123 - NULL, UCX_STREAM_COPY_BUFSIZE, n) 277.124 - 277.125 -/** 277.126 - * Shorthand for an unbounded ucx_stream_bncopy call using the specified buffer. 277.127 - * 277.128 - * @param src the source stream 277.129 - * @param dest the destination stream 277.130 - * @param rfnc the read function 277.131 - * @param wfnc the write function 277.132 - * @param buf a pointer to the copy buffer or <code>NULL</code> if a buffer 277.133 - * shall be implicitly created on the heap 277.134 - * @param bufsize the size of the copy buffer - if <code>NULL</code> was 277.135 - * provided for <code>buf</code>, this is the size of the buffer that shall be 277.136 - * implicitly created 277.137 - * @return total number of bytes copied 277.138 - */ 277.139 -#define ucx_stream_bcopy(src,dest,rfnc,wfnc, buf, bufsize) ucx_stream_bncopy(\ 277.140 - src, dest, (read_func)rfnc, (write_func)wfnc, \ 277.141 - buf, bufsize, (size_t)-1) 277.142 - 277.143 -/** 277.144 - * Wraps the strcmp function. 277.145 - * @param s1 string one 277.146 - * @param s2 string two 277.147 - * @param data omitted 277.148 - * @return the result of strcmp(s1, s2) 277.149 - */ 277.150 -int ucx_cmp_str(const void *s1, const void *s2, void *data); 277.151 - 277.152 -/** 277.153 - * Wraps the strncmp function. 277.154 - * @param s1 string one 277.155 - * @param s2 string two 277.156 - * @param n a pointer to the size_t containing the third strncmp parameter 277.157 - * @return the result of strncmp(s1, s2, *n) 277.158 - */ 277.159 -int ucx_cmp_strn(const void *s1, const void *s2, void *n); 277.160 - 277.161 -/** 277.162 - * Wraps the sstrcmp function. 277.163 - * @param s1 sstr one 277.164 - * @param s2 sstr two 277.165 - * @param data ignored 277.166 - * @return the result of sstrcmp(s1, s2) 277.167 - */ 277.168 -int ucx_cmp_sstr(const void *s1, const void *s2, void *data); 277.169 - 277.170 -/** 277.171 - * Compares two integers of type int. 277.172 - * @param i1 pointer to integer one 277.173 - * @param i2 pointer to integer two 277.174 - * @param data omitted 277.175 - * @return -1, if *i1 is less than *i2, 0 if both are equal, 277.176 - * 1 if *i1 is greater than *i2 277.177 - */ 277.178 -int ucx_cmp_int(const void *i1, const void *i2, void *data); 277.179 - 277.180 -/** 277.181 - * Compares two integers of type long int. 277.182 - * @param i1 pointer to long integer one 277.183 - * @param i2 pointer to long integer two 277.184 - * @param data omitted 277.185 - * @return -1, if *i1 is less than *i2, 0 if both are equal, 277.186 - * 1 if *i1 is greater than *i2 277.187 - */ 277.188 -int ucx_cmp_longint(const void *i1, const void *i2, void *data); 277.189 - 277.190 -/** 277.191 - * Compares two integers of type long long. 277.192 - * @param i1 pointer to long long one 277.193 - * @param i2 pointer to long long two 277.194 - * @param data omitted 277.195 - * @return -1, if *i1 is less than *i2, 0 if both are equal, 277.196 - * 1 if *i1 is greater than *i2 277.197 - */ 277.198 -int ucx_cmp_longlong(const void *i1, const void *i2, void *data); 277.199 - 277.200 -/** 277.201 - * Compares two integers of type int16_t. 277.202 - * @param i1 pointer to int16_t one 277.203 - * @param i2 pointer to int16_t two 277.204 - * @param data omitted 277.205 - * @return -1, if *i1 is less than *i2, 0 if both are equal, 277.206 - * 1 if *i1 is greater than *i2 277.207 - */ 277.208 -int ucx_cmp_int16(const void *i1, const void *i2, void *data); 277.209 - 277.210 -/** 277.211 - * Compares two integers of type int32_t. 277.212 - * @param i1 pointer to int32_t one 277.213 - * @param i2 pointer to int32_t two 277.214 - * @param data omitted 277.215 - * @return -1, if *i1 is less than *i2, 0 if both are equal, 277.216 - * 1 if *i1 is greater than *i2 277.217 - */ 277.218 -int ucx_cmp_int32(const void *i1, const void *i2, void *data); 277.219 - 277.220 -/** 277.221 - * Compares two integers of type int64_t. 277.222 - * @param i1 pointer to int64_t one 277.223 - * @param i2 pointer to int64_t two 277.224 - * @param data omitted 277.225 - * @return -1, if *i1 is less than *i2, 0 if both are equal, 277.226 - * 1 if *i1 is greater than *i2 277.227 - */ 277.228 -int ucx_cmp_int64(const void *i1, const void *i2, void *data); 277.229 - 277.230 -/** 277.231 - * Compares two integers of type unsigned int. 277.232 - * @param i1 pointer to unsigned integer one 277.233 - * @param i2 pointer to unsigned integer two 277.234 - * @param data omitted 277.235 - * @return -1, if *i1 is less than *i2, 0 if both are equal, 277.236 - * 1 if *i1 is greater than *i2 277.237 - */ 277.238 -int ucx_cmp_uint(const void *i1, const void *i2, void *data); 277.239 - 277.240 -/** 277.241 - * Compares two integers of type unsigned long int. 277.242 - * @param i1 pointer to unsigned long integer one 277.243 - * @param i2 pointer to unsigned long integer two 277.244 - * @param data omitted 277.245 - * @return -1, if *i1 is less than *i2, 0 if both are equal, 277.246 - * 1 if *i1 is greater than *i2 277.247 - */ 277.248 -int ucx_cmp_ulongint(const void *i1, const void *i2, void *data); 277.249 - 277.250 -/** 277.251 - * Compares two integers of type unsigned long long. 277.252 - * @param i1 pointer to unsigned long long one 277.253 - * @param i2 pointer to unsigned long long two 277.254 - * @param data omitted 277.255 - * @return -1, if *i1 is less than *i2, 0 if both are equal, 277.256 - * 1 if *i1 is greater than *i2 277.257 - */ 277.258 -int ucx_cmp_ulonglong(const void *i1, const void *i2, void *data); 277.259 - 277.260 -/** 277.261 - * Compares two integers of type uint16_t. 277.262 - * @param i1 pointer to uint16_t one 277.263 - * @param i2 pointer to uint16_t two 277.264 - * @param data omitted 277.265 - * @return -1, if *i1 is less than *i2, 0 if both are equal, 277.266 - * 1 if *i1 is greater than *i2 277.267 - */ 277.268 -int ucx_cmp_uint16(const void *i1, const void *i2, void *data); 277.269 - 277.270 -/** 277.271 - * Compares two integers of type uint32_t. 277.272 - * @param i1 pointer to uint32_t one 277.273 - * @param i2 pointer to uint32_t two 277.274 - * @param data omitted 277.275 - * @return -1, if *i1 is less than *i2, 0 if both are equal, 277.276 - * 1 if *i1 is greater than *i2 277.277 - */ 277.278 -int ucx_cmp_uint32(const void *i1, const void *i2, void *data); 277.279 - 277.280 -/** 277.281 - * Compares two integers of type uint64_t. 277.282 - * @param i1 pointer to uint64_t one 277.283 - * @param i2 pointer to uint64_t two 277.284 - * @param data omitted 277.285 - * @return -1, if *i1 is less than *i2, 0 if both are equal, 277.286 - * 1 if *i1 is greater than *i2 277.287 - */ 277.288 -int ucx_cmp_uint64(const void *i1, const void *i2, void *data); 277.289 - 277.290 -/** 277.291 - * Distance function for integers of type int. 277.292 - * @param i1 pointer to integer one 277.293 - * @param i2 pointer to integer two 277.294 - * @param data omitted 277.295 - * @return i1 minus i2 277.296 - */ 277.297 -intmax_t ucx_dist_int(const void *i1, const void *i2, void *data); 277.298 - 277.299 -/** 277.300 - * Distance function for integers of type long int. 277.301 - * @param i1 pointer to long integer one 277.302 - * @param i2 pointer to long integer two 277.303 - * @param data omitted 277.304 - * @return i1 minus i2 277.305 - */ 277.306 -intmax_t ucx_dist_longint(const void *i1, const void *i2, void *data); 277.307 - 277.308 -/** 277.309 - * Distance function for integers of type long long. 277.310 - * @param i1 pointer to long long one 277.311 - * @param i2 pointer to long long two 277.312 - * @param data omitted 277.313 - * @return i1 minus i2 277.314 - */ 277.315 -intmax_t ucx_dist_longlong(const void *i1, const void *i2, void *data); 277.316 - 277.317 -/** 277.318 - * Distance function for integers of type int16_t. 277.319 - * @param i1 pointer to int16_t one 277.320 - * @param i2 pointer to int16_t two 277.321 - * @param data omitted 277.322 - * @return i1 minus i2 277.323 - */ 277.324 -intmax_t ucx_dist_int16(const void *i1, const void *i2, void *data); 277.325 - 277.326 -/** 277.327 - * Distance function for integers of type int32_t. 277.328 - * @param i1 pointer to int32_t one 277.329 - * @param i2 pointer to int32_t two 277.330 - * @param data omitted 277.331 - * @return i1 minus i2 277.332 - */ 277.333 -intmax_t ucx_dist_int32(const void *i1, const void *i2, void *data); 277.334 - 277.335 -/** 277.336 - * Distance function for integers of type int64_t. 277.337 - * @param i1 pointer to int64_t one 277.338 - * @param i2 pointer to int64_t two 277.339 - * @param data omitted 277.340 - * @return i1 minus i2 277.341 - */ 277.342 -intmax_t ucx_dist_int64(const void *i1, const void *i2, void *data); 277.343 - 277.344 -/** 277.345 - * Distance function for integers of type unsigned int. 277.346 - * @param i1 pointer to unsigned integer one 277.347 - * @param i2 pointer to unsigned integer two 277.348 - * @param data omitted 277.349 - * @return i1 minus i2 277.350 - */ 277.351 -intmax_t ucx_dist_uint(const void *i1, const void *i2, void *data); 277.352 - 277.353 -/** 277.354 - * Distance function for integers of type unsigned long int. 277.355 - * @param i1 pointer to unsigned long integer one 277.356 - * @param i2 pointer to unsigned long integer two 277.357 - * @param data omitted 277.358 - * @return i1 minus i2 277.359 - */ 277.360 -intmax_t ucx_dist_ulongint(const void *i1, const void *i2, void *data); 277.361 - 277.362 -/** 277.363 - * Distance function for integers of type unsigned long long. 277.364 - * @param i1 pointer to unsigned long long one 277.365 - * @param i2 pointer to unsigned long long two 277.366 - * @param data omitted 277.367 - * @return i1 minus i2 277.368 - */ 277.369 -intmax_t ucx_dist_ulonglong(const void *i1, const void *i2, void *data); 277.370 - 277.371 -/** 277.372 - * Distance function for integers of type uint16_t. 277.373 - * @param i1 pointer to uint16_t one 277.374 - * @param i2 pointer to uint16_t two 277.375 - * @param data omitted 277.376 - * @return i1 minus i2 277.377 - */ 277.378 -intmax_t ucx_dist_uint16(const void *i1, const void *i2, void *data); 277.379 - 277.380 -/** 277.381 - * Distance function for integers of type uint32_t. 277.382 - * @param i1 pointer to uint32_t one 277.383 - * @param i2 pointer to uint32_t two 277.384 - * @param data omitted 277.385 - * @return i1 minus i2 277.386 - */ 277.387 -intmax_t ucx_dist_uint32(const void *i1, const void *i2, void *data); 277.388 - 277.389 -/** 277.390 - * Distance function for integers of type uint64_t. 277.391 - * @param i1 pointer to uint64_t one 277.392 - * @param i2 pointer to uint64_t two 277.393 - * @param data omitted 277.394 - * @return i1 minus i2 277.395 - */ 277.396 -intmax_t ucx_dist_uint64(const void *i1, const void *i2, void *data); 277.397 - 277.398 -/** 277.399 - * Compares two real numbers of type float. 277.400 - * @param f1 pointer to float one 277.401 - * @param f2 pointer to float two 277.402 - * @param data if provided: a pointer to precision (default: 1e-6f) 277.403 - * @return -1, if *f1 is less than *f2, 0 if both are equal, 277.404 - * 1 if *f1 is greater than *f2 277.405 - */ 277.406 - 277.407 -int ucx_cmp_float(const void *f1, const void *f2, void *data); 277.408 - 277.409 -/** 277.410 - * Compares two real numbers of type double. 277.411 - * @param d1 pointer to double one 277.412 - * @param d2 pointer to double two 277.413 - * @param data if provided: a pointer to precision (default: 1e-14) 277.414 - * @return -1, if *d1 is less than *d2, 0 if both are equal, 277.415 - * 1 if *d1 is greater than *d2 277.416 - */ 277.417 -int ucx_cmp_double(const void *d1, const void *d2, void *data); 277.418 - 277.419 -/** 277.420 - * Compares two pointers. 277.421 - * @param ptr1 pointer one 277.422 - * @param ptr2 pointer two 277.423 - * @param data omitted 277.424 - * @return -1 if ptr1 is less than ptr2, 0 if both are equal, 277.425 - * 1 if ptr1 is greater than ptr2 277.426 - */ 277.427 -int ucx_cmp_ptr(const void *ptr1, const void *ptr2, void *data); 277.428 - 277.429 -/** 277.430 - * Compares two memory areas. 277.431 - * @param ptr1 pointer one 277.432 - * @param ptr2 pointer two 277.433 - * @param n a pointer to the size_t containing the third parameter for memcmp 277.434 - * @return the result of memcmp(ptr1, ptr2, *n) 277.435 - */ 277.436 -int ucx_cmp_mem(const void *ptr1, const void *ptr2, void *n); 277.437 - 277.438 -/** 277.439 - * A <code>printf()</code> like function which writes the output to a stream by 277.440 - * using a write_func(). 277.441 - * @param stream the stream the data is written to 277.442 - * @param wfc the write function 277.443 - * @param fmt format string 277.444 - * @param ... additional arguments 277.445 - * @return the total number of bytes written 277.446 - */ 277.447 -int ucx_fprintf(void *stream, write_func wfc, const char *fmt, ...); 277.448 - 277.449 -/** 277.450 - * <code>va_list</code> version of ucx_fprintf(). 277.451 - * @param stream the stream the data is written to 277.452 - * @param wfc the write function 277.453 - * @param fmt format string 277.454 - * @param ap argument list 277.455 - * @return the total number of bytes written 277.456 - * @see ucx_fprintf() 277.457 - */ 277.458 -int ucx_vfprintf(void *stream, write_func wfc, const char *fmt, va_list ap); 277.459 - 277.460 -/** 277.461 - * A <code>printf()</code> like function which allocates space for a sstr_t 277.462 - * the result is written to. 277.463 - * 277.464 - * <b>Attention</b>: The sstr_t data is allocated with the allocators 277.465 - * ucx_allocator_malloc() function. So it is implementation dependent, if 277.466 - * the returned sstr_t.ptr pointer must be passed to the allocators 277.467 - * ucx_allocator_free() function manually. 277.468 - * 277.469 - * <b>Note</b>: The sstr_t.ptr of the return value will <i>always</i> be 277.470 - * <code>NULL</code>-terminated. 277.471 - * 277.472 - * @param allocator the UcxAllocator used for allocating the result sstr_t 277.473 - * @param fmt format string 277.474 - * @param ... additional arguments 277.475 - * @return a sstr_t containing the formatted string 277.476 - */ 277.477 -sstr_t ucx_asprintf(UcxAllocator *allocator, const char *fmt, ...); 277.478 - 277.479 -/** 277.480 - * <code>va_list</code> version of ucx_asprintf(). 277.481 - * 277.482 - * @param allocator the UcxAllocator used for allocating the result sstr_t 277.483 - * @param fmt format string 277.484 - * @param ap argument list 277.485 - * @return a sstr_t containing the formatted string 277.486 - * @see ucx_asprintf() 277.487 - */ 277.488 -sstr_t ucx_vasprintf(UcxAllocator *allocator, const char *fmt, va_list ap); 277.489 - 277.490 -/** Shortcut for ucx_asprintf() with default allocator. */ 277.491 -#define ucx_sprintf(...) \ 277.492 - ucx_asprintf(ucx_default_allocator(), __VA_ARGS__) 277.493 - 277.494 -/** 277.495 - * A <code>printf()</code> like function which writes the output to a 277.496 - * UcxBuffer. 277.497 - * 277.498 - * @param buffer the buffer the data is written to 277.499 - * @param ... format string and additional arguments 277.500 - * @return the total number of bytes written 277.501 - * @see ucx_fprintf() 277.502 - */ 277.503 -#define ucx_bprintf(buffer, ...) ucx_fprintf((UcxBuffer*)buffer, \ 277.504 - (write_func)ucx_buffer_write, __VA_ARGS__) 277.505 - 277.506 -#ifdef __cplusplus 277.507 -} 277.508 -#endif 277.509 - 277.510 -#endif /* UCX_UTILS_H */ 277.511 -
278.1 --- a/src/utils.c Mon Dec 30 09:54:10 2019 +0100 278.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 278.3 @@ -1,448 +0,0 @@ 278.4 -/* 278.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 278.6 - * 278.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 278.8 - * 278.9 - * Redistribution and use in source and binary forms, with or without 278.10 - * modification, are permitted provided that the following conditions are met: 278.11 - * 278.12 - * 1. Redistributions of source code must retain the above copyright 278.13 - * notice, this list of conditions and the following disclaimer. 278.14 - * 278.15 - * 2. Redistributions in binary form must reproduce the above copyright 278.16 - * notice, this list of conditions and the following disclaimer in the 278.17 - * documentation and/or other materials provided with the distribution. 278.18 - * 278.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 278.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 278.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 278.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 278.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 278.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 278.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 278.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 278.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 278.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 278.29 - * POSSIBILITY OF SUCH DAMAGE. 278.30 - */ 278.31 - 278.32 -#include "ucx/utils.h" 278.33 - 278.34 -#include <math.h> 278.35 -#include <stdio.h> 278.36 -#include <limits.h> 278.37 -#include <errno.h> 278.38 - 278.39 -/* COPY FUCNTIONS */ 278.40 -void* ucx_strcpy(const void* s, void* data) { 278.41 - const char *str = (const char*) s; 278.42 - size_t n = 1+strlen(str); 278.43 - char *cpy = (char*) malloc(n); 278.44 - memcpy(cpy, str, n); 278.45 - return cpy; 278.46 -} 278.47 - 278.48 -void* ucx_memcpy(const void* m, void* n) { 278.49 - size_t k = *((size_t*)n); 278.50 - void *cpy = malloc(k); 278.51 - memcpy(cpy, m, k); 278.52 - return cpy; 278.53 -} 278.54 - 278.55 -size_t ucx_stream_bncopy(void *src, void *dest, read_func readfnc, 278.56 - write_func writefnc, char* buf, size_t bufsize, size_t n) { 278.57 - if(n == 0 || bufsize == 0) { 278.58 - return 0; 278.59 - } 278.60 - 278.61 - char *lbuf; 278.62 - size_t ncp = 0; 278.63 - 278.64 - if(buf) { 278.65 - lbuf = buf; 278.66 - } else { 278.67 - lbuf = (char*)malloc(bufsize); 278.68 - if(lbuf == NULL) { 278.69 - return 0; 278.70 - } 278.71 - } 278.72 - 278.73 - size_t r; 278.74 - size_t rn = bufsize > n ? n : bufsize; 278.75 - while((r = readfnc(lbuf, 1, rn, src)) != 0) { 278.76 - r = writefnc(lbuf, 1, r, dest); 278.77 - ncp += r; 278.78 - n -= r; 278.79 - rn = bufsize > n ? n : bufsize; 278.80 - if(r == 0 || n == 0) { 278.81 - break; 278.82 - } 278.83 - } 278.84 - 278.85 - if (lbuf != buf) { 278.86 - free(lbuf); 278.87 - } 278.88 - 278.89 - return ncp; 278.90 -} 278.91 - 278.92 -/* COMPARE FUNCTIONS */ 278.93 - 278.94 -int ucx_cmp_str(const void *s1, const void *s2, void *data) { 278.95 - return strcmp((const char*)s1, (const char*)s2); 278.96 -} 278.97 - 278.98 -int ucx_cmp_strn(const void *s1, const void *s2, void *n) { 278.99 - return strncmp((const char*)s1, (const char*)s2, *((size_t*) n)); 278.100 -} 278.101 - 278.102 -int ucx_cmp_sstr(const void *s1, const void *s2, void *data) { 278.103 - sstr_t a = *(const sstr_t*) s1; 278.104 - sstr_t b = *(const sstr_t*) s2; 278.105 - return sstrcmp(a, b); 278.106 -} 278.107 - 278.108 -int ucx_cmp_int(const void *i1, const void *i2, void *data) { 278.109 - int a = *((const int*) i1); 278.110 - int b = *((const int*) i2); 278.111 - if (a == b) { 278.112 - return 0; 278.113 - } else { 278.114 - return a < b ? -1 : 1; 278.115 - } 278.116 -} 278.117 - 278.118 -int ucx_cmp_longint(const void *i1, const void *i2, void *data) { 278.119 - long int a = *((const long int*) i1); 278.120 - long int b = *((const long int*) i2); 278.121 - if (a == b) { 278.122 - return 0; 278.123 - } else { 278.124 - return a < b ? -1 : 1; 278.125 - } 278.126 -} 278.127 - 278.128 -int ucx_cmp_longlong(const void *i1, const void *i2, void *data) { 278.129 - long long a = *((const long long*) i1); 278.130 - long long b = *((const long long*) i2); 278.131 - if (a == b) { 278.132 - return 0; 278.133 - } else { 278.134 - return a < b ? -1 : 1; 278.135 - } 278.136 -} 278.137 - 278.138 -int ucx_cmp_int16(const void *i1, const void *i2, void *data) { 278.139 - int16_t a = *((const int16_t*) i1); 278.140 - int16_t b = *((const int16_t*) i2); 278.141 - if (a == b) { 278.142 - return 0; 278.143 - } else { 278.144 - return a < b ? -1 : 1; 278.145 - } 278.146 -} 278.147 - 278.148 -int ucx_cmp_int32(const void *i1, const void *i2, void *data) { 278.149 - int32_t a = *((const int32_t*) i1); 278.150 - int32_t b = *((const int32_t*) i2); 278.151 - if (a == b) { 278.152 - return 0; 278.153 - } else { 278.154 - return a < b ? -1 : 1; 278.155 - } 278.156 -} 278.157 - 278.158 -int ucx_cmp_int64(const void *i1, const void *i2, void *data) { 278.159 - int64_t a = *((const int64_t*) i1); 278.160 - int64_t b = *((const int64_t*) i2); 278.161 - if (a == b) { 278.162 - return 0; 278.163 - } else { 278.164 - return a < b ? -1 : 1; 278.165 - } 278.166 -} 278.167 - 278.168 -int ucx_cmp_uint(const void *i1, const void *i2, void *data) { 278.169 - unsigned int a = *((const unsigned int*) i1); 278.170 - unsigned int b = *((const unsigned int*) i2); 278.171 - if (a == b) { 278.172 - return 0; 278.173 - } else { 278.174 - return a < b ? -1 : 1; 278.175 - } 278.176 -} 278.177 - 278.178 -int ucx_cmp_ulongint(const void *i1, const void *i2, void *data) { 278.179 - unsigned long int a = *((const unsigned long int*) i1); 278.180 - unsigned long int b = *((const unsigned long int*) i2); 278.181 - if (a == b) { 278.182 - return 0; 278.183 - } else { 278.184 - return a < b ? -1 : 1; 278.185 - } 278.186 -} 278.187 - 278.188 -int ucx_cmp_ulonglong(const void *i1, const void *i2, void *data) { 278.189 - unsigned long long a = *((const unsigned long long*) i1); 278.190 - unsigned long long b = *((const unsigned long long*) i2); 278.191 - if (a == b) { 278.192 - return 0; 278.193 - } else { 278.194 - return a < b ? -1 : 1; 278.195 - } 278.196 -} 278.197 - 278.198 -int ucx_cmp_uint16(const void *i1, const void *i2, void *data) { 278.199 - uint16_t a = *((const uint16_t*) i1); 278.200 - uint16_t b = *((const uint16_t*) i2); 278.201 - if (a == b) { 278.202 - return 0; 278.203 - } else { 278.204 - return a < b ? -1 : 1; 278.205 - } 278.206 -} 278.207 - 278.208 -int ucx_cmp_uint32(const void *i1, const void *i2, void *data) { 278.209 - uint32_t a = *((const uint32_t*) i1); 278.210 - uint32_t b = *((const uint32_t*) i2); 278.211 - if (a == b) { 278.212 - return 0; 278.213 - } else { 278.214 - return a < b ? -1 : 1; 278.215 - } 278.216 -} 278.217 - 278.218 -int ucx_cmp_uint64(const void *i1, const void *i2, void *data) { 278.219 - uint64_t a = *((const uint64_t*) i1); 278.220 - uint64_t b = *((const uint64_t*) i2); 278.221 - if (a == b) { 278.222 - return 0; 278.223 - } else { 278.224 - return a < b ? -1 : 1; 278.225 - } 278.226 -} 278.227 - 278.228 -intmax_t ucx_dist_int(const void *i1, const void *i2, void *data) { 278.229 - intmax_t a = *((const int*) i1); 278.230 - intmax_t b = *((const int*) i2); 278.231 - return a - b; 278.232 -} 278.233 - 278.234 -intmax_t ucx_dist_longint(const void *i1, const void *i2, void *data) { 278.235 - intmax_t a = *((const long int*) i1); 278.236 - intmax_t b = *((const long int*) i2); 278.237 - return a - b; 278.238 -} 278.239 - 278.240 -intmax_t ucx_dist_longlong(const void *i1, const void *i2, void *data) { 278.241 - intmax_t a = *((const long long*) i1); 278.242 - intmax_t b = *((const long long*) i2); 278.243 - return a - b; 278.244 -} 278.245 - 278.246 -intmax_t ucx_dist_int16(const void *i1, const void *i2, void *data) { 278.247 - intmax_t a = *((const int16_t*) i1); 278.248 - intmax_t b = *((const int16_t*) i2); 278.249 - return a - b; 278.250 -} 278.251 - 278.252 -intmax_t ucx_dist_int32(const void *i1, const void *i2, void *data) { 278.253 - intmax_t a = *((const int32_t*) i1); 278.254 - intmax_t b = *((const int32_t*) i2); 278.255 - return a - b; 278.256 -} 278.257 - 278.258 -intmax_t ucx_dist_int64(const void *i1, const void *i2, void *data) { 278.259 - intmax_t a = *((const int64_t*) i1); 278.260 - intmax_t b = *((const int64_t*) i2); 278.261 - return a - b; 278.262 -} 278.263 - 278.264 -intmax_t ucx_dist_uint(const void *i1, const void *i2, void *data) { 278.265 - uintmax_t a = *((const unsigned int*) i1); 278.266 - uintmax_t b = *((const unsigned int*) i2); 278.267 - return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); 278.268 -} 278.269 - 278.270 -intmax_t ucx_dist_ulongint(const void *i1, const void *i2, void *data) { 278.271 - uintmax_t a = *((const unsigned long int*) i1); 278.272 - uintmax_t b = *((const unsigned long int*) i2); 278.273 - return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); 278.274 -} 278.275 - 278.276 -intmax_t ucx_dist_ulonglong(const void *i1, const void *i2, void *data) { 278.277 - uintmax_t a = *((const unsigned long long*) i1); 278.278 - uintmax_t b = *((const unsigned long long*) i2); 278.279 - return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); 278.280 -} 278.281 - 278.282 -intmax_t ucx_dist_uint16(const void *i1, const void *i2, void *data) { 278.283 - uintmax_t a = *((const uint16_t*) i1); 278.284 - uintmax_t b = *((const uint16_t*) i2); 278.285 - return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); 278.286 -} 278.287 - 278.288 -intmax_t ucx_dist_uint32(const void *i1, const void *i2, void *data) { 278.289 - uintmax_t a = *((const uint32_t*) i1); 278.290 - uintmax_t b = *((const uint32_t*) i2); 278.291 - return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); 278.292 -} 278.293 - 278.294 -intmax_t ucx_dist_uint64(const void *i1, const void *i2, void *data) { 278.295 - uintmax_t a = *((const uint64_t*) i1); 278.296 - uintmax_t b = *((const uint64_t*) i2); 278.297 - return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); 278.298 -} 278.299 - 278.300 -int ucx_cmp_float(const void *f1, const void *f2, void *epsilon) { 278.301 - float a = *((const float*) f1); 278.302 - float b = *((const float*) f2); 278.303 - float e = !epsilon ? 1e-6f : *((float*)epsilon); 278.304 - if (fabsf(a - b) < e) { 278.305 - return 0; 278.306 - } else { 278.307 - return a < b ? -1 : 1; 278.308 - } 278.309 -} 278.310 - 278.311 -int ucx_cmp_double(const void *d1, const void *d2, void *epsilon) { 278.312 - double a = *((const double*) d1); 278.313 - double b = *((const double*) d2); 278.314 - double e = !epsilon ? 1e-14 : *((double*)epsilon); 278.315 - if (fabs(a - b) < e) { 278.316 - return 0; 278.317 - } else { 278.318 - return a < b ? -1 : 1; 278.319 - } 278.320 -} 278.321 - 278.322 -int ucx_cmp_ptr(const void *ptr1, const void *ptr2, void *data) { 278.323 - const intptr_t p1 = (const intptr_t) ptr1; 278.324 - const intptr_t p2 = (const intptr_t) ptr2; 278.325 - if (p1 == p2) { 278.326 - return 0; 278.327 - } else { 278.328 - return p1 < p2 ? -1 : 1; 278.329 - } 278.330 -} 278.331 - 278.332 -int ucx_cmp_mem(const void *ptr1, const void *ptr2, void *n) { 278.333 - return memcmp(ptr1, ptr2, *((size_t*)n)); 278.334 -} 278.335 - 278.336 -/* PRINTF FUNCTIONS */ 278.337 - 278.338 -#ifdef va_copy 278.339 -#define UCX_PRINTF_BUFSIZE 256 278.340 -#else 278.341 -#pragma message("WARNING: C99 va_copy macro not supported by this platform" \ 278.342 - " - limiting ucx_*printf to 2 KiB") 278.343 -#define UCX_PRINTF_BUFSIZE 0x800 278.344 -#endif 278.345 - 278.346 -int ucx_fprintf(void *stream, write_func wfc, const char *fmt, ...) { 278.347 - int ret; 278.348 - va_list ap; 278.349 - va_start(ap, fmt); 278.350 - ret = ucx_vfprintf(stream, wfc, fmt, ap); 278.351 - va_end(ap); 278.352 - return ret; 278.353 -} 278.354 - 278.355 -int ucx_vfprintf(void *stream, write_func wfc, const char *fmt, va_list ap) { 278.356 - char buf[UCX_PRINTF_BUFSIZE]; 278.357 -#ifdef va_copy 278.358 - va_list ap2; 278.359 - va_copy(ap2, ap); 278.360 - int ret = vsnprintf(buf, UCX_PRINTF_BUFSIZE, fmt, ap); 278.361 - if (ret < 0) { 278.362 - return ret; 278.363 - } else if (ret < UCX_PRINTF_BUFSIZE) { 278.364 - return (int)wfc(buf, 1, ret, stream); 278.365 - } else { 278.366 - if (ret == INT_MAX) { 278.367 - errno = ENOMEM; 278.368 - return -1; 278.369 - } 278.370 - 278.371 - int len = ret + 1; 278.372 - char *newbuf = (char*)malloc(len); 278.373 - if (!newbuf) { 278.374 - return -1; 278.375 - } 278.376 - 278.377 - ret = vsnprintf(newbuf, len, fmt, ap2); 278.378 - if (ret > 0) { 278.379 - ret = (int)wfc(newbuf, 1, ret, stream); 278.380 - } 278.381 - free(newbuf); 278.382 - } 278.383 - return ret; 278.384 -#else 278.385 - int ret = vsnprintf(buf, UCX_PRINTF_BUFSIZE, fmt, ap); 278.386 - if (ret < 0) { 278.387 - return ret; 278.388 - } else if (ret < UCX_PRINTF_BUFSIZE) { 278.389 - return (int)wfc(buf, 1, ret, stream); 278.390 - } else { 278.391 - errno = ENOMEM; 278.392 - return -1; 278.393 - } 278.394 -#endif 278.395 -} 278.396 - 278.397 -sstr_t ucx_asprintf(UcxAllocator *allocator, const char *fmt, ...) { 278.398 - va_list ap; 278.399 - sstr_t ret; 278.400 - va_start(ap, fmt); 278.401 - ret = ucx_vasprintf(allocator, fmt, ap); 278.402 - va_end(ap); 278.403 - return ret; 278.404 -} 278.405 - 278.406 -sstr_t ucx_vasprintf(UcxAllocator *a, const char *fmt, va_list ap) { 278.407 - sstr_t s; 278.408 - s.ptr = NULL; 278.409 - s.length = 0; 278.410 - char buf[UCX_PRINTF_BUFSIZE]; 278.411 -#ifdef va_copy 278.412 - va_list ap2; 278.413 - va_copy(ap2, ap); 278.414 - int ret = vsnprintf(buf, UCX_PRINTF_BUFSIZE, fmt, ap); 278.415 - if (ret > 0 && ret < UCX_PRINTF_BUFSIZE) { 278.416 - s.ptr = (char*)almalloc(a, ret + 1); 278.417 - if (s.ptr) { 278.418 - s.length = (size_t)ret; 278.419 - memcpy(s.ptr, buf, ret); 278.420 - s.ptr[s.length] = '\0'; 278.421 - } 278.422 - } else if (ret == INT_MAX) { 278.423 - errno = ENOMEM; 278.424 - } else { 278.425 - int len = ret + 1; 278.426 - s.ptr = (char*)almalloc(a, len); 278.427 - if (s.ptr) { 278.428 - ret = vsnprintf(s.ptr, len, fmt, ap2); 278.429 - if (ret < 0) { 278.430 - free(s.ptr); 278.431 - s.ptr = NULL; 278.432 - } else { 278.433 - s.length = (size_t)ret; 278.434 - } 278.435 - } 278.436 - } 278.437 -#else 278.438 - int ret = vsnprintf(buf, UCX_PRINTF_BUFSIZE, fmt, ap); 278.439 - if (ret > 0 && ret < UCX_PRINTF_BUFSIZE) { 278.440 - s.ptr = (char*)almalloc(a, ret + 1); 278.441 - if (s.ptr) { 278.442 - s.length = (size_t)ret; 278.443 - memcpy(s.ptr, buf, ret); 278.444 - s.ptr[s.length] = '\0'; 278.445 - } 278.446 - } else { 278.447 - errno = ENOMEM; 278.448 - } 278.449 -#endif 278.450 - return s; 278.451 -}
279.1 --- a/test/CMakeLists.txt Mon Dec 30 09:54:10 2019 +0100 279.2 +++ b/test/CMakeLists.txt Sat Feb 06 19:11:44 2021 +0100 279.3 @@ -1,17 +1,6 @@ 279.4 -add_executable(ucxtest 279.5 - allocator_tests.c 279.6 - array_tests.c 279.7 - avl_tests.c 279.8 - buffer_tests.c 279.9 - list_tests.c 279.10 - logging_tests.c 279.11 - main.c 279.12 - map_tests.c 279.13 - mpool_tests.c 279.14 - prop_tests.c 279.15 - stack_tests.c 279.16 - string_tests.c 279.17 - utils_tests.c 279.18 + 279.19 +add_executable(test_list 279.20 + test_list.c 279.21 ) 279.22 - 279.23 -target_link_libraries(ucxtest PRIVATE ucx_static) 279.24 +target_link_libraries(test_list PRIVATE ucx_static) 279.25 +add_test(NAME list COMMAND test_list WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
280.1 --- a/test/Makefile.am Mon Dec 30 09:54:10 2019 +0100 280.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 280.3 @@ -1,62 +0,0 @@ 280.4 -# 280.5 -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 280.6 -# 280.7 -# Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 280.8 -# 280.9 -# Redistribution and use in source and binary forms, with or without 280.10 -# modification, are permitted provided that the following conditions are met: 280.11 -# 280.12 -# 1. Redistributions of source code must retain the above copyright 280.13 -# notice, this list of conditions and the following disclaimer. 280.14 -# 280.15 -# 2. Redistributions in binary form must reproduce the above copyright 280.16 -# notice, this list of conditions and the following disclaimer in the 280.17 -# documentation and/or other materials provided with the distribution. 280.18 -# 280.19 -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 280.20 -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 280.21 -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 280.22 -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 280.23 -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 280.24 -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 280.25 -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 280.26 -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 280.27 -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 280.28 -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 280.29 -# POSSIBILITY OF SUCH DAMAGE. 280.30 -# 280.31 - 280.32 -TESTS = ucxtest 280.33 -check_PROGRAMS = ucxtest 280.34 -ucxtest_CFLAGS = -I$(top_srcdir)/src 280.35 - 280.36 -ucxtest_SOURCES = main.c 280.37 -ucxtest_SOURCES += allocator_tests.c 280.38 -ucxtest_SOURCES += array_tests.c 280.39 -ucxtest_SOURCES += list_tests.c 280.40 -ucxtest_SOURCES += avl_tests.c 280.41 -ucxtest_SOURCES += mpool_tests.c 280.42 -ucxtest_SOURCES += stack_tests.c 280.43 -ucxtest_SOURCES += map_tests.c 280.44 -ucxtest_SOURCES += prop_tests.c 280.45 -ucxtest_SOURCES += string_tests.c 280.46 -ucxtest_SOURCES += logging_tests.c 280.47 -ucxtest_SOURCES += buffer_tests.c 280.48 -ucxtest_SOURCES += utils_tests.c 280.49 - 280.50 -ucxtest_SOURCES += main.h 280.51 -ucxtest_SOURCES += allocator_tests.h 280.52 -ucxtest_SOURCES += array_tests.h 280.53 -ucxtest_SOURCES += list_tests.h 280.54 -ucxtest_SOURCES += avl_tests.h 280.55 -ucxtest_SOURCES += mpool_tests.h 280.56 -ucxtest_SOURCES += stack_tests.h 280.57 -ucxtest_SOURCES += map_tests.h 280.58 -ucxtest_SOURCES += prop_tests.h 280.59 -ucxtest_SOURCES += string_tests.h 280.60 -ucxtest_SOURCES += logging_tests.h 280.61 -ucxtest_SOURCES += buffer_tests.h 280.62 -ucxtest_SOURCES += utils_tests.h 280.63 - 280.64 -ucxtest_LDFLAGS = -static 280.65 -ucxtest_LDADD = ../src/libucx.la
281.1 --- a/test/allocator_tests.c Mon Dec 30 09:54:10 2019 +0100 281.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 281.3 @@ -1,41 +0,0 @@ 281.4 -/* 281.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 281.6 - * 281.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 281.8 - * 281.9 - * Redistribution and use in source and binary forms, with or without 281.10 - * modification, are permitted provided that the following conditions are met: 281.11 - * 281.12 - * 1. Redistributions of source code must retain the above copyright 281.13 - * notice, this list of conditions and the following disclaimer. 281.14 - * 281.15 - * 2. Redistributions in binary form must reproduce the above copyright 281.16 - * notice, this list of conditions and the following disclaimer in the 281.17 - * documentation and/or other materials provided with the distribution. 281.18 - * 281.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 281.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 281.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 281.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 281.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 281.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 281.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 281.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 281.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 281.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 281.29 - * POSSIBILITY OF SUCH DAMAGE. 281.30 - */ 281.31 - 281.32 -#include "allocator_tests.h" 281.33 - 281.34 -UCX_TEST(test_ucx_default_allocator) { 281.35 - UcxAllocator *alloc = ucx_default_allocator(); 281.36 - 281.37 - UCX_TEST_BEGIN 281.38 - UCX_TEST_ASSERT(alloc->pool == NULL, "pool must be NULL"); 281.39 - UCX_TEST_ASSERT(alloc->malloc == ucx_default_malloc, "wrong malloc"); 281.40 - UCX_TEST_ASSERT(alloc->calloc == ucx_default_calloc, "wrong calloc"); 281.41 - UCX_TEST_ASSERT(alloc->realloc == ucx_default_realloc, "wrong realloc"); 281.42 - UCX_TEST_ASSERT(alloc->free == ucx_default_free, "wrong free"); 281.43 - UCX_TEST_END 281.44 -}
282.1 --- a/test/allocator_tests.h Mon Dec 30 09:54:10 2019 +0100 282.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 282.3 @@ -1,46 +0,0 @@ 282.4 -/* 282.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 282.6 - * 282.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 282.8 - * 282.9 - * Redistribution and use in source and binary forms, with or without 282.10 - * modification, are permitted provided that the following conditions are met: 282.11 - * 282.12 - * 1. Redistributions of source code must retain the above copyright 282.13 - * notice, this list of conditions and the following disclaimer. 282.14 - * 282.15 - * 2. Redistributions in binary form must reproduce the above copyright 282.16 - * notice, this list of conditions and the following disclaimer in the 282.17 - * documentation and/or other materials provided with the distribution. 282.18 - * 282.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 282.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 282.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 282.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 282.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 282.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 282.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 282.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 282.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 282.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 282.29 - * POSSIBILITY OF SUCH DAMAGE. 282.30 - */ 282.31 - 282.32 -#ifndef ALLOCATOR_TEST_H 282.33 -#define ALLOCATOR_TEST_H 282.34 - 282.35 -#include <ucx/test.h> 282.36 -#include <ucx/allocator.h> 282.37 - 282.38 -#ifdef __cplusplus 282.39 -extern "C" { 282.40 -#endif 282.41 - 282.42 -UCX_TEST(test_ucx_default_allocator); 282.43 - 282.44 -#ifdef __cplusplus 282.45 -} 282.46 -#endif 282.47 - 282.48 -#endif /* ALLOCATOR_TEST_H */ 282.49 -
283.1 --- a/test/array_tests.c Mon Dec 30 09:54:10 2019 +0100 283.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 283.3 @@ -1,642 +0,0 @@ 283.4 -/* 283.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 283.6 - * 283.7 - * Copyright 2019 Mike Becker, Olaf Wintermann All rights reserved. 283.8 - * 283.9 - * Redistribution and use in source and binary forms, with or without 283.10 - * modification, are permitted provided that the following conditions are met: 283.11 - * 283.12 - * 1. Redistributions of source code must retain the above copyright 283.13 - * notice, this list of conditions and the following disclaimer. 283.14 - * 283.15 - * 2. Redistributions in binary form must reproduce the above copyright 283.16 - * notice, this list of conditions and the following disclaimer in the 283.17 - * documentation and/or other materials provided with the distribution. 283.18 - * 283.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 283.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 283.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 283.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 283.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 283.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 283.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 283.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 283.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 283.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 283.29 - * POSSIBILITY OF SUCH DAMAGE. 283.30 - */ 283.31 - 283.32 -#include "array_tests.h" 283.33 -#include <ucx/utils.h> 283.34 - 283.35 -UCX_TEST(test_ucx_array_destroy) { 283.36 - UcxArray array; 283.37 - ucx_array_init(&array, 16, sizeof(int)); 283.38 - 283.39 - UCX_TEST_BEGIN 283.40 - ucx_array_destroy(&array); 283.41 - UCX_TEST_ASSERT(array.data == NULL, "data pointer not NULL after destroy"); 283.42 - UCX_TEST_ASSERT(array.size == 0, "size not zero after destroy"); 283.43 - UCX_TEST_ASSERT(array.capacity == 0, "capacity not zero after destroy"); 283.44 - UCX_TEST_ASSERT(array.allocator == ucx_default_allocator(), 283.45 - "allocator corrupted during destroy"); 283.46 - UCX_TEST_END 283.47 -} 283.48 - 283.49 -UCX_TEST(test_ucx_array_new) { 283.50 - UcxArray* array = ucx_array_new(16, 47); 283.51 - 283.52 - UCX_TEST_BEGIN 283.53 - UCX_TEST_ASSERT(array->data, "no memory allocated"); 283.54 - UCX_TEST_ASSERT(array->size == 0, "size not initially zero"); 283.55 - UCX_TEST_ASSERT(array->capacity == 16, "capacity not as requested"); 283.56 - UCX_TEST_ASSERT(array->elemsize == 47, "element size not as requested"); 283.57 - UCX_TEST_ASSERT(array->allocator == ucx_default_allocator(), 283.58 - "array not using the default allocator"); 283.59 - UCX_TEST_END 283.60 - ucx_array_free(array); 283.61 -} 283.62 - 283.63 -UCX_TEST(test_ucx_array_append_from) { 283.64 - UcxArray *array = ucx_array_new(16, sizeof(int)); 283.65 - int *elements; 283.66 - 283.67 - int x = 42; 283.68 - ucx_array_append_from(array, &x, 1); 283.69 - UCX_TEST_BEGIN 283.70 - 283.71 - elements = array->data; 283.72 - UCX_TEST_ASSERT(elements[0] == 42, "failed"); 283.73 - 283.74 - int y[2] = {13, 37}; 283.75 - ucx_array_append_from(array, y, 2); 283.76 - 283.77 - elements = array->data; 283.78 - UCX_TEST_ASSERT(array->size == 3, "incorrect size after append"); 283.79 - UCX_TEST_ASSERT(elements[1] == 13, "failed"); 283.80 - UCX_TEST_ASSERT(elements[2] == 37, "failed"); 283.81 - UCX_TEST_ASSERT(elements[0] == 42, 283.82 - "append corrupted previously inserted data"); 283.83 - 283.84 - ucx_array_append_from(array, NULL, 2); 283.85 - 283.86 - elements = array->data; 283.87 - UCX_TEST_ASSERT(array->size == 5, "incorrect size after NULL append"); 283.88 - UCX_TEST_ASSERT(elements[3] == 0, "element is not zeroed"); 283.89 - UCX_TEST_ASSERT(elements[4] == 0, "element is not zeroed"); 283.90 - UCX_TEST_ASSERT(elements[0] == 42, 283.91 - "NULL append corrupted previously inserted data"); 283.92 - UCX_TEST_ASSERT(elements[1] == 13, 283.93 - "NULL append corrupted previously inserted data"); 283.94 - UCX_TEST_ASSERT(elements[2] == 37, 283.95 - "NULL append corrupted previously inserted data"); 283.96 - 283.97 - UCX_TEST_END 283.98 - 283.99 - ucx_array_free(array); 283.100 -} 283.101 - 283.102 -UCX_TEST(test_ucx_array_append_from_struct) { 283.103 - struct teststruct { 283.104 - unsigned long long x; 283.105 - unsigned long long y; 283.106 - unsigned long long z; 283.107 - }; 283.108 - 283.109 - UcxArray *array = ucx_array_new(16, sizeof(struct teststruct)); 283.110 - struct teststruct *elements; 283.111 - 283.112 - struct teststruct data; 283.113 - data.x = 13; data.y = 37; data.z = 47; 283.114 - 283.115 - ucx_array_append_from(array, &data, 1); 283.116 - UCX_TEST_BEGIN 283.117 - 283.118 - elements = array->data; 283.119 - UCX_TEST_ASSERT(elements[0].x == 13, "failed"); 283.120 - UCX_TEST_ASSERT(elements[0].y == 37, "failed"); 283.121 - UCX_TEST_ASSERT(elements[0].z == 47, "failed"); 283.122 - 283.123 - data.x = 0; data.y = 8; data.z = 15; 283.124 - ucx_array_append_from(array, &data, 1); 283.125 - 283.126 - elements = array->data; 283.127 - UCX_TEST_ASSERT(array->size == 2, "incorrect size after append"); 283.128 - UCX_TEST_ASSERT(elements[1].x == 0, "failed"); 283.129 - UCX_TEST_ASSERT(elements[1].y == 8, "failed"); 283.130 - UCX_TEST_ASSERT(elements[1].z == 15, "failed"); 283.131 - 283.132 - UCX_TEST_ASSERT(elements[0].x == 13, 283.133 - "append corrupted previously inserted data"); 283.134 - UCX_TEST_ASSERT(elements[0].y == 37, 283.135 - "append corrupted previously inserted data"); 283.136 - UCX_TEST_ASSERT(elements[0].z == 47, 283.137 - "append corrupted previously inserted data"); 283.138 - 283.139 - UCX_TEST_END 283.140 - 283.141 - ucx_array_destroy(array); 283.142 -} 283.143 - 283.144 -UCX_TEST(test_ucx_array_prepend_from) { 283.145 - int *elems; 283.146 - UcxArray *array = ucx_array_new(16, sizeof(int)); 283.147 - 283.148 - int x = 42; 283.149 - ucx_array_prepend_from(array, &x, 1); 283.150 - UCX_TEST_BEGIN 283.151 - 283.152 - elems = array->data; 283.153 - UCX_TEST_ASSERT(elems[0] == 42, "failed"); 283.154 - 283.155 - int y[2] = {13, 37}; 283.156 - ucx_array_prepend_from(array, y, 2); 283.157 - 283.158 - elems = array->data; 283.159 - UCX_TEST_ASSERT(array->size == 3, "incorrect size after prepend"); 283.160 - UCX_TEST_ASSERT(elems[0] == 13, "failed"); 283.161 - UCX_TEST_ASSERT(elems[1] == 37, "failed"); 283.162 - UCX_TEST_ASSERT(elems[2] == 42, 283.163 - "prepend corrupted previously inserted data"); 283.164 - 283.165 - ucx_array_prepend_from(array, NULL, 2); 283.166 - 283.167 - elems = array->data; 283.168 - UCX_TEST_ASSERT(array->size == 5, "incorrect size after NULL prepend"); 283.169 - UCX_TEST_ASSERT(elems[0] == 0, "element is not zeroed"); 283.170 - UCX_TEST_ASSERT(elems[1] == 0, "element is not zeroed"); 283.171 - UCX_TEST_ASSERT(elems[2] == 13, 283.172 - "NULL prepend corrupted previously inserted data"); 283.173 - UCX_TEST_ASSERT(elems[3] == 37, 283.174 - "NULL prepend corrupted previously inserted data"); 283.175 - UCX_TEST_ASSERT(elems[4] == 42, 283.176 - "NULL prepend corrupted previously inserted data"); 283.177 - 283.178 - UCX_TEST_END 283.179 - 283.180 - ucx_array_free(array); 283.181 -} 283.182 - 283.183 -UCX_TEST(test_ucx_array_set_from) { 283.184 - int *elems; 283.185 - UcxArray *array = ucx_array_new(16, sizeof(int)); 283.186 - 283.187 - int x = 42; 283.188 - 283.189 - UCX_TEST_BEGIN 283.190 - 283.191 - ucx_array_set_from(array, 7, &x, 1); 283.192 - 283.193 - elems = array->data; 283.194 - UCX_TEST_ASSERT(elems[7] == 42, "failed"); 283.195 - UCX_TEST_ASSERT(array->size >= 8, "array not resized on set"); 283.196 - UCX_TEST_ASSERT(array->capacity == 16, "capacity changed unnecessarily"); 283.197 - 283.198 - int y[2] = {13, 37}; 283.199 - ucx_array_set_from(array, 27, y, 2); 283.200 - 283.201 - elems = array->data; 283.202 - UCX_TEST_ASSERT(elems[27] == 13, "failed"); 283.203 - UCX_TEST_ASSERT(elems[28] == 37, "failed"); 283.204 - UCX_TEST_ASSERT(array->size == 29, "array not resized on set"); 283.205 - UCX_TEST_ASSERT(array->capacity == 32, "capacity not grown"); 283.206 - 283.207 - ucx_array_set_from(array, 7, NULL, 2); 283.208 - 283.209 - elems = array->data; 283.210 - UCX_TEST_ASSERT(elems[7] == 0, "not zeroed on NULL set"); 283.211 - UCX_TEST_ASSERT(elems[8] == 0, "not zeroed on NULL set"); 283.212 - 283.213 - UCX_TEST_END 283.214 - 283.215 - ucx_array_free(array); 283.216 -} 283.217 - 283.218 - 283.219 -UCX_TEST(test_ucx_array_equals) { 283.220 - UcxArray *a1 = ucx_array_new(16, sizeof(int32_t)); 283.221 - UcxArray *a2 = ucx_array_new(16, sizeof(int32_t)); 283.222 - UcxArray *a3 = ucx_array_new(16, sizeof(int64_t)); 283.223 - UcxArray *a4 = ucx_array_new(16, sizeof(int32_t)); 283.224 - 283.225 - int32_t *intelems; 283.226 - int64_t *longintelems; 283.227 - 283.228 - a1->size = 5; 283.229 - intelems = a1->data; 283.230 - intelems[0] = 47; 283.231 - intelems[1] = 11; 283.232 - intelems[2] = 0; 283.233 - intelems[3] = 8; 283.234 - intelems[4] = 15; 283.235 - a2->size = 5; 283.236 - intelems = a2->data; 283.237 - intelems[0] = 47; 283.238 - intelems[1] = 11; 283.239 - intelems[2] = 0; 283.240 - intelems[3] = 8; 283.241 - intelems[4] = 15; 283.242 - a3->size = 5; 283.243 - longintelems = a3->data; 283.244 - longintelems[0] = 47; 283.245 - longintelems[1] = 11; 283.246 - longintelems[2] = 0; 283.247 - longintelems[3] = 8; 283.248 - longintelems[4] = 15; 283.249 - a4->size = 5; 283.250 - intelems = a4->data; 283.251 - intelems[0] = 47; 283.252 - intelems[1] = 11; 283.253 - intelems[2] = -6; 283.254 - intelems[3] = 8; 283.255 - intelems[4] = 15; 283.256 - 283.257 - UCX_TEST_BEGIN 283.258 - 283.259 - UCX_TEST_ASSERT(ucx_array_equals(a1, a2, ucx_cmp_int32, NULL), "failed"); 283.260 - UCX_TEST_ASSERT(!ucx_array_equals(a1, a4, ucx_cmp_int32, NULL), "failed"); 283.261 - UCX_TEST_ASSERT(!ucx_array_equals(a4, a1, ucx_cmp_int32, NULL), "failed"); 283.262 - UCX_TEST_ASSERT(!ucx_array_equals(a1, a3, ucx_cmp_int64, NULL), 283.263 - "comparing arrays of different element size shall fail"); 283.264 - UCX_TEST_ASSERT(!ucx_array_equals(a3, a1, ucx_cmp_int64, NULL), 283.265 - "comparing arrays of different element size shall fail"); 283.266 - 283.267 - UCX_TEST_ASSERT(ucx_array_equals(a1, a2, NULL, NULL), 283.268 - "compare using memcmp() failed"); 283.269 - UCX_TEST_ASSERT(!ucx_array_equals(a1, a4, NULL, NULL), 283.270 - "compare using memcmp() failed"); 283.271 - 283.272 - UCX_TEST_END 283.273 - ucx_array_free(a1); 283.274 - ucx_array_free(a2); 283.275 - ucx_array_free(a3); 283.276 - ucx_array_free(a4); 283.277 -} 283.278 - 283.279 -UCX_TEST(test_ucx_array_concat) { 283.280 - UcxArray *a1 = ucx_array_new(16, sizeof(int)); 283.281 - UcxArray *a2 = ucx_array_new(16, sizeof(int)); 283.282 - int *elems; 283.283 - 283.284 - a1->size = 2; 283.285 - elems = a1->data; 283.286 - elems[0] = 47; 283.287 - elems[1] = 11; 283.288 - a2->size = 3; 283.289 - elems = a2->data; 283.290 - elems[0] = 0; 283.291 - elems[1] = 8; 283.292 - elems[2] = 15; 283.293 - 283.294 - UCX_TEST_BEGIN 283.295 - 283.296 - UCX_TEST_ASSERT(!ucx_array_concat(a1, a2), "failed"); 283.297 - UCX_TEST_ASSERT(a1->size == 5, "failed"); 283.298 - elems = a1->data; 283.299 - UCX_TEST_ASSERT(elems[0] == 47, "failed"); 283.300 - UCX_TEST_ASSERT(elems[1] == 11, "failed"); 283.301 - UCX_TEST_ASSERT(elems[2] == 0, "failed"); 283.302 - UCX_TEST_ASSERT(elems[3] == 8, "failed"); 283.303 - UCX_TEST_ASSERT(elems[4] == 15, "failed"); 283.304 - 283.305 - a1->elemsize *= 2; 283.306 - UCX_TEST_ASSERT(ucx_array_concat(a1, a2), 283.307 - "arrays of different element size must not be concatenated"); 283.308 - UCX_TEST_ASSERT(a1->size == 5, 283.309 - "arrays of different element size must not be concatenated"); 283.310 - 283.311 - UCX_TEST_END 283.312 - ucx_array_free(a1); 283.313 - ucx_array_free(a2); 283.314 -} 283.315 - 283.316 -UCX_TEST(test_ucx_array_at) { 283.317 - UcxArray *array = ucx_array_new(16, sizeof(int)); 283.318 - 283.319 - int x[3] = {42, 13, 5}; 283.320 - ucx_array_append_from(array, x, 3); 283.321 - 283.322 - UCX_TEST_BEGIN 283.323 - 283.324 - UCX_TEST_ASSERT(*(int*)ucx_array_at(array, 1) == 13, "failed"); 283.325 - *(int*)ucx_array_at(array, 1) = 80; 283.326 - UCX_TEST_ASSERT(*(int*)ucx_array_at(array, 1) == 80, "assignment failed"); 283.327 - 283.328 - UCX_TEST_ASSERT(*(int*)ucx_array_at(array, 0) == 42, "corrupted data"); 283.329 - UCX_TEST_ASSERT(*(int*)ucx_array_at(array, 2) == 5, "corrupted data"); 283.330 - 283.331 - UCX_TEST_END 283.332 - 283.333 - ucx_array_free(array); 283.334 -} 283.335 - 283.336 -UCX_TEST(test_ucx_array_find) { 283.337 - UcxArray *array = ucx_array_new(16, sizeof(int)); 283.338 - int *elems; 283.339 - 283.340 - array->size = 5; 283.341 - elems = array->data; 283.342 - elems[0] = 47; 283.343 - elems[1] = 11; 283.344 - elems[2] = 0; 283.345 - elems[3] = 8; 283.346 - elems[4] = 15; 283.347 - 283.348 - int x = 8; 283.349 - int y = 90; 283.350 - 283.351 - UCX_TEST_BEGIN 283.352 - 283.353 - UCX_TEST_ASSERT(ucx_array_find(array,(void*)&x,ucx_cmp_int,NULL) == 3, 283.354 - "doesn't find element"); 283.355 - UCX_TEST_ASSERT(ucx_array_find(array,(void*)&y,ucx_cmp_int,NULL) == 5, 283.356 - "finds non-existing element"); 283.357 - 283.358 - UCX_TEST_ASSERT(ucx_array_find(array,(void*)&x,NULL,NULL) == 3, 283.359 - "failed using memcmp()"); 283.360 - UCX_TEST_ASSERT(ucx_array_find(array,(void*)&y,NULL,NULL) == 5, 283.361 - "failed using memcmp()"); 283.362 - 283.363 - UCX_TEST_END 283.364 - ucx_array_free(array); 283.365 -} 283.366 - 283.367 -UCX_TEST(test_ucx_array_contains) { 283.368 - UcxArray *array = ucx_array_new(16, sizeof(int)); 283.369 - int *elems; 283.370 - 283.371 - array->size = 5; 283.372 - elems = array->data; 283.373 - elems[0] = 47; 283.374 - elems[1] = 11; 283.375 - elems[2] = 0; 283.376 - elems[3] = 8; 283.377 - elems[4] = 15; 283.378 - 283.379 - int x = 8; 283.380 - int y = 90; 283.381 - 283.382 - UCX_TEST_BEGIN 283.383 - 283.384 - UCX_TEST_ASSERT(ucx_array_contains(array,(void*)&x,ucx_cmp_int,NULL), 283.385 - "false negative"); 283.386 - UCX_TEST_ASSERT(!ucx_array_contains(array,(void*)&y,ucx_cmp_int,NULL), 283.387 - "false positive"); 283.388 - 283.389 - UCX_TEST_ASSERT(ucx_array_contains(array,(void*)&x,NULL,NULL), 283.390 - "false negative using memcmp()"); 283.391 - UCX_TEST_ASSERT(!ucx_array_contains(array,(void*)&y,NULL,NULL), 283.392 - "false positive using memcmp()"); 283.393 - 283.394 - UCX_TEST_END 283.395 - ucx_array_free(array); 283.396 -} 283.397 - 283.398 -UCX_TEST(test_ucx_array_remove) { 283.399 - UcxArray *array = ucx_array_new(16, sizeof(int)); 283.400 - int *elems; 283.401 - 283.402 - array->size = 5; 283.403 - elems = array->data; 283.404 - elems[0] = 47; 283.405 - elems[1] = 11; 283.406 - elems[2] = 0; 283.407 - elems[3] = 8; 283.408 - elems[4] = 15; 283.409 - 283.410 - UCX_TEST_BEGIN 283.411 - 283.412 - ucx_array_remove(array, 2); 283.413 - elems = array->data; 283.414 - UCX_TEST_ASSERT( 283.415 - elems[0] == 47 && 283.416 - elems[1] == 11 && 283.417 - elems[2] == 8 && 283.418 - elems[3] == 15, 283.419 - "wrong contents after remove"); 283.420 - UCX_TEST_ASSERT(array->size == 4, "wrong size after remove"); 283.421 - 283.422 - ucx_array_remove_fast(array, 1); 283.423 - elems = array->data; 283.424 - UCX_TEST_ASSERT( 283.425 - elems[0] == 47 && 283.426 - elems[1] == 15 && 283.427 - elems[2] == 8, 283.428 - "wrong contents after fast remove"); 283.429 - UCX_TEST_ASSERT(array->size == 3, "wrong size after fast remove"); 283.430 - 283.431 - UCX_TEST_END 283.432 - ucx_array_free(array); 283.433 -} 283.434 - 283.435 -UCX_TEST(test_ucx_array_clone) { 283.436 - UcxArray array; 283.437 - UcxArray copy; 283.438 - ucx_array_init(&array, 16, sizeof(int)); 283.439 - ucx_array_init(©, 4, 2*sizeof(double)); 283.440 - int *elems; 283.441 - 283.442 - array.size = 5; 283.443 - elems = array.data; 283.444 - elems[0] = 47; 283.445 - elems[1] = 11; 283.446 - elems[2] = 0; 283.447 - elems[3] = 8; 283.448 - elems[4] = 15; 283.449 - 283.450 - ucx_array_clone(©, &array); 283.451 - UCX_TEST_BEGIN 283.452 - 283.453 - UCX_TEST_ASSERT(array.data != copy.data, "no true copy"); 283.454 - UCX_TEST_ASSERT(array.size == copy.size, "size mismatch"); 283.455 - UCX_TEST_ASSERT(array.capacity == copy.capacity, "capacity mismatch"); 283.456 - UCX_TEST_ASSERT(array.elemsize == copy.elemsize, "element size mismatch"); 283.457 - UCX_TEST_ASSERT(array.allocator == copy.allocator, "allocator mismatch"); 283.458 - UCX_TEST_ASSERT(ucx_array_equals(&array, ©, ucx_cmp_int, NULL), 283.459 - "contents do not match after clone"); 283.460 - 283.461 - UCX_TEST_END 283.462 - 283.463 - ucx_array_destroy(&array); 283.464 - ucx_array_destroy(©); 283.465 -} 283.466 - 283.467 -static int ucx_cmp_int_reverse(const void* x, const void* y, void* data) { 283.468 - return -ucx_cmp_int(x,y,data); 283.469 -} 283.470 - 283.471 -UCX_TEST(test_ucx_array_sort) { 283.472 - int *elems; 283.473 - 283.474 - UcxArray *array = ucx_array_new(16, sizeof(int)); 283.475 - array->size = 5; 283.476 - elems = array->data; 283.477 - elems[0] = 47; 283.478 - elems[1] = 11; 283.479 - elems[2] = 0; 283.480 - elems[3] = 8; 283.481 - elems[4] = 15; 283.482 - 283.483 - UcxArray *expected = ucx_array_new(16, sizeof(int)); 283.484 - expected->size = 5; 283.485 - elems = expected->data; 283.486 - elems[0] = 0; 283.487 - elems[1] = 8; 283.488 - elems[2] = 11; 283.489 - elems[3] = 15; 283.490 - elems[4] = 47; 283.491 - 283.492 - UcxArray *expectedrev = ucx_array_new(16, sizeof(int)); 283.493 - expectedrev->size = 5; 283.494 - elems = expectedrev->data; 283.495 - elems[0] = 47; 283.496 - elems[1] = 15; 283.497 - elems[2] = 11; 283.498 - elems[3] = 8; 283.499 - elems[4] = 0; 283.500 - 283.501 - 283.502 - UCX_TEST_BEGIN 283.503 - void* original_ptr = array->data; 283.504 - ucx_array_sort(array, ucx_cmp_int, NULL); 283.505 - UCX_TEST_ASSERT(ucx_array_equals(array, expected, NULL, NULL), "failed"); 283.506 - UCX_TEST_ASSERT(array->size == 5, "size corrupted"); 283.507 - UCX_TEST_ASSERT(array->data == original_ptr, "shall not reallocate"); 283.508 - 283.509 - ucx_array_sort(array, ucx_cmp_int_reverse, NULL); 283.510 - UCX_TEST_ASSERT(ucx_array_equals(array, expectedrev, NULL, NULL), "failed"); 283.511 - 283.512 - ucx_array_reserve(array, 32); 283.513 - ucx_array_reserve(expected, 32); 283.514 - array->size = expected->size = 32; 283.515 - for (size_t i = 0 ; i < 32 ; i++) { 283.516 - ((int*)array->data)[i]= ((i%2==0)?-1:1) * ((int) i); 283.517 - ((int*)expected->data)[i] = (-30+2*i) - (i > 15 ? 1 : 0); 283.518 - } 283.519 - 283.520 - /* dummy third argument to trigger a possible fallback for qsort_s */ 283.521 - ucx_array_sort(array, ucx_cmp_int, array->data); 283.522 - UCX_TEST_ASSERT(ucx_array_equals(array, expected, NULL, NULL), 283.523 - "failed for bigger arrays"); 283.524 - UCX_TEST_END 283.525 - 283.526 - ucx_array_free(expectedrev); 283.527 - ucx_array_free(expected); 283.528 - ucx_array_free(array); 283.529 -} 283.530 - 283.531 -UCX_TEST(test_ucx_array_shrink) { 283.532 - UcxArray *array = ucx_array_new(16, sizeof(int)); 283.533 - array->size = 4; 283.534 - 283.535 - UCX_TEST_BEGIN 283.536 - UCX_TEST_ASSERT(!ucx_array_shrink(array), "failed"); 283.537 - UCX_TEST_ASSERT(array->capacity == 4, "incorrect capacity after shrink"); 283.538 - UCX_TEST_END 283.539 - ucx_array_free(array); 283.540 -} 283.541 - 283.542 -UCX_TEST(test_ucx_array_resize) { 283.543 - UcxArray *array = ucx_array_new(16, sizeof(int)); 283.544 - array->size = 8; 283.545 - 283.546 - UCX_TEST_BEGIN 283.547 - 283.548 - UCX_TEST_ASSERT(!ucx_array_resize(array, 32), "failed"); 283.549 - UCX_TEST_ASSERT(array->capacity == 32, "incorrect capacity after resize"); 283.550 - UCX_TEST_ASSERT(array->size == 8, "incorrect size after resize"); 283.551 - 283.552 - UCX_TEST_ASSERT(!ucx_array_resize(array, 4), "failed"); 283.553 - UCX_TEST_ASSERT(array->capacity == 4, "incorrect capacity after resize"); 283.554 - UCX_TEST_ASSERT(array->size == 4, "incorrect size after resize"); 283.555 - 283.556 - UCX_TEST_END 283.557 - ucx_array_free(array); 283.558 -} 283.559 - 283.560 -UCX_TEST(test_ucx_array_reserve) { 283.561 - UcxArray *array = ucx_array_new(16, sizeof(int)); 283.562 - 283.563 - UCX_TEST_BEGIN 283.564 - 283.565 - UCX_TEST_ASSERT(!ucx_array_reserve(array, 4), "failed"); 283.566 - UCX_TEST_ASSERT(array->capacity == 16, "reserve shall not shrink"); 283.567 - 283.568 - UCX_TEST_ASSERT(!ucx_array_resize(array, 32), "failed"); 283.569 - UCX_TEST_ASSERT(array->capacity == 32, "incorrect capacity after reserve"); 283.570 - 283.571 - UCX_TEST_END 283.572 - ucx_array_free(array); 283.573 -} 283.574 - 283.575 -UCX_TEST(test_ucx_array_grow) { 283.576 - UcxArray *array = ucx_array_new(16, sizeof(int)); 283.577 - array->size = 12; 283.578 - 283.579 - UCX_TEST_BEGIN 283.580 - 283.581 - UCX_TEST_ASSERT(!ucx_array_grow(array, 4), "failed"); 283.582 - UCX_TEST_ASSERT(array->capacity == 16, "shall be noop if contents fit"); 283.583 - /* subsequent calls shall also be noops */ 283.584 - UCX_TEST_ASSERT(!ucx_array_grow(array, 4), "failed"); 283.585 - UCX_TEST_ASSERT(array->capacity == 16, "shall be noop if contents fit"); 283.586 - 283.587 - UCX_TEST_ASSERT(!ucx_array_grow(array, 6), "failed"); 283.588 - UCX_TEST_ASSERT(array->capacity == 18, "incorrect capacity after grow"); 283.589 - 283.590 - UCX_TEST_END 283.591 - ucx_array_free(array); 283.592 -} 283.593 - 283.594 -UCX_TEST(test_ucx_array_util_set) { 283.595 - size_t capacity = 16; 283.596 - int* array = malloc(sizeof(int)*capacity); 283.597 - int x; 283.598 - 283.599 - UCX_TEST_BEGIN 283.600 - 283.601 - x = 42; 283.602 - ucx_array_util_set(&array, &capacity, sizeof(int), 7, &x); 283.603 - 283.604 - UCX_TEST_ASSERT(array[7] == 42, "failed"); 283.605 - UCX_TEST_ASSERT(capacity == 16, "capacity changed unnecessarily"); 283.606 - 283.607 - x = 13; 283.608 - ucx_array_util_set(&array, &capacity, sizeof(int), 37, &x); 283.609 - x = 37; 283.610 - ucx_array_util_set(&array, &capacity, sizeof(int), 38, &x); 283.611 - 283.612 - UCX_TEST_ASSERT(array[37] == 13, "failed"); 283.613 - UCX_TEST_ASSERT(array[38] == 37, "failed"); 283.614 - UCX_TEST_ASSERT(capacity == 64, "capacity not grown"); 283.615 - 283.616 - UCX_TEST_END 283.617 - 283.618 - free(array); 283.619 -} 283.620 - 283.621 - 283.622 -UCX_TEST(test_ucx_array_util_setptr) { 283.623 - size_t capacity = 16; 283.624 - double** array = malloc(sizeof(double*)*capacity); 283.625 - double x, y, z; 283.626 - 283.627 - UCX_TEST_BEGIN 283.628 - 283.629 - ucx_array_util_setptr(&array, &capacity, 7, &x); 283.630 - 283.631 - UCX_TEST_ASSERT(array[7] == &x, "failed"); 283.632 - UCX_TEST_ASSERT(capacity == 16, "capacity changed unnecessarily"); 283.633 - 283.634 - ucx_array_util_setptr(&array, &capacity, 37, &y); 283.635 - ucx_array_util_setptr(&array, &capacity, 38, &z); 283.636 - 283.637 - UCX_TEST_ASSERT(array[37] == &y, "failed"); 283.638 - UCX_TEST_ASSERT(array[38] == &z, "failed"); 283.639 - UCX_TEST_ASSERT(capacity == 64, "capacity not grown"); 283.640 - 283.641 - UCX_TEST_END 283.642 - 283.643 - free(array); 283.644 -} 283.645 -
284.1 --- a/test/array_tests.h Mon Dec 30 09:54:10 2019 +0100 284.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 284.3 @@ -1,65 +0,0 @@ 284.4 -/* 284.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 284.6 - * 284.7 - * Copyright 2019 Mike Becker, Olaf Wintermann All rights reserved. 284.8 - * 284.9 - * Redistribution and use in source and binary forms, with or without 284.10 - * modification, are permitted provided that the following conditions are met: 284.11 - * 284.12 - * 1. Redistributions of source code must retain the above copyright 284.13 - * notice, this list of conditions and the following disclaimer. 284.14 - * 284.15 - * 2. Redistributions in binary form must reproduce the above copyright 284.16 - * notice, this list of conditions and the following disclaimer in the 284.17 - * documentation and/or other materials provided with the distribution. 284.18 - * 284.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 284.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 284.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 284.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 284.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 284.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 284.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 284.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 284.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 284.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 284.29 - * POSSIBILITY OF SUCH DAMAGE. 284.30 - */ 284.31 - 284.32 -#ifndef ARRAY_TESTS_H 284.33 -#define ARRAY_TESTS_H 284.34 - 284.35 -#include <ucx/array.h> 284.36 -#include <ucx/test.h> 284.37 - 284.38 -#ifdef __cplusplus 284.39 -extern "C" { 284.40 -#endif 284.41 - 284.42 -UCX_TEST(test_ucx_array_destroy); 284.43 -UCX_TEST(test_ucx_array_new); 284.44 -UCX_TEST(test_ucx_array_at); 284.45 -UCX_TEST(test_ucx_array_append_from); 284.46 -UCX_TEST(test_ucx_array_append_from_struct); 284.47 -UCX_TEST(test_ucx_array_prepend_from); 284.48 -UCX_TEST(test_ucx_array_set_from); 284.49 -UCX_TEST(test_ucx_array_equals); 284.50 -UCX_TEST(test_ucx_array_concat); 284.51 -UCX_TEST(test_ucx_array_find); 284.52 -UCX_TEST(test_ucx_array_contains); 284.53 -UCX_TEST(test_ucx_array_remove); 284.54 -UCX_TEST(test_ucx_array_clone); 284.55 -UCX_TEST(test_ucx_array_sort); 284.56 -UCX_TEST(test_ucx_array_shrink); 284.57 -UCX_TEST(test_ucx_array_resize); 284.58 -UCX_TEST(test_ucx_array_reserve); 284.59 -UCX_TEST(test_ucx_array_grow); 284.60 -UCX_TEST(test_ucx_array_util_set); 284.61 -UCX_TEST(test_ucx_array_util_setptr); 284.62 - 284.63 -#ifdef __cplusplus 284.64 -} 284.65 -#endif 284.66 - 284.67 -#endif /* ARRAY_TESTS_H */ 284.68 -
285.1 --- a/test/avl_tests.c Mon Dec 30 09:54:10 2019 +0100 285.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 285.3 @@ -1,335 +0,0 @@ 285.4 -/* 285.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 285.6 - * 285.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 285.8 - * 285.9 - * Redistribution and use in source and binary forms, with or without 285.10 - * modification, are permitted provided that the following conditions are met: 285.11 - * 285.12 - * 1. Redistributions of source code must retain the above copyright 285.13 - * notice, this list of conditions and the following disclaimer. 285.14 - * 285.15 - * 2. Redistributions in binary form must reproduce the above copyright 285.16 - * notice, this list of conditions and the following disclaimer in the 285.17 - * documentation and/or other materials provided with the distribution. 285.18 - * 285.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 285.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 285.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 285.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 285.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 285.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 285.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 285.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 285.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 285.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 285.29 - * POSSIBILITY OF SUCH DAMAGE. 285.30 - */ 285.31 - 285.32 -#include "avl_tests.h" 285.33 - 285.34 -#include <ucx/utils.h> 285.35 - 285.36 -static int node_height(UcxAVLNode *node) { 285.37 - if(!node) { 285.38 - return 0; 285.39 - } 285.40 - 285.41 - int left = 0; 285.42 - int right = 0; 285.43 - if(node->left) { 285.44 - left = node_height(node->left); 285.45 - } 285.46 - if(node->right) { 285.47 - right = node_height(node->right); 285.48 - } 285.49 - 285.50 - return left > right ? left+1 : right+1; 285.51 -} 285.52 - 285.53 -static int check_tree(UcxAVLNode *node) { 285.54 - if(!node) { 285.55 - return 1; 285.56 - } 285.57 - 285.58 - int left_height = node_height(node->left); 285.59 - int right_height = node_height(node->right); 285.60 - int bf = -left_height + right_height; 285.61 - if(bf < -1 || bf > 1) { 285.62 - return 0; 285.63 - } 285.64 - int height = left_height > right_height ? left_height : right_height; 285.65 - height++; 285.66 - if(height != node->height) { 285.67 - return 0; 285.68 - } 285.69 - 285.70 - if(!check_tree(node->left)) { 285.71 - return 0; 285.72 - } 285.73 - if(!check_tree(node->right)) { 285.74 - return 0; 285.75 - } 285.76 - 285.77 - return 1; 285.78 -} 285.79 - 285.80 -UCX_TEST(test_ucx_avl_put) { 285.81 - UcxAVLTree *tree1 = ucx_avl_new(ucx_cmp_ptr); 285.82 - UcxAVLTree *tree2 = ucx_avl_new(ucx_cmp_ptr); 285.83 - UcxAVLTree *tree3 = ucx_avl_new(ucx_cmp_ptr); 285.84 - UcxAVLTree *tree4 = ucx_avl_new(ucx_cmp_ptr); 285.85 - UcxAVLTree *tree5 = ucx_avl_new(ucx_cmp_ptr); 285.86 - 285.87 - char *data1 = (char*)"data1"; 285.88 - char *data2 = (char*)"data2"; 285.89 - char *data3 = (char*)"data3"; 285.90 - 285.91 - UCX_TEST_BEGIN 285.92 - 285.93 - ucx_avl_put(tree1, 2, (char*)data2); 285.94 - ucx_avl_put(tree1, 1, (char*)data1); 285.95 - ucx_avl_put(tree1, 3, (char*)data3); 285.96 - 285.97 - UCX_TEST_ASSERT(check_tree(tree1->root), "check_tree failed (tree1)"); 285.98 - UCX_TEST_ASSERT(ucx_avl_get(tree1, 1) == data1, "wrong data (tree1)"); 285.99 - UCX_TEST_ASSERT(ucx_avl_get(tree1, 2) == data2, "wrong data (tree1)"); 285.100 - UCX_TEST_ASSERT(ucx_avl_get(tree1, 3) == data3, "wrong data (tree1)"); 285.101 - 285.102 - for(int i=0;i<100000;i++) { 285.103 - ucx_avl_put(tree2, i, data1); 285.104 - } 285.105 - UCX_TEST_ASSERT(check_tree(tree2->root), "check_tree failed (tree2)"); 285.106 - 285.107 - for(int i=100000;i>=0;i--) { 285.108 - ucx_avl_put(tree3, i, data1); 285.109 - } 285.110 - UCX_TEST_ASSERT(check_tree(tree3->root), "check_tree failed (tree3)"); 285.111 - 285.112 - for(int i=0;i<100;i++) { 285.113 - ucx_avl_put(tree4, i, data1); 285.114 - } 285.115 - for(int i=400;i<500;i++) { 285.116 - ucx_avl_put(tree4, i, data2); 285.117 - } 285.118 - for(int i=399;i>200;i--) { 285.119 - ucx_avl_put(tree4, i, data3); 285.120 - } 285.121 - for(int i=800;i<1000;i++) { 285.122 - ucx_avl_put(tree4, i, data1); 285.123 - } 285.124 - UCX_TEST_ASSERT(check_tree(tree4->root), "check_tree failed (tree4)"); 285.125 - UCX_TEST_ASSERT(ucx_avl_get(tree4, 0) == data1, "wrong data for key: 0"); 285.126 - UCX_TEST_ASSERT(ucx_avl_get(tree4, 1) == data1, "wrong data for key: 1"); 285.127 - UCX_TEST_ASSERT(ucx_avl_get(tree4, 99) == data1, "wrong data for key: 99"); 285.128 - UCX_TEST_ASSERT(ucx_avl_get(tree4, 400)==data2, "wrong data for key: 400"); 285.129 - UCX_TEST_ASSERT(ucx_avl_get(tree4, 410)==data2, "wrong data for key: 410"); 285.130 - UCX_TEST_ASSERT(ucx_avl_get(tree4, 350)==data3, "wrong data for key: 350"); 285.131 - UCX_TEST_ASSERT(ucx_avl_get(tree4, 900)==data1, "wrong data for key: 900"); 285.132 - 285.133 - int values[] = { 3, 6, 12, 9, 23, 1, 0, 20, 34, 5, 8, 7, 6, 14, 15, 2, 4}; 285.134 - int len = sizeof(values) / sizeof(int); 285.135 - for(int i=0;i<len;i++) { 285.136 - ucx_avl_put(tree5, values[i], NULL); 285.137 - } 285.138 - UCX_TEST_ASSERT(check_tree(tree5->root), "check_tree failed (tree5)"); 285.139 - 285.140 - UCX_TEST_END 285.141 - 285.142 - ucx_avl_free(tree1); 285.143 - ucx_avl_free(tree2); 285.144 - ucx_avl_free(tree3); 285.145 - ucx_avl_free(tree4); 285.146 - ucx_avl_free(tree5); 285.147 -} 285.148 - 285.149 -UCX_TEST(test_ucx_avl_remove) { 285.150 - UcxAVLTree *tree1 = ucx_avl_new(ucx_cmp_ptr); 285.151 - UcxAVLTree *tree2 = ucx_avl_new(ucx_cmp_ptr); 285.152 - UcxAVLTree *tree3 = ucx_avl_new(ucx_cmp_ptr); 285.153 - UcxAVLTree *tree4 = ucx_avl_new(ucx_cmp_ptr); 285.154 - 285.155 - char *data1 = (char*)"data1"; 285.156 - char *data2 = (char*)"data2"; 285.157 - char *data3 = (char*)"data3"; 285.158 - 285.159 - UCX_TEST_BEGIN 285.160 - ucx_avl_put(tree1, 2, (char*)data2); 285.161 - ucx_avl_put(tree1, 1, (char*)data1); 285.162 - ucx_avl_put(tree1, 3, (char*)data3); 285.163 - void *val; 285.164 - ucx_avl_remove_s(tree1, 3, NULL, &val); 285.165 - 285.166 - UCX_TEST_ASSERT(check_tree(tree1->root), "check_tree failed (tree1)"); 285.167 - UCX_TEST_ASSERT(val == data3, 285.168 - "wrong return value for key: 1 (tree1)"); 285.169 - UCX_TEST_ASSERT(ucx_avl_get(tree1, 3) == NULL, "value not removed (tree1)"); 285.170 - 285.171 - ucx_avl_remove_s(tree1, 2, NULL, &val); 285.172 - UCX_TEST_ASSERT(val == data2, 285.173 - "wrong return value for key: 2 (tree1)"); 285.174 - UCX_TEST_ASSERT(check_tree(tree1->root), "check_tree failed (tree1)"); 285.175 - 285.176 - ucx_avl_remove_s(tree1, 1, NULL, &val); 285.177 - UCX_TEST_ASSERT(val == data1, 285.178 - "wrong return value for key: 1 (tree1)"); 285.179 - UCX_TEST_ASSERT(check_tree(tree1->root), "check_tree failed (tree1)"); 285.180 - UCX_TEST_ASSERT(tree1->root == NULL, "root not NULL (tree1)"); 285.181 - 285.182 - 285.183 - for(int i=0;i<20;i++) { 285.184 - if(i==10) { 285.185 - ucx_avl_put(tree2, i, data3); 285.186 - } else if(i==15) { 285.187 - ucx_avl_put(tree2, i, data2); 285.188 - } else { 285.189 - ucx_avl_put(tree2, i, data1); 285.190 - } 285.191 - } 285.192 - 285.193 - ucx_avl_remove_s(tree2, 10, NULL, &val); 285.194 - UCX_TEST_ASSERT(val == data3, 285.195 - "wrong return value for key: 10 (tree2)"); 285.196 - UCX_TEST_ASSERT(check_tree(tree2->root), "check_tree failed (tree2)"); 285.197 - 285.198 - ucx_avl_remove_s(tree2, 15, NULL, &val); 285.199 - UCX_TEST_ASSERT(val == data2, 285.200 - "wrong return value for key: 15 (tree2)"); 285.201 - UCX_TEST_ASSERT(check_tree(tree2->root), "check_tree failed (tree2)"); 285.202 - 285.203 - for(int i=0;i<20;i++) { 285.204 - ucx_avl_remove(tree2, i); 285.205 - UCX_TEST_ASSERT(check_tree(tree2->root), "check_tree failed (tree2)"); 285.206 - } 285.207 - UCX_TEST_ASSERT(tree2->root == NULL, "root not NULL (tree2)"); 285.208 - 285.209 - for(int i=0;i<100000;i++) { 285.210 - ucx_avl_put(tree3, i, data1); 285.211 - } 285.212 - for(int i=100000-1;i>=0;i--) { 285.213 - ucx_avl_remove(tree3, i); 285.214 - } 285.215 - UCX_TEST_ASSERT(tree3->root == NULL, "root not NULL (tree3)"); 285.216 - UCX_TEST_ASSERT(check_tree(tree3->root), "check_tree failed (tree3)"); 285.217 - 285.218 - ucx_avl_put(tree4, 1, data1); 285.219 - ucx_avl_remove(tree4, 1); 285.220 - UCX_TEST_ASSERT(check_tree(tree4->root), "check_tree failed (tree4)"); 285.221 - UCX_TEST_ASSERT(tree4->root == NULL, "root not NULL (tree4)"); 285.222 - UCX_TEST_END 285.223 - 285.224 - ucx_avl_free(tree1); 285.225 - ucx_avl_free(tree2); 285.226 - ucx_avl_free(tree3); 285.227 - ucx_avl_free(tree4); 285.228 -} 285.229 - 285.230 -static intmax_t dist_int(const void* a, const void* b, void* n) { 285.231 - return ((intptr_t)a)-((intptr_t)b); 285.232 -} 285.233 - 285.234 -UCX_TEST(test_ucx_avl_find) { 285.235 - UcxAVLTree *tree = ucx_avl_new(ucx_cmp_ptr); 285.236 - UcxAVLTree *tree2 = ucx_avl_new(ucx_cmp_ptr); 285.237 - UcxAVLTree *tree3 = ucx_avl_new(ucx_cmp_ptr); 285.238 - 285.239 - size_t len = 12; 285.240 - int val[] = {10, 15, 3, 4, -30, 20, 14, -11, 12, -5, 1, 13}; 285.241 - 285.242 - for (size_t i = 0 ; i < len ; i++) { 285.243 - ucx_avl_put(tree, val[i], &(val[i])); 285.244 - } 285.245 - 285.246 - UCX_TEST_BEGIN 285.247 - 285.248 - void* ret; 285.249 - 285.250 - /* test present values */ 285.251 - ret = ucx_avl_find(tree,(intptr_t)-5, dist_int, UCX_AVL_FIND_CLOSEST); 285.252 - UCX_TEST_ASSERT(ret && *((int*)ret) == -5, "AVL find closest failed"); 285.253 - ret = ucx_avl_find(tree,(intptr_t)-5, dist_int, UCX_AVL_FIND_EXACT); 285.254 - UCX_TEST_ASSERT(ret && *((int*)ret) == -5, "AVL find exact failed"); 285.255 - ret = ucx_avl_find(tree,(intptr_t)-5, dist_int, UCX_AVL_FIND_LOWER_BOUNDED); 285.256 - UCX_TEST_ASSERT(ret && *((int*)ret) == -5, "AVL find LB failed"); 285.257 - ret = ucx_avl_find(tree,(intptr_t)-5, dist_int, UCX_AVL_FIND_UPPER_BOUNDED); 285.258 - UCX_TEST_ASSERT(ret && *((int*)ret) == -5, "AVL find UB failed"); 285.259 - ret = ucx_avl_find(tree,(intptr_t)12, dist_int, UCX_AVL_FIND_CLOSEST); 285.260 - UCX_TEST_ASSERT(ret && *((int*)ret) == 12, "AVL find closest failed"); 285.261 - ret = ucx_avl_find(tree,(intptr_t)12, dist_int, UCX_AVL_FIND_EXACT); 285.262 - UCX_TEST_ASSERT(ret && *((int*)ret) == 12, "AVL find exact failed"); 285.263 - ret = ucx_avl_find(tree,(intptr_t)12, dist_int, UCX_AVL_FIND_LOWER_BOUNDED); 285.264 - UCX_TEST_ASSERT(ret && *((int*)ret) == 12, "AVL find LB failed"); 285.265 - ret = ucx_avl_find(tree,(intptr_t)12, dist_int, UCX_AVL_FIND_UPPER_BOUNDED); 285.266 - UCX_TEST_ASSERT(ret && *((int*)ret) == 12, "AVL find UB failed"); 285.267 - 285.268 - /* test missing values */ 285.269 - ret = ucx_avl_find(tree,(intptr_t)-10, dist_int, UCX_AVL_FIND_CLOSEST); 285.270 - UCX_TEST_ASSERT(ret && *((int*)ret) == -11, "AVL find closest failed"); 285.271 - ret = ucx_avl_find(tree,(intptr_t)-8, dist_int, UCX_AVL_FIND_EXACT); 285.272 - UCX_TEST_ASSERT(!ret, "AVL find exact failed"); 285.273 - ret = ucx_avl_find(tree,(intptr_t)-8, dist_int, UCX_AVL_FIND_LOWER_BOUNDED); 285.274 - UCX_TEST_ASSERT(ret && *((int*)ret) == -5, "AVL find LB failed"); 285.275 - ret = ucx_avl_find(tree,(intptr_t)-8, dist_int, UCX_AVL_FIND_UPPER_BOUNDED); 285.276 - UCX_TEST_ASSERT(ret && *((int*)ret) == -11, "AVL find UB failed"); 285.277 - ret = ucx_avl_find(tree,(intptr_t)18, dist_int, UCX_AVL_FIND_CLOSEST); 285.278 - UCX_TEST_ASSERT(ret && *((int*)ret) == 20, "AVL find closest failed"); 285.279 - ret = ucx_avl_find(tree,(intptr_t)7, dist_int, UCX_AVL_FIND_EXACT); 285.280 - UCX_TEST_ASSERT(!ret, "AVL find exact failed"); 285.281 - ret = ucx_avl_find(tree,(intptr_t)7, dist_int, UCX_AVL_FIND_LOWER_BOUNDED); 285.282 - UCX_TEST_ASSERT(ret && *((int*)ret) == 10, "AVL find LB failed"); 285.283 - ret = ucx_avl_find(tree,(intptr_t)7, dist_int, UCX_AVL_FIND_UPPER_BOUNDED); 285.284 - UCX_TEST_ASSERT(ret && *((int*)ret) == 4, "AVL find UB failed"); 285.285 - 285.286 - int val2[] = { 10, 15 }; 285.287 - ucx_avl_put(tree2, val2[0], &(val2[0])); 285.288 - ucx_avl_put(tree2, val2[1], &(val2[1])); 285.289 - ret = ucx_avl_find(tree2,(intptr_t)11, dist_int, UCX_AVL_FIND_UPPER_BOUNDED); 285.290 - UCX_TEST_ASSERT(ret && *((int*)ret) == 10, "AVL find LB failed"); 285.291 - 285.292 - int val3[] = { 15, 16, 1 }; 285.293 - ucx_avl_put(tree3, val3[0], &(val3[0])); 285.294 - ucx_avl_put(tree3, val3[1], &(val3[1])); 285.295 - ucx_avl_put(tree3, val3[2], &(val3[2])); 285.296 - 285.297 - ret = ucx_avl_find(tree3, (intptr_t)13, dist_int, UCX_AVL_FIND_CLOSEST); 285.298 - UCX_TEST_ASSERT(ret && *((int*)ret) == 15, "AVL find closest failed"); 285.299 - 285.300 - UCX_TEST_END 285.301 - 285.302 - ucx_avl_free(tree); 285.303 - ucx_avl_free(tree2); 285.304 - ucx_avl_free(tree3); 285.305 -} 285.306 - 285.307 -UCX_TEST(test_ucx_avl_traverse) { 285.308 - UcxAVLTree *tree = ucx_avl_new(ucx_cmp_ptr); 285.309 - 285.310 - size_t len = 12; 285.311 - 285.312 - int val[] = {10, 15, 3, 4, -30, 20, 14, -11, 12, -5, 1, 13}; 285.313 - int val_ordered[] = {-30, -11, -5, 1, 3, 4, 10, 12, 13, 14, 15, 20}; 285.314 - 285.315 - for (size_t i = 0 ; i < len ; i++) { 285.316 - ucx_avl_put(tree, val[i], &(val[i])); 285.317 - } 285.318 - 285.319 - UCX_TEST_BEGIN 285.320 - 285.321 - UcxAVLNode* node = ucx_avl_get_node(tree, (intptr_t) val_ordered[0]); 285.322 - for (size_t i = 0 ; i < len ; i++) { 285.323 - UCX_TEST_ASSERT(node->key == val_ordered[i], "AVL successor failed"); 285.324 - node = ucx_avl_succ(node); 285.325 - } 285.326 - UCX_TEST_ASSERT(!node, "AVL maximum incorrectly has a successor"); 285.327 - 285.328 - node = ucx_avl_get_node(tree, (intptr_t) val_ordered[len-1]); 285.329 - for (size_t i = len ; i > 0 ; i--) { 285.330 - UCX_TEST_ASSERT(node->key == val_ordered[i-1],"AVL predecessor failed"); 285.331 - node = ucx_avl_pred(node); 285.332 - } 285.333 - UCX_TEST_ASSERT(!node, "AVL minimum incorrectly has a predecessor"); 285.334 - 285.335 - UCX_TEST_END 285.336 - 285.337 - ucx_avl_free(tree); 285.338 -}
286.1 --- a/test/avl_tests.h Mon Dec 30 09:54:10 2019 +0100 286.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 286.3 @@ -1,49 +0,0 @@ 286.4 -/* 286.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 286.6 - * 286.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 286.8 - * 286.9 - * Redistribution and use in source and binary forms, with or without 286.10 - * modification, are permitted provided that the following conditions are met: 286.11 - * 286.12 - * 1. Redistributions of source code must retain the above copyright 286.13 - * notice, this list of conditions and the following disclaimer. 286.14 - * 286.15 - * 2. Redistributions in binary form must reproduce the above copyright 286.16 - * notice, this list of conditions and the following disclaimer in the 286.17 - * documentation and/or other materials provided with the distribution. 286.18 - * 286.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 286.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 286.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 286.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 286.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 286.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 286.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 286.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 286.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 286.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 286.29 - * POSSIBILITY OF SUCH DAMAGE. 286.30 - */ 286.31 - 286.32 -#ifndef AVL_TEST_H 286.33 -#define AVL_TEST_H 286.34 - 286.35 -#include <ucx/test.h> 286.36 -#include <ucx/avl.h> 286.37 - 286.38 -#ifdef __cplusplus 286.39 -extern "C" { 286.40 -#endif 286.41 - 286.42 -UCX_TEST(test_ucx_avl_put); 286.43 -UCX_TEST(test_ucx_avl_remove); 286.44 -UCX_TEST(test_ucx_avl_find); 286.45 -UCX_TEST(test_ucx_avl_traverse); 286.46 - 286.47 -#ifdef __cplusplus 286.48 -} 286.49 -#endif 286.50 - 286.51 -#endif /* AVL_TEST_H */ 286.52 -
287.1 --- a/test/buffer_tests.c Mon Dec 30 09:54:10 2019 +0100 287.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 287.3 @@ -1,738 +0,0 @@ 287.4 -/* 287.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 287.6 - * 287.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 287.8 - * 287.9 - * Redistribution and use in source and binary forms, with or without 287.10 - * modification, are permitted provided that the following conditions are met: 287.11 - * 287.12 - * 1. Redistributions of source code must retain the above copyright 287.13 - * notice, this list of conditions and the following disclaimer. 287.14 - * 287.15 - * 2. Redistributions in binary form must reproduce the above copyright 287.16 - * notice, this list of conditions and the following disclaimer in the 287.17 - * documentation and/or other materials provided with the distribution. 287.18 - * 287.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 287.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 287.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 287.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 287.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 287.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 287.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 287.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 287.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 287.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 287.29 - * POSSIBILITY OF SUCH DAMAGE. 287.30 - */ 287.31 - 287.32 -#include "buffer_tests.h" 287.33 -#include <stdint.h> 287.34 - 287.35 -UCX_TEST(test_ucx_buffer_new) { 287.36 - UcxBuffer *b = ucx_buffer_new(NULL, 16, UCX_BUFFER_AUTOEXTEND); 287.37 - UcxBuffer *b2 = ucx_buffer_new(NULL, 32, UCX_BUFFER_DEFAULT); 287.38 - UCX_TEST_BEGIN 287.39 - 287.40 - UCX_TEST_ASSERT(b->capacity==16, "wrong capacity"); 287.41 - UCX_TEST_ASSERT(b2->capacity==32, "wrong capacity"); 287.42 - 287.43 - UCX_TEST_ASSERT(b->size==0, "wrong size"); 287.44 - UCX_TEST_ASSERT(b2->size==0, "wrong size"); 287.45 - 287.46 - UCX_TEST_ASSERT(b->pos==0, "wrong position"); 287.47 - UCX_TEST_ASSERT(b2->pos==0, "wrong position"); 287.48 - 287.49 - UCX_TEST_ASSERT(b->flags==(UCX_BUFFER_AUTOEXTEND|UCX_BUFFER_AUTOFREE), 287.50 - "wrong flags for autoextending buffer"); 287.51 - UCX_TEST_ASSERT(b2->flags==UCX_BUFFER_AUTOFREE, 287.52 - "wrong flags for default bufer"); 287.53 - 287.54 - UCX_TEST_END 287.55 - ucx_buffer_free(b2); 287.56 - ucx_buffer_free(b); 287.57 -} 287.58 - 287.59 -UCX_TEST(test_ucx_buffer_new_prealloc) { 287.60 - char* test = (char*) malloc(16); 287.61 - UcxBuffer *b = ucx_buffer_new(test, 16, UCX_BUFFER_DEFAULT); 287.62 - UCX_TEST_BEGIN 287.63 - 287.64 - UCX_TEST_ASSERT(b->capacity==16, "wrong capacity"); 287.65 - UCX_TEST_ASSERT(b->size==0, "wrong size"); 287.66 - UCX_TEST_ASSERT(b->pos==0, "wrong position"); 287.67 - 287.68 - UCX_TEST_ASSERT(b->flags==0, "wrong flags - all should be cleared"); 287.69 - 287.70 - UCX_TEST_END 287.71 - free(test); 287.72 - ucx_buffer_free(b); 287.73 -} 287.74 - 287.75 -UCX_TEST(test_ucx_buffer_eof) { 287.76 - char *test = (char*)"0123456789ABCDEF"; 287.77 - UcxBuffer *b = ucx_buffer_new(test, 16, UCX_BUFFER_DEFAULT); 287.78 - UCX_TEST_BEGIN 287.79 - b->pos = 9; b->size = 10; 287.80 - UCX_TEST_ASSERT(!ucx_buffer_eof(b), "false positive"); 287.81 - b->pos = 10; b->size = 10; 287.82 - UCX_TEST_ASSERT(ucx_buffer_eof(b), "pos == size should be EOF"); 287.83 - b->pos = 11; b->size = 10; 287.84 - UCX_TEST_ASSERT(ucx_buffer_eof(b), "false negative"); 287.85 - UCX_TEST_END 287.86 - ucx_buffer_free(b); 287.87 -} 287.88 - 287.89 -UCX_TEST(test_ucx_buffer_seek_overflow) { 287.90 - UcxBuffer *b = ucx_buffer_new(NULL, 32, UCX_BUFFER_DEFAULT); 287.91 - b->size = 32; 287.92 - int r; 287.93 - 287.94 - UCX_TEST_BEGIN 287.95 - const size_t sizemax = (size_t)-1; 287.96 - size_t bigpos = sizemax - 5000; 287.97 - b->pos = bigpos; 287.98 - r = ucx_buffer_seek(b, 5016, SEEK_CUR); 287.99 - UCX_TEST_ASSERT(r != 0, "seek cur overflow"); 287.100 - UCX_TEST_ASSERT(b->pos == bigpos, 287.101 - "failed seek shall leave pos unchanged"); 287.102 - 287.103 - b->pos = 0; 287.104 - b->size = (sizemax >> 1) + 32; 287.105 - 287.106 - // we don't want to risk overflows in implicit constant casts 287.107 - const size_t bigoff_comp = (sizemax >> 1) - 16; 287.108 - off_t bigoff = (off_t)bigoff_comp; 287.109 - 287.110 - r = ucx_buffer_seek(b, -bigoff, SEEK_CUR); 287.111 - UCX_TEST_ASSERT(r != 0, "seek cur underflow"); 287.112 - UCX_TEST_ASSERT(b->pos == 0, 287.113 - "failed seek shall leave pos unchanged"); 287.114 - 287.115 - UCX_TEST_END 287.116 - 287.117 - ucx_buffer_free(b); 287.118 -} 287.119 - 287.120 -UCX_TEST(test_ucx_buffer_seek_invalid) { 287.121 - UcxBuffer *b = ucx_buffer_new(NULL, 32, UCX_BUFFER_DEFAULT); 287.122 - b->pos = 7; 287.123 - int r; 287.124 - 287.125 - UCX_TEST_BEGIN 287.126 - r = ucx_buffer_seek(b, 0, ~(SEEK_SET|SEEK_CUR|SEEK_END)); 287.127 - UCX_TEST_ASSERT(r != 0, "invalid whence shall fail"); 287.128 - UCX_TEST_ASSERT(b->pos == 7, 287.129 - "failed seek shall leave pos unchanged"); 287.130 - UCX_TEST_END 287.131 - 287.132 - ucx_buffer_free(b); 287.133 -} 287.134 - 287.135 -UCX_TEST(test_ucx_buffer_seek_oob) { 287.136 - UcxBuffer *b = ucx_buffer_new(NULL, 32, UCX_BUFFER_DEFAULT); 287.137 - b->size = 16; // less than capacity 287.138 - b->pos = 7; 287.139 - int r; 287.140 - 287.141 - UCX_TEST_BEGIN 287.142 - 287.143 - r = ucx_buffer_seek(b, -1, SEEK_SET); 287.144 - UCX_TEST_ASSERT(r != 0, "seek SET below bounds shall fail"); 287.145 - UCX_TEST_ASSERT(b->pos == 7, 287.146 - "failed seek shall leave pos unchanged"); 287.147 - 287.148 - r = ucx_buffer_seek(b, 16, SEEK_SET); 287.149 - UCX_TEST_ASSERT(r != 0, "seek SET above bounds shall fail"); 287.150 - UCX_TEST_ASSERT(b->pos == 7, 287.151 - "failed seek shall leave pos unchanged"); 287.152 - 287.153 - r = ucx_buffer_seek(b, -8, SEEK_CUR); 287.154 - UCX_TEST_ASSERT(r != 0, "seek CUR below bounds shall fail"); 287.155 - UCX_TEST_ASSERT(b->pos == 7, 287.156 - "failed seek shall leave pos unchanged"); 287.157 - 287.158 - r = ucx_buffer_seek(b, 9, SEEK_CUR); 287.159 - UCX_TEST_ASSERT(r != 0, "seek CUR above bounds shall fail"); 287.160 - UCX_TEST_ASSERT(b->pos == 7, 287.161 - "failed seek shall leave pos unchanged"); 287.162 - 287.163 - r = ucx_buffer_seek(b, -17, SEEK_END); 287.164 - UCX_TEST_ASSERT(r != 0, "seek END below bounds shall fail"); 287.165 - UCX_TEST_ASSERT(b->pos == 7, 287.166 - "failed seek shall leave pos unchanged"); 287.167 - 287.168 - r = ucx_buffer_seek(b, 1, SEEK_END); 287.169 - UCX_TEST_ASSERT(r != 0, "seek END above bounds shall fail"); 287.170 - UCX_TEST_ASSERT(b->pos == 7, 287.171 - "failed seek shall leave pos unchanged"); 287.172 - 287.173 - UCX_TEST_END 287.174 - 287.175 - ucx_buffer_free(b); 287.176 -} 287.177 - 287.178 -UCX_TEST(test_ucx_buffer_seek_set) { 287.179 - UcxBuffer *b = ucx_buffer_new(NULL, 32, UCX_BUFFER_DEFAULT); 287.180 - b->size = 16; 287.181 - int r; 287.182 - 287.183 - UCX_TEST_BEGIN 287.184 - 287.185 - r = ucx_buffer_seek(b, 5, SEEK_SET); 287.186 - UCX_TEST_ASSERT(r == 0, "seek SET+5 failed"); 287.187 - UCX_TEST_ASSERT(b->pos == 5, "seek SET+5 set wrong position"); 287.188 - 287.189 - 287.190 - r = ucx_buffer_seek(b, 10, SEEK_SET); 287.191 - UCX_TEST_ASSERT(r == 0, "seek SET+10 failed"); 287.192 - UCX_TEST_ASSERT(b->pos == 10, "seek SET+10 set wrong position"); 287.193 - 287.194 - UCX_TEST_END 287.195 - 287.196 - ucx_buffer_free(b); 287.197 -} 287.198 - 287.199 -UCX_TEST(test_ucx_buffer_seek_cur) { 287.200 - UcxBuffer *b = ucx_buffer_new(NULL, 32, UCX_BUFFER_DEFAULT); 287.201 - b->size = 16; 287.202 - int r; 287.203 - 287.204 - UCX_TEST_BEGIN 287.205 - 287.206 - b->pos = 7; 287.207 - r = ucx_buffer_seek(b, 5, SEEK_CUR); 287.208 - UCX_TEST_ASSERT(r == 0, "seek CUR+5 failed"); 287.209 - UCX_TEST_ASSERT(b->pos == 12, "seek CUR+5 set wrong position"); 287.210 - 287.211 - UCX_TEST_END 287.212 - 287.213 - ucx_buffer_free(b); 287.214 -} 287.215 - 287.216 -UCX_TEST(test_ucx_buffer_seek_end) { 287.217 - UcxBuffer *b = ucx_buffer_new(NULL, 32, UCX_BUFFER_DEFAULT); 287.218 - b->size = 16; 287.219 - int r; 287.220 - 287.221 - UCX_TEST_BEGIN 287.222 - 287.223 - r = ucx_buffer_seek(b, -5, SEEK_END); 287.224 - UCX_TEST_ASSERT(r == 0, "seek END-5 failed"); 287.225 - UCX_TEST_ASSERT(b->pos == 11, "seek END-5 set wrong position"); 287.226 - 287.227 - 287.228 - UCX_TEST_END 287.229 - 287.230 - ucx_buffer_free(b); 287.231 -} 287.232 - 287.233 -UCX_TEST(test_ucx_buffer_putc) { 287.234 - char *buffer = (char*) malloc(16); 287.235 - memset(buffer, 32, 16); 287.236 - 287.237 - UcxBuffer *b = ucx_buffer_new(buffer, 16, UCX_BUFFER_DEFAULT); 287.238 - b->size = b->capacity; 287.239 - 287.240 - UCX_TEST_BEGIN 287.241 - 287.242 - ucx_buffer_seek(b, 0, SEEK_SET); 287.243 - UCX_TEST_ASSERT(ucx_buffer_putc(b, '0'|~0xFF) == '0', 287.244 - "putc shall return (arg & 0xFF)"); 287.245 - ucx_buffer_putc(b, '0'); 287.246 - ucx_buffer_putc(b, '0'); 287.247 - 287.248 - UCX_TEST_ASSERT(b->pos == 3, "pos wrong after first 3 puts"); 287.249 - ucx_buffer_seek(b, 10, SEEK_CUR); 287.250 - 287.251 - ucx_buffer_putc(b, '0'); 287.252 - ucx_buffer_putc(b, '0'); 287.253 - ucx_buffer_putc(b, '0'); 287.254 - 287.255 - UCX_TEST_ASSERT(b->pos == 16, "pos wrong after last 3 puts"); 287.256 - 287.257 - UCX_TEST_ASSERT(!memcmp(b->space, "000 000", 16), 287.258 - "buffer content wrong") 287.259 - UCX_TEST_END 287.260 - ucx_buffer_free(b); 287.261 - free(buffer); 287.262 -} 287.263 - 287.264 -UCX_TEST(test_ucx_buffer_putc_oob) { 287.265 - UcxBuffer *b = ucx_buffer_new(NULL, 2, UCX_BUFFER_DEFAULT); 287.266 - 287.267 - UCX_TEST_BEGIN 287.268 - b->pos = b->size = b->capacity = 1; 287.269 - b->space[1] = 'X'; 287.270 - 287.271 - UCX_TEST_ASSERT(ucx_buffer_putc(b, 48) == EOF, "put shall return EOF " 287.272 - "when buffer is full and auto extend is disabled"); 287.273 - UCX_TEST_ASSERT(!memcmp(b->space, "\0X", 2), 287.274 - "wrong buffer content after failed putc"); 287.275 - 287.276 - UCX_TEST_END 287.277 - 287.278 - ucx_buffer_free(b); 287.279 -} 287.280 - 287.281 - 287.282 -UCX_TEST(test_ucx_buffer_putc_ae) { 287.283 - UcxBuffer *b = ucx_buffer_new(NULL, 2, UCX_BUFFER_AUTOEXTEND); 287.284 - ucx_buffer_putc(b, '0'); 287.285 - ucx_buffer_putc(b, '1'); 287.286 - 287.287 - UCX_TEST_BEGIN 287.288 - 287.289 - UCX_TEST_ASSERT(b->pos == 2, "pos wrong after first 2 puts"); 287.290 - UCX_TEST_ASSERT(b->size == 2, "size wrong after first 2 puts"); 287.291 - UCX_TEST_ASSERT(b->capacity == 2, "buffer erroneously extended"); 287.292 - UCX_TEST_ASSERT(!memcmp(b->space,"01", 2), "wrong content"); 287.293 - 287.294 - UCX_TEST_END 287.295 - 287.296 - ucx_buffer_free(b); 287.297 -} 287.298 - 287.299 -UCX_TEST(test_ucx_buffer_putc_oobae) { 287.300 - UcxBuffer *b = ucx_buffer_new(NULL, 2, UCX_BUFFER_AUTOEXTEND); 287.301 - ucx_buffer_putc(b, '0'); 287.302 - ucx_buffer_putc(b, '1'); 287.303 - 287.304 - UCX_TEST_BEGIN 287.305 - 287.306 - ucx_buffer_putc(b, 'a'); 287.307 - 287.308 - UCX_TEST_ASSERT(b->pos == 3, "pos wrong after put"); 287.309 - UCX_TEST_ASSERT(b->capacity == 4, "buffer not properly extended"); 287.310 - UCX_TEST_ASSERT(b->size == 3, "wrong buffer size"); 287.311 - 287.312 - UCX_TEST_ASSERT(!memcmp(b->space,"01a\0", 4), "wrong content"); 287.313 - 287.314 - UCX_TEST_END 287.315 - 287.316 - ucx_buffer_free(b); 287.317 -} 287.318 - 287.319 -UCX_TEST(test_ucx_buffer_putc_size) { 287.320 - UcxBuffer *b = ucx_buffer_new(NULL, 4, UCX_BUFFER_DEFAULT); 287.321 - 287.322 - UCX_TEST_BEGIN 287.323 - 287.324 - UCX_TEST_ASSERT(b->size == 0, "wrong initial size"); 287.325 - ucx_buffer_putc(b, 'a'); 287.326 - ucx_buffer_putc(b, 'b'); 287.327 - ucx_buffer_putc(b, 'c'); 287.328 - UCX_TEST_ASSERT(b->size == 3, "size does not increase"); 287.329 - ucx_buffer_seek(b, 1, SEEK_SET); 287.330 - ucx_buffer_putc(b, 'd'); 287.331 - UCX_TEST_ASSERT(b->size == 3, "size shall not decrease"); 287.332 - UCX_TEST_ASSERT(b->pos == 2, "wrong position after seek and putc"); 287.333 - 287.334 - UCX_TEST_END 287.335 - 287.336 - ucx_buffer_free(b); 287.337 -} 287.338 - 287.339 -UCX_TEST(test_ucx_buffer_getc) { 287.340 - char *buffer = (char*) malloc(16); 287.341 - memset(buffer, 32, 8); 287.342 - for (int i = 8; i < 16 ; i++) { 287.343 - buffer[i] = 40+i; 287.344 - } 287.345 - 287.346 - UcxBuffer *b = ucx_buffer_new(buffer, 16, UCX_BUFFER_DEFAULT); 287.347 - b->size = b->capacity; 287.348 - 287.349 - unsigned char ubuffer[] = {127, 128, 129, 130}; 287.350 - UcxBuffer *ub = ucx_buffer_new(ubuffer, 4, UCX_BUFFER_DEFAULT); 287.351 - ub->size = 4; 287.352 - 287.353 - UCX_TEST_BEGIN 287.354 - 287.355 - char rb[16]; 287.356 - for (size_t i = 0 ; i < 16 ; i++) { 287.357 - UCX_TEST_ASSERT(b->pos == i, "wrong position"); 287.358 - UCX_TEST_ASSERT(!ucx_buffer_eof(b), "EOF false positive"); 287.359 - rb[i] = ucx_buffer_getc(b); 287.360 - } 287.361 - UCX_TEST_ASSERT(memcmp(rb, " 01234567", 16) == 0, 287.362 - "read data incorrect"); 287.363 - 287.364 - UCX_TEST_ASSERT(ucx_buffer_eof(b), "EOF not set after last possible read"); 287.365 - UCX_TEST_ASSERT(b->pos == 16, "wrong position after EOF"); 287.366 - 287.367 - UCX_TEST_ASSERT(ucx_buffer_getc(b) == EOF, 287.368 - "out of bounds read does not return EOF"); 287.369 - UCX_TEST_ASSERT(b->pos == 16, "wrong position after out of bounds read"); 287.370 - 287.371 - int uc[5]; 287.372 - for(int i=0;i<5;i++) { 287.373 - uc[i] = ucx_buffer_getc(ub); 287.374 - } 287.375 - UCX_TEST_ASSERT(uc[0] == 127, "wrong unsigned value(0)"); 287.376 - UCX_TEST_ASSERT(uc[1] == 128, "wrong unsigned value(0)"); 287.377 - UCX_TEST_ASSERT(uc[2] == 129, "wrong unsigned value(0)"); 287.378 - UCX_TEST_ASSERT(uc[3] == 130, "wrong unsigned value(0)"); 287.379 - UCX_TEST_ASSERT(uc[4] == EOF, "EOF not set after last ub read"); 287.380 - 287.381 - UCX_TEST_END 287.382 - 287.383 - ucx_buffer_free(b); 287.384 - ucx_buffer_free(ub); 287.385 - free(buffer); 287.386 -} 287.387 - 287.388 -UCX_TEST(test_ucx_buffer_write) { 287.389 - char *buffer = (char*) malloc(32); 287.390 - memset(buffer, 0, 32); 287.391 - 287.392 - memset(buffer, 32, 8); 287.393 - for (int i = 8; i < 16 ; i++) { 287.394 - buffer[i] = 40+i; 287.395 - } 287.396 - 287.397 - UcxBuffer *b = ucx_buffer_new(buffer, 32, UCX_BUFFER_DEFAULT); 287.398 - int r; 287.399 - 287.400 - UCX_TEST_BEGIN 287.401 - b->pos = 4; 287.402 - r = ucx_buffer_write("test string", 1, 11, b); 287.403 - UCX_TEST_ASSERT(r == 11, "returned incorrect number of written bytes"); 287.404 - UCX_TEST_ASSERT(b->pos == 15, "incorrect position"); 287.405 - UCX_TEST_ASSERT(memcmp(buffer, " test string7\0\0", 18) == 0, 287.406 - "incorrect buffer content (test string)"); 287.407 - 287.408 - r = ucx_buffer_write(".", 1, 1, b); 287.409 - UCX_TEST_ASSERT(r == 1, "returned incorrect number of written elements"); 287.410 - UCX_TEST_ASSERT(b->pos == 16, "incorrect position"); 287.411 - 287.412 - int32_t testarr[4] = {0x09abcdef, 0x05fedcba, 0x01abefcd, 0x3cd07ab}; 287.413 - r = ucx_buffer_write(testarr, 4, 4, b); 287.414 - UCX_TEST_ASSERT(r = 4, "returned incorrect number of written elements"); 287.415 - UCX_TEST_ASSERT(b->pos == 32, "incorrect position"); 287.416 - 287.417 - char cmp[32]; 287.418 - memset(cmp, 0, 32); 287.419 - memcpy(cmp, " test string.", 16); 287.420 - int32_t *ptr = (int32_t*) (cmp+16); 287.421 - ptr[0] = testarr[0]; 287.422 - ptr[1] = testarr[1]; 287.423 - ptr[2] = testarr[2]; 287.424 - ptr[3] = testarr[3]; 287.425 - UCX_TEST_ASSERT(memcmp(buffer, cmp, 32) == 0, 287.426 - "incorrect buffer content (int array)"); 287.427 - 287.428 - UCX_TEST_END 287.429 - 287.430 - ucx_buffer_free(b); 287.431 - free(buffer); 287.432 -} 287.433 - 287.434 -UCX_TEST(test_ucx_buffer_write_oob) { 287.435 - char *buffer = (char*) malloc(32); 287.436 - memset(buffer, 0, 32); 287.437 - 287.438 - UcxBuffer *b = ucx_buffer_new(buffer, 15, UCX_BUFFER_DEFAULT); 287.439 - int r; 287.440 - 287.441 - UCX_TEST_BEGIN 287.442 - r = ucx_buffer_write("a very long string", 1, 18, b); 287.443 - UCX_TEST_ASSERT(r == 15, "incorrect number of written bytes"); 287.444 - UCX_TEST_ASSERT(memcmp(buffer, "a very long str\0\0\0", 18) == 0, 287.445 - "invalid buffer content (test string)"); 287.446 - 287.447 - b->size = b->pos = 0; 287.448 - int32_t intarr[4] = {0,-1,0,-1}; 287.449 - memset(buffer, 0, 32); 287.450 - 287.451 - r = ucx_buffer_write(intarr, 4, 4, b); 287.452 - UCX_TEST_ASSERT(r == 3, "incorrect number of written elements"); 287.453 - UCX_TEST_ASSERT(memcmp(buffer, 287.454 - "\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0", 16) == 0, 287.455 - "invalid buffer content (test string)"); 287.456 - 287.457 - UCX_TEST_END 287.458 - 287.459 - ucx_buffer_free(b); 287.460 - free(buffer); 287.461 -} 287.462 - 287.463 -UCX_TEST(test_ucx_buffer_write_ax) { 287.464 - char *buffer = (char*) malloc(16); 287.465 - memset(buffer, 0, 16); 287.466 - 287.467 - UcxBuffer *b = ucx_buffer_new(buffer, 16, 287.468 - UCX_BUFFER_AUTOEXTEND | UCX_BUFFER_AUTOFREE); 287.469 - int r; 287.470 - 287.471 - UCX_TEST_BEGIN 287.472 - 287.473 - const char* teststring = "this is way too much"; 287.474 - r = ucx_buffer_write((void*)teststring, 1, 20, b); 287.475 - buffer = (char*) b->space; /*autoextend enabled, we MUST retrieve pointer*/ 287.476 - UCX_TEST_ASSERT(r == 20, "not all characters written"); 287.477 - UCX_TEST_ASSERT(b->capacity == 32, "buffer not properly extended"); 287.478 - UCX_TEST_ASSERT(b->pos == 20, "position incorrect"); 287.479 - UCX_TEST_ASSERT(memcmp(buffer, 287.480 - "this is way too much\0\0\0\0\0\0\0\0\0\0\0\0", 32) == 0, 287.481 - "incorrect buffer content"); 287.482 - 287.483 - UCX_TEST_END 287.484 - 287.485 - ucx_buffer_free(b); 287.486 -} 287.487 - 287.488 -UCX_TEST(test_ucx_buffer_read) { 287.489 - UcxBuffer *b = ucx_buffer_new(NULL, 8, UCX_BUFFER_AUTOFREE); 287.490 - ucx_buffer_write("01234567", 1, 8, b); 287.491 - b->pos = 0; 287.492 - 287.493 - char buf[32]; 287.494 - memset(buf, 'X', 32); 287.495 - int r; 287.496 - 287.497 - UCX_TEST_BEGIN 287.498 - 287.499 - ucx_buffer_seek(b, 2, SEEK_SET); 287.500 - r = ucx_buffer_read(buf, 1, 2, b); 287.501 - UCX_TEST_ASSERT(r == 2, "wrong number of bytes read (2 items)"); 287.502 - UCX_TEST_ASSERT(buf[0] == '2' && buf[1] == '3' && buf[2] == 'X', 287.503 - "buffer incorrect after read"); 287.504 - UCX_TEST_ASSERT(b->pos == 4, "wrong position after read (2 items)"); 287.505 - 287.506 - UCX_TEST_END 287.507 - 287.508 - ucx_buffer_free(b); 287.509 -} 287.510 - 287.511 -UCX_TEST(test_ucx_buffer_read_oob) { 287.512 - UcxBuffer *b = ucx_buffer_new(NULL, 8, UCX_BUFFER_AUTOFREE); 287.513 - ucx_buffer_write("01234567", 1, 8, b); 287.514 - 287.515 - char buf[32]; 287.516 - memset(buf, 'X', 32); 287.517 - int r; 287.518 - 287.519 - UCX_TEST_BEGIN 287.520 - 287.521 - b->pos = 2; 287.522 - r = ucx_buffer_read(buf + 2, 1, 8, b); 287.523 - UCX_TEST_ASSERT(r == 6, "wrong number of bytes read (8 items)"); 287.524 - UCX_TEST_ASSERT(memcmp(buf, "XX234567XX", 10) == 0, 287.525 - "buffer incorrect after read"); 287.526 - UCX_TEST_ASSERT(b->pos == 8, 287.527 - "wrong position after read (8 items out of bound)"); 287.528 - 287.529 - b->pos = 0; 287.530 - memset(buf, 'X', 32); 287.531 - 287.532 - r = ucx_buffer_read(buf, 3, 3, b); 287.533 - 287.534 - UCX_TEST_ASSERT(r == 2, "wrong number of blocks read"); 287.535 - UCX_TEST_ASSERT(memcmp(buf, "012345XX", 8) == 0, 287.536 - "buffer incorrect after block out of bounds read"); 287.537 - 287.538 - r = ucx_buffer_read(buf+6, 1, 5, b); 287.539 - 287.540 - UCX_TEST_ASSERT(r == 2, "wrong number of remaining bytes read"); 287.541 - UCX_TEST_ASSERT(memcmp(buf, "01234567XX", 10) == 0, 287.542 - "buffer incorrect after remaining byte read"); 287.543 - 287.544 - UCX_TEST_END 287.545 - 287.546 - ucx_buffer_free(b); 287.547 -} 287.548 - 287.549 -UCX_TEST(test_ucx_buffer_extract) { 287.550 - char *buffer = (char*) malloc(16); 287.551 - strcpy(buffer, "this is a test!"); 287.552 - 287.553 - UcxBuffer *src = ucx_buffer_new(buffer, 16, UCX_BUFFER_AUTOFREE); 287.554 - src->size = 16; 287.555 - UcxBuffer *dst = ucx_buffer_extract(src, 5, 5, UCX_BUFFER_AUTOEXTEND); 287.556 - 287.557 - UCX_TEST_BEGIN 287.558 - UCX_TEST_ASSERT(dst != NULL, "ucx_buffer_extract returned NULL"); 287.559 - UCX_TEST_ASSERT(dst->flags == (UCX_BUFFER_AUTOEXTEND | UCX_BUFFER_AUTOFREE), 287.560 - "autofree flag shall be enforced"); 287.561 - UCX_TEST_ASSERT(dst->size == 5, "wrong size for new buffer"); 287.562 - UCX_TEST_ASSERT(dst->capacity == 5, "wrong capacity for new buffer"); 287.563 - UCX_TEST_ASSERT(dst->pos == 0, "wrong position for new buffer"); 287.564 - char rb[5]; 287.565 - ucx_buffer_read(rb, 1, 5, dst); 287.566 - UCX_TEST_ASSERT(memcmp(rb, "is a ", 5) == 0, 287.567 - "new buffer has incorrect content"); 287.568 - 287.569 - UCX_TEST_END 287.570 - 287.571 - ucx_buffer_free(dst); 287.572 - ucx_buffer_free(src); 287.573 -} 287.574 - 287.575 -UCX_TEST(test_ucx_buffer_extract_oob) { 287.576 - char *buffer = (char*) malloc(16); 287.577 - strcpy(buffer, "this is a test!"); 287.578 - 287.579 - UcxBuffer *src = ucx_buffer_new(buffer, 16, UCX_BUFFER_AUTOFREE); 287.580 - src->size = 16; 287.581 - 287.582 - UCX_TEST_BEGIN 287.583 - 287.584 - UCX_TEST_ASSERT(ucx_buffer_extract(src, 5, 0, UCX_BUFFER_DEFAULT) == NULL, 287.585 - "extract shall fail on zero length"); 287.586 - UCX_TEST_ASSERT(ucx_buffer_extract(src, 10, 10, UCX_BUFFER_DEFAULT) == NULL, 287.587 - "extract shall fail on invalid bounds (size exceeds limits)"); 287.588 - UCX_TEST_ASSERT(ucx_buffer_extract(src, 20, -7, UCX_BUFFER_DEFAULT) == NULL, 287.589 - "extract shall fail on invalid bounds (start exceeds limits)"); 287.590 - 287.591 - UCX_TEST_END 287.592 - 287.593 - ucx_buffer_free(src); 287.594 -} 287.595 - 287.596 -UCX_TEST(test_ucx_buffer_extract_overflow) { 287.597 - char *buffer = (char*) malloc(16); 287.598 - strcpy(buffer, "this is a test!"); 287.599 - 287.600 - UcxBuffer *src = ucx_buffer_new(buffer, 16, UCX_BUFFER_AUTOFREE); 287.601 - src->size = 16; 287.602 - 287.603 - UCX_TEST_BEGIN 287.604 - 287.605 - UCX_TEST_ASSERT(ucx_buffer_extract(src, 5, (size_t)-4, 287.606 - UCX_BUFFER_DEFAULT) == NULL, "extract shall fail on integer overflow"); 287.607 - 287.608 - UCX_TEST_END 287.609 - 287.610 - ucx_buffer_free(src); 287.611 -} 287.612 - 287.613 -UCX_TEST(test_ucx_buffer_extend) { 287.614 - 287.615 - UcxBuffer *b = ucx_buffer_new(NULL, 10, UCX_BUFFER_DEFAULT); 287.616 - 287.617 - UCX_TEST_BEGIN 287.618 - 287.619 - UCX_TEST_ASSERT(ucx_buffer_extend(b, 15) == 0, "shall return 0 on success"); 287.620 - UCX_TEST_ASSERT(b->capacity = 40, "wrong capacity"); 287.621 - UCX_TEST_ASSERT((b->size == 0 && b->pos == 0), 287.622 - "pos and size shall remain unchanged"); 287.623 - 287.624 - UCX_TEST_ASSERT(ucx_buffer_extend(b, (size_t) - 61) != 0, 287.625 - "shall fail and return a non-zero value on overflow"); 287.626 - 287.627 - UCX_TEST_END 287.628 - 287.629 - ucx_buffer_free(b); 287.630 -} 287.631 - 287.632 -UCX_TEST(test_ucx_buffer_shl) { 287.633 - 287.634 - const char* hw = "Shift the World!"; 287.635 - 287.636 - UcxBuffer *b = ucx_buffer_new(NULL, 20, UCX_BUFFER_DEFAULT); 287.637 - ucx_buffer_puts(b, hw); 287.638 - b->pos = 5; 287.639 - 287.640 - UCX_TEST_BEGIN 287.641 - char* expected; 287.642 - 287.643 - ucx_buffer_shift_left(b, 2); 287.644 - expected = "ift the World!"; 287.645 - 287.646 - UCX_TEST_ASSERT(b->pos == 3, "position after normal shl wrong"); 287.647 - UCX_TEST_ASSERT(b->size == strlen(expected), "size after normal shl wrong"); 287.648 - UCX_TEST_ASSERT(!memcmp(b->space, expected, b->size), 287.649 - "contents after normal shl wrong"); 287.650 - 287.651 - 287.652 - ucx_buffer_shift_left(b, 5); 287.653 - expected = "he World!"; 287.654 - 287.655 - UCX_TEST_ASSERT(b->pos == 0, "position after overshift left wrong"); 287.656 - UCX_TEST_ASSERT(b->size == strlen(expected), 287.657 - "size after overshift left wrong"); 287.658 - UCX_TEST_ASSERT(!memcmp(b->space, expected, b->size), 287.659 - "contents after overshift left wrong"); 287.660 - 287.661 - ucx_buffer_shift_left(b, 10); 287.662 - UCX_TEST_ASSERT(b->pos == 0, "position after 'shl everything away' wrong"); 287.663 - UCX_TEST_ASSERT(b->size == 0, "size after 'shl everything away' wrong"); 287.664 - 287.665 - UCX_TEST_END 287.666 - 287.667 - ucx_buffer_free(b); 287.668 -} 287.669 - 287.670 -UCX_TEST(test_ucx_buffer_shr) { 287.671 - 287.672 - const char* hw = "Shift the World!"; 287.673 - 287.674 - UcxBuffer *b = ucx_buffer_new(NULL, 20, UCX_BUFFER_DEFAULT); 287.675 - ucx_buffer_puts(b, hw); 287.676 - b->pos = 12; 287.677 - 287.678 - UCX_TEST_BEGIN 287.679 - char* expected; 287.680 - 287.681 - ucx_buffer_shift_right(b, 2); 287.682 - expected = "ShShift the World!"; 287.683 - 287.684 - UCX_TEST_ASSERT(b->pos == 14, "position after normal shr wrong"); 287.685 - UCX_TEST_ASSERT(b->size == strlen(expected), "size after normal shr wrong"); 287.686 - UCX_TEST_ASSERT(!memcmp(b->space, expected, b->size), 287.687 - "contents after normal shr wrong"); 287.688 - 287.689 - 287.690 - ucx_buffer_shift_right(b, 5); 287.691 - expected = "ShShiShShift the Wor"; 287.692 - UCX_TEST_ASSERT(strlen(expected) == b->capacity, 287.693 - "Test data is wrong, please fix the test."); 287.694 - 287.695 - UCX_TEST_ASSERT(b->pos == 19, 287.696 - "position after overshift right w/o auto-extend wrong"); 287.697 - UCX_TEST_ASSERT(b->size == 20, 287.698 - "size after overshift right w/o auto-extend wrong"); 287.699 - UCX_TEST_ASSERT(b->capacity == 20, 287.700 - "capacity after overshift right w/o auto-extend wrong"); 287.701 - UCX_TEST_ASSERT(!memcmp(b->space, expected, b->size), 287.702 - "contents after overshift right w/o auto-extend wrong"); 287.703 - 287.704 - ucx_buffer_shift_right(b, 15); 287.705 - UCX_TEST_ASSERT(b->pos == b->capacity, "position after 'shr to eof' wrong"); 287.706 - UCX_TEST_ASSERT(b->size == b->capacity, "size after 'shr to eof' wrong"); 287.707 - UCX_TEST_ASSERT(ucx_buffer_eof(b), "buffer not eof after 'shr to eof'"); 287.708 - 287.709 - UCX_TEST_END 287.710 - 287.711 - ucx_buffer_free(b); 287.712 -} 287.713 - 287.714 -UCX_TEST(test_ucx_buffer_shr_ax) { 287.715 - 287.716 - const char* hw = "Shift the World!"; 287.717 - 287.718 - UcxBuffer *b = ucx_buffer_new(NULL, 20, UCX_BUFFER_AUTOEXTEND); 287.719 - ucx_buffer_puts(b, hw); 287.720 - b->pos = 12; 287.721 - 287.722 - UCX_TEST_BEGIN 287.723 - 287.724 - const char* expected = "Shift the Shift the World!"; 287.725 - 287.726 - ucx_buffer_shift_right(b, 10); 287.727 - UCX_TEST_ASSERT(b->pos == 22, "position after shr w/ auto-extend wrong"); 287.728 - UCX_TEST_ASSERT(b->size == strlen(expected), 287.729 - "size after shr w/ auto-extend wrong"); 287.730 - UCX_TEST_ASSERT(b->capacity >= b->size, 287.731 - "auto-extension of capacity after shr w/ auto-extend failed"); 287.732 - UCX_TEST_ASSERT(!ucx_buffer_eof(b), 287.733 - "buffer should not be eof after shr w/ auto-extend"); 287.734 - UCX_TEST_ASSERT(!memcmp(b->space, expected, b->size), 287.735 - "contents wrong after shr w/ auto-extend"); 287.736 - 287.737 - UCX_TEST_END 287.738 - 287.739 - ucx_buffer_free(b); 287.740 -} 287.741 -
288.1 --- a/test/buffer_tests.h Mon Dec 30 09:54:10 2019 +0100 288.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 288.3 @@ -1,73 +0,0 @@ 288.4 -/* 288.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 288.6 - * 288.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 288.8 - * 288.9 - * Redistribution and use in source and binary forms, with or without 288.10 - * modification, are permitted provided that the following conditions are met: 288.11 - * 288.12 - * 1. Redistributions of source code must retain the above copyright 288.13 - * notice, this list of conditions and the following disclaimer. 288.14 - * 288.15 - * 2. Redistributions in binary form must reproduce the above copyright 288.16 - * notice, this list of conditions and the following disclaimer in the 288.17 - * documentation and/or other materials provided with the distribution. 288.18 - * 288.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 288.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 288.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 288.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 288.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 288.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 288.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 288.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 288.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 288.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 288.29 - * POSSIBILITY OF SUCH DAMAGE. 288.30 - */ 288.31 - 288.32 -#ifndef BUFFER_TEST_H 288.33 -#define BUFFER_TEST_H 288.34 - 288.35 -#include <ucx/test.h> 288.36 -#include <ucx/buffer.h> 288.37 - 288.38 -#ifdef __cplusplus 288.39 -extern "C" { 288.40 -#endif 288.41 - 288.42 -UCX_TEST(test_ucx_buffer_eof); 288.43 -UCX_TEST(test_ucx_buffer_seek_set); 288.44 -UCX_TEST(test_ucx_buffer_seek_end); 288.45 -UCX_TEST(test_ucx_buffer_seek_cur); 288.46 -UCX_TEST(test_ucx_buffer_seek_oob); 288.47 -UCX_TEST(test_ucx_buffer_seek_invalid); 288.48 -UCX_TEST(test_ucx_buffer_seek_overflow); 288.49 -UCX_TEST(test_ucx_buffer_putc); 288.50 -UCX_TEST(test_ucx_buffer_putc_ae); 288.51 -UCX_TEST(test_ucx_buffer_putc_oob); 288.52 -UCX_TEST(test_ucx_buffer_putc_oobae); 288.53 -UCX_TEST(test_ucx_buffer_putc_size); 288.54 -UCX_TEST(test_ucx_buffer_new); 288.55 -UCX_TEST(test_ucx_buffer_new_prealloc); 288.56 -UCX_TEST(test_ucx_buffer_getc); 288.57 -UCX_TEST(test_ucx_buffer_read); 288.58 -UCX_TEST(test_ucx_buffer_read_oob); 288.59 -UCX_TEST(test_ucx_buffer_extract); 288.60 -UCX_TEST(test_ucx_buffer_extract_oob); 288.61 -UCX_TEST(test_ucx_buffer_extract_overflow); 288.62 -UCX_TEST(test_ucx_buffer_extend); 288.63 -UCX_TEST(test_ucx_buffer_write); 288.64 -UCX_TEST(test_ucx_buffer_write_oob); 288.65 -UCX_TEST(test_ucx_buffer_write_ax); 288.66 -UCX_TEST(test_ucx_buffer_shl); 288.67 -UCX_TEST(test_ucx_buffer_shr); 288.68 -UCX_TEST(test_ucx_buffer_shr_ax); 288.69 - 288.70 - 288.71 -#ifdef __cplusplus 288.72 -} 288.73 -#endif 288.74 - 288.75 -#endif /* BUFFER_TEST_H */ 288.76 -
289.1 --- a/test/list_tests.c Mon Dec 30 09:54:10 2019 +0100 289.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 289.3 @@ -1,496 +0,0 @@ 289.4 -/* 289.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 289.6 - * 289.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 289.8 - * 289.9 - * Redistribution and use in source and binary forms, with or without 289.10 - * modification, are permitted provided that the following conditions are met: 289.11 - * 289.12 - * 1. Redistributions of source code must retain the above copyright 289.13 - * notice, this list of conditions and the following disclaimer. 289.14 - * 289.15 - * 2. Redistributions in binary form must reproduce the above copyright 289.16 - * notice, this list of conditions and the following disclaimer in the 289.17 - * documentation and/or other materials provided with the distribution. 289.18 - * 289.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 289.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 289.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 289.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 289.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 289.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 289.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 289.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 289.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 289.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 289.29 - * POSSIBILITY OF SUCH DAMAGE. 289.30 - */ 289.31 - 289.32 -#include "list_tests.h" 289.33 -#include <ucx/utils.h> 289.34 - 289.35 -UCX_TEST(test_ucx_list_append) { 289.36 - UcxList *list, *first; 289.37 - list = first = ucx_list_append(NULL, (void*)"Hello"); 289.38 - UCX_TEST_BEGIN 289.39 - 289.40 - UCX_TEST_ASSERT(strncmp((const char*)list->data, "Hello", 5) == 0, 289.41 - "failed"); 289.42 - 289.43 - list = ucx_list_append(list, (void*)" World!"); 289.44 - 289.45 - UCX_TEST_ASSERT(list == first, "does not return first element"); 289.46 - UCX_TEST_ASSERT(strncmp((const char*)list->next->data, " World!", 7) == 0, 289.47 - "failed"); 289.48 - UCX_TEST_ASSERT(list->next->prev == list, "failed"); 289.49 - UCX_TEST_ASSERT(list->next->next == NULL, "failed"); 289.50 - UCX_TEST_END 289.51 - 289.52 - ucx_list_free(list); 289.53 -} 289.54 - 289.55 -UCX_TEST(test_ucx_list_prepend) { 289.56 - UcxList *list, *last; 289.57 - list = last = ucx_list_prepend(NULL, (void*)" World!"); 289.58 - UCX_TEST_BEGIN 289.59 - 289.60 - list = ucx_list_prepend(list, (void*)"Hello"); 289.61 - 289.62 - UCX_TEST_ASSERT(strncmp((const char*)list->data, "Hello", 5) == 0, 289.63 - "failed"); 289.64 - UCX_TEST_ASSERT(strncmp((const char*)list->next->data, " World!", 7) == 0, 289.65 - "failed"); 289.66 - UCX_TEST_ASSERT(list == last->prev, "does not return first element"); 289.67 - UCX_TEST_ASSERT(list->next->next == NULL, "failed"); 289.68 - UCX_TEST_ASSERT(list->prev == NULL, "failed"); 289.69 - 289.70 - UCX_TEST_END 289.71 - ucx_list_free(list); 289.72 -} 289.73 - 289.74 -UCX_TEST(test_ucx_list_equals) { 289.75 - const char *hello = "Hello"; 289.76 - const char *world = " World!"; 289.77 - UcxList *list = ucx_list_append(NULL, (void*)hello); 289.78 - list = ucx_list_append(list, (void*)world); 289.79 - UcxList *list2 = ucx_list_prepend(NULL, (void*)world); 289.80 - list2 = ucx_list_prepend(list2, (void*)hello); 289.81 - UcxList *list3 = ucx_list_prepend(NULL, (void*)" Welt!"); 289.82 - list3 = ucx_list_prepend(list3, (void*)"Hallo"); 289.83 - UcxList *list4 = ucx_list_prepend(NULL, (void*)" World!"); 289.84 - list4 = ucx_list_prepend(list4, (void*)"Hello"); 289.85 - UCX_TEST_BEGIN 289.86 - 289.87 - UCX_TEST_ASSERT(ucx_list_equals(list, list4, ucx_cmp_str, NULL), "failed"); 289.88 - UCX_TEST_ASSERT(!ucx_list_equals(list, list3, ucx_cmp_str, NULL), "failed"); 289.89 - UCX_TEST_ASSERT(ucx_list_equals(list, list2, NULL, NULL), "failed"); 289.90 - 289.91 - UCX_TEST_END 289.92 - ucx_list_free(list4); 289.93 - ucx_list_free(list3); 289.94 - ucx_list_free(list2); 289.95 - ucx_list_free(list); 289.96 -} 289.97 - 289.98 -UCX_TEST(test_ucx_list_concat) { 289.99 - UcxList *list = ucx_list_append(NULL, (void*)"Hello"); 289.100 - list = ucx_list_append(list, (void*)" my "); 289.101 - UcxList *list2 = ucx_list_prepend(NULL, (void*)" World!"); 289.102 - list2 = ucx_list_prepend(list2, (void*)" sweet "); 289.103 - UCX_TEST_BEGIN 289.104 - 289.105 - list = ucx_list_concat(list, list2); 289.106 - list = ucx_list_concat(list, NULL); 289.107 - list = ucx_list_concat(NULL, list); 289.108 - 289.109 - UCX_TEST_ASSERT(!strncmp((const char*)list->data, "Hello", 5), 289.110 - "failed"); 289.111 - UCX_TEST_ASSERT(!strncmp((const char*)list->next->data, " my ", 4), 289.112 - "failed"); 289.113 - UCX_TEST_ASSERT(!strncmp((const char*)list->next->next->data, " sweet ", 7), 289.114 - "failed"); 289.115 - UCX_TEST_ASSERT(!strncmp((const char*)ucx_list_last(list)->data, 289.116 - " World!", 7), "failed"); 289.117 - 289.118 - UCX_TEST_ASSERT(list->prev == NULL, "failed"); 289.119 - 289.120 - UCX_TEST_END 289.121 - // don't free list2, as it is freed by freeing list; 289.122 - ucx_list_free(list); 289.123 -} 289.124 - 289.125 -UCX_TEST(test_ucx_list_size) { 289.126 - UcxList *list = ucx_list_append(NULL, (void*)"This "); 289.127 - list = ucx_list_append(list, (void*)"list "); 289.128 - list = ucx_list_append(list, (void*)"has "); 289.129 - list = ucx_list_append(list, (void*)"size "); 289.130 - list = ucx_list_append(list, (void*)"5!"); 289.131 - 289.132 - UCX_TEST_BEGIN 289.133 - 289.134 - UCX_TEST_ASSERT(ucx_list_size(list) == 5, "failed"); 289.135 - list = ucx_list_remove(list, ucx_list_get(list, 2)); 289.136 - UCX_TEST_ASSERT(ucx_list_size(list) == 4, "failed after removal"); 289.137 - 289.138 - UCX_TEST_END 289.139 - ucx_list_free(list); 289.140 -} 289.141 - 289.142 -UCX_TEST(test_ucx_list_first) { 289.143 - UcxList *list = ucx_list_append(NULL, (void*)"Find "); 289.144 - list = ucx_list_append(list, (void*)"the "); 289.145 - list = ucx_list_append(list, (void*)"first!"); 289.146 - 289.147 - UCX_TEST_BEGIN 289.148 - 289.149 - const char* first = (const char*) (ucx_list_first(list)->data); 289.150 - 289.151 - UCX_TEST_ASSERT(strncmp(first, "Find ", 5) == 0, "failed"); 289.152 - UCX_TEST_ASSERT(ucx_list_first(list->next->next) == list, "failed"); 289.153 - UCX_TEST_ASSERT(!ucx_list_first(NULL), 289.154 - "does not return NULL on an empty list"); 289.155 - 289.156 - UCX_TEST_END 289.157 - ucx_list_free(list); 289.158 -} 289.159 - 289.160 -UCX_TEST(test_ucx_list_last) { 289.161 - UcxList *list = ucx_list_append(NULL, (void*)"Find "); 289.162 - list = ucx_list_append(list, (void*)"the "); 289.163 - list = ucx_list_append(list, (void*)"last!"); 289.164 - 289.165 - UCX_TEST_BEGIN 289.166 - 289.167 - const char* last = (const char*) (ucx_list_last(list->next->next)->data); 289.168 - 289.169 - UCX_TEST_ASSERT(strncmp(last, "last!", 5) == 0, "failed"); 289.170 - UCX_TEST_ASSERT(ucx_list_last(list) == list->next->next, "failed"); 289.171 - UCX_TEST_ASSERT(!ucx_list_last(NULL), 289.172 - "does not return NULL on an empty list"); 289.173 - 289.174 - UCX_TEST_END 289.175 - ucx_list_free(list); 289.176 -} 289.177 - 289.178 -UCX_TEST(test_ucx_list_get) { 289.179 - UcxList *list = ucx_list_append(NULL, (void*)"Find "); 289.180 - list = ucx_list_append(list, (void*)"the "); 289.181 - list = ucx_list_append(list, (void*)"mid!"); 289.182 - 289.183 - UCX_TEST_BEGIN 289.184 - 289.185 - const char* first = (const char*) (ucx_list_get(list, 0)->data); 289.186 - const char* mid = (const char*) (ucx_list_get(list, 1)->data); 289.187 - const char* last = (const char*) (ucx_list_get(list, 2)->data); 289.188 - 289.189 - UCX_TEST_ASSERT(strncmp(first, "Find ", 5) == 0, "failed"); 289.190 - UCX_TEST_ASSERT(strncmp(mid, "the ", 4) == 0, "failed"); 289.191 - UCX_TEST_ASSERT(strncmp(last, "mid!", 4) == 0, "failed"); 289.192 - UCX_TEST_ASSERT(!ucx_list_get(list, -1), "out of bounds (neg)"); 289.193 - UCX_TEST_ASSERT(!ucx_list_get(list, 3), "out of bounds"); 289.194 - UCX_TEST_ASSERT(!ucx_list_get(NULL, 0), "empty list"); 289.195 - 289.196 - UCX_TEST_END 289.197 - ucx_list_free(list); 289.198 -} 289.199 - 289.200 -UCX_TEST(test_ucx_list_indexof) { 289.201 - UcxList *list = ucx_list_append(NULL, (void*)"Find "); 289.202 - list = ucx_list_append(list, (void*)"the "); 289.203 - list = ucx_list_append(list, (void*)"mid!"); 289.204 - 289.205 - UCX_TEST_BEGIN 289.206 - 289.207 - UCX_TEST_ASSERT(ucx_list_indexof(list, list) == 0, "failed"); 289.208 - UCX_TEST_ASSERT(ucx_list_indexof(list, list->next) == 1, "failed"); 289.209 - UCX_TEST_ASSERT(ucx_list_indexof(list, ucx_list_get(list, 2)) == 2, 289.210 - "failed"); 289.211 - 289.212 - UcxList *otherlist = ucx_list_append(NULL, (void*) "the "); 289.213 - UCX_TEST_ASSERT(ucx_list_indexof(list, otherlist) == -1, "failed"); 289.214 - UCX_TEST_ASSERT(ucx_list_indexof(NULL, otherlist) == -1, "empty list"); 289.215 - 289.216 - ucx_list_free(otherlist); 289.217 - 289.218 - UCX_TEST_END 289.219 - ucx_list_free(list); 289.220 -} 289.221 - 289.222 -UCX_TEST(test_ucx_list_find) { 289.223 - const char* teststr = "string!"; 289.224 - UcxList *l = ucx_list_append(NULL, (void*)"find "); 289.225 - l = ucx_list_append(l, (void*)"some "); 289.226 - l = ucx_list_append(l, (void*)teststr); 289.227 - 289.228 - UCX_TEST_BEGIN 289.229 - 289.230 - UCX_TEST_ASSERT(ucx_list_find(l,(void*)"some ",ucx_cmp_str,NULL) == 1, 289.231 - "doesn't find string"); 289.232 - UCX_TEST_ASSERT(ucx_list_find(l,(void*)"a",ucx_cmp_str,NULL) == -1, 289.233 - "finds non-existing string"); 289.234 - 289.235 - UCX_TEST_ASSERT(ucx_list_find(l,(void*)teststr,NULL,NULL) == 2, 289.236 - "doesn't find integer without cmp_func"); 289.237 - 289.238 - UCX_TEST_ASSERT(ucx_list_find(NULL, (void*)"some ",ucx_cmp_str,NULL) == -1, 289.239 - "empty list"); 289.240 - 289.241 - UCX_TEST_END 289.242 - ucx_list_free(l); 289.243 -} 289.244 - 289.245 -UCX_TEST(test_ucx_list_contains) { 289.246 - UcxList *l = ucx_list_append(NULL, (void*)"Contains "); 289.247 - l = ucx_list_append(l, (void*)"a "); 289.248 - l = ucx_list_append(l, (void*)"string!"); 289.249 - 289.250 - UCX_TEST_BEGIN 289.251 - 289.252 - UCX_TEST_ASSERT(ucx_list_contains(l,(void*)"a ",ucx_cmp_str,NULL), 289.253 - "false negative"); 289.254 - UCX_TEST_ASSERT(!ucx_list_contains(l,(void*)"a",ucx_cmp_str,NULL), 289.255 - "false positive"); 289.256 - 289.257 - UCX_TEST_END 289.258 - ucx_list_free(l); 289.259 -} 289.260 - 289.261 -UCX_TEST(test_ucx_list_remove) { 289.262 - UcxList *list = ucx_list_append(NULL, (void*)"Hello"); 289.263 - list = ucx_list_append(list, (void*)"fucking"); 289.264 - list = ucx_list_append(list, (void*)"World!"); 289.265 - 289.266 - UcxList *list2 = ucx_list_append(NULL, (void*)"A"); 289.267 - list2 = ucx_list_append(list2, (void*)"B"); 289.268 - list2 = ucx_list_append(list2, (void*)"C"); 289.269 - list2 = ucx_list_append(list2, (void*)"D"); 289.270 - list2 = ucx_list_append(list2, (void*)"E"); 289.271 - list2 = ucx_list_append(list2, (void*)"F"); 289.272 - list2 = ucx_list_append(list2, (void*)"G"); 289.273 - 289.274 - UCX_TEST_BEGIN 289.275 - 289.276 - list = ucx_list_remove(list, ucx_list_get(list, 1)); 289.277 - 289.278 - UCX_TEST_ASSERT(strncmp((const char*)list->data, "Hello", 5) == 0, 289.279 - "failed"); 289.280 - UCX_TEST_ASSERT(strncmp((const char*)list->next->data, "World!", 7) == 0, 289.281 - "failed"); 289.282 - UCX_TEST_ASSERT(list->next->next == NULL, "failed"); 289.283 - 289.284 - // remove first element: B, C, D, E, F, G 289.285 - list2 = ucx_list_remove(list2, list2); 289.286 - 289.287 - UCX_TEST_ASSERT(ucx_list_size(list2) == 6, "list2 has wrong size"); 289.288 - UCX_TEST_ASSERT(strncmp((const char*)list2->data, "B", 1) == 0, 289.289 - "wrong first element"); 289.290 - UCX_TEST_ASSERT(strncmp((const char*)ucx_list_get(list2, 5)->data, "G", 1) 289.291 - == 0, "wrong last element"); 289.292 - 289.293 - // remove second element: B, D, E, F, G 289.294 - list2 = ucx_list_remove(list2, list2->next); 289.295 - 289.296 - UCX_TEST_ASSERT(ucx_list_size(list2) == 5, "list2 has wrong size"); 289.297 - UCX_TEST_ASSERT(strncmp((const char*)list2->next->data, "D", 1) == 0, 289.298 - "wrong second element"); 289.299 - 289.300 - UcxList *last = ucx_list_get(list2, 4); 289.301 - list2 = ucx_list_remove(list2, last->prev); 289.302 - 289.303 - UCX_TEST_ASSERT(ucx_list_size(list2) == 4, "list2 has wrong size"); 289.304 - UCX_TEST_ASSERT(strncmp((const char*)last->prev->data, "E", 1) == 0, 289.305 - "wrong element"); 289.306 - 289.307 - // remove last element: B, D, E, F 289.308 - list2 = ucx_list_remove(list2, last); 289.309 - UCX_TEST_ASSERT(ucx_list_size(list2) == 3, "list2 has wrong size"); 289.310 - UCX_TEST_ASSERT(strncmp((const char*)ucx_list_get(list2, 2)->data, "E", 1) 289.311 - == 0, "wrong last element"); 289.312 - 289.313 - UCX_TEST_ASSERT(strncmp((const char*)list2->data, "B", 1) == 0, 289.314 - "wrong element"); 289.315 - 289.316 - list2 = ucx_list_remove(list2, list2); 289.317 - UCX_TEST_ASSERT(ucx_list_size(list2) == 2, "list2 has wrong size"); 289.318 - list2 = ucx_list_remove(list2, list2); 289.319 - UCX_TEST_ASSERT(ucx_list_size(list2) == 1, "list2 has wrong size"); 289.320 - list2 = ucx_list_remove(list2, list2); 289.321 - UCX_TEST_ASSERT(list2 == NULL, "list2 is not null"); 289.322 - 289.323 - UCX_TEST_END 289.324 - ucx_list_free(list); 289.325 -} 289.326 - 289.327 -UCX_TEST(test_ucx_list_clone) { 289.328 - 289.329 - char *hello = (char*)malloc(6); 289.330 - char *world = (char*)malloc(8); 289.331 - 289.332 - memcpy(hello, "Hello", 6); 289.333 - memcpy(world, " World!", 8); 289.334 - 289.335 - UcxList *list = ucx_list_append(NULL, hello); 289.336 - list = ucx_list_append(list, world); 289.337 - 289.338 - UcxList *copy = ucx_list_clone(list, ucx_strcpy, NULL); 289.339 - UCX_TEST_BEGIN 289.340 - 289.341 - UCX_TEST_ASSERT(ucx_list_equals(list, copy, ucx_cmp_str, NULL), "failed"); 289.342 - UCX_TEST_ASSERT(hello != copy->data, "first element is no copy"); 289.343 - UCX_TEST_ASSERT(world != copy->next->data, "second element is no copy"); 289.344 - 289.345 - UCX_TEST_END 289.346 - 289.347 - ucx_list_free_content(copy, free); 289.348 - 289.349 - free(world); 289.350 - free(hello); 289.351 - ucx_list_free(list); 289.352 - ucx_list_free(copy); 289.353 -} 289.354 - 289.355 -UCX_TEST(test_ucx_list_sort) { 289.356 - UcxList *list = ucx_list_append(NULL, (void*)"this"); 289.357 - list = ucx_list_append(list, (void*)"is"); 289.358 - list = ucx_list_append(list, (void*)"a"); 289.359 - list = ucx_list_append(list, (void*)"test"); 289.360 - list = ucx_list_append(list, (void*)"for"); 289.361 - list = ucx_list_append(list, (void*)"partial"); 289.362 - list = ucx_list_append(list, (void*)"correctness"); 289.363 - list = ucx_list_append(list, (void*)"of"); 289.364 - list = ucx_list_append(list, (void*)"the"); 289.365 - list = ucx_list_append(list, (void*)"sort"); 289.366 - list = ucx_list_append(list, (void*)"function"); 289.367 - list = ucx_list_append(list, (void*)"that"); 289.368 - list = ucx_list_append(list, (void*)"shall"); 289.369 - list = ucx_list_append(list, (void*)"pass"); 289.370 - list = ucx_list_append(list, (void*)"this"); 289.371 - list = ucx_list_append(list, (void*)"test"); 289.372 - 289.373 - UcxList *expected = ucx_list_append(NULL, (void*)"a"); 289.374 - expected = ucx_list_append(expected, (void*)"correctness"); 289.375 - expected = ucx_list_append(expected, (void*)"for"); 289.376 - expected = ucx_list_append(expected, (void*)"function"); 289.377 - expected = ucx_list_append(expected, (void*)"is"); 289.378 - expected = ucx_list_append(expected, (void*)"of"); 289.379 - expected = ucx_list_append(expected, (void*)"partial"); 289.380 - expected = ucx_list_append(expected, (void*)"pass"); 289.381 - expected = ucx_list_append(expected, (void*)"shall"); 289.382 - expected = ucx_list_append(expected, (void*)"sort"); 289.383 - expected = ucx_list_append(expected, (void*)"test"); 289.384 - expected = ucx_list_append(expected, (void*)"test"); 289.385 - expected = ucx_list_append(expected, (void*)"that"); 289.386 - expected = ucx_list_append(expected, (void*)"the"); 289.387 - expected = ucx_list_append(expected, (void*)"this"); 289.388 - expected = ucx_list_append(expected, (void*)"this"); 289.389 - 289.390 - list = ucx_list_sort(list, ucx_cmp_str, NULL); 289.391 - 289.392 - UCX_TEST_BEGIN 289.393 - UCX_TEST_ASSERT( 289.394 - ucx_list_equals(list, expected, ucx_cmp_str, NULL), "failed"); 289.395 - UCX_TEST_ASSERT(ucx_list_size(list) == 16, "list has now a wrong size"); 289.396 - UcxList *l = list; 289.397 - UCX_TEST_ASSERT(l->prev == NULL, "prev field of first entry is not null"); 289.398 - while (l->next != NULL) { 289.399 - UCX_TEST_ASSERT(l->next->prev == l, "next or prev pointer corrupted"); 289.400 - l = l->next; 289.401 - } 289.402 - UCX_TEST_ASSERT(!ucx_list_sort(NULL, ucx_cmp_str, NULL), 289.403 - "failed to sort empty list"); 289.404 - UCX_TEST_END 289.405 - 289.406 - ucx_list_free(expected); 289.407 - ucx_list_free(list); 289.408 -} 289.409 - 289.410 -UCX_TEST(test_ucx_list_union) { 289.411 - UcxList *left = ucx_list_append(NULL, (void*)"this"); 289.412 - left = ucx_list_append(left, (void*)"is"); 289.413 - left = ucx_list_append(left, (void*)"a"); 289.414 - left = ucx_list_append(left, (void*)"test"); 289.415 - 289.416 - UcxList *right = ucx_list_append(NULL, (void*)"to"); 289.417 - right = ucx_list_append(right, (void*)"test"); 289.418 - right = ucx_list_append(right, (void*)"set"); 289.419 - right = ucx_list_append(right, (void*)"operations"); 289.420 - 289.421 - UcxList *expected = ucx_list_append(NULL, (void*)"this"); 289.422 - expected = ucx_list_append(expected, (void*)"is"); 289.423 - expected = ucx_list_append(expected, (void*)"a"); 289.424 - expected = ucx_list_append(expected, (void*)"test"); 289.425 - expected = ucx_list_append(expected, (void*)"to"); 289.426 - expected = ucx_list_append(expected, (void*)"set"); 289.427 - expected = ucx_list_append(expected, (void*)"operations"); 289.428 - 289.429 - UcxList* result = ucx_list_union(left, right, ucx_cmp_str, 289.430 - NULL, NULL, NULL); 289.431 - 289.432 - UCX_TEST_BEGIN 289.433 - UCX_TEST_ASSERT(ucx_list_equals(result, expected, 289.434 - ucx_cmp_str, NULL), "failed"); 289.435 - UCX_TEST_END 289.436 - 289.437 - ucx_list_free(result); 289.438 - ucx_list_free(expected); 289.439 - ucx_list_free(right); 289.440 - ucx_list_free(left); 289.441 -} 289.442 - 289.443 -UCX_TEST(test_ucx_list_intersection) { 289.444 - UcxList *left = ucx_list_append(NULL, (void*)"this"); 289.445 - left = ucx_list_append(left, (void*)"is"); 289.446 - left = ucx_list_append(left, (void*)"a"); 289.447 - left = ucx_list_append(left, (void*)"test"); 289.448 - 289.449 - UcxList *right = ucx_list_append(NULL, (void*)"to"); 289.450 - right = ucx_list_append(right, (void*)"test"); 289.451 - right = ucx_list_append(right, (void*)"a"); 289.452 - right = ucx_list_append(right, (void*)"set"); 289.453 - right = ucx_list_append(right, (void*)"operation"); 289.454 - 289.455 - UcxList *expected = ucx_list_append(NULL, (void*)"a"); 289.456 - expected = ucx_list_append(expected, (void*)"test"); 289.457 - 289.458 - UcxList* result = ucx_list_intersection(left, right, ucx_cmp_str, 289.459 - NULL, NULL, NULL); 289.460 - 289.461 - UCX_TEST_BEGIN 289.462 - UCX_TEST_ASSERT(ucx_list_equals(result, expected, 289.463 - ucx_cmp_str, NULL), "failed"); 289.464 - UCX_TEST_END 289.465 - 289.466 - ucx_list_free(result); 289.467 - ucx_list_free(expected); 289.468 - ucx_list_free(right); 289.469 - ucx_list_free(left); 289.470 -} 289.471 - 289.472 -UCX_TEST(test_ucx_list_difference) { 289.473 - UcxList *left = ucx_list_append(NULL, (void*)"this"); 289.474 - left = ucx_list_append(left, (void*)"is"); 289.475 - left = ucx_list_append(left, (void*)"a"); 289.476 - left = ucx_list_append(left, (void*)"test"); 289.477 - 289.478 - UcxList *right = ucx_list_append(NULL, (void*)"to"); 289.479 - right = ucx_list_append(right, (void*)"test"); 289.480 - right = ucx_list_append(right, (void*)"this"); 289.481 - right = ucx_list_append(right, (void*)"set"); 289.482 - right = ucx_list_append(right, (void*)"operations"); 289.483 - 289.484 - UcxList *expected = ucx_list_append(NULL, (void*)"is"); 289.485 - expected = ucx_list_append(expected, (void*)"a"); 289.486 - 289.487 - UcxList* result = ucx_list_difference(left, right, ucx_cmp_str, 289.488 - NULL, NULL, NULL); 289.489 - 289.490 - UCX_TEST_BEGIN 289.491 - UCX_TEST_ASSERT(ucx_list_equals(result, expected, 289.492 - ucx_cmp_str, NULL), "failed"); 289.493 - UCX_TEST_END 289.494 - 289.495 - ucx_list_free(result); 289.496 - ucx_list_free(expected); 289.497 - ucx_list_free(right); 289.498 - ucx_list_free(left); 289.499 -}
290.1 --- a/test/list_tests.h Mon Dec 30 09:54:10 2019 +0100 290.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 290.3 @@ -1,67 +0,0 @@ 290.4 -/* 290.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 290.6 - * 290.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 290.8 - * 290.9 - * Redistribution and use in source and binary forms, with or without 290.10 - * modification, are permitted provided that the following conditions are met: 290.11 - * 290.12 - * 1. Redistributions of source code must retain the above copyright 290.13 - * notice, this list of conditions and the following disclaimer. 290.14 - * 290.15 - * 2. Redistributions in binary form must reproduce the above copyright 290.16 - * notice, this list of conditions and the following disclaimer in the 290.17 - * documentation and/or other materials provided with the distribution. 290.18 - * 290.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 290.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 290.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 290.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 290.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 290.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 290.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 290.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 290.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 290.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 290.29 - * POSSIBILITY OF SUCH DAMAGE. 290.30 - */ 290.31 - 290.32 -#ifndef LIST_TESTS_H 290.33 -#define LIST_TESTS_H 290.34 - 290.35 -#include <ucx/list.h> 290.36 -#include <ucx/test.h> 290.37 - 290.38 -#ifdef __cplusplus 290.39 -extern "C" { 290.40 -#endif 290.41 - 290.42 -/* 290.43 - * Assumed to be correct: 290.44 - * ucx_list_free 290.45 - */ 290.46 - 290.47 -UCX_TEST(test_ucx_list_append); 290.48 -UCX_TEST(test_ucx_list_prepend); 290.49 -UCX_TEST(test_ucx_list_equals); 290.50 -UCX_TEST(test_ucx_list_concat); 290.51 -UCX_TEST(test_ucx_list_size); 290.52 -UCX_TEST(test_ucx_list_first); 290.53 -UCX_TEST(test_ucx_list_last); 290.54 -UCX_TEST(test_ucx_list_get); 290.55 -UCX_TEST(test_ucx_list_indexof); 290.56 -UCX_TEST(test_ucx_list_find); 290.57 -UCX_TEST(test_ucx_list_contains); 290.58 -UCX_TEST(test_ucx_list_remove); 290.59 -UCX_TEST(test_ucx_list_clone); 290.60 -UCX_TEST(test_ucx_list_sort); 290.61 -UCX_TEST(test_ucx_list_union); 290.62 -UCX_TEST(test_ucx_list_intersection); 290.63 -UCX_TEST(test_ucx_list_difference); 290.64 - 290.65 -#ifdef __cplusplus 290.66 -} 290.67 -#endif 290.68 - 290.69 -#endif /* LIST_TESTS_H */ 290.70 -
291.1 --- a/test/logging_tests.c Mon Dec 30 09:54:10 2019 +0100 291.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 291.3 @@ -1,111 +0,0 @@ 291.4 -/* 291.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 291.6 - * 291.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 291.8 - * 291.9 - * Redistribution and use in source and binary forms, with or without 291.10 - * modification, are permitted provided that the following conditions are met: 291.11 - * 291.12 - * 1. Redistributions of source code must retain the above copyright 291.13 - * notice, this list of conditions and the following disclaimer. 291.14 - * 291.15 - * 2. Redistributions in binary form must reproduce the above copyright 291.16 - * notice, this list of conditions and the following disclaimer in the 291.17 - * documentation and/or other materials provided with the distribution. 291.18 - * 291.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 291.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 291.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 291.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 291.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 291.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 291.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 291.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 291.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 291.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 291.29 - * POSSIBILITY OF SUCH DAMAGE. 291.30 - */ 291.31 - 291.32 -#include "logging_tests.h" 291.33 -#include <time.h> 291.34 - 291.35 -UCX_TEST(test_ucx_logger_new) { 291.36 - 291.37 - FILE *stream = tmpfile(); 291.38 - UcxLogger *logger = ucx_logger_new(stream, 291.39 - UCX_LOGGER_INFO, UCX_LOGGER_SOURCE | UCX_LOGGER_LEVEL); 291.40 - 291.41 - UCX_TEST_BEGIN 291.42 - UCX_TEST_ASSERT(logger->stream == stream, "stream not set"); 291.43 - UCX_TEST_ASSERT(logger->mask == (UCX_LOGGER_SOURCE | UCX_LOGGER_LEVEL), 291.44 - "mask not set"); 291.45 - UCX_TEST_ASSERT(logger->level == UCX_LOGGER_INFO, 291.46 - "level not set"); 291.47 - UCX_TEST_ASSERT(logger->writer == (write_func)fwrite, 291.48 - "writer not set to fwrite"); 291.49 - UCX_TEST_ASSERT(strcmp(logger->dateformat, "%F %T %z ") == 0, 291.50 - "date format not set to \"%F %T %z\""); 291.51 - 291.52 - UCX_TEST_ASSERT(logger->levels->count == 5, 291.53 - "incorrect number of registered log levels"); 291.54 - 291.55 - int level = UCX_LOGGER_ERROR; 291.56 - UCX_TEST_ASSERT(strcmp((char*)ucx_map_int_get(logger->levels, level), 291.57 - "[ERROR]") == 0, "invalid error level"); 291.58 - level = UCX_LOGGER_WARN; 291.59 - UCX_TEST_ASSERT(strcmp((char*)ucx_map_int_get(logger->levels, level), 291.60 - "[WARNING]") == 0, "invalid warning level"); 291.61 - level = UCX_LOGGER_DEBUG; 291.62 - UCX_TEST_ASSERT(strcmp((char*)ucx_map_int_get(logger->levels, level), 291.63 - "[DEBUG]") == 0, "invalid debug level"); 291.64 - level = UCX_LOGGER_INFO; 291.65 - UCX_TEST_ASSERT(strcmp((char*)ucx_map_int_get(logger->levels, level), 291.66 - "[INFO]") == 0, "invalid info level"); 291.67 - level = UCX_LOGGER_TRACE; 291.68 - UCX_TEST_ASSERT(strcmp((char*)ucx_map_int_get(logger->levels, level), 291.69 - "[TRACE]") == 0, "invalid trace level"); 291.70 - 291.71 - UCX_TEST_END 291.72 - 291.73 - fclose(stream); 291.74 - ucx_logger_free(logger); 291.75 -} 291.76 - 291.77 -UCX_TEST(test_ucx_logger_log) { 291.78 - char buffer[100]; 291.79 - 291.80 - FILE *stream = tmpfile(); 291.81 - 291.82 - UcxLogger *logger = ucx_logger_new(stream, 291.83 - UCX_LOGGER_INFO, UCX_LOGGER_SOURCE | UCX_LOGGER_LEVEL); 291.84 - logger->dateformat = (char*) "%Y-%m-%d:"; 291.85 - 291.86 - UCX_TEST_BEGIN 291.87 - const unsigned int line1 = __LINE__; ucx_logger_info(logger, "allright"); 291.88 - 291.89 - ucx_logger_trace(logger, "dont log this!"); 291.90 - 291.91 - logger->mask |= UCX_LOGGER_TIMESTAMP; 291.92 - time_t now = time(NULL); 291.93 - char timestr[13]; 291.94 - strftime(timestr, 12, "%Y-%m-%d:", localtime(&now)); 291.95 - const unsigned int line2 = __LINE__; ucx_logger_error(logger, "error %d!", 42); 291.96 - 291.97 - fseek(stream, 0, SEEK_SET); 291.98 - size_t r = fread(buffer, 1, 100, stream); 291.99 - 291.100 - const size_t expected_length = 87; 291.101 - char expected[88]; 291.102 - snprintf(expected, expected_length+1, 291.103 - "[INFO] logging_tests.c:%u - allright\n" 291.104 - "[ERROR] %slogging_tests.c:%u - error 42!\n", line1, timestr, line2); 291.105 - 291.106 - UCX_TEST_ASSERT(r == expected_length, "incorrect log length"); 291.107 - UCX_TEST_ASSERT(strncmp(buffer, expected, expected_length) == 0, 291.108 - "incorrect logs"); 291.109 - 291.110 - UCX_TEST_END 291.111 - 291.112 - ucx_logger_free(logger); 291.113 - fclose(stream); 291.114 -}
292.1 --- a/test/logging_tests.h Mon Dec 30 09:54:10 2019 +0100 292.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 292.3 @@ -1,47 +0,0 @@ 292.4 -/* 292.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 292.6 - * 292.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 292.8 - * 292.9 - * Redistribution and use in source and binary forms, with or without 292.10 - * modification, are permitted provided that the following conditions are met: 292.11 - * 292.12 - * 1. Redistributions of source code must retain the above copyright 292.13 - * notice, this list of conditions and the following disclaimer. 292.14 - * 292.15 - * 2. Redistributions in binary form must reproduce the above copyright 292.16 - * notice, this list of conditions and the following disclaimer in the 292.17 - * documentation and/or other materials provided with the distribution. 292.18 - * 292.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 292.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 292.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 292.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 292.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 292.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 292.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 292.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 292.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 292.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 292.29 - * POSSIBILITY OF SUCH DAMAGE. 292.30 - */ 292.31 - 292.32 -#ifndef LOGGING_TESTS_H 292.33 -#define LOGGING_TESTS_H 292.34 - 292.35 -#include <ucx/test.h> 292.36 -#include <ucx/logging.h> 292.37 - 292.38 -#ifdef __cplusplus 292.39 -extern "C" { 292.40 -#endif 292.41 - 292.42 -UCX_TEST(test_ucx_logger_new); 292.43 -UCX_TEST(test_ucx_logger_log); 292.44 - 292.45 -#ifdef __cplusplus 292.46 -} 292.47 -#endif 292.48 - 292.49 -#endif /* LOGGING_TESTS_H */ 292.50 -
293.1 --- a/test/main.c Mon Dec 30 09:54:10 2019 +0100 293.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 293.3 @@ -1,286 +0,0 @@ 293.4 -/* 293.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 293.6 - * 293.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 293.8 - * 293.9 - * Redistribution and use in source and binary forms, with or without 293.10 - * modification, are permitted provided that the following conditions are met: 293.11 - * 293.12 - * 1. Redistributions of source code must retain the above copyright 293.13 - * notice, this list of conditions and the following disclaimer. 293.14 - * 293.15 - * 2. Redistributions in binary form must reproduce the above copyright 293.16 - * notice, this list of conditions and the following disclaimer in the 293.17 - * documentation and/or other materials provided with the distribution. 293.18 - * 293.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 293.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 293.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 293.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 293.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 293.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 293.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 293.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 293.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 293.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 293.29 - * POSSIBILITY OF SUCH DAMAGE. 293.30 - */ 293.31 - 293.32 -#include <stdio.h> 293.33 -#include <stdlib.h> 293.34 - 293.35 -#include <ucx/test.h> 293.36 - 293.37 -#include "main.h" 293.38 - 293.39 -#include "array_tests.h" 293.40 -#include "allocator_tests.h" 293.41 -#include "logging_tests.h" 293.42 -#include "list_tests.h" 293.43 -#include "string_tests.h" 293.44 -#include "mpool_tests.h" 293.45 -#include "stack_tests.h" 293.46 -#include "map_tests.h" 293.47 -#include "prop_tests.h" 293.48 -#include "buffer_tests.h" 293.49 -#include "utils_tests.h" 293.50 -#include "avl_tests.h" 293.51 - 293.52 -#ifdef __cplusplus 293.53 -extern "C" { 293.54 -#endif 293.55 -UCX_TEST(testTestSuitePositive) { 293.56 - UCX_TEST_BEGIN 293.57 - UCX_TEST_ASSERT(2*2 == 4, "the test framework fails"); 293.58 - UCX_TEST_END 293.59 -} 293.60 - 293.61 -UCX_TEST(testTestSuiteNegative) { 293.62 - UCX_TEST_BEGIN 293.63 - UCX_TEST_ASSERT(2*(-2) == 4, "the test framework works"); 293.64 - UCX_TEST_END 293.65 -} 293.66 - 293.67 -UCX_TEST_SUBROUTINE(testTestSuiteRoutineRoutine, float f) { 293.68 - UCX_TEST_ASSERT(f == 3.14f, "calling routine in a routine fails"); 293.69 -} 293.70 - 293.71 -UCX_TEST_SUBROUTINE(testTestSuiteRoutine2Param, int i, float f) { 293.72 - UCX_TEST_ASSERT(i == 42, "two parameter routine fails"); 293.73 - UCX_TEST_CALL_SUBROUTINE(testTestSuiteRoutineRoutine, f); 293.74 -} 293.75 - 293.76 -UCX_TEST_SUBROUTINE(testTestSuiteRoutineSuccess, int* i) { 293.77 - *i += 2; 293.78 - UCX_TEST_ASSERT(*i==4, "the test framework fails"); 293.79 -} 293.80 - 293.81 -UCX_TEST_SUBROUTINE(testTestSuiteRoutineFailure, int* i) { 293.82 - *i += 2; 293.83 - // Next test shall fail! 293.84 - UCX_TEST_ASSERT(*i==4, "the test framework works"); 293.85 -} 293.86 - 293.87 -UCX_TEST(testTestSuiteRoutinePositive) { 293.88 - int i = 2; 293.89 - UCX_TEST_BEGIN 293.90 - UCX_TEST_CALL_SUBROUTINE(testTestSuiteRoutineSuccess, &i); 293.91 - UCX_TEST_ASSERT(i==4, "the test framework fails"); 293.92 - UCX_TEST_END 293.93 -} 293.94 - 293.95 -UCX_TEST(testTestSuiteRoutineNegative) { 293.96 - int i = 0; 293.97 - UCX_TEST_BEGIN 293.98 - UCX_TEST_CALL_SUBROUTINE(testTestSuiteRoutineFailure, &i); 293.99 - UCX_TEST_ASSERT(1, "the test framework fails"); 293.100 - UCX_TEST_END 293.101 -} 293.102 - 293.103 -UCX_TEST(testTestSuiteRoutineMultiparam) { 293.104 - UCX_TEST_BEGIN 293.105 - UCX_TEST_CALL_SUBROUTINE(testTestSuiteRoutine2Param, 42, 3.14f); 293.106 - UCX_TEST_END 293.107 -} 293.108 -#ifdef __cplusplus 293.109 -} 293.110 -#endif 293.111 - 293.112 -int main(int argc, char **argv) { 293.113 - printf("UCX Tests\n---------\n"); 293.114 - 293.115 - printf("\nUcxTestSuite tests (2 failures are intended!)\n"); 293.116 - UcxTestSuite* suite = ucx_test_suite_new(); 293.117 - ucx_test_register(suite, testTestSuitePositive); 293.118 - ucx_test_register(suite, testTestSuiteNegative); 293.119 - ucx_test_register(suite, testTestSuiteRoutinePositive); 293.120 - ucx_test_register(suite, testTestSuiteRoutineNegative); 293.121 - ucx_test_register(suite, testTestSuiteRoutineMultiparam); 293.122 - ucx_test_run(suite, stdout); 293.123 - if (suite->failure == 2 && suite->success == 3) { 293.124 - ucx_test_suite_free(suite); 293.125 - 293.126 - printf("\nLibrary function tests\n"); 293.127 - suite = ucx_test_suite_new(); 293.128 - /* UcxAllocator Tests */ 293.129 - ucx_test_register(suite, test_ucx_default_allocator); 293.130 - 293.131 - /* sstring Tests */ 293.132 - ucx_test_register(suite, test_sstr_macros); 293.133 - ucx_test_register(suite, test_sstr); 293.134 - ucx_test_register(suite, test_sstr_len); 293.135 - ucx_test_register(suite, test_sstrcmp); 293.136 - ucx_test_register(suite, test_sstrcasecmp); 293.137 - ucx_test_register(suite, test_sstrcat); 293.138 - ucx_test_register(suite, test_sstrchr_sstrrchr); 293.139 - ucx_test_register(suite, test_sstrstr); 293.140 - ucx_test_register(suite, test_sstrsplit); 293.141 - ucx_test_register(suite, test_sstrtrim); 293.142 - ucx_test_register(suite, test_sstrprefixsuffix); 293.143 - ucx_test_register(suite, test_sstrcaseprefixsuffix); 293.144 - ucx_test_register(suite, test_sstrreplace); 293.145 - 293.146 - /* UcxLogger Tests */ 293.147 - ucx_test_register(suite, test_ucx_logger_new); 293.148 - ucx_test_register(suite, test_ucx_logger_log); 293.149 - 293.150 - /* UcxArray Tests */ 293.151 - ucx_test_register(suite, test_ucx_array_destroy); 293.152 - ucx_test_register(suite, test_ucx_array_new); 293.153 - ucx_test_register(suite, test_ucx_array_at); 293.154 - ucx_test_register(suite, test_ucx_array_append_from); 293.155 - ucx_test_register(suite, test_ucx_array_append_from_struct); 293.156 - ucx_test_register(suite, test_ucx_array_prepend_from); 293.157 - ucx_test_register(suite, test_ucx_array_set_from); 293.158 - ucx_test_register(suite, test_ucx_array_equals); 293.159 - ucx_test_register(suite, test_ucx_array_concat); 293.160 - ucx_test_register(suite, test_ucx_array_find); 293.161 - ucx_test_register(suite, test_ucx_array_contains); 293.162 - ucx_test_register(suite, test_ucx_array_remove); 293.163 - ucx_test_register(suite, test_ucx_array_clone); 293.164 - ucx_test_register(suite, test_ucx_array_sort); 293.165 - ucx_test_register(suite, test_ucx_array_shrink); 293.166 - ucx_test_register(suite, test_ucx_array_resize); 293.167 - ucx_test_register(suite, test_ucx_array_reserve); 293.168 - ucx_test_register(suite, test_ucx_array_grow); 293.169 - ucx_test_register(suite, test_ucx_array_util_set); 293.170 - ucx_test_register(suite, test_ucx_array_util_setptr); 293.171 - 293.172 - /* UcxList Tests */ 293.173 - ucx_test_register(suite, test_ucx_list_append); 293.174 - ucx_test_register(suite, test_ucx_list_prepend); 293.175 - ucx_test_register(suite, test_ucx_list_equals); 293.176 - ucx_test_register(suite, test_ucx_list_concat); 293.177 - ucx_test_register(suite, test_ucx_list_size); 293.178 - ucx_test_register(suite, test_ucx_list_first); 293.179 - ucx_test_register(suite, test_ucx_list_last); 293.180 - ucx_test_register(suite, test_ucx_list_get); 293.181 - ucx_test_register(suite, test_ucx_list_indexof); 293.182 - ucx_test_register(suite, test_ucx_list_find); 293.183 - ucx_test_register(suite, test_ucx_list_contains); 293.184 - ucx_test_register(suite, test_ucx_list_remove); 293.185 - ucx_test_register(suite, test_ucx_list_clone); 293.186 - ucx_test_register(suite, test_ucx_list_sort); 293.187 - ucx_test_register(suite, test_ucx_list_union); 293.188 - ucx_test_register(suite, test_ucx_list_intersection); 293.189 - ucx_test_register(suite, test_ucx_list_difference); 293.190 - 293.191 - /* UcxMemPool Tests */ 293.192 - ucx_test_register(suite, test_ucx_mempool_new); 293.193 - ucx_test_register(suite, test_ucx_mempool_malloc); 293.194 - ucx_test_register(suite, test_ucx_mempool_malloc_with_chcap); 293.195 - ucx_test_register(suite, test_ucx_mempool_calloc); 293.196 - ucx_test_register(suite, test_ucx_mempool_free); 293.197 - ucx_test_register(suite, test_ucx_mempool_set_destr); 293.198 - ucx_test_register(suite, test_ucx_mempool_reg_destr); 293.199 - ucx_test_register(suite, test_ucx_mempool_realloc); 293.200 - 293.201 - /* UcxStack Tests */ 293.202 - ucx_test_register(suite, test_ucx_stack_init); 293.203 - ucx_test_register(suite, test_ucx_stack_malloc); 293.204 - ucx_test_register(suite, test_ucx_stack_calloc); 293.205 - ucx_test_register(suite, test_ucx_stack_free); 293.206 - ucx_test_register(suite, test_ucx_stack_realloc); 293.207 - ucx_test_register(suite, test_ucx_stack_pop); 293.208 - 293.209 - /* UcxMap Tests */ 293.210 - ucx_test_register(suite, test_ucx_map_new); 293.211 - ucx_test_register(suite, test_ucx_key); 293.212 - ucx_test_register(suite, test_ucx_map_put); 293.213 - ucx_test_register(suite, test_ucx_map_get); 293.214 - ucx_test_register(suite, test_ucx_map_remove); 293.215 - ucx_test_register(suite, test_ucx_map_clear); 293.216 - ucx_test_register(suite, test_ucx_map_iterator); 293.217 - ucx_test_register(suite, test_ucx_map_iterator_chain); 293.218 - ucx_test_register(suite, test_ucx_map_clone); 293.219 - ucx_test_register(suite, test_ucx_map_rehash); 293.220 - ucx_test_register(suite, test_ucx_map_union); 293.221 - ucx_test_register(suite, test_ucx_map_intersection); 293.222 - ucx_test_register(suite, test_ucx_map_difference); 293.223 - 293.224 - /* UcxPropertiesParser Tests */ 293.225 - ucx_test_register(suite, test_ucx_properties_new); 293.226 - ucx_test_register(suite, test_ucx_properties_next); 293.227 - ucx_test_register(suite, test_ucx_properties_next_multi); 293.228 - ucx_test_register(suite, test_ucx_properties_next_part); 293.229 - ucx_test_register(suite, test_ucx_properties_next_long); 293.230 - ucx_test_register(suite, test_ucx_properties2map); 293.231 - ucx_test_register(suite, test_ucx_properties_load); 293.232 - ucx_test_register(suite, test_ucx_properties_store); 293.233 - 293.234 - /* UcxBuffer Tests */ 293.235 - ucx_test_register(suite, test_ucx_buffer_new); 293.236 - ucx_test_register(suite, test_ucx_buffer_new_prealloc); 293.237 - ucx_test_register(suite, test_ucx_buffer_eof); 293.238 - ucx_test_register(suite, test_ucx_buffer_seek_set); 293.239 - ucx_test_register(suite, test_ucx_buffer_seek_cur); 293.240 - ucx_test_register(suite, test_ucx_buffer_seek_end); 293.241 - ucx_test_register(suite, test_ucx_buffer_seek_oob); 293.242 - ucx_test_register(suite, test_ucx_buffer_seek_invalid); 293.243 - ucx_test_register(suite, test_ucx_buffer_seek_overflow); 293.244 - ucx_test_register(suite, test_ucx_buffer_putc); 293.245 - ucx_test_register(suite, test_ucx_buffer_putc_ae); 293.246 - ucx_test_register(suite, test_ucx_buffer_putc_oob); 293.247 - ucx_test_register(suite, test_ucx_buffer_putc_oobae); 293.248 - ucx_test_register(suite, test_ucx_buffer_putc_size); 293.249 - ucx_test_register(suite, test_ucx_buffer_getc); 293.250 - ucx_test_register(suite, test_ucx_buffer_read); 293.251 - ucx_test_register(suite, test_ucx_buffer_read_oob); 293.252 - ucx_test_register(suite, test_ucx_buffer_extract); 293.253 - ucx_test_register(suite, test_ucx_buffer_extract_oob); 293.254 - ucx_test_register(suite, test_ucx_buffer_extract_overflow); 293.255 - ucx_test_register(suite, test_ucx_buffer_extend); 293.256 - ucx_test_register(suite, test_ucx_buffer_write); 293.257 - ucx_test_register(suite, test_ucx_buffer_write_oob); 293.258 - ucx_test_register(suite, test_ucx_buffer_write_ax); 293.259 - ucx_test_register(suite, test_ucx_buffer_shl); 293.260 - ucx_test_register(suite, test_ucx_buffer_shr); 293.261 - ucx_test_register(suite, test_ucx_buffer_shr_ax); 293.262 - 293.263 - /* Utils Tests*/ 293.264 - ucx_test_register(suite, test_ucx_fprintf); 293.265 - ucx_test_register(suite, test_ucx_asprintf); 293.266 - ucx_test_register(suite, test_ucx_sprintf); 293.267 - ucx_test_register(suite, test_ucx_bprintf); 293.268 - ucx_test_register(suite, test_ucx_stream_copy); 293.269 - 293.270 - /* AVL Tests */ 293.271 - ucx_test_register(suite, test_ucx_avl_put); 293.272 - ucx_test_register(suite, test_ucx_avl_remove); 293.273 - ucx_test_register(suite, test_ucx_avl_find); 293.274 - ucx_test_register(suite, test_ucx_avl_traverse); 293.275 - 293.276 - ucx_test_run(suite, stdout); 293.277 - fflush(stdout); 293.278 - 293.279 - int exit_code = suite->failure > 0 ? EXIT_FAILURE: EXIT_SUCCESS; 293.280 - 293.281 - ucx_test_suite_free(suite); 293.282 - 293.283 - return exit_code; 293.284 - } else { 293.285 - ucx_test_suite_free(suite); 293.286 - return EXIT_FAILURE; 293.287 - } 293.288 -} 293.289 -
294.1 --- a/test/main.h Mon Dec 30 09:54:10 2019 +0100 294.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 294.3 @@ -1,46 +0,0 @@ 294.4 -/* 294.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 294.6 - * 294.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 294.8 - * 294.9 - * Redistribution and use in source and binary forms, with or without 294.10 - * modification, are permitted provided that the following conditions are met: 294.11 - * 294.12 - * 1. Redistributions of source code must retain the above copyright 294.13 - * notice, this list of conditions and the following disclaimer. 294.14 - * 294.15 - * 2. Redistributions in binary form must reproduce the above copyright 294.16 - * notice, this list of conditions and the following disclaimer in the 294.17 - * documentation and/or other materials provided with the distribution. 294.18 - * 294.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 294.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 294.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 294.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 294.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 294.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 294.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 294.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 294.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 294.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 294.29 - * POSSIBILITY OF SUCH DAMAGE. 294.30 - */ 294.31 - 294.32 -#ifndef MAIN_H 294.33 -#define MAIN_H 294.34 - 294.35 -#ifdef __cplusplus 294.36 -extern "C" { 294.37 -#endif 294.38 - 294.39 -/* Some functions that are shared over the test */ 294.40 -int cmp_string(void*, void*, void*); 294.41 -void* copy_string(void*, void*); 294.42 - 294.43 - 294.44 -#ifdef __cplusplus 294.45 -} 294.46 -#endif 294.47 - 294.48 -#endif /* MAIN_H */ 294.49 -
295.1 --- a/test/map_tests.c Mon Dec 30 09:54:10 2019 +0100 295.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 295.3 @@ -1,431 +0,0 @@ 295.4 -/* 295.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 295.6 - * 295.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 295.8 - * 295.9 - * Redistribution and use in source and binary forms, with or without 295.10 - * modification, are permitted provided that the following conditions are met: 295.11 - * 295.12 - * 1. Redistributions of source code must retain the above copyright 295.13 - * notice, this list of conditions and the following disclaimer. 295.14 - * 295.15 - * 2. Redistributions in binary form must reproduce the above copyright 295.16 - * notice, this list of conditions and the following disclaimer in the 295.17 - * documentation and/or other materials provided with the distribution. 295.18 - * 295.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 295.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 295.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 295.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 295.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 295.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 295.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 295.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 295.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 295.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 295.29 - * POSSIBILITY OF SUCH DAMAGE. 295.30 - */ 295.31 - 295.32 -#include "map_tests.h" 295.33 -#include <ucx/utils.h> 295.34 - 295.35 -UCX_TEST(test_ucx_map_new) { 295.36 - UcxMap *map = ucx_map_new(16); 295.37 - UCX_TEST_BEGIN 295.38 - UCX_TEST_ASSERT(map->size == 16, "wrong size"); 295.39 - UCX_TEST_ASSERT(map->map != NULL, "failed"); 295.40 - 295.41 - UCX_TEST_END 295.42 - ucx_map_free(map); 295.43 -} 295.44 - 295.45 -UCX_TEST(test_ucx_key) { 295.46 - UcxKey key = ucx_key("This is a text.", 15); 295.47 - UCX_TEST_BEGIN 295.48 - UCX_TEST_ASSERT(strncmp((const char*)key.data, "This is a text.", 15) == 0, 295.49 - "failed"); 295.50 - UCX_TEST_ASSERT(key.len == 15, "failed"); 295.51 - UCX_TEST_ASSERT(key.hash == 1261186027, "hash failed"); 295.52 - 295.53 - UCX_TEST_END 295.54 -} 295.55 - 295.56 -UCX_TEST(test_ucx_map_put) { 295.57 - 295.58 - UcxMap *map = ucx_map_new(4); 295.59 - 295.60 - int td[5]; 295.61 - td[0] = 10; td[1] = 42; td[2] = 70; td[3] = 11200; td[4] = 80000; 295.62 - 295.63 - UCX_TEST_BEGIN 295.64 - ucx_map_cstr_put(map, "Key2", &td[2]); /* 3.2 */ 295.65 - ucx_map_cstr_put(map, "Key0", &td[0]); /* 0.0 */ 295.66 - ucx_map_cstr_put(map, "Key1", &td[1]); /* 3.0 */ 295.67 - ucx_map_cstr_put(map, "KeY3", &td[3]); /* 3.1 */ 295.68 - ucx_map_cstr_put(map, "KEY4", &td[4]); /* 1.0 */ 295.69 - 295.70 - UCX_TEST_ASSERT(*((int*)map->map[0]->data) == td[0], "failed Key0"); 295.71 - UCX_TEST_ASSERT(*((int*)map->map[1]->data) == td[4], "failed KEY4"); 295.72 - UCX_TEST_ASSERT(*((int*)map->map[3]->data) == td[1], "failed Key1"); 295.73 - 295.74 - UCX_TEST_ASSERT(map->map[3]->next != NULL, "no list at slot 3"); 295.75 - UCX_TEST_ASSERT(map->map[3]->next->next != NULL, "list corrupt at slot 3"); 295.76 - UCX_TEST_ASSERT(*((int*)map->map[3]->next->data) == td[3], 295.77 - "failed KeY3") 295.78 - UCX_TEST_ASSERT(*((int*)map->map[3]->next->next->data) == td[2], 295.79 - "failed KeY2"); 295.80 - 295.81 - UCX_TEST_ASSERT(map->map[0]->next == NULL, "slot 0 not terminated"); 295.82 - UCX_TEST_ASSERT(map->map[1]->next == NULL, "slot 1 not terminated"); 295.83 - UCX_TEST_ASSERT(map->map[2] == NULL, "slot 2 not empty"); 295.84 - UCX_TEST_ASSERT(map->map[3]->next->next->next == NULL, 295.85 - "slot 3 not terminated") 295.86 - 295.87 - ucx_map_cstr_put(map, "KeY3", &td[4]); /* replace 3.1 */ 295.88 - 295.89 - UCX_TEST_ASSERT(*((int*)map->map[3]->data) == td[1], 295.90 - "overwrite failed") 295.91 - UCX_TEST_ASSERT(*((int*)map->map[3]->next->data) == td[4], 295.92 - "overwrite failed"); 295.93 - UCX_TEST_ASSERT(*((int*)map->map[3]->next->next->data) == td[2], 295.94 - "overwrite failed") 295.95 - UCX_TEST_ASSERT(map->map[3]->next->next->next == NULL, "overwrite failed"); 295.96 - 295.97 - UCX_TEST_END 295.98 - ucx_map_free(map); 295.99 -} 295.100 - 295.101 -UCX_TEST(test_ucx_map_get) { 295.102 - UcxMap *map = ucx_map_new(4); 295.103 - 295.104 - int td[5]; 295.105 - td[0] = 10; td[1] = 42; td[2] = 70; td[3] = 11200; td[4] = 80000; 295.106 - 295.107 - ucx_map_cstr_put(map, "Key2", &td[2]); 295.108 - ucx_map_cstr_put(map, "Key0", &td[0]); 295.109 - ucx_map_cstr_put(map, "Key1", &td[1]); 295.110 - ucx_map_cstr_put(map, "KeY3", &td[3]); 295.111 - ucx_map_cstr_put(map, "KEY4", &td[4]); 295.112 - UCX_TEST_BEGIN 295.113 - 295.114 - td[0] = *((int*)ucx_map_cstr_get(map, "Key0")); 295.115 - td[1] = *((int*)ucx_map_cstr_get(map, "Key1")); 295.116 - td[2] = *((int*)ucx_map_cstr_get(map, "Key2")); 295.117 - td[3] = *((int*)ucx_map_cstr_get(map, "KeY3")); 295.118 - td[4] = *((int*)ucx_map_cstr_get(map, "KEY4")); 295.119 - UCX_TEST_ASSERT(td[0] == 10, "failed key 0"); 295.120 - UCX_TEST_ASSERT(td[1] == 42, "failed key 1"); 295.121 - UCX_TEST_ASSERT(td[2] == 70, "failed key 2"); 295.122 - UCX_TEST_ASSERT(td[3] == 11200, "failed key 3"); 295.123 - UCX_TEST_ASSERT(td[4] == 80000, "failed key 4"); 295.124 - 295.125 - UCX_TEST_ASSERT(map->count == 5, "expected 5 remaining values"); 295.126 - UCX_TEST_ASSERT(ucx_map_cstr_get(map, "Key0") != NULL, "element removed"); 295.127 - 295.128 - UCX_TEST_END 295.129 - ucx_map_free(map); 295.130 -} 295.131 - 295.132 -UCX_TEST(test_ucx_map_remove) { 295.133 - UcxMap *map = ucx_map_new(4); 295.134 - 295.135 - int td[5]; 295.136 - td[0] = 10; td[1] = 42; td[2] = 70; td[3] = 11200; td[4] = 80000; 295.137 - 295.138 - ucx_map_cstr_put(map, "Key2", &td[2]); /* 0 */ 295.139 - ucx_map_cstr_put(map, "Key0", &td[0]); /* 0 */ 295.140 - ucx_map_cstr_put(map, "Key1", &td[1]); /* 3 */ 295.141 - ucx_map_cstr_put(map, "KeY3", &td[3]); /* 2 */ 295.142 - ucx_map_cstr_put(map, "KEY4", &td[4]); /* 0 */ 295.143 - UCX_TEST_BEGIN 295.144 - 295.145 - td[0] = *((int*)ucx_map_cstr_remove(map, "Key0")); 295.146 - td[1] = *((int*)ucx_map_cstr_get(map, "Key1")); 295.147 - td[2] = *((int*)ucx_map_cstr_remove(map, "Key2")); 295.148 - td[3] = *((int*)ucx_map_cstr_get(map, "KeY3")); 295.149 - td[4] = *((int*)ucx_map_cstr_get(map, "KEY4")); 295.150 - UCX_TEST_ASSERT(td[0] == 10, "failed key 0"); 295.151 - UCX_TEST_ASSERT(td[1] == 42, "failed key 1"); 295.152 - UCX_TEST_ASSERT(td[2] == 70, "failed key 2"); 295.153 - UCX_TEST_ASSERT(td[3] == 11200, "failed key 3"); 295.154 - UCX_TEST_ASSERT(td[4] == 80000, "failed key 4"); 295.155 - 295.156 - UCX_TEST_ASSERT(map->count == 3, "expected 3 remaining values"); 295.157 - UCX_TEST_ASSERT(ucx_map_cstr_get(map, "Key0")==NULL, "element not removed"); 295.158 - UCX_TEST_ASSERT(ucx_map_cstr_get(map, "Key1")!=NULL, "element removed"); 295.159 - UCX_TEST_ASSERT(ucx_map_cstr_get(map, "Key2")==NULL, "element not removed"); 295.160 - UCX_TEST_ASSERT(ucx_map_cstr_get(map, "KeY3")!=NULL, "element removed"); 295.161 - UCX_TEST_ASSERT(ucx_map_cstr_get(map, "KEY4")!=NULL, "element removed"); 295.162 - 295.163 - UCX_TEST_ASSERT(ucx_map_cstr_remove(map, "Key2") == NULL, 295.164 - "subsequent remove call shall return NULL"); 295.165 - 295.166 - UCX_TEST_END 295.167 - ucx_map_free(map); 295.168 -} 295.169 - 295.170 -UCX_TEST(test_ucx_map_clear) { 295.171 - UcxMap *map = ucx_map_new(4); 295.172 - 295.173 - int value = 42; 295.174 - 295.175 - ucx_map_cstr_put(map, "Key0", &value); 295.176 - ucx_map_cstr_put(map, "Key1", &value); 295.177 - ucx_map_cstr_put(map, "Key2", &value); 295.178 - ucx_map_cstr_put(map, "Key3", &value); 295.179 - ucx_map_cstr_put(map, "Key4", &value); 295.180 - ucx_map_cstr_put(map, "Key5", &value); 295.181 - ucx_map_cstr_put(map, "Key6", &value); 295.182 - UCX_TEST_BEGIN 295.183 - 295.184 - ucx_map_clear(map); 295.185 - 295.186 - UCX_TEST_ASSERT(map->count == 0, "map has not been cleared"); 295.187 - UCX_TEST_ASSERT(map->size == 4, "map size has changed unexpectedly"); 295.188 - 295.189 - UCX_TEST_ASSERT(ucx_map_cstr_get(map, "Key0")==NULL, "element not removed"); 295.190 - UCX_TEST_ASSERT(ucx_map_cstr_get(map, "Key1")==NULL, "element not removed"); 295.191 - UCX_TEST_ASSERT(ucx_map_cstr_get(map, "Key2")==NULL, "element not removed"); 295.192 - UCX_TEST_ASSERT(ucx_map_cstr_get(map, "Key3")==NULL, "element not removed"); 295.193 - UCX_TEST_ASSERT(ucx_map_cstr_get(map, "Key4")==NULL, "element not removed"); 295.194 - UCX_TEST_ASSERT(ucx_map_cstr_get(map, "Key5")==NULL, "element not removed"); 295.195 - UCX_TEST_ASSERT(ucx_map_cstr_get(map, "Key6")==NULL, "element not removed"); 295.196 - 295.197 - UCX_TEST_END 295.198 - ucx_map_free(map); 295.199 -} 295.200 - 295.201 -UCX_TEST_SUBROUTINE(test_ucx_map_itersrt, UcxMap *map) { 295.202 - int v1 = 10; 295.203 - int v2 = 15; 295.204 - int v3 = 7; 295.205 - int v4 = 9; 295.206 - 295.207 - ucx_map_cstr_put(map, "v1", &v1); 295.208 - ucx_map_cstr_put(map, "v2", &v2); 295.209 - ucx_map_cstr_put(map, "v3", &v3); 295.210 - ucx_map_cstr_put(map, "v4", &v4); 295.211 - 295.212 - UcxMapIterator i = ucx_map_iterator(map); 295.213 - int check = 0; 295.214 - int hit = 0; 295.215 - 295.216 - void* v; 295.217 - UCX_MAP_FOREACH(key, v, i) { 295.218 - check += *((int*)v); 295.219 - hit++; 295.220 - } 295.221 - 295.222 - UCX_TEST_ASSERT(hit == 4, "test1: wrong number of hits"); 295.223 - UCX_TEST_ASSERT(check == v1+v2+v3+v4, "test1: wrong result"); 295.224 -} 295.225 - 295.226 -UCX_TEST(test_ucx_map_iterator) { 295.227 - UcxMap *map = ucx_map_new(16); 295.228 - UCX_TEST_BEGIN 295.229 - UCX_TEST_CALL_SUBROUTINE(test_ucx_map_itersrt, map) 295.230 - UCX_TEST_END 295.231 - ucx_map_free(map); 295.232 -} 295.233 - 295.234 -UCX_TEST(test_ucx_map_iterator_chain) { 295.235 - UcxMap *map = ucx_map_new(1); 295.236 - UCX_TEST_BEGIN 295.237 - UCX_TEST_CALL_SUBROUTINE(test_ucx_map_itersrt, map) 295.238 - UCX_TEST_END 295.239 - ucx_map_free(map); 295.240 -} 295.241 - 295.242 -UCX_TEST(test_ucx_map_clone) { 295.243 - UcxMap *map = ucx_map_new(4); 295.244 - 295.245 - ucx_map_cstr_put(map, "key1", (void*)"value1"); 295.246 - ucx_map_cstr_put(map, "key2", (void*)"value2"); 295.247 - ucx_map_cstr_put(map, "key3", (void*)"value3"); 295.248 - 295.249 - UcxMap *clone = ucx_map_clone(map, NULL, NULL); 295.250 - 295.251 - const char *v1 = (const char *) ucx_map_cstr_get(map, "key1"); 295.252 - const char *v2 = (const char *) ucx_map_cstr_get(map, "key2"); 295.253 - const char *v3 = (const char *) ucx_map_cstr_get(map, "key3"); 295.254 - 295.255 - UCX_TEST_BEGIN 295.256 - 295.257 - UCX_TEST_ASSERT(v1 != NULL, "failed key 1"); 295.258 - UCX_TEST_ASSERT(v2 != NULL, "failed key 2"); 295.259 - UCX_TEST_ASSERT(v3 != NULL, "failed key 3"); 295.260 - 295.261 - const char *c1 = (const char *) ucx_map_cstr_get(clone, "key1"); 295.262 - const char *c2 = (const char *) ucx_map_cstr_get(clone, "key2"); 295.263 - const char *c3 = (const char *) ucx_map_cstr_get(clone, "key3"); 295.264 - 295.265 - UCX_TEST_ASSERT(c1 != NULL, "failed key 1 (clone)"); 295.266 - UCX_TEST_ASSERT(c2 != NULL, "failed key 2 (clone)"); 295.267 - UCX_TEST_ASSERT(c3 != NULL, "failed key 3 (clone)"); 295.268 - 295.269 - UCX_TEST_ASSERT(strcmp(c1, v1) == 0, "value error for key1"); 295.270 - UCX_TEST_ASSERT(strcmp(c2, v2) == 0, "value error for key2"); 295.271 - UCX_TEST_ASSERT(strcmp(c3, v3) == 0, "value error for key3"); 295.272 - 295.273 - UCX_TEST_END 295.274 - 295.275 - ucx_map_free(map); 295.276 - ucx_map_free(clone); 295.277 -} 295.278 - 295.279 -UCX_TEST(test_ucx_map_rehash) { 295.280 - UcxMap *map = ucx_map_new(4); 295.281 - 295.282 - char keys[10][5]; 295.283 - char values[10][7]; 295.284 - for (int i = 0 ; i < 10 ; i++) { 295.285 - strcpy(keys[i], "key"); 295.286 - keys[i][3] = 48+i; keys[i][4] = 0; 295.287 - strcpy(values[i], "value"); 295.288 - values[i][5] = 48+i; values[i][6] = 0; 295.289 - 295.290 - ucx_map_cstr_put(map, keys[i], values[i]); 295.291 - } 295.292 - 295.293 - ucx_map_rehash(map); 295.294 - 295.295 - UCX_TEST_BEGIN 295.296 - UCX_TEST_ASSERT(map->size == 25, "new capacity shall be 2.5 * count"); 295.297 - UCX_TEST_ASSERT(map->count == 10, "new map element count incorrect"); 295.298 - for (int i = 0 ; i < 10 ; i++) { 295.299 - const char *value = (const char *) ucx_map_cstr_get(map, keys[i]); 295.300 - UCX_TEST_ASSERT(value != NULL, "new map is missing old keys"); 295.301 - UCX_TEST_ASSERT(strncmp(value, values[i], 6) == 0, 295.302 - "new map contains incorrect values"); 295.303 - } 295.304 - ucx_map_rehash(map); 295.305 - UCX_TEST_ASSERT(map->size == 25, 295.306 - "subsequent rehashing call shall not change size"); 295.307 - UCX_TEST_END 295.308 - 295.309 - ucx_map_free(map); 295.310 -} 295.311 - 295.312 -UCX_TEST(test_ucx_map_union) { 295.313 - int td[5]; 295.314 - size_t intlen = sizeof(int); 295.315 - td[0] = 10; td[1] = 42; td[2] = 47; td[3] = 1337; td[4] = 9000; 295.316 - 295.317 - UcxMap *first = ucx_map_new(4); 295.318 - UcxMap *second = ucx_map_new(4); 295.319 - 295.320 - ucx_map_cstr_put(first, "key0", &td[0]); 295.321 - ucx_map_cstr_put(first, "key1", &td[1]); 295.322 - ucx_map_cstr_put(second, "key2", &td[2]); 295.323 - ucx_map_cstr_put(second, "key0", &td[3]); 295.324 - ucx_map_cstr_put(second, "key3", &td[4]); 295.325 - 295.326 - UcxMap *result = ucx_map_union(first, second, ucx_memcpy, &intlen); 295.327 - 295.328 - UCX_TEST_BEGIN 295.329 - 295.330 - int* r; 295.331 - UCX_TEST_ASSERT(result->count == 4, 295.332 - "result has incorrect number of elements"); 295.333 - 295.334 - r = (int*)ucx_map_cstr_get(result, "key0"); 295.335 - UCX_TEST_ASSERT(!!r, "key0 is not present"); 295.336 - UCX_TEST_ASSERT(*r == td[3], "key0 has not been overwritten"); 295.337 - r = (int*)ucx_map_cstr_get(result, "key1"); 295.338 - UCX_TEST_ASSERT(!!r, "key1 is not present"); 295.339 - UCX_TEST_ASSERT(*r == td[1], "key1 contains wrong data"); 295.340 - r = (int*)ucx_map_cstr_get(result, "key2"); 295.341 - UCX_TEST_ASSERT(!!r, "key2 is not present"); 295.342 - UCX_TEST_ASSERT(*r == td[2], "key2 contains wrong data"); 295.343 - r = (int*)ucx_map_cstr_get(result, "key3"); 295.344 - UCX_TEST_ASSERT(!!r, "key3 is not present"); 295.345 - UCX_TEST_ASSERT(*r == td[4], "key3 contains wrong data"); 295.346 - 295.347 - UCX_TEST_END 295.348 - 295.349 - ucx_map_free_content(result, NULL); 295.350 - ucx_map_free(result); 295.351 - ucx_map_free(second); 295.352 - ucx_map_free(first); 295.353 -} 295.354 - 295.355 -UCX_TEST(test_ucx_map_intersection) { 295.356 - int td[5]; 295.357 - size_t intlen = sizeof(int); 295.358 - td[0] = 10; td[1] = 42; td[2] = 47; td[3] = 1337; td[4] = 9000; 295.359 - 295.360 - UcxMap *first = ucx_map_new(4); 295.361 - UcxMap *second = ucx_map_new(4); 295.362 - 295.363 - ucx_map_cstr_put(first, "key0", &td[0]); 295.364 - ucx_map_cstr_put(first, "key1", &td[1]); 295.365 - ucx_map_cstr_put(first, "key4", &td[3]); 295.366 - ucx_map_cstr_put(second, "key2", &td[2]); 295.367 - ucx_map_cstr_put(second, "key0", &td[3]); 295.368 - ucx_map_cstr_put(second, "key3", &td[4]); 295.369 - ucx_map_cstr_put(second, "key4", &td[4]); 295.370 - 295.371 - UcxMap *result = ucx_map_intersection(first, second, 295.372 - ucx_memcpy, &intlen); 295.373 - 295.374 - UCX_TEST_BEGIN 295.375 - 295.376 - int* r; 295.377 - UCX_TEST_ASSERT(result->count == 2, 295.378 - "result has incorrect number of elements"); 295.379 - 295.380 - r = (int*)ucx_map_cstr_get(result, "key0"); 295.381 - UCX_TEST_ASSERT(!!r, "key0 is not present"); 295.382 - UCX_TEST_ASSERT(*r == td[0], "key0 has not original data"); 295.383 - r = (int*)ucx_map_cstr_get(result, "key4"); 295.384 - UCX_TEST_ASSERT(!!r, "key4 is not present"); 295.385 - UCX_TEST_ASSERT(*r == td[3], "key4 has not original data"); 295.386 - 295.387 - UCX_TEST_END 295.388 - 295.389 - ucx_map_free_content(result, NULL); 295.390 - ucx_map_free(result); 295.391 - ucx_map_free(second); 295.392 - ucx_map_free(first); 295.393 -} 295.394 - 295.395 - 295.396 -UCX_TEST(test_ucx_map_difference) { 295.397 - int td[5]; 295.398 - size_t intlen = sizeof(int); 295.399 - td[0] = 10; td[1] = 42; td[2] = 47; td[3] = 1337; td[4] = 9000; 295.400 - 295.401 - UcxMap *first = ucx_map_new(4); 295.402 - UcxMap *second = ucx_map_new(4); 295.403 - 295.404 - ucx_map_cstr_put(first, "key0", &td[0]); 295.405 - ucx_map_cstr_put(first, "key1", &td[1]); 295.406 - ucx_map_cstr_put(first, "key2", &td[2]); 295.407 - ucx_map_cstr_put(first, "key4", &td[3]); 295.408 - ucx_map_cstr_put(second, "key0", &td[3]); 295.409 - ucx_map_cstr_put(second, "key3", &td[4]); 295.410 - ucx_map_cstr_put(second, "key4", &td[4]); 295.411 - 295.412 - UcxMap *result = ucx_map_difference(first, second, ucx_memcpy, &intlen); 295.413 - 295.414 - UCX_TEST_BEGIN 295.415 - 295.416 - int* r; 295.417 - UCX_TEST_ASSERT(result->count == 2, 295.418 - "result has incorrect number of elements"); 295.419 - 295.420 - r = (int*)ucx_map_cstr_get(result, "key1"); 295.421 - UCX_TEST_ASSERT(!!r, "key1 is not present"); 295.422 - UCX_TEST_ASSERT(*r == td[1], "key1 has incorrect data"); 295.423 - r = (int*)ucx_map_cstr_get(result, "key2"); 295.424 - UCX_TEST_ASSERT(!!r, "key2 is not present"); 295.425 - UCX_TEST_ASSERT(*r == td[2], "key2 has incorrect data"); 295.426 - 295.427 - UCX_TEST_END 295.428 - 295.429 - ucx_map_free_content(result, NULL); 295.430 - ucx_map_free(result); 295.431 - ucx_map_free(second); 295.432 - ucx_map_free(first); 295.433 -} 295.434 -
296.1 --- a/test/map_tests.h Mon Dec 30 09:54:10 2019 +0100 296.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 296.3 @@ -1,59 +0,0 @@ 296.4 -/* 296.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 296.6 - * 296.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 296.8 - * 296.9 - * Redistribution and use in source and binary forms, with or without 296.10 - * modification, are permitted provided that the following conditions are met: 296.11 - * 296.12 - * 1. Redistributions of source code must retain the above copyright 296.13 - * notice, this list of conditions and the following disclaimer. 296.14 - * 296.15 - * 2. Redistributions in binary form must reproduce the above copyright 296.16 - * notice, this list of conditions and the following disclaimer in the 296.17 - * documentation and/or other materials provided with the distribution. 296.18 - * 296.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 296.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 296.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 296.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 296.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 296.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 296.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 296.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 296.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 296.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 296.29 - * POSSIBILITY OF SUCH DAMAGE. 296.30 - */ 296.31 - 296.32 -#ifndef MAP_TESTS_H 296.33 -#define MAP_TESTS_H 296.34 - 296.35 -#include <ucx/test.h> 296.36 -#include <ucx/map.h> 296.37 - 296.38 -#ifdef __cplusplus 296.39 -extern "C" { 296.40 -#endif 296.41 - 296.42 -UCX_TEST(test_ucx_map_new); 296.43 -UCX_TEST(test_ucx_key); 296.44 -UCX_TEST(test_ucx_map_put); 296.45 -UCX_TEST(test_ucx_map_get); 296.46 -UCX_TEST(test_ucx_map_remove); 296.47 -UCX_TEST(test_ucx_map_clear); 296.48 -UCX_TEST(test_ucx_map_iterator); 296.49 -UCX_TEST(test_ucx_map_iterator_chain); 296.50 -UCX_TEST(test_ucx_map_clone); 296.51 -UCX_TEST(test_ucx_map_rehash); 296.52 -UCX_TEST(test_ucx_map_union); 296.53 -UCX_TEST(test_ucx_map_intersection); 296.54 -UCX_TEST(test_ucx_map_difference); 296.55 - 296.56 - 296.57 -#ifdef __cplusplus 296.58 -} 296.59 -#endif 296.60 - 296.61 -#endif /* MAP_TESTS_H */ 296.62 -
297.1 --- a/test/mpool_tests.c Mon Dec 30 09:54:10 2019 +0100 297.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 297.3 @@ -1,239 +0,0 @@ 297.4 -/* 297.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 297.6 - * 297.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 297.8 - * 297.9 - * Redistribution and use in source and binary forms, with or without 297.10 - * modification, are permitted provided that the following conditions are met: 297.11 - * 297.12 - * 1. Redistributions of source code must retain the above copyright 297.13 - * notice, this list of conditions and the following disclaimer. 297.14 - * 297.15 - * 2. Redistributions in binary form must reproduce the above copyright 297.16 - * notice, this list of conditions and the following disclaimer in the 297.17 - * documentation and/or other materials provided with the distribution. 297.18 - * 297.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 297.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 297.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 297.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 297.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 297.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 297.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 297.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 297.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 297.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 297.29 - * POSSIBILITY OF SUCH DAMAGE. 297.30 - */ 297.31 - 297.32 -#include <inttypes.h> 297.33 - 297.34 -#include "mpool_tests.h" 297.35 - 297.36 -UCX_TEST(test_ucx_mempool_new) { 297.37 - UcxMempool *pool = ucx_mempool_new(16); 297.38 - UCX_TEST_BEGIN 297.39 - UCX_TEST_ASSERT(pool->size == 16, "wrong size"); 297.40 - UCX_TEST_ASSERT(pool->ndata == 0, "uninitialized counter"); 297.41 - UCX_TEST_ASSERT(pool->data != NULL, "no memory addressed"); 297.42 - UCX_TEST_END 297.43 - ucx_mempool_destroy(pool); 297.44 -} 297.45 - 297.46 -UCX_TEST(test_ucx_mempool_malloc) { 297.47 - 297.48 - UcxMempool *pool = ucx_mempool_new(1); 297.49 - UCX_TEST_BEGIN 297.50 - intptr_t *test = (intptr_t*) ucx_mempool_malloc(pool, sizeof(intptr_t)); 297.51 - 297.52 - UCX_TEST_ASSERT(pool->ndata == 1, "counter not incremented"); 297.53 - UCX_TEST_ASSERT(pool->size == 1, "chcap called"); 297.54 - 297.55 - intptr_t *pooladdr = 297.56 - (intptr_t*)((char*)pool->data[0] + sizeof(ucx_destructor)); 297.57 - *pooladdr = 5; 297.58 - 297.59 - UCX_TEST_ASSERT(*test == 5, "wrong pointer"); 297.60 - 297.61 - UCX_TEST_END 297.62 - ucx_mempool_destroy(pool); 297.63 -} 297.64 - 297.65 -UCX_TEST(test_ucx_mempool_malloc_with_chcap) { 297.66 - 297.67 - UcxMempool *pool = ucx_mempool_new(1); 297.68 - UCX_TEST_BEGIN 297.69 - ucx_mempool_malloc(pool, sizeof(int)); 297.70 - intptr_t *test = (intptr_t*) ucx_mempool_malloc(pool, sizeof(intptr_t)); 297.71 - 297.72 - UCX_TEST_ASSERT(pool->ndata == 2, "counter not incremented"); 297.73 - UCX_TEST_ASSERT(pool->size == 2, "chcap not called"); 297.74 - 297.75 - intptr_t *pooladdr = 297.76 - (intptr_t*)((char*)pool->data[1] + sizeof(ucx_destructor)); 297.77 - *pooladdr = 5; 297.78 - 297.79 - UCX_TEST_ASSERT(*test == 5, "wrong pointer"); 297.80 - 297.81 - // overflow test 297.82 - void *n0 = ucx_mempool_malloc(pool, (size_t)-1); 297.83 - void *n1 = ucx_mempool_malloc(pool, ((size_t)-1) - sizeof(void*)/2); 297.84 - 297.85 - UCX_TEST_ASSERT(n0 == NULL, "should not allocate SIZE_MAX bytes"); 297.86 - UCX_TEST_ASSERT(n1 == NULL, "should detect integer overflow"); 297.87 - 297.88 - UCX_TEST_END 297.89 - ucx_mempool_destroy(pool); 297.90 -} 297.91 - 297.92 -UCX_TEST(test_ucx_mempool_calloc) { 297.93 - 297.94 - UcxMempool *pool = ucx_mempool_new(1); 297.95 - UCX_TEST_BEGIN 297.96 - 297.97 - intptr_t *test = (intptr_t*) ucx_mempool_calloc(pool, 2, sizeof(intptr_t)); 297.98 - 297.99 - UCX_TEST_ASSERT(test != NULL, "no memory for test data"); 297.100 - UCX_TEST_ASSERT(test[0] == 0 && test[1] == 0, "failed"); 297.101 - 297.102 - // overflow test 297.103 - void *n0 = ucx_mempool_calloc(pool, (size_t)-1, 1); 297.104 - void *n1 = ucx_mempool_calloc(pool, ((size_t)-1)/2, 3); 297.105 - 297.106 - UCX_TEST_ASSERT(n0 == NULL, "should not allocate SIZE_MAX bytes"); 297.107 - UCX_TEST_ASSERT(n1 == NULL, "should detect integer overflow"); 297.108 - 297.109 - UCX_TEST_END 297.110 - ucx_mempool_destroy(pool); 297.111 -} 297.112 - 297.113 -UCX_TEST(test_ucx_mempool_free) { 297.114 - UcxMempool *pool = ucx_mempool_new(16); 297.115 - void *mem1; 297.116 - void *mem2; 297.117 - 297.118 - UCX_TEST_BEGIN 297.119 - 297.120 - mem1 = ucx_mempool_malloc(pool, 16); 297.121 - ucx_mempool_free(pool, mem1); 297.122 - 297.123 - UCX_TEST_ASSERT(pool->ndata == 0, "mempool not empty"); 297.124 - 297.125 - ucx_mempool_malloc(pool, 16); 297.126 - ucx_mempool_malloc(pool, 16); 297.127 - mem1 = ucx_mempool_malloc(pool, 16); 297.128 - ucx_mempool_malloc(pool, 16); 297.129 - mem2 = ucx_mempool_malloc(pool, 16); 297.130 - 297.131 - ucx_mempool_free(pool, mem1); 297.132 - 297.133 - UCX_TEST_ASSERT(pool->ndata == 4, "wrong mempool size"); 297.134 - 297.135 - ucx_mempool_free(pool, mem2); 297.136 - 297.137 - UCX_TEST_ASSERT(pool->ndata == 3, "wrong mempool size"); 297.138 - 297.139 - UCX_TEST_END 297.140 - ucx_mempool_destroy(pool); 297.141 -} 297.142 - 297.143 -#ifdef __cplusplus 297.144 -extern "C" 297.145 -#endif 297.146 -void test_setdestr(void* elem) { 297.147 - intptr_t *cb = (intptr_t*) ((intptr_t*) elem)[1]; 297.148 - *cb = 42; 297.149 -} 297.150 - 297.151 -UCX_TEST(test_ucx_mempool_set_destr) { 297.152 - 297.153 - intptr_t *cb = (intptr_t*) malloc(sizeof(intptr_t)); 297.154 - UCX_TEST_BEGIN 297.155 - UcxMempool *pool = ucx_mempool_new(2); 297.156 - 297.157 - ucx_mempool_malloc(pool, sizeof(intptr_t)); 297.158 - intptr_t *test = (intptr_t*) ucx_mempool_calloc(pool, 2, sizeof(intptr_t)); 297.159 - 297.160 - UCX_TEST_ASSERT(cb != NULL && test != NULL, "no memory for test data"); 297.161 - 297.162 - test[0] = 5; test[1] = (intptr_t) cb; 297.163 - *cb = 13; 297.164 - 297.165 - ucx_mempool_set_destr(test, test_setdestr); 297.166 - UCX_TEST_ASSERT( 297.167 - *(ucx_destructor*)(pool->data[1]) == test_setdestr, "failed") 297.168 - UCX_TEST_ASSERT( 297.169 - test[0] == 5 && test[1] == (intptr_t) cb, "setdestr destroyed data") 297.170 - 297.171 - ucx_mempool_destroy(pool); 297.172 - 297.173 - UCX_TEST_ASSERT(*cb == 42, "destructor not called"); 297.174 - 297.175 - UCX_TEST_END 297.176 - if (cb != NULL) free(cb); 297.177 -} 297.178 - 297.179 - 297.180 -UCX_TEST(test_ucx_mempool_reg_destr) { 297.181 - 297.182 - intptr_t *test = (intptr_t*) calloc(2, sizeof(intptr_t)); 297.183 - intptr_t *cb = (intptr_t*) malloc(sizeof(intptr_t)); 297.184 - UCX_TEST_BEGIN 297.185 - UcxMempool *pool = ucx_mempool_new(1); 297.186 - 297.187 - UCX_TEST_ASSERT(cb != NULL && test != NULL, "no memory for test data"); 297.188 - 297.189 - test[0] = 5; test[1] = (intptr_t) cb; 297.190 - *cb = 13; 297.191 - 297.192 - ucx_mempool_reg_destr(pool, test, test_setdestr); 297.193 - 297.194 - ucx_destructor *pooladdr = (ucx_destructor*) 297.195 - ((char*)pool->data[0] + sizeof(ucx_destructor)); 297.196 - 297.197 - UCX_TEST_ASSERT(*pooladdr == test_setdestr, "failed"); 297.198 - 297.199 - ucx_mempool_destroy(pool); 297.200 - UCX_TEST_ASSERT(*cb == 42, "destructor not called"); 297.201 - UCX_TEST_END 297.202 - 297.203 - if (test != NULL) free(test); 297.204 - if (cb != NULL) free(cb); 297.205 -} 297.206 - 297.207 -UCX_TEST(test_ucx_mempool_realloc) { 297.208 - 297.209 - intptr_t *cb = (intptr_t*) malloc(sizeof(intptr_t)); 297.210 - UCX_TEST_BEGIN 297.211 - UcxMempool *pool = ucx_mempool_new(2); 297.212 - 297.213 - ucx_mempool_malloc(pool, sizeof(intptr_t)); 297.214 - intptr_t *test = (intptr_t*) ucx_mempool_calloc(pool, 2, sizeof(intptr_t)); 297.215 - 297.216 - UCX_TEST_ASSERT(cb != NULL && test != NULL, "no memory for test data"); 297.217 - 297.218 - test[0] = 5; test[1] = (intptr_t) cb; 297.219 - *cb = 13; 297.220 - 297.221 - ucx_mempool_set_destr(test, test_setdestr); 297.222 - 297.223 - intptr_t *rtest, n = 2; 297.224 - do { 297.225 - n *= 2; 297.226 - UCX_TEST_ASSERT(n < 65536, "test corrupt - no movement for realloc"); 297.227 - rtest = (intptr_t*) ucx_mempool_realloc(pool, test, n*sizeof(intptr_t)); 297.228 - } while (rtest == test); 297.229 - test = rtest; 297.230 - 297.231 - UCX_TEST_ASSERT(*(ucx_destructor*)(pool->data[1]) == test_setdestr, 297.232 - "realloc killed destructor") 297.233 - UCX_TEST_ASSERT( 297.234 - test[0] == 5 && test[1] == (intptr_t) cb, "realloc destroyed data") 297.235 - 297.236 - ucx_mempool_destroy(pool); 297.237 - 297.238 - UCX_TEST_ASSERT(*cb == 42, "destructor not called"); 297.239 - 297.240 - UCX_TEST_END 297.241 - if (cb != NULL) free(cb); 297.242 -}
298.1 --- a/test/mpool_tests.h Mon Dec 30 09:54:10 2019 +0100 298.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 298.3 @@ -1,53 +0,0 @@ 298.4 -/* 298.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 298.6 - * 298.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 298.8 - * 298.9 - * Redistribution and use in source and binary forms, with or without 298.10 - * modification, are permitted provided that the following conditions are met: 298.11 - * 298.12 - * 1. Redistributions of source code must retain the above copyright 298.13 - * notice, this list of conditions and the following disclaimer. 298.14 - * 298.15 - * 2. Redistributions in binary form must reproduce the above copyright 298.16 - * notice, this list of conditions and the following disclaimer in the 298.17 - * documentation and/or other materials provided with the distribution. 298.18 - * 298.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 298.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 298.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 298.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 298.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 298.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 298.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 298.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 298.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 298.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 298.29 - * POSSIBILITY OF SUCH DAMAGE. 298.30 - */ 298.31 - 298.32 -#ifndef MPOOL_TESTS_H 298.33 -#define MPOOL_TESTS_H 298.34 - 298.35 -#include <ucx/test.h> 298.36 -#include <ucx/mempool.h> 298.37 - 298.38 -#ifdef __cplusplus 298.39 -extern "C" { 298.40 -#endif 298.41 - 298.42 -UCX_TEST(test_ucx_mempool_new); 298.43 -UCX_TEST(test_ucx_mempool_malloc); 298.44 -UCX_TEST(test_ucx_mempool_malloc_with_chcap); 298.45 -UCX_TEST(test_ucx_mempool_calloc); 298.46 -UCX_TEST(test_ucx_mempool_free); 298.47 -UCX_TEST(test_ucx_mempool_set_destr); 298.48 -UCX_TEST(test_ucx_mempool_reg_destr); 298.49 -UCX_TEST(test_ucx_mempool_realloc); 298.50 - 298.51 -#ifdef __cplusplus 298.52 -} 298.53 -#endif 298.54 - 298.55 -#endif /* MPOOL_TESTS_H */ 298.56 -
299.1 --- a/test/prop_tests.c Mon Dec 30 09:54:10 2019 +0100 299.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 299.3 @@ -1,545 +0,0 @@ 299.4 -/* 299.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 299.6 - * 299.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 299.8 - * 299.9 - * Redistribution and use in source and binary forms, with or without 299.10 - * modification, are permitted provided that the following conditions are met: 299.11 - * 299.12 - * 1. Redistributions of source code must retain the above copyright 299.13 - * notice, this list of conditions and the following disclaimer. 299.14 - * 299.15 - * 2. Redistributions in binary form must reproduce the above copyright 299.16 - * notice, this list of conditions and the following disclaimer in the 299.17 - * documentation and/or other materials provided with the distribution. 299.18 - * 299.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 299.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 299.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 299.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 299.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 299.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 299.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 299.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 299.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 299.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 299.29 - * POSSIBILITY OF SUCH DAMAGE. 299.30 - */ 299.31 - 299.32 -#include "prop_tests.h" 299.33 -#include <ucx/mempool.h> 299.34 - 299.35 -UCX_TEST(test_ucx_properties_new) { 299.36 - UcxProperties *parser = ucx_properties_new(); 299.37 - 299.38 - UCX_TEST_BEGIN 299.39 - 299.40 - UCX_TEST_ASSERT(parser != NULL, "failed"); 299.41 - UCX_TEST_ASSERT(parser->buffer == NULL, "parser has buffer"); 299.42 - UCX_TEST_ASSERT(parser->tmp == NULL, "parser has tmp buffer"); 299.43 - 299.44 - UCX_TEST_END 299.45 - 299.46 - ucx_properties_free(parser); 299.47 -} 299.48 - 299.49 -UCX_TEST(test_ucx_properties_next) { 299.50 - const char *tests[] = { 299.51 - "name = value\n", 299.52 - "name=value\n", 299.53 - "n=value\n", 299.54 - "name=v\n", 299.55 - "n=v\n", 299.56 - "name = value # comment\n", 299.57 - "#comment\nn=v\n", 299.58 - "# comment1\n# comment2\n\n \n\nname = value\n", 299.59 - " name = value\n", 299.60 - "name = value\n\n" 299.61 - }; 299.62 - 299.63 - const char *names[] = { 299.64 - "name", 299.65 - "name", 299.66 - "n", 299.67 - "name", 299.68 - "n", 299.69 - "name", 299.70 - "n", 299.71 - "name", 299.72 - "name", 299.73 - "name" 299.74 - }; 299.75 - 299.76 - const char *values[] = { 299.77 - "value", 299.78 - "value", 299.79 - "value", 299.80 - "v", 299.81 - "v", 299.82 - "value", 299.83 - "v", 299.84 - "value", 299.85 - "value", 299.86 - "value" 299.87 - }; 299.88 - 299.89 - UCX_TEST_BEGIN 299.90 - 299.91 - sstr_t name; 299.92 - sstr_t value; 299.93 - 299.94 - for(int i=0;i<10;i++) { 299.95 - UcxProperties *parser = ucx_properties_new(); 299.96 - 299.97 - ucx_properties_fill(parser, (char*)tests[i], strlen(tests[i])); 299.98 - UCX_TEST_ASSERT(parser->buffer == tests[i], "fill failed"); 299.99 - UCX_TEST_ASSERT(parser->buflen == strlen(tests[i]), "wrong buflen"); 299.100 - 299.101 - int r = ucx_properties_next(parser, &name, &value); 299.102 - sstr_t n = sstr((char*)names[i]); 299.103 - sstr_t v = sstr((char*)values[i]); 299.104 - UCX_TEST_ASSERT(r == 1, "next returned 0"); 299.105 - UCX_TEST_ASSERT((!sstrcmp(name, n)), "wrong property name"); 299.106 - UCX_TEST_ASSERT((!sstrcmp(value, v)), "wrong property value"); 299.107 - 299.108 - r = ucx_properties_next(parser, &name, &value); 299.109 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.110 - UCX_TEST_ASSERT(parser->tmp == NULL, "tmp not NULL"); 299.111 - UCX_TEST_ASSERT(parser->tmpcap == 0, "tmpcap not NULL"); 299.112 - UCX_TEST_ASSERT(parser->tmplen == 0, "tmplen not NULL"); 299.113 - 299.114 - ucx_properties_free(parser); 299.115 - } 299.116 - 299.117 - UCX_TEST_END 299.118 -} 299.119 - 299.120 -UCX_TEST(test_ucx_properties_next_multi) { 299.121 - const char *names[] = { 299.122 - "a", 299.123 - "b", 299.124 - "c", 299.125 - "uap", 299.126 - "name", 299.127 - "key1", 299.128 - "key2", 299.129 - "key3" 299.130 - }; 299.131 - 299.132 - const char *values[] = { 299.133 - "a value", 299.134 - "b value", 299.135 - "core", 299.136 - "core", 299.137 - "ucx", 299.138 - "value1", 299.139 - "value2", 299.140 - "value3" 299.141 - }; 299.142 - 299.143 - const char *str = "#\n" 299.144 - "# properties\n" 299.145 - "# contains key/value pairs\n" 299.146 - "#\n" 299.147 - "a = a value\n" 299.148 - "b = b value\n" 299.149 - "c = core\n" 299.150 - "\n# test\n" 299.151 - "uap = core\n" 299.152 - "name = ucx\n" 299.153 - "# no = property\n" 299.154 - "key1 = value1\n" 299.155 - "#key1 = wrong value\n" 299.156 - "#key2 = not value 2\n" 299.157 - "key2 = value2\n" 299.158 - "\n\n\n \n key3=value3\n"; 299.159 - 299.160 - UcxProperties *parser = ucx_properties_new(); 299.161 - 299.162 - UCX_TEST_BEGIN 299.163 - 299.164 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.165 - 299.166 - sstr_t name; 299.167 - sstr_t value; 299.168 - for(int i=0;i<8;i++) { 299.169 - int r = ucx_properties_next(parser, &name, &value); 299.170 - UCX_TEST_ASSERT(r == 1, "next returned 0"); 299.171 - UCX_TEST_ASSERT((!sstrcmp(name, sstr((char*)names[i]))), "wrong name"); 299.172 - UCX_TEST_ASSERT((!sstrcmp(value, sstr((char*)values[i]))), 299.173 - "wrong value"); 299.174 - } 299.175 - int r = ucx_properties_next(parser, &name, &value); 299.176 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.177 - 299.178 - UCX_TEST_END 299.179 - 299.180 - ucx_properties_free(parser); 299.181 -} 299.182 - 299.183 -UCX_TEST(test_ucx_properties_next_part) { 299.184 - UcxProperties *parser = ucx_properties_new(); 299.185 - const char *str; 299.186 - int r; 299.187 - sstr_t name; 299.188 - sstr_t value; 299.189 - 299.190 - UCX_TEST_BEGIN 299.191 - 299.192 - str = ""; 299.193 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.194 - r = ucx_properties_next(parser, &name, &value); 299.195 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.196 - 299.197 - str = " \n"; 299.198 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.199 - r = ucx_properties_next(parser, &name, &value); 299.200 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.201 - 299.202 - str = "name"; 299.203 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.204 - r = ucx_properties_next(parser, &name, &value); 299.205 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.206 - 299.207 - str = " "; 299.208 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.209 - r = ucx_properties_next(parser, &name, &value); 299.210 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.211 - 299.212 - str = "= "; 299.213 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.214 - r = ucx_properties_next(parser, &name, &value); 299.215 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.216 - 299.217 - str = "value"; 299.218 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.219 - r = ucx_properties_next(parser, &name, &value); 299.220 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.221 - 299.222 - str = "\n"; 299.223 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.224 - r = ucx_properties_next(parser, &name, &value); 299.225 - UCX_TEST_ASSERT(r == 1, "next returned 0"); 299.226 - UCX_TEST_ASSERT((!sstrcmp(name, sstr((char*)"name"))), "wrong name"); 299.227 - UCX_TEST_ASSERT((!sstrcmp(value, sstr((char*)"value"))), "wrong value"); 299.228 - 299.229 - // second round 299.230 - str = "#comment\n"; 299.231 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.232 - r = ucx_properties_next(parser, &name, &value); 299.233 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.234 - 299.235 - str = "#comment\nname = "; 299.236 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.237 - r = ucx_properties_next(parser, &name, &value); 299.238 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.239 - 299.240 - str = "value\na = b\n"; 299.241 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.242 - r = ucx_properties_next(parser, &name, &value); 299.243 - UCX_TEST_ASSERT(r == 1, "next returned 0"); 299.244 - UCX_TEST_ASSERT((!sstrcmp(name, sstr((char*)"name"))), "wrong name"); 299.245 - UCX_TEST_ASSERT((!sstrcmp(value, sstr((char*)"value"))), "wrong value"); 299.246 - 299.247 - r = ucx_properties_next(parser, &name, &value); 299.248 - UCX_TEST_ASSERT(r == 1, "next returned 0"); 299.249 - UCX_TEST_ASSERT((!sstrcmp(name, sstr((char*)"a"))), "wrong name"); 299.250 - UCX_TEST_ASSERT((!sstrcmp(value, sstr((char*)"b"))), "wrong value"); 299.251 - 299.252 - str = "# comment\n#\n#\ntests = "; 299.253 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.254 - r = ucx_properties_next(parser, &name, &value); 299.255 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.256 - 299.257 - str = "test1 "; 299.258 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.259 - r = ucx_properties_next(parser, &name, &value); 299.260 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.261 - 299.262 - str = "test2 test3 test4\n"; 299.263 - sstr_t testv = sstr((char*)"test1 test2 test3 test4"); 299.264 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.265 - r = ucx_properties_next(parser, &name, &value); 299.266 - UCX_TEST_ASSERT(r == 1, "next returned 0"); 299.267 - UCX_TEST_ASSERT((!sstrcmp(name, sstr((char*)"tests"))), "wrong name"); 299.268 - UCX_TEST_ASSERT((!sstrcmp(value, testv)), "wrong value"); 299.269 - 299.270 - // test if ucx_properties_next finds a name/value after a tmp comment 299.271 - str = "# just a comment"; 299.272 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.273 - r = ucx_properties_next(parser, &name, &value); 299.274 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.275 - 299.276 - str = " in 3"; 299.277 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.278 - r = ucx_properties_next(parser, &name, &value); 299.279 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.280 - 299.281 - str = " parts\na = 1\n"; 299.282 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.283 - r = ucx_properties_next(parser, &name, &value); 299.284 - UCX_TEST_ASSERT(r == 1, "next returned 0"); 299.285 - UCX_TEST_ASSERT((!sstrcmp(name, sstr((char*)"a"))), "wrong name"); 299.286 - UCX_TEST_ASSERT((!sstrcmp(value, sstr((char*)"1"))), "wrong value"); 299.287 - 299.288 - UCX_TEST_END 299.289 - 299.290 - ucx_properties_free(parser); 299.291 -} 299.292 - 299.293 -UCX_TEST(test_ucx_properties_next_long) { 299.294 - UcxProperties *parser = ucx_properties_new(); 299.295 - int r; 299.296 - size_t name_len = 512; 299.297 - char *long_name = (char*)malloc(name_len); 299.298 - memset(long_name, 'a', 70); 299.299 - memset(long_name+70, 'b', 242); 299.300 - memset(long_name+312, 'c', 200); 299.301 - 299.302 - size_t value_len = 2048; 299.303 - char *long_value = (char*)malloc(value_len); 299.304 - memset(long_value, 'x', 1024); 299.305 - memset(long_value+1024, 'y', 1024); 299.306 - 299.307 - UCX_TEST_BEGIN 299.308 - 299.309 - sstr_t name; 299.310 - sstr_t value; 299.311 - 299.312 - ucx_properties_fill(parser, long_name, 10); 299.313 - r = ucx_properties_next(parser, &name, &value); 299.314 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.315 - 299.316 - ucx_properties_fill(parser, long_name+10, 202); 299.317 - r = ucx_properties_next(parser, &name, &value); 299.318 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.319 - 299.320 - ucx_properties_fill(parser, long_name+212, 200); 299.321 - r = ucx_properties_next(parser, &name, &value); 299.322 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.323 - 299.324 - ucx_properties_fill(parser, long_name+412, 100); 299.325 - r = ucx_properties_next(parser, &name, &value); 299.326 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.327 - 299.328 - const char *str = " = "; 299.329 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.330 - r = ucx_properties_next(parser, &name, &value); 299.331 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.332 - 299.333 - ucx_properties_fill(parser, long_value, 512); 299.334 - r = ucx_properties_next(parser, &name, &value); 299.335 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.336 - 299.337 - ucx_properties_fill(parser, long_value+512, 1024); 299.338 - r = ucx_properties_next(parser, &name, &value); 299.339 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.340 - 299.341 - ucx_properties_fill(parser, long_value+1536, 512); 299.342 - r = ucx_properties_next(parser, &name, &value); 299.343 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.344 - 299.345 - str = "\n#comment\nkey = value\n"; 299.346 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.347 - r = ucx_properties_next(parser, &name, &value); 299.348 - sstr_t n = sstrn(long_name, name_len); 299.349 - sstr_t v = sstrn(long_value, value_len); 299.350 - UCX_TEST_ASSERT(r == 1, "next returned 0"); 299.351 - UCX_TEST_ASSERT((!sstrcmp(name, n)), "wrong name"); 299.352 - UCX_TEST_ASSERT((!sstrcmp(value, v)), "wrong value"); 299.353 - 299.354 - r = ucx_properties_next(parser, &name, &value); 299.355 - UCX_TEST_ASSERT(r == 1, "next returned 0"); 299.356 - UCX_TEST_ASSERT((!sstrcmp(name, sstr((char*)"key"))), "wrong name"); 299.357 - UCX_TEST_ASSERT((!sstrcmp(value, sstr((char*)"value"))), "wrong value"); 299.358 - 299.359 - r = ucx_properties_next(parser, &name, &value); 299.360 - UCX_TEST_ASSERT(r == 0, "next returned 1"); 299.361 - 299.362 - UCX_TEST_END 299.363 - 299.364 - free(long_name); 299.365 - free(long_value); 299.366 - ucx_properties_free(parser); 299.367 -} 299.368 - 299.369 -UCX_TEST(test_ucx_properties2map) { 299.370 - UcxMempool *mp = ucx_mempool_new(64); 299.371 - UcxMap *map = ucx_map_new_a(mp->allocator, 16); 299.372 - UcxProperties *parser = ucx_properties_new(); 299.373 - 299.374 - UCX_TEST_BEGIN 299.375 - 299.376 - const char *str = "key1 = value1\nkey2 = value2\n\n#comment\n\nkey3 = value3\n"; 299.377 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.378 - 299.379 - int r = ucx_properties2map(parser, map); 299.380 - 299.381 - UCX_TEST_ASSERT(r == 0, "properties2map failed"); 299.382 - UCX_TEST_ASSERT(map->count == 3, "wrong number of properties"); 299.383 - 299.384 - char *v1 = (char*)ucx_map_cstr_get(map, "key1"); 299.385 - char *v2 = (char*)ucx_map_cstr_get(map, "key2"); 299.386 - char *v3 = (char*)ucx_map_cstr_get(map, "key3"); 299.387 - 299.388 - UCX_TEST_ASSERT(v1, "value for key1 not found"); 299.389 - UCX_TEST_ASSERT(v2, "value for key2 not found"); 299.390 - UCX_TEST_ASSERT(v3, "value for key3 not found"); 299.391 - 299.392 - UCX_TEST_ASSERT((!strcmp(v1, "value1")), "wrong value for key1"); 299.393 - UCX_TEST_ASSERT((!strcmp(v2, "value2")), "wrong value for key2"); 299.394 - UCX_TEST_ASSERT((!strcmp(v3, "value3")), "wrong value for key3"); 299.395 - 299.396 - // second test 299.397 - ucx_map_free(map); 299.398 - map = ucx_map_new_a(mp->allocator, 16); 299.399 - 299.400 - str = "\n#comment\n"; 299.401 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.402 - 299.403 - r = ucx_properties2map(parser, map); 299.404 - UCX_TEST_ASSERT(r == 0, "properties2map failed"); 299.405 - UCX_TEST_ASSERT(map->count == 0, "wrong number of properties"); 299.406 - 299.407 - str = "key1 = value1\nsyntax error line\n"; 299.408 - ucx_properties_fill(parser, (char*)str, strlen(str)); 299.409 - 299.410 - r = ucx_properties2map(parser, map); 299.411 - UCX_TEST_ASSERT(r == 1, "properties2map should return 1"); 299.412 - UCX_TEST_ASSERT(map->count == 1, "wrong number of properties"); 299.413 - 299.414 - char *v = (char*)ucx_map_cstr_get(map, "key1"); 299.415 - UCX_TEST_ASSERT((!strcmp(v, "value1")), "wrong value"); 299.416 - 299.417 - UCX_TEST_END 299.418 - 299.419 - ucx_mempool_destroy(mp); 299.420 - ucx_properties_free(parser); 299.421 -} 299.422 - 299.423 -UCX_TEST(test_ucx_properties_load) { 299.424 - UCX_TEST_BEGIN 299.425 - FILE *f = tmpfile(); 299.426 - UCX_TEST_ASSERT(f, "test file cannot be opened, test aborted"); 299.427 - 299.428 - fprintf(f, "# properties file\n\nkey1 = value1\nkey2 = value2\n"); 299.429 - fprintf(f, "\n\nkey3 = value3\n\n"); 299.430 - 299.431 - size_t name_len = 512; 299.432 - char *long_name = (char*)malloc(name_len); 299.433 - memset(long_name, 'k', 512); 299.434 - 299.435 - size_t value_len = 2048; 299.436 - char *long_value = (char*)malloc(value_len); 299.437 - memset(long_value, 'v', 2048); 299.438 - 299.439 - fwrite(long_name, 1, name_len, f); 299.440 - fprintf(f, " = "); 299.441 - fwrite(long_value, 1, value_len, f); 299.442 - fprintf(f, " \n"); 299.443 - 299.444 - fprintf(f, "\n\n\n\nlast_key = property value\n"); 299.445 - 299.446 - fflush(f); 299.447 - fseek(f, 0, SEEK_SET); 299.448 - 299.449 - UcxMap *map = ucx_map_new(8); 299.450 - int r = ucx_properties_load(map, f); 299.451 - 299.452 - UCX_TEST_ASSERT(r == 0, "ucx_properties_load failed"); 299.453 - UCX_TEST_ASSERT(map->count == 5, "wrong number of properties"); 299.454 - 299.455 - char *v1 = (char*)ucx_map_cstr_get(map, "key1"); 299.456 - char *v2 = (char*)ucx_map_cstr_get(map, "key2"); 299.457 - char *v3 = (char*)ucx_map_cstr_get(map, "key3"); 299.458 - char *lv = (char*)ucx_map_sstr_get(map, sstrn(long_name, name_len)); 299.459 - char *lk = (char*)ucx_map_cstr_get(map, "last_key"); 299.460 - 299.461 - UCX_TEST_ASSERT(v1, "value for key1 not found"); 299.462 - UCX_TEST_ASSERT(v2, "value for key2 not found"); 299.463 - UCX_TEST_ASSERT(v3, "value for key3 not found"); 299.464 - UCX_TEST_ASSERT(lv, "value for long key not found"); 299.465 - UCX_TEST_ASSERT(lk, "value for last_key not found"); 299.466 - 299.467 - UCX_TEST_ASSERT((!strcmp(v1, "value1")), "wrong value for key1"); 299.468 - UCX_TEST_ASSERT((!strcmp(v2, "value2")), "wrong value for key2"); 299.469 - UCX_TEST_ASSERT((!strcmp(v3, "value3")), "wrong value for key3"); 299.470 - sstr_t long1 = sstrn(long_value, value_len); 299.471 - sstr_t long2 = sstr(lv); 299.472 - UCX_TEST_ASSERT((!sstrcmp(long1, long2)), "wrong value for long key"); 299.473 - UCX_TEST_ASSERT(!strcmp(lk, "property value"), "wrong value for last_key"); 299.474 - 299.475 - free(v1); 299.476 - free(v2); 299.477 - free(v3); 299.478 - free(lv); 299.479 - free(lk); 299.480 - ucx_map_free(map); 299.481 - fclose(f); 299.482 - 299.483 - free(long_name); 299.484 - free(long_value); 299.485 - 299.486 - UCX_TEST_END 299.487 -} 299.488 - 299.489 -UCX_TEST(test_ucx_properties_store) { 299.490 - UcxMap *map1 = ucx_map_new(16); 299.491 - ucx_map_cstr_put(map1, "key1", "value1"); 299.492 - ucx_map_cstr_put(map1, "key2", "value2"); 299.493 - ucx_map_cstr_put(map1, "key3", "value3"); 299.494 - ucx_map_cstr_put(map1, "key4", "value4"); 299.495 - ucx_map_cstr_put(map1, "property.key1", "some value 1"); 299.496 - ucx_map_cstr_put(map1, "property.key2", "some value 2"); 299.497 - ucx_map_cstr_put(map1, "property.key3", "some value 3"); 299.498 - ucx_map_cstr_put(map1, "property.key4", "some value 4"); 299.499 - 299.500 - UCX_TEST_BEGIN 299.501 - 299.502 - FILE *f = tmpfile(); 299.503 - fprintf(f, "#\n# test property file\n#\n#\n"); 299.504 - ucx_properties_store(map1, f); 299.505 - 299.506 - fflush(f); 299.507 - fseek(f, 0, SEEK_SET); 299.508 - UcxMap *map2 = ucx_map_new(16); 299.509 - ucx_properties_load(map2, f); 299.510 - 299.511 - UCX_TEST_ASSERT(map2->count == 8, "wrong number of properties in map2"); 299.512 - 299.513 - char *v1 = (char*)ucx_map_cstr_get(map2, "key1"); 299.514 - char *v2 = (char*)ucx_map_cstr_get(map2, "key2"); 299.515 - char *v3 = (char*)ucx_map_cstr_get(map2, "key3"); 299.516 - char *v4 = (char*)ucx_map_cstr_get(map2, "key4"); 299.517 - char *v5 = (char*)ucx_map_cstr_get(map2, "property.key1"); 299.518 - char *v6 = (char*)ucx_map_cstr_get(map2, "property.key2"); 299.519 - char *v7 = (char*)ucx_map_cstr_get(map2, "property.key3"); 299.520 - char *v8 = (char*)ucx_map_cstr_get(map2, "property.key4"); 299.521 - 299.522 - UCX_TEST_ASSERT(v1 && v2 && v3 && v4 && v5 && v6 && v7 && v8, 299.523 - "missing values"); 299.524 - 299.525 - UCX_TEST_ASSERT((!strcmp(v1, "value1")), "wrong value 1"); 299.526 - UCX_TEST_ASSERT((!strcmp(v2, "value2")), "wrong value 2"); 299.527 - UCX_TEST_ASSERT((!strcmp(v3, "value3")), "wrong value 3"); 299.528 - UCX_TEST_ASSERT((!strcmp(v4, "value4")), "wrong value 4"); 299.529 - UCX_TEST_ASSERT((!strcmp(v5, "some value 1")), "wrong value 5"); 299.530 - UCX_TEST_ASSERT((!strcmp(v6, "some value 2")), "wrong value 6"); 299.531 - UCX_TEST_ASSERT((!strcmp(v7, "some value 3")), "wrong value 7"); 299.532 - UCX_TEST_ASSERT((!strcmp(v8, "some value 4")), "wrong value 8"); 299.533 - 299.534 - free(v1); 299.535 - free(v2); 299.536 - free(v3); 299.537 - free(v4); 299.538 - free(v5); 299.539 - free(v6); 299.540 - free(v7); 299.541 - free(v8); 299.542 - ucx_map_free(map2); 299.543 - fclose(f); 299.544 - 299.545 - UCX_TEST_END 299.546 - 299.547 - ucx_map_free(map1); 299.548 -}
300.1 --- a/test/prop_tests.h Mon Dec 30 09:54:10 2019 +0100 300.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 300.3 @@ -1,53 +0,0 @@ 300.4 -/* 300.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 300.6 - * 300.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 300.8 - * 300.9 - * Redistribution and use in source and binary forms, with or without 300.10 - * modification, are permitted provided that the following conditions are met: 300.11 - * 300.12 - * 1. Redistributions of source code must retain the above copyright 300.13 - * notice, this list of conditions and the following disclaimer. 300.14 - * 300.15 - * 2. Redistributions in binary form must reproduce the above copyright 300.16 - * notice, this list of conditions and the following disclaimer in the 300.17 - * documentation and/or other materials provided with the distribution. 300.18 - * 300.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 300.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 300.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 300.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 300.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 300.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 300.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 300.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 300.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 300.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 300.29 - * POSSIBILITY OF SUCH DAMAGE. 300.30 - */ 300.31 - 300.32 -#ifndef PROP_TESTS_H 300.33 -#define PROP_TESTS_H 300.34 - 300.35 -#include <ucx/test.h> 300.36 -#include <ucx/properties.h> 300.37 - 300.38 -#ifdef __cplusplus 300.39 -extern "C" { 300.40 -#endif 300.41 - 300.42 -UCX_TEST(test_ucx_properties_new); 300.43 -UCX_TEST(test_ucx_properties_next); 300.44 -UCX_TEST(test_ucx_properties_next_multi); 300.45 -UCX_TEST(test_ucx_properties_next_part); 300.46 -UCX_TEST(test_ucx_properties_next_long); 300.47 -UCX_TEST(test_ucx_properties2map); 300.48 -UCX_TEST(test_ucx_properties_load); 300.49 -UCX_TEST(test_ucx_properties_store); 300.50 - 300.51 -#ifdef __cplusplus 300.52 -} 300.53 -#endif 300.54 - 300.55 -#endif /* PROP_TESTS_H */ 300.56 -
301.1 --- a/test/stack_tests.c Mon Dec 30 09:54:10 2019 +0100 301.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 301.3 @@ -1,209 +0,0 @@ 301.4 -/* 301.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 301.6 - * 301.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 301.8 - * 301.9 - * Redistribution and use in source and binary forms, with or without 301.10 - * modification, are permitted provided that the following conditions are met: 301.11 - * 301.12 - * 1. Redistributions of source code must retain the above copyright 301.13 - * notice, this list of conditions and the following disclaimer. 301.14 - * 301.15 - * 2. Redistributions in binary form must reproduce the above copyright 301.16 - * notice, this list of conditions and the following disclaimer in the 301.17 - * documentation and/or other materials provided with the distribution. 301.18 - * 301.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 301.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 301.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 301.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 301.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 301.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 301.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 301.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 301.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 301.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 301.29 - * POSSIBILITY OF SUCH DAMAGE. 301.30 - */ 301.31 - 301.32 -#include "stack_tests.h" 301.33 - 301.34 -#define test_ucx_stack_before \ 301.35 - char space[99]; \ 301.36 - UcxStack stack; \ 301.37 - ucx_stack_init(&stack, space, 99) \ 301.38 - 301.39 -UCX_TEST(test_ucx_stack_init) { 301.40 - 301.41 - test_ucx_stack_before; 301.42 - 301.43 - UCX_TEST_BEGIN 301.44 - 301.45 - UCX_TEST_ASSERT( 301.46 - stack.allocator.malloc == (ucx_allocator_malloc) ucx_stack_malloc && 301.47 - stack.allocator.calloc == (ucx_allocator_calloc) ucx_stack_calloc && 301.48 - stack.allocator.realloc == (ucx_allocator_realloc) ucx_stack_realloc && 301.49 - stack.allocator.free == (ucx_allocator_free) ucx_stack_free && 301.50 - stack.allocator.pool == &stack, 301.51 - "allocator not properly set"); 301.52 - 301.53 - UCX_TEST_ASSERT(!stack.top && stack.space == space 301.54 - && stack.size == 99 - 99 % sizeof(void*), 301.55 - "struct fields not properly set"); 301.56 - 301.57 - UCX_TEST_END 301.58 -} 301.59 - 301.60 -UCX_TEST(test_ucx_stack_malloc) { 301.61 - 301.62 - test_ucx_stack_before; 301.63 - 301.64 - const size_t metasize = sizeof(struct ucx_stack_metadata); 301.65 - 301.66 - 301.67 - char* first = (char*) ucx_stack_malloc(&stack, 30); 301.68 - char* second = (char*) ucx_stack_malloc(&stack, 30); 301.69 - char* full = (char*) ucx_stack_malloc(&stack, 30); 301.70 - 301.71 - memcpy(first, "012345678901234567890123456789", 30); 301.72 - memcpy(second, "abcdefghijklmnopqrstuvwxyzABCD", 30); 301.73 - 301.74 - UCX_TEST_BEGIN 301.75 - 301.76 - UCX_TEST_ASSERT(!memcmp(space + metasize, 301.77 - "012345678901234567890123456789", 30), "first element corrupted"); 301.78 - UCX_TEST_ASSERT(!memcmp(space + 32+2*metasize, 301.79 - "abcdefghijklmnopqrstuvwxyzABCD", 30), "first element corrupted"); 301.80 - 301.81 - UCX_TEST_ASSERT(!full, "stack can be overflowed"); 301.82 - UCX_TEST_ASSERT(stack.top == space + 32 + 2*metasize, "wrong top pointer"); 301.83 - 301.84 - if (3*metasize < 32) { 301.85 - UCX_TEST_ASSERT(ucx_stack_avail(&stack) == 32-3*metasize, 301.86 - "wrong remaining available memory"); 301.87 - } else { 301.88 - UCX_TEST_ASSERT(ucx_stack_avail(&stack) == 0, 301.89 - "wrong remaining available memory"); 301.90 - } 301.91 - 301.92 - UCX_TEST_END 301.93 -} 301.94 - 301.95 -UCX_TEST(test_ucx_stack_calloc) { 301.96 - 301.97 - test_ucx_stack_before; 301.98 - 301.99 - char zeros[99]; 301.100 - memset(zeros, 0, 99); 301.101 - memset(space, 32, 99); 301.102 - ucx_stack_calloc(&stack, 4, sizeof(int)); 301.103 - 301.104 - UCX_TEST_BEGIN 301.105 - 301.106 - UCX_TEST_ASSERT(!memcmp(space+sizeof(struct ucx_stack_metadata), 301.107 - zeros, 4*sizeof(int)), "memory not nulled"); 301.108 - UCX_TEST_ASSERT(!memcmp(space+sizeof(struct ucx_stack_metadata) 301.109 - +4*sizeof(int), " ", 10), "too much memory nulled"); 301.110 - 301.111 - UCX_TEST_END 301.112 -} 301.113 - 301.114 -UCX_TEST(test_ucx_stack_free) { 301.115 - 301.116 - test_ucx_stack_before; 301.117 - 301.118 - void *fst = ucx_stack_malloc(&stack, 10); 301.119 - void *snd = ucx_stack_malloc(&stack, 10); 301.120 - void *thrd = ucx_stack_malloc(&stack, 10); 301.121 - 301.122 - UCX_TEST_BEGIN 301.123 - 301.124 - UCX_TEST_ASSERT(stack.top == thrd, "wrong stack"); 301.125 - UCX_TEST_ASSERT(((struct ucx_stack_metadata*) thrd - 1)->prev == snd, 301.126 - "wrong thrd prev pointer before free"); 301.127 - 301.128 - ucx_stack_free(&stack, snd); 301.129 - 301.130 - UCX_TEST_ASSERT(((struct ucx_stack_metadata*) thrd - 1)->prev == fst, 301.131 - "wrong thrd prev pointer after freeing snd"); 301.132 - UCX_TEST_ASSERT(stack.top == thrd, "wrong top after freeing snd"); 301.133 - 301.134 - ucx_stack_free(&stack, thrd); 301.135 - 301.136 - UCX_TEST_ASSERT(stack.top == fst, "wrong top after freeing thrd"); 301.137 - 301.138 - UCX_TEST_END 301.139 -} 301.140 - 301.141 -UCX_TEST(test_ucx_stack_realloc) { 301.142 - 301.143 - test_ucx_stack_before; 301.144 - 301.145 - void *fst = ucx_stack_malloc(&stack, 14); 301.146 - void *snd = ucx_stack_malloc(&stack, 10); 301.147 - 301.148 - UCX_TEST_BEGIN 301.149 - 301.150 - void *nfst = ucx_stack_realloc(&stack, fst, 16); 301.151 - UCX_TEST_ASSERT(nfst == fst, "unnecessary move on reallocation"); 301.152 - UCX_TEST_ASSERT(((struct ucx_stack_metadata*)fst - 1)->size == 16, 301.153 - "wrong size after reallocation"); 301.154 - 301.155 - void *nsnd = ucx_stack_realloc(&stack, snd, 30); 301.156 - UCX_TEST_ASSERT(nsnd == snd, "unnecessary move on top reallocation"); 301.157 - UCX_TEST_ASSERT(ucx_stack_topsize(&stack) == 30, 301.158 - "wrong size after top reallocation"); 301.159 - 301.160 - nsnd = ucx_stack_realloc(&stack, snd, 5); 301.161 - UCX_TEST_ASSERT(nsnd == snd, "unnecessary move on top shrink"); 301.162 - UCX_TEST_ASSERT(ucx_stack_topsize(&stack) == 5, 301.163 - "wrong size after top shrink"); 301.164 - UCX_TEST_ASSERT(ucx_stack_avail(&stack) == 301.165 - 72-3*sizeof(struct ucx_stack_metadata), "wrong size after top shrink"); 301.166 - 301.167 - nfst = ucx_stack_realloc(&stack, fst, 24); 301.168 - UCX_TEST_ASSERT(nfst != fst, "missing move on huge reallocation"); 301.169 - UCX_TEST_ASSERT(stack.top == nfst, "wrong top after huge reallocation"); 301.170 - UCX_TEST_ASSERT(ucx_stack_topsize(&stack) == 24, 301.171 - "wrong size after huge reallocation"); 301.172 - UCX_TEST_ASSERT(!((struct ucx_stack_metadata*)snd - 1)->prev, 301.173 - "element not freed after huge reallocation"); 301.174 - 301.175 - UCX_TEST_END 301.176 -} 301.177 - 301.178 -UCX_TEST(test_ucx_stack_pop) { 301.179 - 301.180 - test_ucx_stack_before; 301.181 - memset(space, 32, 99); 301.182 - 301.183 - void *fst = ucx_stack_malloc(&stack, 10); 301.184 - void *snd = ucx_stack_malloc(&stack, 10); 301.185 - ucx_stack_malloc(&stack, 10); 301.186 - 301.187 - char buf[16]; 301.188 - 301.189 - UCX_TEST_BEGIN 301.190 - 301.191 - memset(buf, '0', 16); 301.192 - ucx_stack_pop(&stack, buf); 301.193 - UCX_TEST_ASSERT(memcmp(buf, " 000000", 16) == 0, 301.194 - "popped wrong content"); 301.195 - UCX_TEST_ASSERT(stack.top == snd, "wrong top after pop"); 301.196 - 301.197 - memset(buf, '0', 16); 301.198 - ucx_stack_popn(&stack, buf, 5); 301.199 - UCX_TEST_ASSERT(memcmp(buf, " 00000000000", 16) == 0, 301.200 - "n-popped wrong content"); 301.201 - UCX_TEST_ASSERT(stack.top == fst, "wrong top after pop"); 301.202 - 301.203 - ucx_stack_pop(&stack, buf); 301.204 - UCX_TEST_ASSERT(!stack.top, "top not NULL after last pop"); 301.205 - 301.206 - memset(buf, '0', 16); 301.207 - ucx_stack_pop(&stack, buf); 301.208 - UCX_TEST_ASSERT(memcmp(buf, "0000000000000000", 16) == 0, 301.209 - "content not unchanged after empty pop"); 301.210 - 301.211 - UCX_TEST_END 301.212 -}
302.1 --- a/test/stack_tests.h Mon Dec 30 09:54:10 2019 +0100 302.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 302.3 @@ -1,51 +0,0 @@ 302.4 -/* 302.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 302.6 - * 302.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 302.8 - * 302.9 - * Redistribution and use in source and binary forms, with or without 302.10 - * modification, are permitted provided that the following conditions are met: 302.11 - * 302.12 - * 1. Redistributions of source code must retain the above copyright 302.13 - * notice, this list of conditions and the following disclaimer. 302.14 - * 302.15 - * 2. Redistributions in binary form must reproduce the above copyright 302.16 - * notice, this list of conditions and the following disclaimer in the 302.17 - * documentation and/or other materials provided with the distribution. 302.18 - * 302.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 302.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 302.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 302.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 302.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 302.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 302.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 302.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 302.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 302.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 302.29 - * POSSIBILITY OF SUCH DAMAGE. 302.30 - */ 302.31 - 302.32 -#ifndef STACK_TESTS_H 302.33 -#define STACK_TESTS_H 302.34 - 302.35 -#include <ucx/test.h> 302.36 -#include <ucx/stack.h> 302.37 - 302.38 -#ifdef __cplusplus 302.39 -extern "C" { 302.40 -#endif 302.41 - 302.42 -UCX_TEST(test_ucx_stack_init); 302.43 -UCX_TEST(test_ucx_stack_malloc); 302.44 -UCX_TEST(test_ucx_stack_calloc); 302.45 -UCX_TEST(test_ucx_stack_free); 302.46 -UCX_TEST(test_ucx_stack_realloc); 302.47 -UCX_TEST(test_ucx_stack_pop); 302.48 - 302.49 -#ifdef __cplusplus 302.50 -} 302.51 -#endif 302.52 - 302.53 -#endif /* STACK_TESTS_H */ 302.54 -
303.1 --- a/test/string_tests.c Mon Dec 30 09:54:10 2019 +0100 303.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 303.3 @@ -1,589 +0,0 @@ 303.4 -/* 303.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 303.6 - * 303.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 303.8 - * 303.9 - * Redistribution and use in source and binary forms, with or without 303.10 - * modification, are permitted provided that the following conditions are met: 303.11 - * 303.12 - * 1. Redistributions of source code must retain the above copyright 303.13 - * notice, this list of conditions and the following disclaimer. 303.14 - * 303.15 - * 2. Redistributions in binary form must reproduce the above copyright 303.16 - * notice, this list of conditions and the following disclaimer in the 303.17 - * documentation and/or other materials provided with the distribution. 303.18 - * 303.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 303.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 303.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 303.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 303.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 303.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 303.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 303.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 303.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 303.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 303.29 - * POSSIBILITY OF SUCH DAMAGE. 303.30 - */ 303.31 - 303.32 -#include "string_tests.h" 303.33 - 303.34 -UCX_TEST(test_sstr_macros) { 303.35 - sstr_t hello = ST("Hello"); 303.36 - sstr_t world = S("World"); 303.37 - 303.38 - char buf[20]; 303.39 - snprintf(buf, sizeof(buf), "%" PRIsstr ", %" PRIsstr "!", SFMT(hello), SFMT(world)); 303.40 - 303.41 - UCX_TEST_BEGIN 303.42 - const char* cmp = "Hello, World!"; 303.43 - UCX_TEST_ASSERT(!strcmp(cmp, buf), "Something weird happened."); 303.44 - UCX_TEST_END 303.45 -} 303.46 - 303.47 -UCX_TEST(test_sstr) { 303.48 - sstr_t s1 = sstr((char*)"1234"); 303.49 - sstr_t s2 = sstrn((char*)"ab", 2); 303.50 - 303.51 - UCX_TEST_BEGIN 303.52 - 303.53 - UCX_TEST_ASSERT(s1.length == 4, "s1 length must be 4"); 303.54 - UCX_TEST_ASSERT(s2.length == 2, "s2 length must be 2"); 303.55 - 303.56 - UCX_TEST_END 303.57 -} 303.58 - 303.59 -UCX_TEST(test_sstr_len) { 303.60 - sstr_t s1 = ST("1234"); 303.61 - sstr_t s2 = ST(".:.:."); 303.62 - sstr_t s3 = ST("X"); 303.63 - 303.64 - size_t len1 = sstrnlen(1, s1); 303.65 - size_t len2 = sstrnlen(2, s1, s2); 303.66 - size_t len3 = sstrnlen(3, s1, s2, s3); 303.67 - 303.68 - UCX_TEST_BEGIN 303.69 - 303.70 - UCX_TEST_ASSERT(len1 == 4, "sstrnlen returned wrong size"); 303.71 - UCX_TEST_ASSERT(len2 == 9, "sstrnlen returned wrong size"); 303.72 - UCX_TEST_ASSERT(len3 == 10, "sstrnlen returned wrong size"); 303.73 - 303.74 - UCX_TEST_END 303.75 -} 303.76 - 303.77 - 303.78 -UCX_TEST(test_sstrchr_sstrrchr) { 303.79 - sstr_t str = ST("I will find you - and I will kill you"); 303.80 - UCX_TEST_BEGIN 303.81 - 303.82 - sstr_t notfound = sstrchr(str, 'x'); 303.83 - UCX_TEST_ASSERT(notfound.length == 0, 303.84 - "string length not 0 after forward search w/o result"); 303.85 - 303.86 - notfound = sstrrchr(str, 'x'); 303.87 - UCX_TEST_ASSERT(notfound.length == 0, 303.88 - "string length not 0 after reverse search w/o result"); 303.89 - 303.90 - sstr_t result = sstrchr(str, 'w'); 303.91 - UCX_TEST_ASSERT(result.length == 35, "sstrchr returned wrong length"); 303.92 - UCX_TEST_ASSERT(strcmp("will find you - and I will kill you", result.ptr) 303.93 - == 0, "sstrchr did not return the expected string"); 303.94 - 303.95 - result = sstrrchr(str, 'w'); 303.96 - UCX_TEST_ASSERT(result.length == 13, "sstrrchr returned wrong length"); 303.97 - UCX_TEST_ASSERT(strcmp("will kill you", result.ptr) 303.98 - == 0, "sstrrchr did not return the expected string"); 303.99 - 303.100 - UCX_TEST_END 303.101 -} 303.102 - 303.103 -UCX_TEST(test_sstrstr) { 303.104 - sstr_t str = ST("find the match in this string"); 303.105 - sstr_t longstr = ST( 303.106 - "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl" 303.107 - "mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwx" 303.108 - "yzabcdeababababnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghij" 303.109 - "klmnopqrstuvwxyzaababababababababrstuvwxyzabcdefghijklmnopqrstuv" 303.110 - "abababababababababababababababababababababababababababababababab" 303.111 - "abababababababababababababababababababababababababababababababab" 303.112 - "abababababababababababababababababababababababababababababababab" 303.113 - "abababababababababababababababababababababababababababababababab" 303.114 - "abababababababababababababababababababababababababababababababab" 303.115 - "abababababababababababababababababababababababababababababababab" 303.116 - "wxyz1234567890"); 303.117 - sstr_t longstrpattern = ST( 303.118 - "abababababababababababababababababababababababababababababababab" 303.119 - "abababababababababababababababababababababababababababababababab" 303.120 - "abababababababababababababababababababababababababababababababab" 303.121 - "abababababababababababababababababababababababababababababababab" 303.122 - "abababababababababababababababababababababababababababababababab" 303.123 - ); 303.124 - sstr_t longstrresult = ST( 303.125 - "abababababababababababababababababababababababababababababababab" 303.126 - "abababababababababababababababababababababababababababababababab" 303.127 - "abababababababababababababababababababababababababababababababab" 303.128 - "abababababababababababababababababababababababababababababababab" 303.129 - "abababababababababababababababababababababababababababababababab" 303.130 - "abababababababababababababababababababababababababababababababab" 303.131 - "wxyz1234567890" 303.132 - ); 303.133 - UCX_TEST_BEGIN 303.134 - 303.135 - sstr_t notfound = sstrstr(str, S("no match")); 303.136 - UCX_TEST_ASSERT(notfound.length == 0, "no match must return empty string"); 303.137 - 303.138 - sstr_t result = sstrstr(str, S("match")); 303.139 - UCX_TEST_ASSERT(result.length == 20, "sstrstr returned wrong length"); 303.140 - UCX_TEST_ASSERT(!strcmp("match in this string", result.ptr), 303.141 - "sstrstr did not return the expected string"); 303.142 - 303.143 - result = sstrstr(str, S("")); 303.144 - UCX_TEST_ASSERT(result.length == str.length, 303.145 - "sstrstr with empty match string returned wrong length"); 303.146 - UCX_TEST_ASSERT(!strcmp(str.ptr, result.ptr), 303.147 - "sstrstr with empty match string did not return the original string"); 303.148 - 303.149 - result = sstrstr(longstr, longstrpattern); 303.150 - UCX_TEST_ASSERT(result.length == longstrresult.length, 303.151 - "long string result length incorrect"); 303.152 - UCX_TEST_ASSERT(!strcmp(result.ptr, longstrresult.ptr), 303.153 - "long string result content incorrect"); 303.154 - 303.155 - UCX_TEST_END 303.156 -} 303.157 - 303.158 -UCX_TEST(test_sstrcmp) { 303.159 - sstr_t str = ST("compare this"); 303.160 - 303.161 - UCX_TEST_BEGIN 303.162 - UCX_TEST_ASSERT(sstrcmp(str, S("")) == 1, "empty cmp failed"); 303.163 - UCX_TEST_ASSERT(sstrcmp(S(""), S("")) == 0, "empty cmp false negative"); 303.164 - UCX_TEST_ASSERT(sstrcmp(str, S("compare this")) == 0, "false negative"); 303.165 - UCX_TEST_ASSERT(sstrcmp(str, S("Compare This")) != 0, "false positive"); 303.166 - UCX_TEST_ASSERT(sstrcmp(str, S("compare tool")) < 0, "memcmp < 0 failed"); 303.167 - UCX_TEST_ASSERT(sstrcmp(str, S("compare shit")) > 0, "memcmp > 0 failed"); 303.168 - UCX_TEST_ASSERT(sstrcmp(str, S("compare this not")) < 0, "len < 0 failed"); 303.169 - UCX_TEST_ASSERT(sstrcmp(str, S("compare")) > 0, "len > 0 failed"); 303.170 - UCX_TEST_END 303.171 -} 303.172 - 303.173 -UCX_TEST(test_sstrcasecmp) { 303.174 - 303.175 - sstr_t str = ST("compare this"); 303.176 - 303.177 - UCX_TEST_BEGIN 303.178 - UCX_TEST_ASSERT(sstrcasecmp(str, S("")) == 1, "empty cmp failed"); 303.179 - UCX_TEST_ASSERT(sstrcasecmp(S(""), S("")) == 0, "empty cmp false negative"); 303.180 - UCX_TEST_ASSERT(sstrcasecmp(str, S("compare this")) == 0, "false negative"); 303.181 - UCX_TEST_ASSERT(sstrcasecmp(str, S("Compare This")) == 0, 303.182 - "not ignoring case"); 303.183 - UCX_TEST_ASSERT(sstrcasecmp(str, S("compare tool")) < 0, "< 0 failed"); 303.184 - UCX_TEST_ASSERT(sstrcasecmp(str, S("compare shit")) > 0, "> 0 failed"); 303.185 - UCX_TEST_ASSERT(sstrcasecmp(str, S("compare this not")) < 0, 303.186 - "len < 0 failed"); 303.187 - UCX_TEST_ASSERT(sstrcasecmp(str, S("compare")) > 0, "len > 0 failed"); 303.188 - UCX_TEST_END 303.189 -} 303.190 - 303.191 - 303.192 -UCX_TEST(test_sstrcat) { 303.193 - sstr_t s1 = S("12"); 303.194 - sstr_t s2 = S("34"); 303.195 - sstr_t s3 = S("56"); 303.196 - sstr_t sn = { NULL, 0 }; 303.197 - 303.198 - UCX_TEST_BEGIN 303.199 - 303.200 - sstr_t t1 = sstrcat(2, s1, s2); 303.201 - UCX_TEST_ASSERT(!sstrcmp(t1, S("1234")), "t1: wrong content"); 303.202 - free(t1.ptr); 303.203 - 303.204 - sstr_t t2 = sstrcat(3, s1, s2, s3); 303.205 - UCX_TEST_ASSERT(!sstrcmp(t2, S("123456")), "t2: wrong content"); 303.206 - free(t2.ptr); 303.207 - 303.208 - sstr_t t3 = sstrcat(6, s1, sn, s2, sn, s3, sn); 303.209 - UCX_TEST_ASSERT(!sstrcmp(t3, S("123456")), "t3: wrong content"); 303.210 - free(t3.ptr); 303.211 - 303.212 - sstr_t t4 = sstrcat(2, sn, sn); 303.213 - UCX_TEST_ASSERT(t4.ptr, "t4.ptr is NULL"); 303.214 - UCX_TEST_ASSERT(t4.length == 0, "t4 has wrong length"); 303.215 - free(t4.ptr); 303.216 - 303.217 - // overflow test 303.218 - sstr_t o0; 303.219 - o0.ptr = ""; 303.220 - o0.length = ((size_t)-1) - 50; 303.221 - sstr_t o1; 303.222 - o1.ptr = ""; 303.223 - o1.length = 100; 303.224 - sstr_t o2; 303.225 - o2.ptr = ""; 303.226 - o2.length = 10; 303.227 - 303.228 - sstr_t n = sstrcat(2, o0, o1); 303.229 - UCX_TEST_ASSERT(n.ptr == NULL && n.length == 0, "overflow not detected"); 303.230 - sstr_t n2 = sstrcat(3, o0, o2, o1); 303.231 - UCX_TEST_ASSERT(n2.ptr == NULL && n2.length == 0, "n2: overflow not detected"); 303.232 - 303.233 - UCX_TEST_END 303.234 - 303.235 -} 303.236 - 303.237 -UCX_TEST(test_sstrsplit) { 303.238 - 303.239 - const char *original = "this,is,a,csv,string"; 303.240 - sstr_t test = ST("this,is,a,csv,string"); /* use copy of original here */ 303.241 - ssize_t n; 303.242 - sstr_t *list; 303.243 - 303.244 - UCX_TEST_BEGIN 303.245 - 303.246 - /* Nullpointer check */ 303.247 - n = 0; 303.248 - UCX_TEST_ASSERT(sstrsplit(test, S(""), &n) == NULL, 303.249 - "empty delimiter must return NULL"); 303.250 - 303.251 - /* no delimiter occurence (ndo) */ 303.252 - n = 0; 303.253 - list = sstrsplit(test, S("z"), &n); 303.254 - UCX_TEST_ASSERT(n == 1, "ndo, list length must be 1"); 303.255 - UCX_TEST_ASSERT(strcmp(list[0].ptr, original) == 0, "ndo, " 303.256 - "original string shall be returned as single list element"); 303.257 - UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 303.258 - "ndo, original has been modified"); 303.259 - for(int i=0;i<n;i++) { 303.260 - free(list[i].ptr); 303.261 - } 303.262 - free(list); 303.263 - 303.264 - /* partially matching delimiter (pmd) */ 303.265 - n = 0; 303.266 - list = sstrsplit(test, S("stringbuilder"), &n); 303.267 - UCX_TEST_ASSERT(n == 1, "pmd, list length must be 1"); 303.268 - UCX_TEST_ASSERT(strcmp(list[0].ptr, original) == 0, "pmd, " 303.269 - "original string shall be returned as single list element"); 303.270 - UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 303.271 - "pmd, original has been modified"); 303.272 - for(int i=0;i<n;i++) { 303.273 - free(list[i].ptr); 303.274 - } 303.275 - free(list); 303.276 - 303.277 - /* matching single-char delimiter (mscd) */ 303.278 - n = 0; 303.279 - list = sstrsplit(test, S(","), &n); 303.280 - UCX_TEST_ASSERT(n == 5, "mscd, list length must be 5"); 303.281 - UCX_TEST_ASSERT(strcmp(list[0].ptr, "this") == 0, "mscd, item 0 mismatch"); 303.282 - UCX_TEST_ASSERT(strcmp(list[1].ptr, "is") == 0, "mscd, item 1 mismatch"); 303.283 - UCX_TEST_ASSERT(strcmp(list[2].ptr, "a") == 0, "mscd, item 2 mismatch"); 303.284 - UCX_TEST_ASSERT(strcmp(list[3].ptr, "csv") == 0, "mscd, item 3 mismatch"); 303.285 - UCX_TEST_ASSERT(strcmp(list[4].ptr, "string")==0, "mscd, item 4 mismatch"); 303.286 - UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 303.287 - "mscd, original has been modified"); 303.288 - for(int i=0;i<n;i++) { 303.289 - free(list[i].ptr); 303.290 - } 303.291 - free(list); 303.292 - 303.293 - /* matching multi-char delimiter (mmcd) */ 303.294 - n = 0; 303.295 - list = sstrsplit(test, S("is"), &n); 303.296 - UCX_TEST_ASSERT(n == 3, "mscd, list length must be 3"); 303.297 - UCX_TEST_ASSERT(strcmp(list[0].ptr, "th") == 0, "mmcd, item 0 mismatch"); 303.298 - UCX_TEST_ASSERT(strcmp(list[1].ptr, ",") == 0, "mmcd, item 1 mismatch"); 303.299 - UCX_TEST_ASSERT(strcmp(list[2].ptr, ",a,csv,string") == 0, 303.300 - "mmcd, item 2 mismatch"); 303.301 - UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 303.302 - "mmcd, original has been modified"); 303.303 - for(int i=0;i<n;i++) { 303.304 - free(list[i].ptr); 303.305 - } 303.306 - free(list); 303.307 - 303.308 - /* bounded list using single-char delimiter (blsc) */ 303.309 - n = 3; 303.310 - list = sstrsplit(test, S(","), &n); 303.311 - UCX_TEST_ASSERT(n == 3, "blsc, list length must be 3"); 303.312 - UCX_TEST_ASSERT(strcmp(list[0].ptr, "this") == 0, "blsc, item 0 mismatch"); 303.313 - UCX_TEST_ASSERT(strcmp(list[1].ptr, "is") == 0, "blsc, item 1 mismatch"); 303.314 - UCX_TEST_ASSERT(strcmp(list[2].ptr, "a,csv,string") == 0, 303.315 - "blsc, item 2 mismatch"); 303.316 - UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 303.317 - "blsc, original has been modified"); 303.318 - for(int i=0;i<n;i++) { 303.319 - free(list[i].ptr); 303.320 - } 303.321 - free(list); 303.322 - 303.323 - /* bounded list using multi-char delimiter (blmc) */ 303.324 - n = 2; 303.325 - list = sstrsplit(test, S("is"), &n); 303.326 - UCX_TEST_ASSERT(n == 2, "blmc, list length must be 2"); 303.327 - UCX_TEST_ASSERT(strcmp(list[0].ptr, "th") == 0, "blmc, item 0 mismatch"); 303.328 - UCX_TEST_ASSERT(strcmp(list[1].ptr, ",is,a,csv,string") == 0, 303.329 - "blmc, item 1 mismatch"); 303.330 - UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 303.331 - "blmc, original has been modified"); 303.332 - for(int i=0;i<n;i++) { 303.333 - free(list[i].ptr); 303.334 - } 303.335 - free(list); 303.336 - 303.337 - /* start with delimiter (swd) */ 303.338 - n = 0; 303.339 - list = sstrsplit(test, S("this"), &n); 303.340 - UCX_TEST_ASSERT(n == 2, "swd, list length must be 2"); 303.341 - UCX_TEST_ASSERT(list[0].length == 0, "swd, first item must be empty"); 303.342 - UCX_TEST_ASSERT(strcmp(list[1].ptr, ",is,a,csv,string") == 0, 303.343 - "swd, second item corrupt"); 303.344 - UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 303.345 - "swd, original has been modified"); 303.346 - for(int i=0;i<n;i++) { 303.347 - free(list[i].ptr); 303.348 - } 303.349 - free(list); 303.350 - 303.351 - /* end with delimiter (ewd) */ 303.352 - n = 0; 303.353 - list = sstrsplit(test, S("string"), &n); 303.354 - UCX_TEST_ASSERT(n == 2, "ewd, list length must be 2"); 303.355 - UCX_TEST_ASSERT(strcmp(list[0].ptr, "this,is,a,csv,") == 0, 303.356 - "ewd, first item corrupt"); 303.357 - UCX_TEST_ASSERT(list[1].length == 0, "ewd, second item must be empty"); 303.358 - UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 303.359 - "ewd, original has been modified"); 303.360 - for(int i=0;i<n;i++) { 303.361 - free(list[i].ptr); 303.362 - } 303.363 - free(list); 303.364 - 303.365 - /* end with delimiter exceed bound (ewdeb) */ 303.366 - n = 3; 303.367 - sstr_t ewdebtest = ST("a,b,c,"); 303.368 - list = sstrsplit(ewdebtest, S(","), &n); 303.369 - UCX_TEST_ASSERT(n == 3, "ewdeb, list length must be 3"); 303.370 - UCX_TEST_ASSERT(strcmp(list[0].ptr, "a") == 0, "ewdeb, fst item corrupt"); 303.371 - UCX_TEST_ASSERT(strcmp(list[1].ptr, "b") == 0, "ewdeb, snd item corrupt"); 303.372 - UCX_TEST_ASSERT(strcmp(list[2].ptr, "c,") == 0, "ewdeb, trd item corrupt"); 303.373 - for(int i=0;i<n;i++) { 303.374 - free(list[i].ptr); 303.375 - } 303.376 - free(list); 303.377 - 303.378 - /* exact match (exm) */ 303.379 - n = 0; 303.380 - list = sstrsplit(test, S("this,is,a,csv,string"), &n); 303.381 - UCX_TEST_ASSERT(n == 0, "exm, list length must be 0"); 303.382 - UCX_TEST_ASSERT(list == NULL, "exm, list must be NULL"); 303.383 - for(int i=0;i<n;i++) { 303.384 - free(list[i].ptr); 303.385 - } 303.386 - free(list); 303.387 - 303.388 - /* substring (subs) */ 303.389 - n = 0; 303.390 - list = sstrsplit(test, S("this,is,a,csv,string,with,extension"), &n); 303.391 - UCX_TEST_ASSERT(n == 1, "subs, list length must be 1"); 303.392 - UCX_TEST_ASSERT(strcmp(list[0].ptr, original) == 0, 303.393 - "subs, single item must be the original string"); 303.394 - UCX_TEST_ASSERT(strcmp(test.ptr, original) == 0, 303.395 - "subs, original has been modified"); 303.396 - for(int i=0;i<n;i++) { 303.397 - free(list[i].ptr); 303.398 - } 303.399 - free(list); 303.400 - 303.401 - /* double encounter delimiter (ded) */ 303.402 - n = 0; 303.403 - list = sstrsplit(test, S("is,"), &n); 303.404 - UCX_TEST_ASSERT(n == 3, "ded, list length must be 3"); 303.405 - UCX_TEST_ASSERT(strcmp(list[0].ptr, "th") == 0, "ded, item 0 mismatch"); 303.406 - UCX_TEST_ASSERT(list[1].length == 0, "ded, item 1 not empty!"); 303.407 - UCX_TEST_ASSERT(strcmp(list[2].ptr, "a,csv,string") == 0, 303.408 - "ded, item 2 mismatch"); 303.409 - for(int i=0;i<n;i++) { 303.410 - free(list[i].ptr); 303.411 - } 303.412 - free(list); 303.413 - 303.414 - UCX_TEST_END 303.415 -} 303.416 - 303.417 -UCX_TEST(test_sstrtrim) { 303.418 - sstr_t t1 = sstrtrim(sstr((char*)" ein test ")); 303.419 - sstr_t t2 = sstrtrim(sstr((char*)"abc")); 303.420 - sstr_t t3 = sstrtrim(sstr((char*)" 123")); 303.421 - sstr_t t4 = sstrtrim(sstr((char*)"xyz ")); 303.422 - sstr_t t5 = sstrtrim(sstr((char*)" ")); 303.423 - sstr_t empty = sstrtrim(sstr((char*)"")); 303.424 - UCX_TEST_BEGIN 303.425 - UCX_TEST_ASSERT(strncmp(t1.ptr, "ein test", t1.length) == 0, "failed"); 303.426 - UCX_TEST_ASSERT(strncmp(t2.ptr, "abc", t2.length) == 0, "failed"); 303.427 - UCX_TEST_ASSERT(strncmp(t3.ptr, "123", t3.length) == 0, "failed"); 303.428 - UCX_TEST_ASSERT(strncmp(t4.ptr, "xyz", t4.length) == 0, "failed"); 303.429 - UCX_TEST_ASSERT(t5.length == 0, "string t5 not empty"); 303.430 - UCX_TEST_ASSERT(empty.length == 0, "empty string failed"); 303.431 - UCX_TEST_END 303.432 -} 303.433 - 303.434 -UCX_TEST(test_sstrprefixsuffix) { 303.435 - sstr_t str = ST("test my prefix and my suffix"); 303.436 - sstr_t empty = ST(""); 303.437 - 303.438 - UCX_TEST_BEGIN 303.439 - 303.440 - UCX_TEST_ASSERT(!sstrprefix(empty, S("pref")), "prefix empty string fails"); 303.441 - UCX_TEST_ASSERT(!sstrsuffix(empty, S("suf")), "suffix empty string fails"); 303.442 - 303.443 - UCX_TEST_ASSERT(sstrprefix(str, empty), "empty prefix fails"); 303.444 - UCX_TEST_ASSERT(sstrsuffix(str, empty), "empty suffix fails"); 303.445 - 303.446 - UCX_TEST_ASSERT(sstrprefix(empty, empty), "string and prefix empty fails"); 303.447 - UCX_TEST_ASSERT(sstrsuffix(empty, empty), "string and suffix empty fails"); 303.448 - 303.449 - UCX_TEST_ASSERT(sstrprefix(str, S("test ")), "prefix false negative"); 303.450 - UCX_TEST_ASSERT(!sstrprefix(str, S("8-) fsck ")), "prefix false positive"); 303.451 - 303.452 - UCX_TEST_ASSERT(sstrsuffix(str, S("fix")), "suffix false negative"); 303.453 - UCX_TEST_ASSERT(!sstrsuffix(str, S("fox")), "suffix false positive"); 303.454 - 303.455 - 303.456 - UCX_TEST_END 303.457 -} 303.458 - 303.459 -UCX_TEST(test_sstrcaseprefixsuffix) { 303.460 - sstr_t str = ST("test my prefix and my suffix"); 303.461 - sstr_t empty = ST(""); 303.462 - 303.463 - UCX_TEST_BEGIN 303.464 - 303.465 - UCX_TEST_ASSERT(!sstrcaseprefix(empty, S("pREf")), "prefix empty string fails"); 303.466 - UCX_TEST_ASSERT(!sstrcasesuffix(empty, S("sUf")), "suffix empty string fails"); 303.467 - 303.468 - UCX_TEST_ASSERT(sstrcaseprefix(str, empty), "empty prefix fails"); 303.469 - UCX_TEST_ASSERT(sstrcasesuffix(str, empty), "empty suffix fails"); 303.470 - 303.471 - UCX_TEST_ASSERT(sstrcaseprefix(empty, empty), "string and prefix empty fails"); 303.472 - UCX_TEST_ASSERT(sstrcasesuffix(empty, empty), "string and suffix empty fails"); 303.473 - 303.474 - UCX_TEST_ASSERT(sstrcaseprefix(str, S("TEST ")), "prefix false negative"); 303.475 - UCX_TEST_ASSERT(!sstrcaseprefix(str, S("8-) fsck ")), "prefix false positive"); 303.476 - 303.477 - UCX_TEST_ASSERT(sstrcasesuffix(str, S("FIX")), "suffix false negative"); 303.478 - UCX_TEST_ASSERT(!sstrcasesuffix(str, S("fox")), "suffix false positive"); 303.479 - 303.480 - UCX_TEST_END 303.481 -} 303.482 - 303.483 -UCX_TEST(test_sstrreplace) { 303.484 - 303.485 - sstr_t str = ST("test ababab string aba"); 303.486 - sstr_t longstr = ST("xyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacd"); 303.487 - sstr_t notrail = ST("test abab"); 303.488 - sstr_t empty = ST(""); 303.489 - sstr_t astr = ST("aaaaaaaaaa"); 303.490 - sstr_t csstr = ST("test AB ab TEST xyz"); 303.491 - 303.492 - sstr_t repl = sstrreplace(str, SC("abab"), SC("muchlonger")); 303.493 - sstr_t expected = ST("test muchlongerab string aba"); 303.494 - 303.495 - sstr_t repln = sstrreplacen(str, SC("ab"), SC("c"), 2); 303.496 - sstr_t expectedn = ST("test ccab string aba"); 303.497 - 303.498 - sstr_t longrepl = sstrreplace(longstr, SC("a"), SC("z")); 303.499 - sstr_t longexpect = ST("xyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzcd"); 303.500 - 303.501 - sstr_t replnotrail = sstrreplace(notrail, SC("ab"), SC("z")); 303.502 - sstr_t notrailexpect = ST("test zz"); 303.503 - 303.504 - sstr_t repleq = sstrreplace(str, str, SC("hello")); 303.505 - sstr_t eqexpect = ST("hello"); 303.506 - 303.507 - sstr_t replempty1 = sstrreplace(empty, SC("ab"), SC("c")); // expect: empty 303.508 - sstr_t replempty2 = sstrreplace(str, SC("abab"), empty); 303.509 - sstr_t emptyexpect2 = ST("test ab string aba"); 303.510 - 303.511 - sstr_t replpre = sstrreplace(str, SC("test "), SC("TEST ")); 303.512 - sstr_t preexpected = ST("TEST ababab string aba"); 303.513 - 303.514 - sstr_t replan1 = sstrreplacen(astr, SC("a"), SC("x"), 1); 303.515 - sstr_t an1expected = ST("xaaaaaaaaa"); 303.516 - 303.517 - sstr_t replan4 = sstrreplacen(astr, SC("a"), SC("x"), 4); 303.518 - sstr_t an4expected = ST("xxxxaaaaaa"); 303.519 - 303.520 - sstr_t replan9 = sstrreplacen(astr, SC("a"), SC("x"), 9); 303.521 - sstr_t an9expected = ST("xxxxxxxxxa"); 303.522 - 303.523 - sstr_t replan10 = sstrreplacen(astr, SC("a"), SC("x"), 10); 303.524 - sstr_t an10expected = ST("xxxxxxxxxx"); 303.525 - 303.526 - sstr_t replcs1 = sstrreplace(csstr, SC("AB"), SC("*")); 303.527 - sstr_t cs1expected = ST("test * ab TEST xyz"); 303.528 - 303.529 - sstr_t replcs2 = sstrreplace(csstr, SC("test"), SC("TEST")); 303.530 - sstr_t cs2expected = ST("TEST AB ab TEST xyz"); 303.531 - 303.532 - UCX_TEST_BEGIN 303.533 - 303.534 - UCX_TEST_ASSERT(repl.ptr != str.ptr, "result string is not fresh"); 303.535 - UCX_TEST_ASSERT(!sstrcmp(repl, expected), "incorrect replacement"); 303.536 - 303.537 - UCX_TEST_ASSERT(repln.ptr != str.ptr, "result string is not fresh"); 303.538 - UCX_TEST_ASSERT(!sstrcmp(repln, expectedn), "incorrect replacement"); 303.539 - 303.540 - UCX_TEST_ASSERT(!sstrcmp(longrepl, longexpect), 303.541 - "incorrect handling of long strings"); 303.542 - 303.543 - UCX_TEST_ASSERT(!sstrcmp(replnotrail, notrailexpect), 303.544 - "no trail replacement fails"); 303.545 - 303.546 - UCX_TEST_ASSERT(!sstrcmp(repleq, eqexpect), 303.547 - "equal replacement fails"); 303.548 - 303.549 - UCX_TEST_ASSERT(!sstrcmp(replempty1, empty), 303.550 - "replacement in empty string fails"); 303.551 - 303.552 - UCX_TEST_ASSERT(!sstrcmp(replempty2, emptyexpect2), 303.553 - "empty replacement fails"); 303.554 - 303.555 - UCX_TEST_ASSERT(!sstrcmp(replpre, preexpected), 303.556 - "prefix replacement fails"); 303.557 - 303.558 - UCX_TEST_ASSERT(!sstrcmp(replan1, an1expected), 303.559 - "a1 replacement fails"); 303.560 - 303.561 - UCX_TEST_ASSERT(!sstrcmp(replan4, an4expected), 303.562 - "a4 replacement fails"); 303.563 - 303.564 - UCX_TEST_ASSERT(!sstrcmp(replan9, an9expected), 303.565 - "a9 replacement fails"); 303.566 - 303.567 - UCX_TEST_ASSERT(!sstrcmp(replan10, an10expected), 303.568 - "a10 replacement fails"); 303.569 - 303.570 - UCX_TEST_ASSERT(!sstrcmp(replcs1, cs1expected), 303.571 - "case sensitivity test1 fails"); 303.572 - 303.573 - UCX_TEST_ASSERT(!sstrcmp(replcs2, cs2expected), 303.574 - "case sensitivity test2 fails"); 303.575 - 303.576 - UCX_TEST_END 303.577 - 303.578 - free(repl.ptr); 303.579 - free(repln.ptr); 303.580 - free(longrepl.ptr); 303.581 - free(replnotrail.ptr); 303.582 - free(repleq.ptr); 303.583 - if(replempty1.ptr) free(replempty1.ptr); 303.584 - free(replempty2.ptr); 303.585 - free(replpre.ptr); 303.586 - free(replan1.ptr); 303.587 - free(replan4.ptr); 303.588 - free(replan9.ptr); 303.589 - free(replan10.ptr); 303.590 - free(replcs1.ptr); 303.591 - free(replcs2.ptr); 303.592 -}
304.1 --- a/test/string_tests.h Mon Dec 30 09:54:10 2019 +0100 304.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 304.3 @@ -1,58 +0,0 @@ 304.4 -/* 304.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 304.6 - * 304.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 304.8 - * 304.9 - * Redistribution and use in source and binary forms, with or without 304.10 - * modification, are permitted provided that the following conditions are met: 304.11 - * 304.12 - * 1. Redistributions of source code must retain the above copyright 304.13 - * notice, this list of conditions and the following disclaimer. 304.14 - * 304.15 - * 2. Redistributions in binary form must reproduce the above copyright 304.16 - * notice, this list of conditions and the following disclaimer in the 304.17 - * documentation and/or other materials provided with the distribution. 304.18 - * 304.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 304.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 304.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 304.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 304.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 304.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 304.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 304.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 304.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 304.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 304.29 - * POSSIBILITY OF SUCH DAMAGE. 304.30 - */ 304.31 - 304.32 -#ifndef STRING_TESTS_H 304.33 -#define STRING_TESTS_H 304.34 - 304.35 -#include <ucx/test.h> 304.36 -#include <ucx/string.h> 304.37 - 304.38 -#ifdef __cplusplus 304.39 -extern "C" { 304.40 -#endif 304.41 - 304.42 -UCX_TEST(test_sstr_macros); 304.43 -UCX_TEST(test_sstr); 304.44 -UCX_TEST(test_sstr_len); 304.45 -UCX_TEST(test_sstrcmp); 304.46 -UCX_TEST(test_sstrcasecmp); 304.47 -UCX_TEST(test_sstrcat); 304.48 -UCX_TEST(test_sstrchr_sstrrchr); 304.49 -UCX_TEST(test_sstrstr); 304.50 -UCX_TEST(test_sstrsplit); 304.51 -UCX_TEST(test_sstrtrim); 304.52 -UCX_TEST(test_sstrprefixsuffix); 304.53 -UCX_TEST(test_sstrcaseprefixsuffix); 304.54 -UCX_TEST(test_sstrreplace); 304.55 - 304.56 -#ifdef __cplusplus 304.57 -} 304.58 -#endif 304.59 - 304.60 -#endif /* STRING_TESTS_H */ 304.61 -
305.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 305.2 +++ b/test/test_list.c Sat Feb 06 19:11:44 2021 +0100 305.3 @@ -0,0 +1,31 @@ 305.4 +/* 305.5 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 305.6 + * 305.7 + * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved. 305.8 + * 305.9 + * Redistribution and use in source and binary forms, with or without 305.10 + * modification, are permitted provided that the following conditions are met: 305.11 + * 305.12 + * 1. Redistributions of source code must retain the above copyright 305.13 + * notice, this list of conditions and the following disclaimer. 305.14 + * 305.15 + * 2. Redistributions in binary form must reproduce the above copyright 305.16 + * notice, this list of conditions and the following disclaimer in the 305.17 + * documentation and/or other materials provided with the distribution. 305.18 + * 305.19 + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 305.20 + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 305.21 + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 305.22 + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 305.23 + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 305.24 + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 305.25 + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 305.26 + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 305.27 + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 305.28 + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 305.29 + * POSSIBILITY OF SUCH DAMAGE. 305.30 + */ 305.31 + 305.32 +int main() { 305.33 + return 0; 305.34 +}
306.1 --- a/test/utils_tests.c Mon Dec 30 09:54:10 2019 +0100 306.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 306.3 @@ -1,187 +0,0 @@ 306.4 -/* 306.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 306.6 - * 306.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 306.8 - * 306.9 - * Redistribution and use in source and binary forms, with or without 306.10 - * modification, are permitted provided that the following conditions are met: 306.11 - * 306.12 - * 1. Redistributions of source code must retain the above copyright 306.13 - * notice, this list of conditions and the following disclaimer. 306.14 - * 306.15 - * 2. Redistributions in binary form must reproduce the above copyright 306.16 - * notice, this list of conditions and the following disclaimer in the 306.17 - * documentation and/or other materials provided with the distribution. 306.18 - * 306.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 306.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 306.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 306.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 306.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 306.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 306.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 306.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 306.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 306.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 306.29 - * POSSIBILITY OF SUCH DAMAGE. 306.30 - */ 306.31 - 306.32 -#include "utils_tests.h" 306.33 -#include <ucx/buffer.h> 306.34 - 306.35 -UCX_TEST(test_ucx_fprintf) { 306.36 - UcxBuffer *b1 = ucx_buffer_new(NULL, 32, UCX_BUFFER_AUTOEXTEND); 306.37 - UcxBuffer *b2 = ucx_buffer_new(NULL, 4096, UCX_BUFFER_AUTOEXTEND); 306.38 - 306.39 - char *teststr1 = (char*)calloc(1, 1024); 306.40 - char *teststr2 = (char*)calloc(1, 1024); 306.41 - memset(teststr1, 'a', 1023); 306.42 - memset(teststr2, 'b', 1023); 306.43 - 306.44 - UCX_TEST_BEGIN 306.45 - 306.46 - ucx_fprintf(b1, (write_func)ucx_buffer_write, "Hello %s", "World"); 306.47 - UCX_TEST_ASSERT(!strcmp(b1->space, "Hello World"), "wrong content in b1"); 306.48 - ucx_fprintf(b1, (write_func)ucx_buffer_write, "\nend.\n"); 306.49 - UCX_TEST_ASSERT(!strcmp(b1->space, "Hello World\nend.\n"), 306.50 - "wrong content in b1 after second fprintf"); 306.51 - 306.52 - ucx_bprintf(b2, "%s%s", teststr1, teststr2); 306.53 - UCX_TEST_ASSERT(b2->pos == 2046, "wrong length"); 306.54 - UCX_TEST_ASSERT(!memcmp(b2->space, teststr1, 1023), 306.55 - "wrong first half in b2"); 306.56 - UCX_TEST_ASSERT(!memcmp(b2->space+1023, teststr2, 1023), 306.57 - "wrong second half in b2"); 306.58 - 306.59 - UCX_TEST_END 306.60 - 306.61 - ucx_buffer_free(b1); 306.62 - ucx_buffer_free(b2); 306.63 - free(teststr1); 306.64 - free(teststr2); 306.65 -} 306.66 - 306.67 -UCX_TEST(test_ucx_asprintf) { 306.68 - char *teststr1 = (char*)calloc(1, 1024); 306.69 - char *teststr2 = (char*)calloc(1, 1024); 306.70 - memset(teststr1, 'a', 1023); 306.71 - memset(teststr2, 'b', 1023); 306.72 - UcxAllocator *a = ucx_default_allocator(); 306.73 - 306.74 - UCX_TEST_BEGIN 306.75 - 306.76 - sstr_t s1 = ucx_asprintf(a, "int: %d\nHello %s!", 123, "World"); 306.77 - UCX_TEST_ASSERT(s1.ptr, "s1.ptr is NULL"); 306.78 - UCX_TEST_ASSERT(s1.length == 21, "wrong length"); 306.79 - UCX_TEST_ASSERT(!sstrcmp(s1, S("int: 123\nHello World!")), "wrong content"); 306.80 - free(s1.ptr); 306.81 - 306.82 - sstr_t s2 = ucx_asprintf(a, "%s%s", teststr1, teststr2); 306.83 - UCX_TEST_ASSERT(s2.ptr, "s2.ptr is NULL"); 306.84 - UCX_TEST_ASSERT(s2.length == 2046, "wrong length"); 306.85 - UCX_TEST_ASSERT(!memcmp(s2.ptr, teststr1, 1023), 306.86 - "wrong first half in s2"); 306.87 - UCX_TEST_ASSERT(!memcmp(s2.ptr+1023, teststr2, 1023), 306.88 - "wrong second half in s2"); 306.89 - free(s2.ptr); 306.90 - 306.91 - UCX_TEST_END 306.92 - 306.93 - free(teststr1); 306.94 - free(teststr2); 306.95 -} 306.96 - 306.97 -UCX_TEST(test_ucx_sprintf) { 306.98 - UCX_TEST_BEGIN 306.99 - 306.100 - sstr_t s1 = ucx_sprintf("int: %d\nHello %s!", 123, "World"); 306.101 - UCX_TEST_ASSERT(s1.ptr, "s1.ptr is NULL"); 306.102 - UCX_TEST_ASSERT(s1.length == 21, "wrong length"); 306.103 - UCX_TEST_ASSERT(!sstrcmp(s1, S("int: 123\nHello World!")), "wrong content"); 306.104 - free(s1.ptr); 306.105 - 306.106 - sstr_t s2 = ucx_sprintf("Nothing to format!"); 306.107 - UCX_TEST_ASSERT(s2.ptr, "s2.ptr is NULL"); 306.108 - UCX_TEST_ASSERT(s2.length == 18, "wrong length"); 306.109 - UCX_TEST_ASSERT(!memcmp(s2.ptr, "Nothing to format!", 18), 306.110 - "wrong string without format arguments"); 306.111 - free(s2.ptr); 306.112 - 306.113 - UCX_TEST_END 306.114 -} 306.115 - 306.116 -UCX_TEST(test_ucx_bprintf) { 306.117 - UcxBuffer *b = ucx_buffer_new(NULL, 64, UCX_BUFFER_DEFAULT); 306.118 - 306.119 - UCX_TEST_BEGIN 306.120 - 306.121 - ucx_bprintf(b, "int: %d\nHello %s!", 123, "World"); 306.122 - UCX_TEST_ASSERT(b->size == 21, "wrong length"); 306.123 - UCX_TEST_ASSERT(!memcmp(b->space, "int: 123\nHello World!", 21), 306.124 - "wrong content"); 306.125 - 306.126 - ucx_buffer_clear(b); 306.127 - 306.128 - ucx_bprintf(b, "Nothing to format!"); 306.129 - UCX_TEST_ASSERT(b->size == 18, "wrong length"); 306.130 - UCX_TEST_ASSERT(!memcmp(b->space, "Nothing to format!", 18), 306.131 - "wrong string without format arguments"); 306.132 - 306.133 - UCX_TEST_END 306.134 - 306.135 - ucx_buffer_free(b); 306.136 -} 306.137 - 306.138 -UCX_TEST(test_ucx_stream_copy) { 306.139 - UcxBuffer *b1 = ucx_buffer_new(NULL, 64, UCX_BUFFER_DEFAULT); 306.140 - UcxBuffer *b2 = ucx_buffer_new(NULL, 2, UCX_BUFFER_AUTOEXTEND); 306.141 - 306.142 - UCX_TEST_BEGIN 306.143 - 306.144 - ucx_buffer_write("01234567", 1, 8, b1); 306.145 - ucx_buffer_write("abcdefgh", 1, 8, b1); 306.146 - UCX_TEST_ASSERT(b1->size == 16, "failed to fill buffer b1"); 306.147 - ucx_buffer_seek(b1, 0, SEEK_SET); 306.148 - 306.149 - char copybuf[256]; 306.150 - size_t ncp = ucx_stream_bcopy(b1, b2, ucx_buffer_read, ucx_buffer_write, 306.151 - copybuf, sizeof(copybuf)); 306.152 - UCX_TEST_ASSERT(ncp == 16, "wrong number of copied bytes"); 306.153 - UCX_TEST_ASSERT(b2->size == 16, "b2 has wrong size"); 306.154 - UCX_TEST_ASSERT(memcmp(b1->space, b2->space, 16) == 0, 306.155 - "b1 and b2 have not the same content"); 306.156 - 306.157 - memset(b2->space, 0, b2->capacity); 306.158 - b2->pos = 0; 306.159 - b2->size = 0; 306.160 - ucx_buffer_seek(b1, 0, SEEK_SET); 306.161 - 306.162 - FILE *file = tmpfile(); 306.163 - UCX_TEST_ASSERT(file, "test file cannot be opened, test aborted"); 306.164 - 306.165 - ncp = ucx_stream_copy(b1, file, ucx_buffer_read, fwrite); 306.166 - UCX_TEST_ASSERT(ncp == 16, "copied wrong number of bytes to file"); 306.167 - 306.168 - fseek(file, 0, SEEK_SET); 306.169 - 306.170 - ncp = ucx_stream_copy(file, b2, fread, ucx_buffer_write); 306.171 - UCX_TEST_ASSERT(ncp == 16, "copied wrong number of bytes from file"); 306.172 - 306.173 - UCX_TEST_ASSERT(memcmp(b1->space, b2->space, 16) == 0, 306.174 - "b1 and b2 content mismatch"); 306.175 - 306.176 - fclose(file); 306.177 - 306.178 - ucx_buffer_clear(b1); 306.179 - ucx_buffer_seek(b2, 0, SEEK_SET); 306.180 - ncp = ucx_stream_ncopy(b2, b1, ucx_buffer_read, ucx_buffer_write, 8); 306.181 - UCX_TEST_ASSERT(ncp == 8, "copied wrong number of bytes with ncopy"); 306.182 - UCX_TEST_ASSERT(memcmp(b1->space, "01234567\0\0\0\0\0\0\0\0", 16) == 0, 306.183 - "content wrong after ncopy"); 306.184 - 306.185 - UCX_TEST_END 306.186 - 306.187 - ucx_buffer_free(b1); 306.188 - ucx_buffer_free(b2); 306.189 -} 306.190 -
307.1 --- a/test/utils_tests.h Mon Dec 30 09:54:10 2019 +0100 307.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 307.3 @@ -1,50 +0,0 @@ 307.4 -/* 307.5 - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 307.6 - * 307.7 - * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. 307.8 - * 307.9 - * Redistribution and use in source and binary forms, with or without 307.10 - * modification, are permitted provided that the following conditions are met: 307.11 - * 307.12 - * 1. Redistributions of source code must retain the above copyright 307.13 - * notice, this list of conditions and the following disclaimer. 307.14 - * 307.15 - * 2. Redistributions in binary form must reproduce the above copyright 307.16 - * notice, this list of conditions and the following disclaimer in the 307.17 - * documentation and/or other materials provided with the distribution. 307.18 - * 307.19 - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 307.20 - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 307.21 - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 307.22 - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 307.23 - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 307.24 - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 307.25 - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 307.26 - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 307.27 - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 307.28 - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 307.29 - * POSSIBILITY OF SUCH DAMAGE. 307.30 - */ 307.31 - 307.32 -#ifndef UTILS_TESTS_H 307.33 -#define UTILS_TESTS_H 307.34 - 307.35 -#include <ucx/test.h> 307.36 -#include <ucx/utils.h> 307.37 - 307.38 -#ifdef __cplusplus 307.39 -extern "C" { 307.40 -#endif 307.41 - 307.42 -UCX_TEST(test_ucx_fprintf); 307.43 -UCX_TEST(test_ucx_asprintf); 307.44 -UCX_TEST(test_ucx_sprintf); 307.45 -UCX_TEST(test_ucx_bprintf); 307.46 -UCX_TEST(test_ucx_stream_copy); 307.47 - 307.48 -#ifdef __cplusplus 307.49 -} 307.50 -#endif 307.51 - 307.52 -#endif /* UTILS_TESTS_H */ 307.53 -