summaryrefslogtreecommitdiffstats
path: root/src
AgeCommit message (Collapse)AuthorFilesLines
2022-11-02Remove function_types.hDavid Robillard2-46/+45
2022-11-02Add missing includeDavid Robillard1-0/+1
2022-11-01Add missing pure and const function attributesDavid Robillard2-0/+7
It seems that certain versions and/or configurations of gcc warn about these for static functions, which is annoying, but whatever.
2022-10-23Add filesystem APIDavid Robillard10-1/+1155
2022-10-23Add path APIDavid Robillard3-0/+771
2022-10-23Add string view APIDavid Robillard1-0/+18
2022-10-23Split up platform sourcesDavid Robillard6-242/+250
This puts more onus on the build system to do things properly, but it's still easy enough to build, even manually: all the files in the appropriate system subdirectory just need to be included in the build. Otherwise, the several nested levels of preprocessor conditionals get confusing, and clang-format doesn't format code properly.
2022-10-21Split up common headerDavid Robillard8-35/+36
2022-10-21Hide errno utility functionsDavid Robillard7-43/+80
2022-10-20Hide thread implementationDavid Robillard1-0/+59
2022-10-18Add missing pure function attributeDavid Robillard1-0/+1
2022-10-18Fix unused return value warningDavid Robillard1-3/+1
Kind of annoying since this adds an untested branch, but oh well.
2022-10-18Use 0BSD for trivial "public domain intent" thingsDavid Robillard1-1/+1
2022-10-14Simplify clang-tidy configurationDavid Robillard1-8/+1
2022-10-14Fix fallback configuration on older MacOS versionsDavid Robillard1-1/+1
2022-10-14Fix zix_sem_timed_wait() interval calculationDavid Robillard1-0/+9
2022-10-09Fix off-by-one error in assertionDavid Robillard1-1/+1
2022-09-02Improve test coverageDavid Robillard2-5/+6
2022-09-02Improve zix_ring_mlock() return statusDavid Robillard1-11/+16
2022-09-02Factor out POSIX-style return patternDavid Robillard2-7/+12
2022-09-01Simplify thread and semaphore status codesDavid Robillard2-4/+9
2022-08-19Avoid mixing signed and unsigned integersDavid Robillard6-9/+9
2022-08-19Simplify errno handlingDavid Robillard2-15/+12
2022-08-19Move sem implementation out of headerDavid Robillard3-0/+238
This avoids having platform conditionals in public headers, which causes build problems for dependants.
2022-08-18Add return status to zix_ring_mlock()David Robillard1-4/+5
2022-08-18Fix semaphore error handlingDavid Robillard1-0/+4
Note that existing code which uses zix_sem_try_wait() may still compile against this change, but be incorrect!
2022-08-18Factor out converting errno codes to ZixStatusDavid Robillard1-0/+31
2022-08-18Reduce zix_tree_insert() complexityDavid Robillard1-12/+6
2022-08-18Reduce variable scope and mutabilityDavid Robillard1-7/+6
2022-08-18Remove debug printing from treeDavid Robillard2-62/+6
2022-08-18Handle trees with no destroy callback more gracefullyDavid Robillard1-10/+11
2022-08-18Make all ring parameters constDavid Robillard1-18/+22
2022-08-18Add transactional ring APIDavid Robillard1-5/+39
2022-08-12Fix ring thread safetyDavid Robillard1-25/+53
The previous code was "probably fine" in practice, but was both missing some necessary synchronization, and using unnecessarily heavyweight barriers on Windows. Since this code conveniently has a 1:1 relationship between barriers and atomic accesses anyway, rewrite things to use an "atomic" interface closer to standard C11 and C++11. Harden things in the process, so that the thread-safety guarantees are followed, and hopefully clearer to see in the code (1 synchronized read of "their" index, then maybe 1 synchronized write of "your" index). Windows/MSVC annoyingly does not provide a suitable C API for this, so just ignore the existence of Windows on ARM and use x86/x64 Windows intrinsics to prevent compiler reordering (which is all that's required on those architectures). Note that MSVC can make some reordering guarantees about volatile variables, but: * Only with a certain option, /volatile:ms, which Microsoft "strongly recommend" against using. It is disabled by default (and painfully slow if enabled) on ARM. * This guarantee does not prevent reordering of access to other memory (only the volatile variables themselves), which is required by a ring buffer. So, deal with that case by using explicit read and write barriers like before, but only in the atomic abstractions. In the process, switch to more lightweight barriers, which should marginally improve performance on Windows. When MSVC adds stdatomic.h support, most of the platform-specific gunk here can go away entirely.
2022-08-12Simplify ring writing codeDavid Robillard1-6/+8
The compiler is surely smart enough to factor out these common expressions, but I find this easier to read this way anyway.
2022-08-12Use a consistent error handling styleDavid Robillard1-6/+5
2022-08-12Simplify ring space calculationsDavid Robillard1-14/+2
It isn't necessary to branch here to avoid underflow. Essentially, the way that unsigned binary integers work "automatically" does what this code was doing. Note that these expressions only work for a ring buffer that, like this one, has a power of 2 (real) size and a maximum capacity 1 less than that.
2022-07-13Suppress new warnings in clang and clang-tidy 14David Robillard1-0/+1
2022-06-28Move zix_strerror to libraryDavid Robillard1-0/+28
2022-06-28Use uppercase integer literal suffixesDavid Robillard6-113/+112
I give in.
2022-06-28Simplify dep5 file by adding license headers where possibleDavid Robillard1-0/+3
2022-06-28Clean up build configurationDavid Robillard4-17/+43
2022-02-02Avoid fallthrough annotation on older GCC versionsDavid Robillard1-1/+1
2022-01-14Fix hash insertion tombstone replacement caseDavid Robillard1-0/+1
2021-12-17Suppress new warnings in clang-tidy 13David Robillard1-1/+2
2021-10-27Compile but fail at runtime if aligned allocation is not supportedDavid Robillard1-1/+1
2021-10-27Remove unnecessary includeDavid Robillard1-1/+0
2021-10-27Improve hash table performance slightlyDavid Robillard1-6/+9
2021-10-27Fix zix_digest64() to consume all inputDavid Robillard1-5/+5
This was a copy-paste bug since the loop in zix_digest32() worked differently. As a result only the first block was considered, making the digest nearly useless for larger values. The tests didn't (and unfortunately still don't) catch this because the 64-bit digest algorithm incorporates the size itself. Fix this by changing the loop to work the same way as zix_digest32(), so hopefully something like this doesn't happen again.
2021-09-16Add a simple bump pointer allocatorDavid Robillard1-0/+161