Commit Graph

959 Commits

Author SHA1 Message Date
Max Kellermann 7f60acdfdd util/CharUtil: add IsUpperAlphaNumericASCII() 2024-01-18 18:53:05 +01:00
Max Kellermann b601f4dc15 util/CNumberParser: remove unused function ParseInt64() 2024-01-04 21:07:50 +01:00
Max Kellermann e1eea9d98a util/NumberParser: new library based on std::from_chars() 2024-01-04 21:03:37 +01:00
Max Kellermann 393d57b387 util/NumberParser: rename to CNumberParser
A new NumberParser library based on std::from_chars() will be added.
2024-01-04 21:02:45 +01:00
Max Kellermann 23b4688c44 util/ByteOrder: move Packed* classes to separate headers 2023-12-22 18:20:46 +01:00
Max Kellermann ebf1fc7ca4 util/IntrusiveList: convert static_assert to concept check 2023-11-21 20:42:01 +01:00
Max Kellermann edfa329e64 util/DereferenceIterator: use *declval() to guess the default value type
This allows the iterator to point to another iterator.
2023-11-21 20:40:47 +01:00
Max Kellermann 68b19ae087 util/SpanCast: add ReferenceAsWritableBytes() 2023-11-02 10:50:24 +01:00
Max Kellermann a073db1e52 util/SpanCast: add ReferenceAsBytes() 2023-11-02 10:50:00 +01:00
Max Kellermann 10940da381 util/Intrusive{List,HashSet}: add "tag" for base hooks 2023-11-02 10:48:46 +01:00
Max Kellermann db5f270f42 util/AllocatedString: fix string_view specialization in TotalSize() 2023-10-09 14:54:40 +02:00
Max Kellermann 86e7dff2fc util/TextFile: add missing cast 2023-10-07 08:39:24 +02:00
Max Kellermann e5680c712b util/IntrusiveList: add reverse_iterator 2023-10-04 16:51:17 +02:00
Max Kellermann 44daa6d3e6 util/IntrusiveForwardList: reset last_cache properly in clear() 2023-10-04 16:50:46 +02:00
Max Kellermann 5aaa3f50aa util/BindMethod: move SignatureHelper to return type 2023-10-04 16:50:25 +02:00
Max Kellermann 7d26cd74c1 util/BindMethod: add `noexcept` 2023-10-04 16:50:25 +02:00
Max Kellermann 7e6941acc8 util/BindMethod: add `constexpr` 2023-10-04 16:50:25 +02:00
Max Kellermann 63d865666e util/StringBuffer: use `using` instead of `typedef` 2023-10-04 16:50:25 +02:00
Max Kellermann 5dda4084df util/BindMethod: use `using` instead of `typedef` 2023-10-04 16:50:25 +02:00
Max Kellermann 19f9238ef0 util/BindMethod: fix indent 2023-10-04 16:50:25 +02:00
Max Kellermann 5b28a987e5 util/IntrusiveForwardList: add method remove_and_dispose_if() 2023-09-22 11:32:40 +02:00
Max Kellermann 78d28063c4 util/IntrusiveForwardList: push_{front,back}() returns iterator 2023-09-22 11:32:33 +02:00
Max Kellermann 6f7dce6dca test/util/TestIntrusiveForwardList: implement size() only if `options.constant_time_size` is set 2023-09-16 22:39:03 +02:00
Max Kellermann 175524ad02 util/IntrusiveForwardList: make end() non-static
So we can have a `const` overload which is important for some
algorithm templates.
2023-09-16 22:39:03 +02:00
Max Kellermann bfbde72676 util/Intrusive*: insertion methods return an iterator 2023-09-16 22:39:03 +02:00
Max Kellermann f76583a08a util/IntrusiveList: document the erase() return value 2023-09-16 22:39:03 +02:00
Max Kellermann 6d39b401b5 util/IntrusiveForwardList: add method iterator_to() 2023-09-16 22:39:03 +02:00
Max Kellermann f448bfd3f3 util/IntrusiveForwardList: add option `cache_last` 2023-09-16 22:39:03 +02:00
Max Kellermann 64b0587e78 util/OptionalField: new library 2023-09-16 22:39:03 +02:00
Max Kellermann 9fe813e572 util/IntrusiveForwardList: add pop_front_and_dispose() 2023-09-16 22:39:03 +02:00
Max Kellermann b0da0bbf8b util/IntrusiveForwardList: pop_front() returns reference 2023-09-16 22:39:03 +02:00
Max Kellermann 5c44082b77 util/IntrusiveForwardList: add non-static insert_after() implementation 2023-09-16 22:39:03 +02:00
Max Kellermann df7ed27b78 util/IntrusiveForwardList: fix move operator, really swap counter 2023-09-16 22:39:03 +02:00
Max Kellermann 9e802ad721 util/StringCompare: add `pure` attribute 2023-09-12 09:34:52 +02:00
Max Kellermann daf935d310 util/HexFormat: add non-const overload 2023-09-12 09:11:38 +02:00
Max Kellermann f68305bf00 util/NumberParser: remove obsolete __ANDROID_API__ check 2023-09-11 22:12:13 +02:00
Max Kellermann a58275591d util/StaticVector: add methods erase(), pop_front() 2023-09-11 21:59:28 +02:00
Max Kellermann a2f4fb9ddb util/StaticVector: add method pop_back() 2023-09-11 21:59:21 +02:00
Max Kellermann b2acf02af9 util/StaticVector: push_back(), emplace_back() return reference
Imitating std::vector since C++17.
2023-09-11 21:59:12 +02:00
Max Kellermann d5b1ca1a52 util/StaticVector: use emplace_back() to implement push_back()
For this class, both are equal.
2023-09-11 21:58:56 +02:00
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
Max Kellermann 868958e159 util/IntrusiveHashSet: fix find_if() concept 2023-01-22 12:25:55 +01:00
Max Kellermann 52af03a5a6 util/IntrusiveHashSet: implement remove_and_dispose_if() with constant_time_size 2023-01-22 12:24:50 +01:00
Max Kellermann 7475e971bc util/IntrusiveList: remove_and_dispose_if() returns the number of removed items 2023-01-22 12:24:43 +01:00
Max Kellermann c65b1fee8d util/IntrusiveHashSet: check key equivalence in remove_and_dispose_if() 2023-01-22 12:24:41 +01:00
Max Kellermann e2abade6aa util/IntrusiveList: add postfix operator++ 2023-01-22 12:24:33 +01:00
Max Kellermann 57673136d8 util/IntrusiveHashSet: add method expire_find_if() 2023-01-22 12:24:30 +01:00
Max Kellermann 49e122a81d util/IntrusiveHashSet: add method remove_and_dispose_if(key) 2023-01-22 12:24:23 +01:00
Max Kellermann c7a0597fe7 util/Intrusive*: add C++20 concept checks 2022-12-01 15:43:51 +01:00
Max Kellermann 00b7535cf1 util/Concepts: compatibility wrapper for std::predicate 2022-12-01 15:11:27 +01:00
Max Kellermann 5945877313 util/IntrusiveHashSet: add missing Cast()/ToHook() functions to IntrusiveHashSetMemberHookTraits 2022-12-01 15:10:42 +01:00