Buckets:
localhost1978/localhost / LOCALHOST1978 /Modules /SSK_Providers /Vendor /td /tdutils /test /SharedObjectPool.cpp
| // | |
| // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2026 | |
| // | |
| // Distributed under the Boost Software License, Version 1.0. (See accompanying | |
| // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
| // | |
| TEST(AtomicRefCnt, simple) { | |
| td::detail::AtomicRefCnt cnt{0}; | |
| cnt.inc(); | |
| cnt.inc(); | |
| CHECK(!cnt.dec()); | |
| cnt.inc(); | |
| CHECK(!cnt.dec()); | |
| CHECK(cnt.dec()); | |
| cnt.inc(); | |
| CHECK(cnt.dec()); | |
| } | |
| template <class T, class D> | |
| using Ptr = td::detail::SharedPtr<T, D>; | |
| class Deleter { | |
| public: | |
| template <class T> | |
| void operator()(T *t) { | |
| std::default_delete<T>()(t); | |
| was_delete() = true; | |
| } | |
| static bool &was_delete() { | |
| static bool flag = false; | |
| return flag; | |
| } | |
| }; | |
| TEST(SharedPtr, simple) { | |
| CHECK(!Deleter::was_delete()); | |
| Ptr<std::string, Deleter> ptr = Ptr<std::string, Deleter>::create("hello"); | |
| auto ptr2 = ptr; | |
| CHECK(*ptr == "hello"); | |
| CHECK(*ptr2 == "hello"); | |
| ptr.reset(); | |
| CHECK(*ptr2 == "hello"); | |
| CHECK(ptr.empty()); | |
| Ptr<std::string, Deleter> ptr3 = std::move(ptr2); | |
| CHECK(ptr2.empty()); | |
| CHECK(*ptr3 == "hello"); | |
| ptr = ptr3; | |
| CHECK(*ptr3 == "hello"); | |
| ptr3.reset(); | |
| CHECK(*ptr == "hello"); | |
| ptr2 = std::move(ptr); | |
| CHECK(ptr.empty()); | |
| CHECK(*ptr2 == "hello"); | |
| ptr2 = ptr2; | |
| CHECK(*ptr2 == "hello"); | |
| CHECK(!Deleter::was_delete()); | |
| ptr2.reset(); | |
| CHECK(Deleter::was_delete()); | |
| CHECK(ptr2.empty()); | |
| } | |
| TEST(SharedObjectPool, simple) { | |
| class Node { | |
| public: | |
| Node() { | |
| cnt()++; | |
| }; | |
| ~Node() { | |
| cnt()--; | |
| } | |
| static int &cnt() { | |
| static int cnt_ = 0; | |
| return cnt_; | |
| } | |
| }; | |
| { | |
| td::SharedObjectPool<Node> pool; | |
| { auto ptr1 = pool.alloc(); } | |
| { auto ptr2 = pool.alloc(); } | |
| { auto ptr3 = pool.alloc(); } | |
| { auto ptr4 = pool.alloc(); } | |
| { auto ptr5 = pool.alloc(); } | |
| CHECK(Node::cnt() == 0); | |
| CHECK(pool.total_size() == 1); | |
| CHECK(pool.calc_free_size() == 1); | |
| { auto ptr6 = pool.alloc(), ptr7 = pool.alloc(), ptr8 = pool.alloc(); } | |
| CHECK(pool.total_size() == 3); | |
| CHECK(pool.calc_free_size() == 3); | |
| } | |
| CHECK(Node::cnt() == 0); | |
| } | |
Xet Storage Details
- Size:
- 2.52 kB
- Xet hash:
- 92968a293a91cc4e1f508e63394d84f2e09ec1da16d2f77d0feb080882bac163
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.