Max Kellermann
847ae7dd7c
util/IntrusiveHashSet: add insert_check_if()
2023-09-11 21:15:28 +02:00
Max Kellermann
44f55e1866
util/IntrusiveList: add missing initializer to insert_after()
...
We must not call std::next() if the list head was not yet initialized.
This was missing in commit 7065425927
2023-09-11 21:15:28 +02:00
Max Kellermann
c391adad10
tag/Pool: move code from calc_hash() to util/djb_hash.cxx
2023-09-11 20:53:37 +02:00
Max Kellermann
7dff29bcd1
util/IntrusiveHashSet: add option zero_initialized
2023-09-11 20:34:17 +02:00
Max Kellermann
7065425927
util/IntrusiveList: add option zero_initialized
2023-09-11 20:30:38 +02:00
Max Kellermann
f01793ad4a
util/Intrusive*: move constant_time_size
to an options struct
...
This makes it easier to add more options later.
2023-09-11 19:18:36 +02:00
Max Kellermann
b35e8a588f
util/IntrusiveForwardList: add operator++(int)
2023-09-06 15:31:07 +02:00
Max Kellermann
1448f52eac
util/VarSize: convert static_assert to concept check
2023-09-06 15:05:26 +02:00
Max Kellermann
80104eb6d5
util/IntrusiveList: fix illegal downcast (ubsan)
...
Fixes UBSanitizer warning:
src/util/IntrusiveList.hxx:108:10: runtime error: downcast of address 0xdeadbeef which does not point to an object of type 'Foo'
2023-08-03 20:56:34 +02:00
Max Kellermann
83a6cb804b
util/IntrusiveHashSet: add template argument GetKey
...
This is a big simplification of all IntrusiveHashSet users: instead of
having to implement multiple overloads of Hash and Equal, the
IntrusiveHashSet class can first extract the effective key from an
item and then pass it to the Hash/Equal functions.
2023-08-03 20:50:21 +02:00
Max Kellermann
9691b609a2
util/IntrusiveHashSet: remove_and_dispose() returns number of removed elements
2023-08-03 20:44:47 +02:00
Max Kellermann
250fa8c732
util/IntrusiveHashSet: rename remove_and_dispose() to remove_and_dispose_key()
2023-08-03 20:44:39 +02:00
Max Kellermann
2cd5f4cd3e
util/IntrusiveHashSet: replace template parameters Hash/Equal with a single one
...
Preparing to add a key extraction function. Without this "Operators"
template parameter, we'd have even more template parameters, and that
parameter list would grow too complex. Better wrap it in one single
template that contains all operators.
This is an API change which all callers need to adjust to, but it will
be worth it.
2023-08-03 20:44:14 +02:00
Max Kellermann
dcd7c6337c
util/Intrusive{List,HashSet}: reimplement hook mode detection with implicit cast
2023-08-03 20:33:15 +02:00
Max Kellermann
acc92b156b
util/Concepts: remove obsolete fallbacks
2023-07-21 19:43:04 +02:00
Max Kellermann
aeadae5399
util/IntrusiveHashSet: insert_check() returns the bucket head on success
...
The list head is a stable value that is guaranteed to be still valid
when insert_commit() gets called.
This fixes a linked list corruption bug in class StaticCache which
occurs when the cache item pointed to by the iterator gets evicted
between insert_check() and insert_commit().
2023-07-21 19:42:35 +02:00
Max Kellermann
42d5b05f54
util/IntrusiveHashSet: rename insert() to insert_commit()
...
Clarify that the method is not a freestanding insertion method but
should only be used after insert_check().
2023-07-21 19:42:26 +02:00
Max Kellermann
e133f621a4
util/IntrusiveHashSet: add insert_check() documentation
2023-07-21 19:41:46 +02:00
Max Kellermann
91437d9e63
util/IntrusiveList: add insert_after()
2023-07-21 19:41:40 +02:00
Max Kellermann
f1b497fb0c
util/IntrusiveList: document insert()
2023-07-21 19:41:36 +02:00
Max Kellermann
cc9d061e51
util/IntrusiveList: pop_front() and pop_back() return reference
2023-07-21 19:41:13 +02:00
Max Kellermann
62ee9a4d60
util/DynamicFifoBuffer: use T
instead of std::byte
...
Mistake added by commit b528b467649754
2023-07-21 19:40:38 +02:00
Max Kellermann
6496c1b806
util/ScopeExit: convert the function from base class to member
...
This allows using `final` callables.
2023-05-22 21:20:49 +02:00
Max Kellermann
9027e5c5bb
release v0.23.13
...
-----BEGIN PGP SIGNATURE-----
iQJBBAABCgArFiEEA5IzWngIOJSkMBxDI26KWMbbRRIFAmRrqn4NHG1heEBibGFy
Zy5kZQAKCRAjbopYxttFErXiD/9QIaeO5d+U7BJK1yGkQgu5vHo4Pm34ewP8LTxs
K2MYxQQ2jZc7PXqi5Z04wmUw8ymq1BVA2D0ytMdl1Ejcbrste7UrP+1TuD8L9JBj
WCE+4otNVYDpx1PB32BN+gxCmJqiFtAQS+eMIz/SXdEXZ9sJvIgYRRkSiSFd0WHM
dT3OeeZ0V8cANbXpgI+RLghRGkVdpZJo4uXh3c0OHog1fjEBWPw6+7tH/mkotM0n
/hQjI5j14wnzZuIpkDR1kuzvGYmxJKG6LkuUqcm1WexNFbxMqDSbAlXeCmzJn7eK
NQvtROOGNjQ84thxRPLlDlYa6vbxoTqdYgZsVHzsQZWejhqw8zsPsF+Ea0A4tkLd
UKDQFTphZMVqx74+1u7IjQyW7x+k02iXWLwH2IheEl+BJhvEB7zEflN9TR81jek4
RrGx7jcTArdpt7okAe2ONkHvTYtIpaK5E2voza8K4TGOMzpkVlOkyvJ+rpn8CDRf
w0faVvmCQdSrgHKfwUUY8Z47a7d+kkKpFLlvvzNoDV8drQXfgIj5t9HOLATSVVux
l2pbgauXFsKyd4IsByXj+m8cBSvmy2C4eLJCsmguiZEvcobdJtzwOr4KuwQDjBsC
8HW0BD0t9S1dSL59vJdMG+CfK/QU5rmAIkxdydD42uo9UmSS78xw1uQgi9oDaPa8
XNCGdQ==
=nOGh
-----END PGP SIGNATURE-----
Merge tag 'v0.23.13'
release v0.23.13
2023-05-22 19:52:08 +02:00
Max Kellermann
dc127f39a7
util/ScopeExit: use std::declval()
...
Fixes GCC 10 error:
error: cannot call member function `Foo` without object
2023-05-22 15:01:25 +02:00
Max Kellermann
7a99a7008c
util/ScopeExit: use std::exchange()
2023-05-22 14:44:45 +02:00
Max Kellermann
70b451db7b
util/ScopeExit: add noexcept
2023-05-22 14:44:17 +02:00
Max Kellermann
2ab03a0914
util/ScopeExit: allow the function to throw
...
Fixes crash inside AtScopeExit() in the WASAPI output plugin.
Closes https://github.com/MusicPlayerDaemon/MPD/issues/1759
2023-05-22 14:43:23 +02:00
Max Kellermann
01c02a1ef8
util/StaticFifoBuffer: add method MoveFrom()
2023-05-21 21:26:20 +02:00
Max Kellermann
99885c4cbc
util/IntrusiveHashSet: add method remove_and_dispose()
2023-04-22 08:40:53 +02:00
Max Kellermann
76497bd5f7
util/IntrusiveSortedList, event/TimerList: include cleanup
2023-04-06 10:24:53 +02:00
Max Kellermann
688d9ff114
util/UriExtract: add uri_get_path_query_fragment()
...
Rename uri_get_path() to uri_get_path_query_fragment() and add a new
uri_get_path() function.
2023-03-14 20:03:17 +01:00
Max Kellermann
f3ebaf8bdd
util/ByteOrder: add class PackedLE64
2023-03-12 20:25:49 +01:00
Max Kellermann
fb961e89da
util/StringCompare: add constexpr
2023-03-12 20:14:23 +01:00
Max Kellermann
8b77da545d
*: use transparent comparison for std::{map,set} with std::string keys
...
This avoids many std::string temporaries for lookups.
2023-03-12 09:12:02 +01:00
Max Kellermann
415de497d3
use more libfmt instead of sprintf()
2023-03-06 19:50:53 +01:00
Max Kellermann
941f2ca60d
pcm/{Traits,Dsd*}: use std::byte
2023-03-06 18:44:20 +01:00
Max Kellermann
35b6d65f27
util/Compiler.h: remove unused compiler version check macros
2023-03-06 16:37:46 +01:00
Max Kellermann
ff239fff4f
util/ByteOrder: check only __GNUC__
...
Assume GCC/clang is recent enough.
2023-03-06 16:37:45 +01:00
Max Kellermann
47b3577d6b
util/Compiler.h: remove unused macro gcc_printf
2023-03-06 16:27:47 +01:00
Max Kellermann
1f56960c44
util/FormatString: remove unused library
2023-03-06 16:24:51 +01:00
Max Kellermann
18c3c2118d
util/Compiler.h: remove unused macros
2023-03-06 16:14:30 +01:00
Max Kellermann
42f6a0441c
use [[gnu::...]] attributes
2023-03-06 16:14:15 +01:00
Max Kellermann
3b9aab0684
util/UTF8: fix indent
2023-03-06 16:12:09 +01:00
Max Kellermann
148aca23be
use SPDX IDs, replacing the long copyright headers
2023-03-06 14:59:48 +01:00
Max Kellermann
f1cea1f152
util/IntrusiveHashSet: add unlink(), is_linked()
2023-01-31 13:07:26 +01:00
Max Kellermann
5b07c8fc6c
util/CharUtil: add IsLowerAlphaNumericASCII()
2023-01-29 09:39:40 +01:00
Max Kellermann
b45afd1cab
util/StringBuffer: add constexpr
2023-01-29 09:38:40 +01:00
Max Kellermann
ebf65572dd
util/ByteOrder: remove unnecessary operator=
...
The compiler can just use the uint32_t constructor instead. This was
redundant code.
2023-01-28 07:48:03 +01:00
Max Kellermann
f31ae7c556
util/RingBuffer: replacement for boost::lockfree::spsc_queue
2023-01-23 13:44:54 +01:00