123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- #pragma once
- #include "intrusive_ptr.h"
- #include <library/cpp/yt/misc/source_location.h>
- #include <util/system/defaults.h>
- namespace NYT {
- template <class T, class = void>
- struct THasAllocator
- {
- using TFalse = void;
- };
- template <class T>
- struct THasAllocator<T, std::void_t<typename T::TAllocator>>
- {
- using TTrue = void;
- };
- template <class T, class... As, class = typename THasAllocator<T>::TFalse>
- TIntrusivePtr<T> New(As&&... args);
- template <class T, class... As, class = typename THasAllocator<T>::TTrue>
- TIntrusivePtr<T> TryNew(typename T::TAllocator* allocator, As&&... args);
- template <class T, class... As, class = typename THasAllocator<T>::TTrue>
- TIntrusivePtr<T> New(typename T::TAllocator* allocator, As&&... args);
- template <class T, class... As, class = typename THasAllocator<T>::TFalse>
- TIntrusivePtr<T> NewWithExtraSpace(size_t extraSpaceSize, As&&... args);
- template <class T, class... As, class = typename THasAllocator<T>::TTrue>
- TIntrusivePtr<T> TryNewWithExtraSpace(typename T::TAllocator* allocator, size_t extraSpaceSize, As&&... args);
- template <class T, class... As, class = typename THasAllocator<T>::TTrue>
- TIntrusivePtr<T> NewWithExtraSpace(typename T::TAllocator* allocator, size_t extraSpaceSize, As&&... args);
- template <class T, class TDeleter, class... As>
- TIntrusivePtr<T> NewWithDeleter(TDeleter deleter, As&&... args);
- template <class T, class TTag, int Counter, class... As>
- TIntrusivePtr<T> NewWithLocation(const TSourceLocation& location, As&&... args);
- #define DECLARE_NEW_FRIEND() \
- template <class DECLARE_NEW_FRIEND_T> \
- friend struct NYT::TRefCountedWrapper;
- template <class T>
- class TWithExtraSpace
- {
- protected:
- const void* GetExtraSpacePtr() const;
- void* GetExtraSpacePtr();
- size_t GetUsableSpaceSize() const;
- };
- }
- #define NEW_INL_H_
- #include "new-inl.h"
- #undef NEW_INL_H_
|