| 171 | |
| 172 | template <class TCounter> |
| 173 | static inline TBlob CopyConstruct(const void* data, size_t len) { |
| 174 | using Base = TDynamicBlobBase<TCounter>; |
| 175 | THolder<Base> base(new (len) Base); |
| 176 | |
| 177 | Y_ASSERT(base->Length() == len); |
| 178 | |
| 179 | memcpy(base->Data(), data, len); |
| 180 | |
| 181 | TBlob ret(base->Data(), len, base.Get()); |
| 182 | Y_UNUSED(base.Release()); |
| 183 | |
| 184 | return ret; |
| 185 | } |
| 186 | |
| 187 | TBlob TBlob::CopySingleThreaded(const void* data, size_t length) { |
| 188 | return CopyConstruct<TSimpleCounter>(data, length); |