serialize-inl.h 931 B

1234567891011121314151617181920212223242526272829303132333435
  1. #ifndef SERIALIZE_PTR_INL_H_
  2. #error "Direct inclusion of this file is not allowed, include serialize.h"
  3. // For the sake of sane code completion.
  4. #include "serialize.h"
  5. #endif
  6. #include "new.h"
  7. ////////////////////////////////////////////////////////////////////////////////
  8. template <class T>
  9. void TSerializer<NYT::TIntrusivePtr<T>>::Save(IOutputStream* output, const NYT::TIntrusivePtr<T>& ptr)
  10. {
  11. bool hasValue = ptr.operator bool();
  12. ::Save(output, hasValue);
  13. if (hasValue) {
  14. ::Save(output, *ptr);
  15. }
  16. }
  17. template <class T>
  18. void TSerializer<NYT::TIntrusivePtr<T>>::Load(IInputStream* input, NYT::TIntrusivePtr<T>& ptr)
  19. {
  20. bool hasValue;
  21. ::Load(input, hasValue);
  22. if (hasValue) {
  23. auto tmp = NYT::New<T>();
  24. ::Load(input, *tmp);
  25. ptr = std::move(tmp);
  26. } else {
  27. ptr.Reset();
  28. }
  29. }
  30. ////////////////////////////////////////////////////////////////////////////////