diff options
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/Makefile.in | 25 | ||||
| -rw-r--r-- | doc/changelog.txt | 7 | ||||
| -rw-r--r-- | doc/libHX_Documentation.lyx | 515 | ||||
| -rw-r--r-- | doc/libHX_Documentation.pdf | bin | 523100 -> 507683 bytes | |||
| -rw-r--r-- | doc/strlcpy-timing.txt | 109 | 
5 files changed, 405 insertions, 251 deletions
| diff --git a/doc/Makefile.in b/doc/Makefile.in index 50f826f..e3d240c 100644 --- a/doc/Makefile.in +++ b/doc/Makefile.in @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.13.4 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am.  # @configure_input@ -# Copyright (C) 1994-2013 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc.  # This Makefile.in is free software; the Free Software Foundation  # gives unlimited permission to copy and/or distribute it, @@ -17,7 +17,17 @@  # -*- Makefile -*-  VPATH = @srcdir@ -am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__is_gnu_make = { \ +  if test -z '$(MAKELEVEL)'; then \ +    false; \ +  elif test -n '$(MAKE_HOST)'; then \ +    true; \ +  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ +    true; \ +  else \ +    false; \ +  fi; \ +}  am__make_running_with_option = \    case $${target_option-} in \        ?) ;; \ @@ -81,8 +91,6 @@ POST_UNINSTALL = :  build_triplet = @build@  host_triplet = @host@  subdir = doc -DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ -	$(am__dist_doc_DATA_DIST)  ACLOCAL_M4 = $(top_srcdir)/aclocal.m4  am__aclocal_m4_deps = $(top_srcdir)/m4/gcc4_visibility.m4 \  	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ @@ -90,6 +98,8 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/gcc4_visibility.m4 \  	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/configure.ac  am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \  	$(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__dist_doc_DATA_DIST) \ +	$(am__DIST_COMMON)  mkinstalldirs = $(install_sh) -d  CONFIG_HEADER = $(top_builddir)/config.h  CONFIG_CLEAN_FILES = @@ -144,6 +154,7 @@ am__uninstall_files_from_dir = { \  am__installdirs = "$(DESTDIR)$(docdir)"  DATA = $(dist_doc_DATA)  am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +am__DIST_COMMON = $(srcdir)/Makefile.in  DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)  ACLOCAL = @ACLOCAL@  AMTAR = @AMTAR@ @@ -188,6 +199,7 @@ LIBTOOL = @LIBTOOL@  LIPO = @LIPO@  LN_S = @LN_S@  LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@  LYX = @LYX@  MAKEINFO = @MAKEINFO@  MANIFEST_TOOL = @MANIFEST_TOOL@ @@ -290,7 +302,6 @@ $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)  	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \  	$(am__cd) $(top_srcdir) && \  	  $(AUTOMAKE) --foreign doc/Makefile -.PRECIOUS: Makefile  Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status  	@case '$?' in \  	  *config.status*) \ @@ -490,6 +501,8 @@ uninstall-am: uninstall-dist_docDATA  	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \  	tags-am uninstall uninstall-am uninstall-dist_docDATA +.PRECIOUS: Makefile +  libHX_Documentation.pdf: libHX_Documentation.lyx  	srcdir="${srcdir}" ${srcdir}/generate; diff --git a/doc/changelog.txt b/doc/changelog.txt index 2b68284..6ce5889 100644 --- a/doc/changelog.txt +++ b/doc/changelog.txt @@ -1,7 +1,10 @@ -HEAD -==== +v3.23 (2018-08-28) +================== +Enhancements: +- opt: the option parser now recognizes long option abbreviations +- io: use modern readdir rather than readdir_r  v3.22 (2014-08-25) diff --git a/doc/libHX_Documentation.lyx b/doc/libHX_Documentation.lyx index 69ad84c..afaff61 100644 --- a/doc/libHX_Documentation.lyx +++ b/doc/libHX_Documentation.lyx @@ -1,7 +1,9 @@ -#LyX 2.0 created this file. For more info see http://www.lyx.org/ -\lyxformat 413 +#LyX 2.3 created this file. For more info see http://www.lyx.org/ +\lyxformat 544  \begin_document  \begin_header +\save_transient_properties true +\origin unavailable  \textclass article  \use_default_options true  \maintain_unincluded_children false @@ -9,16 +11,18 @@  \language_package default  \inputencoding utf8  \fontencoding global -\font_roman lmodern -\font_sans lmss -\font_typewriter lmtt +\font_roman "lmodern" "default" +\font_sans "lmss" "default" +\font_typewriter "lmtt" "default" +\font_math "auto" "auto"  \font_default_family default  \use_non_tex_fonts false  \font_sc false  \font_osf false -\font_sf_scale 100 -\font_tt_scale 100 - +\font_sf_scale 100 100 +\font_tt_scale 100 100 +\use_microtype false +\use_dash_ligatures true  \graphics default  \default_output_format default  \output_sync 0 @@ -38,16 +42,26 @@  \pdf_pdfusetitle true  \papersize a4paper  \use_geometry true -\use_amsmath 1 -\use_esint 1 -\use_mhchem 1 -\use_mathdots 1 -\cite_engine natbib_numerical +\use_package amsmath 1 +\use_package amssymb 1 +\use_package cancel 1 +\use_package esint 1 +\use_package mathdots 1 +\use_package mathtools 1 +\use_package mhchem 1 +\use_package stackrel 1 +\use_package stmaryrd 1 +\use_package undertilde 1 +\cite_engine natbib +\cite_engine_type numerical +\biblio_style plainnat  \use_bibtopic false  \use_indices false  \paperorientation portrait  \suppress_date false +\justification true  \use_refstyle 0 +\use_minted 0  \index Index  \shortcut idx  \color #008000 @@ -60,7 +74,10 @@  \tocdepth 1  \paragraph_separation indent  \paragraph_indentation default -\quotes_language english +\is_math_indent 0 +\math_numbering_side default +\quotes_style english +\dynamic_quotes 0  \papercolumns 1  \papersides 1  \paperpagestyle default @@ -74,7 +91,7 @@  \begin_body  \begin_layout Title -libHX 3.22 +libHX 3.23  \begin_inset Newline newline  \end_inset @@ -228,7 +245,7 @@ Scripting-like invocation for string handling  \begin_inset space ~  \end_inset ---- automatically doing (re)allocations as needed. +— automatically doing (re)allocations as needed.  \end_layout  \begin_layout Itemize @@ -309,7 +326,7 @@ Getopt::Long  \begin_inset space ~  \end_inset ---- no open-coding but a single  +— no open-coding but a single   \begin_inset Quotes eld  \end_inset @@ -346,7 +363,7 @@ configuration   files with key-value pairs, as usually foudn in   \family typewriter -/etc\SpecialChar \slash{} +/etc\SpecialChar breakableslash  sysconfig  \family default  . @@ -421,7 +438,7 @@ git://libhx.git.sf.net/gitroot/libhx/libhx  \begin_inset space ~  \end_inset ---- clone URL +— clone URL  \end_layout  \begin_layout Itemize @@ -439,7 +456,7 @@ http://libhx.git.sf.net/  \begin_inset space ~  \end_inset ---- gitweb interface +— gitweb interface  \end_layout  \begin_layout Itemize @@ -457,7 +474,7 @@ http://libhx.sf.net/  \begin_inset space ~  \end_inset ---- home page (and link to tarballs) +— home page (and link to tarballs)  \end_layout  \begin_layout Itemize @@ -475,7 +492,7 @@ http://freecode.com/projects/libhx/  \begin_inset space ~  \end_inset ---- Freecode page (useful for automatic notification of new releases) +— Freecode page (useful for automatic notification of new releases)  \end_layout  \begin_layout Section @@ -550,11 +567,11 @@ GNU C Compiler 3.3.5 or newer.  \begin_inset space ~  \end_inset ---- use at your own risk. +— use at your own risk.  \end_layout  \begin_layout Itemize -approximately 80--160 +approximately 80–160  \begin_inset space ~  \end_inset @@ -572,7 +589,7 @@ A C++ compiler is only needed if you want to build the C++ test programs  No external libraries are needed for compilation of libHX.   Helper files, like   \family typewriter -libxml_\SpecialChar \- +libxml_\SpecialChar softhyphen  helper.h  \family default  , may reference their include files, but they are not used during compilation. @@ -932,7 +949,7 @@ dynamic_cast<>  \begin_inset space ~  \end_inset ---- Actually, it  +— Actually, it   \shape italic  is  \shape default @@ -1102,7 +1119,7 @@ s of pointers to char  \begin_inset space ~  \end_inset ---- and only those. +— and only those.   No integers etc.   The intention is to facilitate working with libraries that use   \family typewriter @@ -1187,13 +1204,13 @@ status open  \begin_inset Tabular  <lyxtabular version="3" rows="7" columns="7">  <features tabularvalignment="middle"> -<column alignment="center" valignment="top" width="0"> -<column alignment="center" valignment="top" width="0"> -<column alignment="center" valignment="top" width="0"> -<column alignment="center" valignment="top" width="0"> -<column alignment="center" valignment="top" width="0"> -<column alignment="center" valignment="top" width="0"> -<column alignment="center" valignment="top" width="0"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top">  <row>  <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">  \begin_inset Text @@ -1552,7 +1569,7 @@ const char *  \begin_inset Text  \begin_layout Plain Layout --- +–  \end_layout  \end_inset @@ -1561,7 +1578,7 @@ const char *  \begin_inset Text  \begin_layout Plain Layout --- +–  \end_layout  \end_inset @@ -1570,7 +1587,7 @@ const char *  \begin_inset Text  \begin_layout Plain Layout --- +–  \end_layout  \end_inset @@ -1629,7 +1646,7 @@ const signed char *  \begin_inset Text  \begin_layout Plain Layout --- +–  \end_layout  \end_inset @@ -1638,7 +1655,7 @@ const signed char *  \begin_inset Text  \begin_layout Plain Layout --- +–  \end_layout  \end_inset @@ -1647,7 +1664,7 @@ const signed char *  \begin_inset Text  \begin_layout Plain Layout --- +–  \end_layout  \end_inset @@ -1706,7 +1723,7 @@ const unsigned char *  \begin_inset Text  \begin_layout Plain Layout --- +–  \end_layout  \end_inset @@ -1715,7 +1732,7 @@ const unsigned char *  \begin_inset Text  \begin_layout Plain Layout --- +–  \end_layout  \end_inset @@ -1724,7 +1741,7 @@ const unsigned char *  \begin_inset Text  \begin_layout Plain Layout --- +–  \end_layout  \end_inset @@ -1774,7 +1791,7 @@ const unsigned char *  \end_layout  \begin_layout Plain Layout -\begin_inset Caption +\begin_inset Caption Standard  \begin_layout Plain Layout  \begin_inset CommandInset label @@ -1804,7 +1821,7 @@ signed_cast()  static_cast  \begin_inset CommandInset label  LatexCommand label -name "sub:defs-static_cast" +name "subsec:defs-static_cast"  \end_inset @@ -2342,7 +2359,7 @@ Three Star Programmer  \end_inset  , having only these three type-checking cast macros was deemed sufficient. - The only place where libHX even uses a level\SpecialChar \nobreakdash- + The only place where libHX even uses a level\SpecialChar nobreakdash  3 indirection is in the option   parser.  \end_layout @@ -2359,8 +2376,8 @@ status open  \begin_inset Tabular  <lyxtabular version="3" rows="2" columns="2">  <features tabularvalignment="middle"> -<column alignment="center" valignment="top" width="0"> -<column alignment="center" valignment="top" width="0"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top">  <row>  <cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">  \begin_inset Text @@ -2417,7 +2434,7 @@ const int *const *  \end_layout  \begin_layout Plain Layout -\begin_inset Caption +\begin_inset Caption Standard  \begin_layout Plain Layout  Accepted expr/target types for  @@ -2592,9 +2609,9 @@ Expands to the size needed for a buffer (including '  \backslash  0  \family default -') to hold the base-10 string representation of a 16\SpecialChar \nobreakdash- -, 32\SpecialChar \nobreakdash- - or 64\SpecialChar \nobreakdash- +') to hold the base-10 string representation of a 16\SpecialChar nobreakdash +, 32\SpecialChar nobreakdash + or 64\SpecialChar nobreakdash  bit integer.  \end_layout @@ -2716,7 +2733,7 @@ defs.h  \family default   will use GCC's   \family typewriter -__builtin_\SpecialChar \- +__builtin_\SpecialChar softhyphen  offsetof  \family default   if available, which does some extra sanity checks in C++ mode. @@ -3007,9 +3024,9 @@ BUILD_BUG_ON  \family default   is meant to be used as a standalone statement, while   \family typewriter -BUILD_\SpecialChar \- -BUG_\SpecialChar \- -ON_\SpecialChar \- +BUILD_\SpecialChar softhyphen +BUG_\SpecialChar softhyphen +ON_\SpecialChar softhyphen  EXPR  \family default   is for when a check is to occur within an expression, that latter of which @@ -3668,6 +3685,10 @@ n", (long)ts.tv_sec, ts.tv_nsec);  The number of combinations of a (non-zero) negative number, zero and a (non-zero  ) positive number is small, so we can actually just exhaustively list them   all. +\begin_inset Separator latexpar +\end_inset + +  \end_layout  \begin_layout Standard @@ -3676,12 +3697,12 @@ The number of combinations of a (non-zero) negative number, zero and a (non-zero  \begin_inset Tabular  <lyxtabular version="3" rows="4" columns="6">  <features tabularvalignment="middle"> -<column alignment="center" valignment="top" width="0"> -<column alignment="center" valignment="top" width="0"> -<column alignment="center" valignment="top" width="0"> -<column alignment="center" valignment="top" width="0"> -<column alignment="center" valignment="top" width="0"> -<column alignment="center" valignment="top" width="0"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top">  <row>  <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">  \begin_inset Text @@ -4959,7 +4980,7 @@ hash  \begin_layout Standard  To access any map-related functions,   \family typewriter -#include <libHX\SpecialChar \slash{} +#include <libHX\SpecialChar breakableslash  map.h>  \family default  . @@ -4969,7 +4990,7 @@ map.h>  Structural definition  \begin_inset CommandInset label  LatexCommand label -name "sub:maps-def" +name "subsec:maps-def"  \end_inset @@ -5286,7 +5307,7 @@ HX_MAPT_HASH  \begin_inset space ~  \end_inset --- Amortized  +– Amortized   \begin_inset Formula $\mathcal{O}\left(1\right)$  \end_inset @@ -5314,7 +5335,7 @@ HX_MAPT_RBTREE  \begin_inset space ~  \end_inset ---  +–   \begin_inset Formula $\mathcal{O}\left(\log\left(n\right)\right)$  \end_inset @@ -5518,7 +5539,7 @@ g.  with the   \family typewriter -HXhashmap_\SpecialChar \- +HXhashmap_\SpecialChar softhyphen  init4  \family default   function call), or  @@ -5659,12 +5680,12 @@ HXMAP_SCKEY   Mnemonic for the combination of   \family typewriter -HXMAP_\SpecialChar \- +HXMAP_\SpecialChar softhyphen  SKEY  \family default   OR'ed with   \family typewriter -HXMAP_\SpecialChar \- +HXMAP_\SpecialChar softhyphen  CKEY  \family default  . @@ -5689,12 +5710,12 @@ HXMAP_SCDATA   Mnemonic for the combination of   \family typewriter -HXMAP_\SpecialChar \- +HXMAP_\SpecialChar softhyphen  SDATA  \family default   OR'ed with   \family typewriter -HXMAP_\SpecialChar \- +HXMAP_\SpecialChar softhyphen  SDATA  \family default  . @@ -5928,17 +5949,17 @@ The  \family typewriter  HXMAP_SKEY  \family default -\SpecialChar \slash{} +\SpecialChar breakableslash  \family typewriter  CKEY  \family default -\SpecialChar \slash{} +\SpecialChar breakableslash  \family typewriter  SDATA  \family default -\SpecialChar \slash{} +\SpecialChar breakableslash  \family typewriter  CDATA @@ -6556,7 +6577,7 @@ node->sdata  \begin_inset CommandInset ref  LatexCommand ref -reference "sub:maps-def" +reference "subsec:maps-def"  \end_inset @@ -6828,7 +6849,7 @@ struct HXmap_node  \begin_inset space ~  \end_inset -\SpecialChar \slash{} +\SpecialChar breakableslash   key-value pair from the map, or   \family typewriter  NULL @@ -6984,6 +7005,10 @@ HXmap_traverse  \begin_layout Itemize  Insertion or deletion may cause internal data structure to re-layout. +\begin_inset Separator latexpar +\end_inset + +  \end_layout  \begin_deeper @@ -7335,7 +7360,7 @@ dsize  Keys with non-unique data  \begin_inset CommandInset label  LatexCommand label -name "sub:maps-examples-bigkey" +name "subsec:maps-examples-bigkey"  \end_inset @@ -7348,7 +7373,7 @@ Keys can actually store non-unique data, as long as this extra fields does  \begin_inset space ~  \end_inset ---- the parts that do uniquely identify it. +— the parts that do uniquely identify it.   In the following example, the   \family typewriter  notes @@ -8261,12 +8286,12 @@ HXdeque_del  \begin_layout Standard  \family typewriter -HXdeque_\SpecialChar \- +HXdeque_\SpecialChar softhyphen  push  \family default   and   \family typewriter -HXdeque_\SpecialChar \- +HXdeque_\SpecialChar softhyphen  unshift  \family default   add the data item in a new node at the end ( @@ -8301,12 +8326,12 @@ errno  \begin_layout Standard  \family typewriter -HXdeque_\SpecialChar \- +HXdeque_\SpecialChar softhyphen  pop  \family default   and   \family typewriter -HXdeque_\SpecialChar \- +HXdeque_\SpecialChar softhyphen  shift  \family default   remove the last ( @@ -8332,7 +8357,7 @@ shift  \begin_layout Standard  \family typewriter -HXdeque_\SpecialChar \- +HXdeque_\SpecialChar softhyphen  move  \family default   will unlink a node from its list, and reinsert it after the given target @@ -8480,7 +8505,7 @@ HXdeque_get  \begin_inset space ~  \end_inset ---- however, since that is just what the  +— however, since that is just what the   \family typewriter  ptr  \family default @@ -8696,7 +8721,7 @@ void *  \end_layout  \begin_layout Plain Layout -\begin_inset Caption +\begin_inset Caption Standard  \begin_layout Plain Layout  Example use of HXdeque to store and sort a list @@ -8915,7 +8940,7 @@ indirect_data;  \end_layout  \begin_layout Plain Layout -\begin_inset Caption +\begin_inset Caption Standard  \begin_layout Plain Layout  Classic linked-list implementations with direct/indirect data blocks. @@ -8975,7 +9000,7 @@ int  \end_layout  \begin_layout Plain Layout -\begin_inset Caption +\begin_inset Caption Standard  \begin_layout Plain Layout  List head (next,prev pointers) inlined into the data block @@ -8994,8 +9019,8 @@ List head (next,prev pointers) inlined into the data block  \begin_layout Standard  At first glance, an inline list does not look much different from   \family typewriter -struct classic_\SpecialChar \- -direct_\SpecialChar \- +struct classic_\SpecialChar softhyphen +direct_\SpecialChar softhyphen  data  \family default  , it is mostly a viewpoint decision which struct is in the foreground. @@ -9917,7 +9942,7 @@ return  \end_layout  \begin_layout Plain Layout -\begin_inset Caption +\begin_inset Caption Standard  \begin_layout Plain Layout  Storing strings in a HXdeque @@ -10052,7 +10077,7 @@ return  \end_layout  \begin_layout Plain Layout -\begin_inset Caption +\begin_inset Caption Standard  \begin_layout Plain Layout  Storing strings in a HXlist @@ -10082,7 +10107,7 @@ With HXlist, one needs to have a struct with a HXlist_head in it, and if  \begin_inset space ~  \end_inset ----e. +—e.  \begin_inset space \thinspace{}  \end_inset @@ -10094,8 +10119,8 @@ by means of wanting to store more than just one value  \begin_inset space ~  \end_inset ---- one will need to create it first, as shown, and this may lead to an - expansion of code. +— one will need to create it first, as shown, and this may lead to an expansion + of code.  \end_layout  \begin_layout Standard @@ -10132,7 +10157,7 @@ HXdeque_push(dq, &p);  \end_layout  \begin_layout Plain Layout -\begin_inset Caption +\begin_inset Caption Standard  \begin_layout Plain Layout  Data can be added multiple times in a HXdeque without ill effects @@ -13173,7 +13198,7 @@ Examples  Using HX_split5  \begin_inset CommandInset label  LatexCommand label -name "sub:string-ex-HX_split5" +name "subsec:string-ex-HX_split5"  \end_inset @@ -13735,7 +13760,7 @@ HXmc_strcat(&s, ".txt");  \end_layout  \begin_layout Plain Layout -\begin_inset Caption +\begin_inset Caption Standard  \begin_layout Plain Layout  Improvement of string safety over time @@ -14847,7 +14872,7 @@ user  \begin_inset space ~  \end_inset ----  +—   \family typewriter  sizeof(const char *)  \family default @@ -14880,7 +14905,7 @@ user  \end_layout  \begin_layout Plain Layout -\begin_inset Caption +\begin_inset Caption Standard  \begin_layout Plain Layout @@ -15121,7 +15146,7 @@ section  \begin_inset CommandInset ref  LatexCommand ref -reference "sub:option-types" +reference "subsec:option-types"  \end_inset @@ -15129,7 +15154,7 @@ reference "sub:option-types"  \begin_inset space ~  \end_inset ---- not all constants can be used, though, and their meaning also differs +— not all constants can be used, though, and their meaning also differs   from what   \family typewriter  HX_getopt @@ -15142,7 +15167,7 @@ HX_shconfig  \begin_inset space ~  \end_inset ---- the two could be seen as  +— the two could be seen as   \begin_inset Quotes eld  \end_inset @@ -15203,7 +15228,7 @@ HXTYPE_STRING  \begin_inset space ~  \end_inset ----  +—   \family typewriter  ptr  \family default @@ -15251,7 +15276,7 @@ LLONG  \begin_inset space ~  \end_inset ---- mapping to the standard types +— mapping to the standard types  \end_layout  \begin_layout Subsubsection @@ -15308,7 +15333,7 @@ HXTYPE_STRP  \begin_inset space ~  \end_inset ----  +—   \family typewriter  ptr  \family default @@ -15347,7 +15372,7 @@ HXTYPE_BOOL  \begin_inset space ~  \end_inset ----  +—   \family typewriter  ptr  \family default @@ -15515,7 +15540,7 @@ HXTYPE_ULLONG  \begin_inset space ~  \end_inset ---- mapping to the standard types with one indirection (e. +— mapping to the standard types with one indirection (e.  \begin_inset space \thinspace{}  \end_inset @@ -15575,7 +15600,7 @@ HXTYPE_DOUBLE  \begin_inset space ~  \end_inset ---- mapping to the two floating-point types with one indirection (e. +— mapping to the two floating-point types with one indirection (e.  \begin_inset space \thinspace{}  \end_inset @@ -15927,7 +15952,7 @@ exec   expansion (wildcards, etc.) takes place.   stdin is set to   \family typewriter -/dev\SpecialChar \slash{} +/dev\SpecialChar breakableslash  null  \family default  . @@ -15936,11 +15961,11 @@ null  \begin_inset space ~  \end_inset ---- as it is relevant to security +— as it is relevant to security  \begin_inset space ~  \end_inset ---- the fmt table needs to have a key called  +— the fmt table needs to have a key called   \begin_inset Quotes eld  \end_inset @@ -16290,7 +16315,7 @@ Hello Home  \end_layout  \begin_layout Plain Layout -\begin_inset Caption +\begin_inset Caption Standard  \begin_layout Plain Layout  \begin_inset CommandInset label @@ -16339,7 +16364,7 @@ HXformat_aprintf(table, &result, "%(exec uname -s)");  \end_layout  \begin_layout Plain Layout -\begin_inset Caption +\begin_inset Caption Standard  \begin_layout Plain Layout  \begin_inset CommandInset label @@ -16522,21 +16547,21 @@ HX_REALPATH_DEFAULT   A mnemonic for a set of standard flags:   \family typewriter -HX_\SpecialChar \- -REALPATH_\SpecialChar \- +HX_\SpecialChar softhyphen +REALPATH_\SpecialChar softhyphen  SELF  \begin_inset space ~  \end_inset -| HX_\SpecialChar \- -REALPATH_\SpecialChar \- +| HX_\SpecialChar softhyphen +REALPATH_\SpecialChar softhyphen  PARENT  \family default  .   Note that   \family typewriter -HX_\SpecialChar \- -REALPATH_\SpecialChar \- +HX_\SpecialChar softhyphen +REALPATH_\SpecialChar softhyphen  ABSOLUTE  \family default  , which would also be required to get libc's  @@ -16649,38 +16674,12 @@ name "sec:dir-ops1"  \begin_layout Standard  libHX provides a minimal readdir-style wrapper for cross-platform directory   traversal. - This is needed because platforms such as do not have readdir (e. -\begin_inset space \thinspace{} -\end_inset - -g. -\begin_inset space \space{} -\end_inset - -Win32), or to work around peculiarities in the lower implementation. - Solaris's  -\family typewriter -struct dirent -\family default - for example is  -\begin_inset Quotes eld -\end_inset - -too small -\begin_inset Quotes erd -\end_inset - -, that is,  -\family typewriter -readdir -\family default - will cause a buffer overrun when Linux code is directly ported to it without - anticipating for this scenario. - libHX's  + This is needed because the Win32 platforms does not have readdir, and there + is some housekeeping to do on Unixish platforms, since the   \family typewriter -io.c +dirent  \family default - mitigates this. + structure needs allocation of a path-specific size.  \end_layout  \begin_layout Subsection @@ -17395,11 +17394,11 @@ write  \begin_inset space ~  \end_inset ---- even more likely so with sockets +— even more likely so with sockets  \begin_inset space ~  \end_inset ----, libHX provides two functions that calls these in a loop to retry said +—, libHX provides two functions that calls these in a loop to retry said   operations until the full amount has been processed.   Since   \family typewriter @@ -17539,7 +17538,7 @@ getopt  Synopsis  \begin_inset CommandInset label  LatexCommand label -name "sub:option-synopsis" +name "subsec:option-synopsis"  \end_inset @@ -17899,7 +17898,7 @@ It is a sad fact that C++ has not gotten around to implement these yet.  Type map  \begin_inset CommandInset label  LatexCommand label -name "sub:option-types" +name "subsec:option-types"  \end_inset @@ -17939,12 +17938,12 @@ HXTYPE_NONE   to 1.   Other rules apply when   \family typewriter -HXOPT_\SpecialChar \- +HXOPT_\SpecialChar softhyphen  INC  \family default   or   \family typewriter -HXOPT_\SpecialChar \- +HXOPT_\SpecialChar softhyphen  DEC  \family default   are specified as flags (see section @@ -17954,7 +17953,7 @@ DEC  \begin_inset CommandInset ref  LatexCommand ref -reference "sub:option-flags" +reference "subsec:option-flags"  \end_inset @@ -18196,7 +18195,7 @@ NULL  \begin_inset CommandInset ref  LatexCommand ref -reference "sub:option-pitfalls-static" +reference "subsec:option-pitfalls-static"  \end_inset @@ -18243,22 +18242,22 @@ strtoul   indicates hexadecimal (16) base, and decimal (10) otherwise.  \family typewriter -HXTYPE_\SpecialChar \- +HXTYPE_\SpecialChar softhyphen  LLONG  \family default  ,  \family typewriter - HXTYPE_\SpecialChar \- + HXTYPE_\SpecialChar softhyphen  ULLONG  \family default  ,  \family typewriter - HXTYPE_\SpecialChar \- + HXTYPE_\SpecialChar softhyphen  INT64  \family default   and  \family typewriter - HXTYPE_\SpecialChar \- + HXTYPE_\SpecialChar softhyphen  UINT64  \family default   use @@ -18270,6 +18269,10 @@ UINT64   strtoull  \family default  , which may not be available on all platforms. +\begin_inset Separator latexpar +\end_inset + +  \end_layout  \begin_layout Standard @@ -18285,10 +18288,10 @@ status open  \begin_inset Tabular  <lyxtabular version="3" rows="12" columns="4">  <features tabularvalignment="middle"> -<column alignment="center" valignment="top" width="0"> -<column alignment="center" valignment="bottom" width="0"> -<column alignment="center" valignment="top" width="0"> -<column alignment="center" valignment="top" width="0"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="bottom"> +<column alignment="center" valignment="top"> +<column alignment="center" valignment="top">  <row>  <cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">  \begin_inset Text @@ -19100,7 +19103,7 @@ size_t  \end_layout  \begin_layout Plain Layout -\begin_inset Caption +\begin_inset Caption Standard  \begin_layout Plain Layout  Integral and floating-point types for the libHX option parser @@ -19119,12 +19122,12 @@ Integral and floating-point types for the libHX option parser  \begin_layout Standard  \family typewriter -HXTYPE_\SpecialChar \- +HXTYPE_\SpecialChar softhyphen  FLOAT  \family default   and   \family typewriter -HXTYPE_\SpecialChar \- +HXTYPE_\SpecialChar softhyphen  DOUBLE  \family default   make use of  @@ -19156,7 +19159,7 @@ long double  \begin_inset CommandInset ref  LatexCommand ref -reference "sub:option-example-cb" +reference "subsec:option-example-cb"  \end_inset @@ -19167,7 +19170,7 @@ reference "sub:option-example-cb"  Flags  \begin_inset CommandInset label  LatexCommand label -name "sub:option-flags" +name "subsec:option-flags"  \end_inset @@ -19243,17 +19246,17 @@ HXOPT_DEC  \begin_layout Standard  Only one of   \family typewriter -HXOPT_\SpecialChar \- +HXOPT_\SpecialChar softhyphen  INC  \family default   and   \family typewriter -HXOPT_\SpecialChar \- +HXOPT_\SpecialChar softhyphen  DEC  \family default   may be specified at a time, and they require that the base type is   \family typewriter -HXTYPE_\SpecialChar \- +HXTYPE_\SpecialChar softhyphen  NONE  \family default  , or they will have no effect. @@ -19264,7 +19267,7 @@ NONE  \begin_inset CommandInset ref  LatexCommand ref -reference "sub:option-example-incdec" +reference "subsec:option-example-incdec"  \end_inset @@ -19326,7 +19329,7 @@ OR  \begin_inset Quotes erd  \end_inset -s the pointee with the specified\SpecialChar \slash{} +s the pointee with the specified\SpecialChar breakableslash  transformed value.  \end_layout @@ -19359,7 +19362,7 @@ AND  \begin_inset Quotes erd  \end_inset -s the pointee with the specified\SpecialChar \slash{} +s the pointee with the specified\SpecialChar breakableslash  transformed value.  \end_layout @@ -19392,7 +19395,7 @@ XOR  \begin_inset Quotes erd  \end_inset -s the pointee with the specified\SpecialChar \slash{} +s the pointee with the specified\SpecialChar breakableslash  transformed value.  \end_layout @@ -19403,12 +19406,12 @@ HXOPT_OR  \family default  ,   \family typewriter -HXOPT_\SpecialChar \- +HXOPT_\SpecialChar softhyphen  AND  \family default  ,   \family typewriter -HXOPT_\SpecialChar \- +HXOPT_\SpecialChar softhyphen  XOR  \family default  ) may be specified at a time, but they can be used with any integral  @@ -19417,12 +19420,12 @@ type  \family default   (  \family typewriter -HXTYPE_\SpecialChar \- +HXTYPE_\SpecialChar softhyphen  UINT  \family default  ,   \family typewriter -HXTYPE_\SpecialChar \- +HXTYPE_\SpecialChar softhyphen  ULONG  \family default  , etc.). @@ -19433,7 +19436,7 @@ ULONG  \begin_inset CommandInset ref  LatexCommand ref -reference "sub:option-example-mask" +reference "subsec:option-example-mask"  \end_inset @@ -19513,8 +19516,8 @@ iptables  \begin_inset space ~  \end_inset ---- things that look like an option take precedence over an option with - an optional argument. +— things that look like an option take precedence over an option with an + optional argument.  \begin_inset Quotes eld  \end_inset @@ -19970,17 +19973,17 @@ HXOPT_ERR_VOID  \family default   is of type   \family typewriter -HXTYPE_\SpecialChar \- +HXTYPE_\SpecialChar softhyphen  NONE  \family default  ,   \family typewriter -HXTYPE_\SpecialChar \- +HXTYPE_\SpecialChar softhyphen  VAL  \family default   or   \family typewriter -HXTYPE_\SpecialChar \- +HXTYPE_\SpecialChar softhyphen  SVAL  \family default  . @@ -20036,6 +20039,30 @@ HXOPT_ERR_MIS  \end_layout  \begin_layout Description + +\family typewriter +HXOPT_ERR_AMBIG +\series medium + +\begin_inset Index idx +status open + +\begin_layout Plain Layout + +\family typewriter +\series medium +HXOPT_ERR_AMBIG +\end_layout + +\end_inset + + +\family default +\series default + An abbreviation of a long option was ambiguous. +\end_layout + +\begin_layout Description  negative  \begin_inset space ~  \end_inset @@ -20051,7 +20078,7 @@ Pitfalls  Staticness of tables  \begin_inset CommandInset label  LatexCommand label -name "sub:option-pitfalls-static" +name "subsec:option-pitfalls-static"  \end_inset @@ -20059,9 +20086,9 @@ name "sub:option-pitfalls-static"  \end_layout  \begin_layout Standard -The following is an example of a trap regarding  +The following is an example of a possible pitfall regarding   \family typewriter -HXTYPE_\SpecialChar \- +HXTYPE_\SpecialChar softhyphen  STRDQ  \family default  : @@ -20194,7 +20221,7 @@ return  \begin_layout Standard  The problem here is that   \family typewriter -options_\SpecialChar \- +options_\SpecialChar softhyphen  table  \family default   is, due to the  @@ -20217,7 +20244,7 @@ static  \family default   qualifier on the options table when used with   \family typewriter -HXTYPE_\SpecialChar \- +HXTYPE_\SpecialChar softhyphen  STRDQ  \family default  , so that it will be evaluated when it is first executed. @@ -20226,7 +20253,7 @@ STRDQ  \begin_layout Standard  It was not deemed worthwhile to have   \family typewriter -HXTYPE_\SpecialChar \- +HXTYPE_\SpecialChar softhyphen  STRDQ  \family default   take an indirect HXdeque ( @@ -20338,7 +20365,7 @@ Options using a  \begin_inset space ~  \end_inset ---- by GNU standards, a negator is named  +— by GNU standards, a negator is named   \begin_inset Quotes eld  \end_inset @@ -20377,7 +20404,7 @@ Table nesting like implemented in popt.  \begin_inset CommandInset ref  LatexCommand ref -reference "sub:option-example-chained" +reference "subsec:option-example-chained"  \end_inset @@ -20616,7 +20643,7 @@ return  Verbosity levels  \begin_inset CommandInset label  LatexCommand label -name "sub:option-example-incdec" +name "subsec:option-example-incdec"  \end_inset @@ -20816,7 +20843,7 @@ static const struct  Mask operations  \begin_inset CommandInset label  LatexCommand label -name "sub:option-example-mask" +name "subsec:option-example-mask"  \end_inset @@ -20928,7 +20955,7 @@ net_mask |= y  Support for non-standard actions  \begin_inset CommandInset label  LatexCommand label -name "sub:option-example-cb" +name "subsec:option-example-cb"  \end_inset @@ -20939,7 +20966,7 @@ name "sub:option-example-cb"  Supporting additional types or custom storage formats is easy, by simply   using   \family typewriter -HXTYPE_\SpecialChar \- +HXTYPE_\SpecialChar softhyphen  STRING  \family default  ,  @@ -21117,7 +21144,7 @@ static const struct  Chained argument processing  \begin_inset CommandInset label  LatexCommand label -name "sub:option-example-chained" +name "subsec:option-example-chained"  \end_inset @@ -21136,8 +21163,8 @@ On the first run, only   is considered, which is then used to select the next set of accepted options.   Note that   \family typewriter -HXOPT_\SpecialChar \- -DESTROY_\SpecialChar \- +HXOPT_\SpecialChar softhyphen +DESTROY_\SpecialChar softhyphen  OLD  \family default   is used here, which causes the argv that is produced by the first invocation @@ -21157,7 +21184,7 @@ HX_getopt  \family typewriter  get_cakes  \family default -\SpecialChar \slash{} +\SpecialChar breakableslash  \family typewriter  get_fruit @@ -21165,8 +21192,8 @@ get_fruit  .  \family typewriter -HXOPT_\SpecialChar \- -DESTROY_\SpecialChar \- +HXOPT_\SpecialChar softhyphen +DESTROY_\SpecialChar softhyphen  OLD  \family default   is however  @@ -21679,7 +21706,7 @@ struct HXoption  \begin_inset CommandInset ref  LatexCommand ref -reference "sub:option-synopsis" +reference "subsec:option-synopsis"  \end_inset @@ -21727,7 +21754,7 @@ ptr  \begin_inset CommandInset ref  LatexCommand ref -reference "sub:option-types" +reference "subsec:option-types"  \end_inset @@ -21780,7 +21807,7 @@ other   direction (actually you have to turn the array around) and stopping at   the first existing file by use of the   \family typewriter -SHCONF_\SpecialChar \- +SHCONF_\SpecialChar softhyphen  ONE  \family default   flag. @@ -22208,7 +22235,7 @@ srand  \begin_inset space ~  \end_inset ---- usually this will be before a program's  +— usually this will be before a program's   \family typewriter  main  \family default @@ -22464,8 +22491,8 @@ bool  When creating a new process with the intent of running it asynchronously   (using   \family typewriter -HXproc_\SpecialChar \- -run_\SpecialChar \- +HXproc_\SpecialChar softhyphen +run_\SpecialChar softhyphen  async  \family default  ), the first three fields must be filled in by the user. @@ -22605,7 +22632,7 @@ p_exited  \begin_inset space \space{}  \end_inset -signalled\SpecialChar \slash{} +signalled\SpecialChar breakableslash  terminated).  \end_layout @@ -22629,7 +22656,7 @@ p_status  Flags  \begin_inset CommandInset label  LatexCommand label -name "sub:proc-pflags" +name "subsec:proc-pflags"  \end_inset @@ -22668,8 +22695,8 @@ HXPROC_STDIN   program, that is, not inherit the stdin of the master.   Cannot be used for   \family typewriter -HXproc_\SpecialChar \- -run_\SpecialChar \- +HXproc_\SpecialChar softhyphen +run_\SpecialChar softhyphen  sync  \family default   (because there would be no one to provide data in a sync operation). @@ -22752,19 +22779,19 @@ HXPROC_NULL_STDIN   The subprocess's stdin file descriptor shall be connected to   \family typewriter -/dev\SpecialChar \slash{} +/dev\SpecialChar breakableslash  null  \family default  .  \family typewriter -HXPROC_\SpecialChar \- +HXPROC_\SpecialChar softhyphen  STDIN  \family default   and   \family typewriter -HXPROC_\SpecialChar \- -NULL_\SpecialChar \- +HXPROC_\SpecialChar softhyphen +NULL_\SpecialChar softhyphen  STDIN  \family default   are mutually exclusive. @@ -22789,19 +22816,19 @@ HXPROC_NULL_STDOUT   Connect the stdout file descriptor of the subprocess to   \family typewriter -/dev\SpecialChar \slash{} +/dev\SpecialChar breakableslash  null  \family default  , thereby essentially discarding its output.  \family typewriter -HXPROC_\SpecialChar \- +HXPROC_\SpecialChar softhyphen  STDOUT  \family default   and   \family typewriter -HXPROC_\SpecialChar \- -NULL_\SpecialChar \- +HXPROC_\SpecialChar softhyphen +NULL_\SpecialChar softhyphen  STDOUT  \family default   are mutuall exclusive. @@ -22826,19 +22853,19 @@ HXPROC_NULL_STDERR   Connect the stderr file descriptor of the subprocess to   \family typewriter -/dev\SpecialChar \slash{} +/dev\SpecialChar breakableslash  null  \family default  , thereby essentially discarding its output.  \family typewriter -HXPROC_\SpecialChar \- +HXPROC_\SpecialChar softhyphen  STDERR  \family default   and   \family typewriter -HXPROC_\SpecialChar \- -NULL_\SpecialChar \- +HXPROC_\SpecialChar softhyphen +NULL_\SpecialChar softhyphen  STDERR  \family default   are mutually exclusive. @@ -23273,7 +23300,7 @@ flags  \begin_inset CommandInset ref  LatexCommand ref -reference "sub:proc-pflags" +reference "subsec:proc-pflags"  \end_inset @@ -23423,7 +23450,7 @@ letters) have no notion of signedness  \begin_inset space ~  \end_inset ---- there is no  +— there is no   \begin_inset Quotes eld  \end_inset @@ -23500,8 +23527,8 @@ unfortunate  .   Characters, when interpreted as the 8-bit signed numeric quantity they - are implicitly convertable to, run from 0 to 127 and \SpecialChar \nobreakdash- -128 to \SpecialChar \nobreakdash- + are implicitly convertable to, run from 0 to 127 and \SpecialChar nobreakdash +128 to \SpecialChar nobreakdash  1.   Since the   \family typewriter @@ -23594,9 +23621,9 @@ signed char  \begin_inset Quotes erd  \end_inset -, see above), producing 0xffffffc3 (\SpecialChar \nobreakdash- +, see above), producing 0xffffffc3 (\SpecialChar nobreakdash  61). - But passing \SpecialChar \nobreakdash- + But passing \SpecialChar nobreakdash  61 is not what was intended.  \end_layout @@ -23619,7 +23646,7 @@ unsigned  \family typewriter  isalpha  \family default -'s domain only goes from 0--255. +'s domain only goes from 0–255.   The implication is that you cannot pass   \family typewriter  EOF @@ -24313,9 +24340,9 @@ xmlNewTextNode  \family typewriter -xml\SpecialChar \- -New\SpecialChar \- -Text\SpecialChar \- +xml\SpecialChar softhyphen +New\SpecialChar softhyphen +Text\SpecialChar softhyphen  Node  \family default   and  @@ -24332,8 +24359,8 @@ xmlSetProp  \family typewriter -xml\SpecialChar \- -Set\SpecialChar \- +xml\SpecialChar softhyphen +Set\SpecialChar softhyphen  Prop  \family default  , respectively. @@ -24439,15 +24466,15 @@ wxDialog  \family default  s, which includes   \family typewriter -wxDEFAULT_\SpecialChar \- -FRAME_\SpecialChar \- +wxDEFAULT_\SpecialChar softhyphen +FRAME_\SpecialChar softhyphen  STYLE  \family default   and a flag such that the dialog does not create a new window in the task   bar (  \family typewriter -wxFRAME_\SpecialChar \- -NO_\SpecialChar \- +wxFRAME_\SpecialChar softhyphen +NO_\SpecialChar softhyphen  TASKBAR  \family default  ). @@ -24718,6 +24745,8 @@ Appendix  \begin_inset CommandInset index_print  LatexCommand printindex  type "idx" +name "Index" +literal "true"  \end_inset diff --git a/doc/libHX_Documentation.pdf b/doc/libHX_Documentation.pdfBinary files differ index 0a1f6fb..40e8c81 100644 --- a/doc/libHX_Documentation.pdf +++ b/doc/libHX_Documentation.pdf diff --git a/doc/strlcpy-timing.txt b/doc/strlcpy-timing.txt new file mode 100644 index 0000000..56ed40c --- /dev/null +++ b/doc/strlcpy-timing.txt @@ -0,0 +1,109 @@ +strncpy fills the buffer with \0s if there is room left, which can build up +runtime if the buffer is much larger than the string to be copied. The turning +point on i7-4600U is about when the buffer is 3 times larger or more than the +string. Copying a M-char string into a buffer of size N with different +strategies turned out as follows, not favorably for switching to memcpy +approach: + +M->N: [str minus mem] (str=walltime, mem=walltime) + +   3->   4: 0.-18010833 (str=0.053766602 mem=0.071777435) +   3->   8: 0.-02276861 (str=0.069214041 mem=0.071490902) +   3->  16: 0.-02594396 (str=0.069160485 mem=0.071754881) +   3->  32: 0.-06119749 (str=0.064986286 mem=0.071106035) +   3->  64: 0.-10011776 (str=0.062121350 mem=0.072133126) +   3->  80: 0.000049152 (str=0.071466420 mem=0.071417268) +   3-> 128: 0.-10057727 (str=0.062143411 mem=0.072201138) +   3-> 256: 0.006148232 (str=0.077881866 mem=0.071733634) +   3->1024: 0.133625167 (str=0.206994485 mem=0.073369318) +   3->2048: 0.335047756 (str=0.405503204 mem=0.070455448) +   7->   4: 0.-28288138 (str=0.046614065 mem=0.074902203) +   7->   8: 0.-20974635 (str=0.052778755 mem=0.073753390) +   7->  16: 0.-06903916 (str=0.068165128 mem=0.075069044) +   7->  32: 0.-11161234 (str=0.064787697 mem=0.075948931) +   7->  64: 0.-12026108 (str=0.061544945 mem=0.073571053) +   7->  80: 0.-01877441 (str=0.072047713 mem=0.073925154) +   7-> 128: 0.-11343544 (str=0.062557326 mem=0.073900870) +   7-> 256: 0.005472409 (str=0.079922333 mem=0.074449924) +   7->1024: 0.133164952 (str=0.206290338 mem=0.073125386) +   7->2048: 0.329050142 (str=0.403909643 mem=0.074859501) +  15->   4: 0.-28134891 (str=0.046436269 mem=0.074571160) +  15->   8: 0.-26808385 (str=0.047722251 mem=0.074530636) +  15->  16: 0.-21857806 (str=0.052866161 mem=0.074723967) +  15->  32: 0.-15183331 (str=0.058903617 mem=0.074086948) +  15->  64: 0.-06020317 (str=0.068661890 mem=0.074682207) +  15->  80: 0.-13077126 (str=0.061986539 mem=0.075063665) +  15-> 128: 0.-05110583 (str=0.069024087 mem=0.074134670) +  15-> 256: 0.010346893 (str=0.085920728 mem=0.075573835) +  15->1024: 0.130128294 (str=0.203516720 mem=0.073388426) +  15->2048: 0.384323201 (str=0.459435357 mem=0.075112156) +  31->   4: 0.-40592735 (str=0.043398064 mem=0.083990799) +  31->   8: 0.-40405756 (str=0.043312982 mem=0.083718738) +  31->  16: 0.-42308714 (str=0.044729400 mem=0.087038114) +  31->  32: 0.-14127856 (str=0.056652936 mem=0.070780792) +  31->  64: 0.-01889875 (str=0.069010683 mem=0.070900558) +  31->  80: 0.001793133 (str=0.072637736 mem=0.070844603) +  31-> 128: 0.-02607933 (str=0.068334098 mem=0.070942031) +  31-> 256: 0.018139903 (str=0.088753971 mem=0.070614068) +  31->1024: 0.133949645 (str=0.204402776 mem=0.070453131) +  31->2048: 0.398049056 (str=0.468551187 mem=0.070502131) +  63->   4: 0.-40166921 (str=0.043758420 mem=0.083925341) +  63->   8: 0.-40966732 (str=0.043495110 mem=0.084461842) +  63->  16: 0.-43784039 (str=0.043770941 mem=0.087554980) +  63->  32: 0.-31256988 (str=0.046623389 mem=0.077880377) +  63->  64: 0.-13997348 (str=0.068499638 mem=0.082496986) +  63->  80: 0.-13916305 (str=0.068620538 mem=0.082536843) +  63-> 128: 0.-08328403 (str=0.074551339 mem=0.082879742) +  63-> 256: 0.004095734 (str=0.087035878 mem=0.082940144) +  63->1024: 0.151451020 (str=0.233770899 mem=0.082319879) +  63->2048: 0.355839456 (str=0.438594030 mem=0.082754574) +  79->   4: 0.-53092708 (str=0.045118918 mem=0.098211626) +  79->   8: 0.-54340043 (str=0.043908506 mem=0.098248549) +  79->  16: 0.-57213292 (str=0.043950458 mem=0.101163750) +  79->  32: 0.-44929075 (str=0.047104201 mem=0.092033276) +  79->  64: 0.-40841792 (str=0.060369798 mem=0.101211590) +  79->  80: 0.-34512567 (str=0.072643063 mem=0.107155630) +  79-> 128: 0.-26004050 (str=0.081177431 mem=0.107181481) +  79-> 256: 0.-14164733 (str=0.093010965 mem=0.107175698) +  79->1024: 0.131262747 (str=0.238379553 mem=0.107116806) +  79->2048: 0.337908136 (str=0.444999897 mem=0.107091761) + 127->   4: 0.-53463038 (str=0.044954314 mem=0.098417352) + 127->   8: 0.-54030635 (str=0.044154075 mem=0.098184710) + 127->  16: 0.-56778235 (str=0.044743552 mem=0.101521787) + 127->  32: 0.-44858267 (str=0.047231395 mem=0.092089662) + 127->  64: 0.-42149730 (str=0.059234517 mem=0.101384247) + 127->  80: 0.-45513663 (str=0.062055806 mem=0.107569469) + 127-> 128: 0.-23468852 (str=0.083671245 mem=0.107140097) + 127-> 256: 0.-04999520 (str=0.102026030 mem=0.107025550) + 127->1024: 0.139261976 (str=0.246475516 mem=0.107213540) + 127->2048: 0.345950301 (str=0.453134545 mem=0.107184244) + 255->   4: 0.-70209659 (str=0.044940128 mem=0.115149787) + 255->   8: 0.-71166235 (str=0.044243636 mem=0.115409871) + 255->  16: 0.-73994321 (str=0.044365563 mem=0.118359884) + 255->  32: 0.-61137064 (str=0.047746212 mem=0.108883276) + 255->  64: 0.-58453794 (str=0.059850772 mem=0.118304566) + 255->  80: 0.-61859639 (str=0.062199397 mem=0.124059036) + 255-> 128: 0.-42561423 (str=0.081341036 mem=0.123902459) + 255-> 256: 0.-35252238 (str=0.127124980 mem=0.162377218) + 255->1024: 0.097331464 (str=0.259751271 mem=0.162419807) + 255->2048: 0.305789595 (str=0.468141377 mem=0.162351782) +1023->   4: 0.-161452842 (str=0.043764021 mem=0.205216863) +1023->   8: 0.-155095262 (str=0.043698735 mem=0.198793997) +1023->  16: 0.-153207918 (str=0.043675714 mem=0.196883632) +1023->  32: 0.-152565254 (str=0.047438108 mem=0.200003362) +1023->  64: 0.-144192775 (str=0.058773300 mem=0.202966075) +1023->  80: 0.-149929950 (str=0.062432021 mem=0.212361971) +1023-> 128: 0.-132285886 (str=0.080313089 mem=0.212598975) +1023-> 256: 0.-133526587 (str=0.108033655 mem=0.241560242) +1023->1024: 0.-90772704 (str=0.311350193 mem=0.402122897) +1023->2048: 0.088417585 (str=0.490594175 mem=0.402176590) +1368->   4: 0.-211901350 (str=0.044167308 mem=0.256068658) +1368->   8: 0.-203185010 (str=0.044571028 mem=0.247756038) +1368->  16: 0.-200207782 (str=0.044133973 mem=0.244341755) +1368->  32: 0.-202440240 (str=0.047977200 mem=0.250417440) +1368->  64: 0.-193238434 (str=0.058934429 mem=0.252172863) +1368->  80: 0.-200936170 (str=0.062169785 mem=0.263105955) +1368-> 128: 0.-181397289 (str=0.081740755 mem=0.263138044) +1368-> 256: 0.-183151788 (str=0.107983466 mem=0.291135254) +1368->1024: 0.-142070533 (str=0.292431947 mem=0.434502480) +1368->2048: 0.-16089517 (str=0.508519291 mem=0.524608808) | 
