Commit Graph

17920 Commits

Author SHA1 Message Date
Max Kellermann 517c234461 lib/zlib/GzipOutputStream: use MAX_WBITS 2023-09-11 22:02:04 +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 339b9f6e7b net/StaticSocketAddress: add method GetSteadyPart() 2023-09-11 21:27:12 +02:00
Max Kellermann 35cfa6efa3 net/StaticSocketAddress: add SocketAddress cast constructor 2023-09-11 21:27:12 +02:00
Max Kellermann 34ec024bf4 net/AllocatedSocketAddress: add method GetSteadyPart() 2023-09-11 21:27:12 +02:00
Max Kellermann 75aa08ed6b tag/Pool: use a power-of-2 hash table size
This is simpler to calculate and the advantage of using a prime is
negligible anyway.
2023-09-11 21:23:11 +02:00
Max Kellermann c8dc1e0665 tag/Pool: use class IntrusiveHashSet intead of rolling a custom hash table 2023-09-11 21:15:28 +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 f578b06d83 tag/Pool: move calc_hash() returns std::size_t 2023-09-11 20:51:44 +02:00
Max Kellermann 0748f75d9b tag/Pool: rename `TagPoolSlot` to `TagPoolItem` 2023-09-11 20:44:55 +02:00
Max Kellermann 7dff29bcd1 util/IntrusiveHashSet: add option `zero_initialized` 2023-09-11 20:34:17 +02:00
Max Kellermann 3e09f95b40 tag/Pool: enable option `zero_initialized`
Commit 44beae519d caused the MPD
executable to grow by more than 1 MB because the `slots` array
suddenly was not zero-initialized anymore, because the doubly-linked
list is circular, while the singly-linked list is zero-terminated.

This option moves the array back to the `bss` section.
2023-09-11 20:32:26 +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 1f495efb46 test/LoadDatabase: ignore tag/charset mismatches
This program shouldn't fail just because the configuration doesn't
match - it has no configuration, it's just a dumb test program.
2023-09-07 09:54:03 +02:00
Max Kellermann 38d8359384 test/LoadDatabase: new test program (for benchmarking the database loader) 2023-09-06 16:17:24 +02:00
Max Kellermann 2c01e79b47 SongSave: omit FixTagString() for strings from the database file
Strings in the database should have been sanitized already, so let's
not waste CPU on this.
2023-09-06 16:12:20 +02:00
Max Kellermann a573d57de8 tag/Builder: remove unnecessary explicit AddItem() overload 2023-09-06 16:10:31 +02:00
Max Kellermann 2f4e2935a3 db/upnp, playlist/pls: use AddItem(std::string_view) 2023-09-06 16:08:42 +02:00
Max Kellermann 44beae519d tag/Pool: use doubly-linked list
This adds some memory overhead but eliminates the linear search from
tag_pool_put_item().
2023-09-06 16:00:25 +02:00
Max Kellermann b896711fc6 tag/Pool: fix crash in tag_pool_put_item()
Regression by commit 76bdfabcc5
2023-09-06 15:53:17 +02:00
Max Kellermann 76bdfabcc5 tag/Pool: use class IntrusiveForwardList 2023-09-06 15:33:26 +02:00
Max Kellermann b35e8a588f util/IntrusiveForwardList: add operator++(int) 2023-09-06 15:31:07 +02:00
Max Kellermann 6c48f5ac63 tag/Pool: use std::array 2023-09-06 15:10:47 +02:00
Max Kellermann 1448f52eac util/VarSize: convert static_assert to concept check 2023-09-06 15:05:26 +02:00
Max Kellermann c96e8ab47c db/simple/DirectorySave: optimize duplicate checks with std::set
This reduces the CPU usage for loading a large database by more than 50%.
2023-09-06 14:56:41 +02:00
Max Kellermann 2c4ef4460f db/update/SpecialDirectory: more std::string_view migration 2023-09-06 14:51:37 +02:00
Max Kellermann 20bbe1b57b fs/Traits: add GetFilenameSuffix() overload with std::string_view 2023-09-06 14:50:36 +02:00
Max Kellermann 449d59af2f db/simple/Directory: use operator== to compare strings 2023-09-06 14:30:08 +02:00
Max Kellermann 851136e6fd db/simple/Directory: GetName() returns std::string_view 2023-09-06 14:29:32 +02:00
Max Kellermann ad854e9867 db/simple/Save: initialize array without memset() 2023-09-06 14:17:07 +02:00
naglis 046a385070 doc/user.rst: use explicit meson setup command
The implicit setup command is deprecated since 0.64.0
2023-08-24 13:57:03 +03:00
Max Kellermann ba2df05fb4 lib/zlib/GzipOutputStream: add `noexcept` 2023-08-03 20:58:43 +02:00
Max Kellermann 8722c51306 lib/dbus/AppendIter: add Append(int32_t), Append(int64_t) 2023-08-03 20:58:01 +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 8743326924 sticker/Database: allow moving 2023-08-03 20:54:57 +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 78801f303e test/util/TestIntrusiveHashSet: add test for remove_and_dispose_key() 2023-08-03 20:44:52 +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 43d633f560 Instance: use C++11 initializers 2023-07-23 09:14:25 +02:00
Max Kellermann 1c37b0487c lib/fmt/SystemError: add VFmtErrno() 2023-07-21 19:44:45 +02:00
Max Kellermann acc92b156b util/Concepts: remove obsolete fallbacks 2023-07-21 19:43:04 +02:00