https://www.liblfds.org/mediawiki/index.php?title=r7.1.1:Introduction&feed=atom&action=historyr7.1.1:Introduction - Revision history2024-03-29T11:20:24ZRevision history for this page on the wikiMediaWiki 1.36.0https://www.liblfds.org/mediawiki/index.php?title=r7.1.1:Introduction&diff=1143&oldid=prevAdmin: 1 revision imported2017-02-17T20:16:48Z<p>1 revision imported</p>
<p><b>New page</b></p><div>{{DISPLAYTITLE:Introduction}}<br />
==Introduction==<br />
Welcome to ''liblfds'', a portable, license-free, lock-free data structure library written in C.<br />
<br />
Lock-free data structures are process, thread and interrupt safe (i.e. the same data structure instance can be safely used across processes, threads and both inside and outside of interrupt handlers), never sleep (and so are safe for kernel use when sleeping is not permitted), operate without context switches, cannot fail (no need to handle error cases, as there are none), perform and scale literally orders of magnitude better than locking data structures, and ''liblfds'' itself (as of release 7.1.1) is implemented such that it performs no allocations (and so can be used with the stack, heap or shared memory) and compiles not just on a freestanding C89 implementation, but on a bare C89 implementation.<br />
<br />
Currently ''liblfds'' is composed of three components; the library itself, a test suite and a benchmark suite, where the test and benchmark suites are implemented as libraries (''libtest'' and ''libbenchmark'') so they can be used on arbitrary platforms, where both offer their complete functionality through a simple and minimal API, along with two thin command line veneers (''test'' and ''benchmark'') provided for convenience for the wide range of platforms which do offer hosted environments.<br />
<br />
==Out-of-the-Box Supported Data Structures and Platforms==<br />
The library ships with build files for a small range of popular toolchains and platforms. The library provides a porting abstraction layer to mask platform differences and the porting abstraction layer, for this small range of popular toolchains and platforms, has been fully implemented.<br />
<br />
To use the library on unsupported platforms, the porting abstraction layer must be implemented. To use the library with unsupported toolchains, the build files must be provided.<br />
<br />
Version 7.0.0 provided Microsoft Visual Studio solution files (2012 and 2013, with the respective WDK for each version), but the staggeringly high cost of creating these build files, and Microsoft's conduct pushing Windows 10 onto users, has led to their omission from this release.<br />
<br />
Note not all processors support all data structures, due to atomic operation support varying by processor.<br />
<br />
<table border="1" cellpadding="4"><br />
<tr><br />
<th colspan="14">Release 7.1.1</th><br />
</tr><br />
<br />
<tr><br />
<th></th><br />
<th colspan="5">GCC and gnumake</th><br />
<th colspan="4">GCC, gnumake and kbuild<sup>1</sup></th><br />
<th colspan="2">Microsoft C compiler and gnumake</th><br />
<th colspan="2">WDK 7.1<sup>2</sup></th><br />
</tr><br />
<br />
<tr><br />
<th></th><br />
<br />
<th>Alpha, IA64, MIPS64,<br>POWERPC32/64,<br>SPARC32/64</th><br />
<th>MIPS32</th><br />
<th>ARM64</th><br />
<th>x86</th><br />
<th>ARM32, x64</th><br />
<br />
<th>Alpha, IA64, MIPS32/64,<br>POWERPC32/64,<br>SPARC32/64</th><br />
<th>ARM64</th><br />
<th>ARM32, x86</th><br />
<th>x64</th><br />
<br />
<th>x64</th><br />
<th>x86</th><br />
<br />
<th>IA64</th><br />
<th>x64, x86</th><br />
</tr><br />
<br />
<tr align="center"><br />
<th align="left">Binary Tree (add-only, unbalanced)</th><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
</tr><br />
<br />
<tr align="center"><br />
<th align="left">Freelist</th><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
</tr><br />
<br />
<tr align="center"><br />
<th align="left">Hash (add-only)</th><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
</tr><br />
<br />
<tr align="center"><br />
<th align="left">List (add-only, singly-linked, ordered)</th><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
</tr><br />
<br />
<tr align="center"><br />
<th align="left">List (add-only, singly-linked, unordered)</th><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
</tr><br />
<br />
<tr align="center"><br />
<th align="left">PRNG</th><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
</tr><br />
<br />
<tr align="center"><br />
<th align="left">Queue (bounded, many producer, many consumer)</th><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
</tr><br />
<br />
<tr align="center"><br />
<th align="left">Queue (bounded, single producer, single consumer)</th><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
</tr><br />
<br />
<tr align="center"><br />
<th align="left">Queue (unbounded, many producer, many consumer)</th><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
</tr><br />
<br />
<tr align="center"><br />
<th align="left">Ringbuffer</th><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
</tr><br />
<br />
<tr align="center"><br />
<th align="left">Stack</th><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<br />
<td><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
</tr><br />
</table><br />
<br />
<p><small>1. This is the Linux kernel toolchain<br><br />
2. This is a Windows kernel toolchain</small></p><br />
<br />
<table border="1" cellpadding="4"><br />
<tr><br />
<th colspan="2">Key</th><br />
</tr><br />
<br />
<tr><br />
<td align="center"><img src="http://www.liblfds.org/pages/images/button_green.png"/></td><br />
<td>supported, compiled and tested</td><br />
</tr><br />
<br />
<tr><br />
<td align="center"><img src="http://www.liblfds.org/pages/images/button_yellow_and_green.png"/></td><br />
<td>supported and compiled but not tested (test ought to pass, but it hasn't been run, so it won't)</td><br />
</tr><br />
<br />
<tr><br />
<td align="center"><img src="http://www.liblfds.org/pages/images/button_yellow.png"/></td><br />
<td>supported but not compiled or tested (so it ought to compile, but it hasn't been done, so it won't)</td><br />
</tr><br />
<br />
<tr><br />
<td align="center"><img src="http://www.liblfds.org/pages/images/button_red.png"/></td><br />
<td>not (yet) supported (never compiled, and expected not to compile successfully)</td><br />
</tr><br />
<br />
<tr><br />
<td align="center"><img src="http://www.liblfds.org/pages/images/cross_red.png"/></td><br />
<td>cannot be implemented on this platform</td><br />
</tr><br />
<br />
<tr valign="top"><br />
<td>GCC</td><br />
<td>GCC >= 4.1.2<sup>1</sup> and GNUmake >= 3.8.1</td><br />
</tr><br />
<br />
<tr valign="top"><br />
<td>Microsoft C compiler</td><br />
<td>Development uses [http://www.microsoft.com/en-us/download/details.aspx?id=8279 Microsoft Windows SDK 7.1], but MSVC 2008 or later should be fine, and [http://gnuwin32.sourceforge.net/packages/make.htm GNUmake 3.8.1]</td><br />
</tr><br />
<br />
<tr valign="top"><br />
<td>WDK 7.1</td><br />
<td>[https://www.microsoft.com/en-us/download/details.aspx?id=11800 Windows Driver Kit 7.1.1]</td><br />
</tr><br />
</table><br />
<br />
<p><small>1. If GCC >= 4.7.3 is used, the new atomic intrinsics introduced with that version are used</small></p><br />
<br />
==License==<br />
You are free to use this library in any way. Go forth and create wealth!<br />
<br />
If for legal reasons a specific, well-known licence is required, the license of your choice will be granted, and license is hereby granted up front for a range of popular licenses : the MIT license, the BSD license, the Apache license, the GPL and LPGL (all versions thereof) and the Creative Commons licenses (all of them). Additionally, everything is also placed in the public domain.<br />
<br />
==Porting==<br />
All ''liblfds'' components - ''liblfds'' itself, ''libtest'', ''libbenchmark'', ''libshared'', ''test'' and ''benchmark'' - provide a porting abstraction layer which acts to mask platform differences. Porting is the act of implementing on your platform the defines, typesdefs and functions which make up a porting abstraction layer.<br />
<br />
The porting abstraction layers are arranged in part as a set of three header files and in part as source files, which implement functions. The three header files consist of one each for the compiler, operating system and processor, where each file provided such parts of the porting abstraction layer as come from each source, with each file using the pre-processor ''#if'' directive with compiler and/or operating system defined macros to restrict each implementation to the correct platform.<br />
<br />
As such, it's not possible to succinctly state exactly what ports are supported out-of-the-box, as an implementation can span many potential platforms - e.g. the compiler implementation which matches GCC provides the compiler part of the porting abstraction layer for GCC for all operating systems and all processors.<br />
<br />
In general, out-of-the-box support consists of Windows user-mode and kernel-mode, and UNIX (Android, Linux, Solaris, etc) with GCC user-mode and kernel-mode.<br />
<br />
For documentation, see the [[r7.1.1:Porting Guide (liblfds)|Porting Guide (liblfds)]], [[r7.1.1:Porting Guide (testing)|Porting Guide (testing)]] and [[r7.1.1:Porting Guide (benchmarking)|Porting Guide (benchmarking)]]<br />
<br />
==Building==<br />
As of this release, all versions are released together. This is necessary for ''libbenchmark'', which benchmarks earlier versions of ''liblfds'' as well as the current versions (although currently this only extends to release 7.0.0). Within the ''liblfds7.1.1'' directory, there are two top-level directories, ''liblfds711'' and ''test_and_benchmark''. Each separate component has a directory called ''build'', which in turns has one directory per supported platform, where that directory contains the build files (makefiles, MSVC solutions, etc) for that platform. The following tree omits the subdirectories in the ''src'' subtree, for brevity.<br />
<br />
├── liblfds6.0.0<br />
├── liblfds6.0.1<br />
├── liblfds6.1.0<br />
├── liblfds6.1.1<br />
├── liblfds7.0.0<br />
└── liblfds7.1.1<br />
├── liblfds711<br />
│ ├── bin<br />
│ ├── build<br />
│ │ ├── gcc_gnumake<br />
│ │ ├── gcc_gnumake_kbuild<br />
│ │ ├── msvc_gnumake<br />
│ │ └── wdk_7.1<br />
│ ├── inc<br />
│ │ └── liblfds711<br />
│ ├── obj<br />
│ └── src<br />
└── test_and_benchmark<br />
├── benchmark<br />
│ ├── bin<br />
│ ├── build<br />
│ │ ├── gcc_gnumake_hosted_liblfds711_liblfds700<br />
│ │ ├── gcc_gnumake_hosted_liblfds711_liblfds700_libnuma<br />
│ │ └── msvc_gnumake_liblfds711_liblfds700<br />
│ ├── obj<br />
│ └── src<br />
├── libbenchmark<br />
│ ├── bin<br />
│ ├── build<br />
│ │ ├── gcc_gnumake<br />
│ │ ├── gcc_gnumake_kbuild<br />
│ │ ├── msvc_gnumake<br />
│ │ └── wdk_7.1<br />
│ ├── inc<br />
│ │ └── libbenchmark<br />
│ ├── obj<br />
│ └── src<br />
├── libshared<br />
│ ├── bin<br />
│ ├── build<br />
│ │ ├── gcc_gnumake<br />
│ │ ├── gcc_gnumake_kbuild<br />
│ │ ├── msvc_gnumake<br />
│ │ └── wdk_7.1<br />
│ ├── inc<br />
│ │ └── libshared<br />
│ ├── obj<br />
│ └── src<br />
├── libtest<br />
│ ├── bin<br />
│ ├── build<br />
│ │ ├── gcc_gnumake_hosted<br />
│ │ ├── gcc_gnumake_kbuild<br />
│ │ ├── msvc_gnumake<br />
│ │ └── wdk_7.1<br />
│ ├── inc<br />
│ │ └── libtest<br />
│ ├── obj<br />
│ └── src<br />
└── test<br />
├── bin<br />
├── build<br />
│ ├── gcc_gnumake_hosted<br />
│ └── msvc_gnumake<br />
├── obj<br />
└── src<br />
<br />
The libraries compiles to either a static or shared library, to their ''bin'' directories.<br />
<br />
The ''test'' and ''benchmark'' programmes compile to command line binaries, to their ''bin'' directories.<br />
<br />
For documentation, see the [[r7.1.1:Building Guide (liblfds)|Building Guide (liblfds)]], [[r7.1.1:Building Guide (testing)|Building Guide (testing)]] and [[r7.1.1:Building Guide (benchmarking)|Building Guide (benchmarking)]]<br />
<br />
==Usage==<br />
The ''liblfds'' library has a set of header files, one per data structure, found in ''liblfds711/inc/'', but you only include ''liblfds711/inc/liblfds711.h''. Include the header file as you would normally, link to the library as you would normally. Voilà!<br />
<br />
The ''test'' and ''benchmark'' programmes are a command line binaries and are run by hand from the command line, where no arguments or "-h" will display help text.<br />
<br />
For documentation, see the [[r7.1.1:Usage Guide (liblfds)|Usage Guide (liblfds)]], [[r7.1.1:Usage Guide (testing)|Usage Guide (testing)]] and [[r7.1.1:Usage Guide (benchmarking)|Usage Guide (benchmarking)]]<br />
<br />
==See Also==<br />
* [[r7.1.1:Release_7.1.1_Documentation|Release 7.1.1 Documentation]]</div>Admin