|
|
|
@@ -85,6 +85,7 @@ Tensor &Tensor::operator=(Tensor &&other) noexcept { |
|
|
|
shape_ = other.shape(); |
|
|
|
type_ = other.type(); |
|
|
|
data_ = other.StartAddr(); |
|
|
|
data_end_ = other.data_end_; |
|
|
|
data_allocator_ = std::move(other.data_allocator_); |
|
|
|
other.Invalidate(); |
|
|
|
} |
|
|
|
@@ -208,11 +209,13 @@ Tensor::~Tensor() { |
|
|
|
if (data_allocator_ != nullptr) { |
|
|
|
data_allocator_->deallocate(data_); |
|
|
|
data_ = nullptr; |
|
|
|
data_end_ = nullptr; |
|
|
|
} else { |
|
|
|
// If we didn't have an allocator, but data_ is not null then it must |
|
|
|
// be a stand-alone tensor that used malloc directly. |
|
|
|
free(data_); |
|
|
|
data_ = nullptr; |
|
|
|
data_end_ = nullptr; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
@@ -338,8 +341,10 @@ unsigned char *Tensor::StartAddr() { |
|
|
|
// on the shape and type and allocate it. |
|
|
|
if (data_allocator_ != nullptr) { |
|
|
|
data_ = data_allocator_->allocate(this->SizeInBytes()); |
|
|
|
data_end_ = data_ + SizeInBytes(); |
|
|
|
} else { |
|
|
|
data_ = static_cast<unsigned char *>(malloc(this->SizeInBytes())); |
|
|
|
data_end_ = data_ + SizeInBytes(); |
|
|
|
if (data_ == nullptr) { |
|
|
|
return nullptr; |
|
|
|
} |
|
|
|
@@ -362,6 +367,7 @@ void Tensor::Invalidate() { |
|
|
|
shape_ = TensorShape::CreateUnknownRankShape(); |
|
|
|
type_ = DataType(DataType::DE_UNKNOWN); |
|
|
|
data_ = nullptr; |
|
|
|
data_end_ = nullptr; |
|
|
|
data_allocator_ = nullptr; |
|
|
|
} |
|
|
|
|
|
|
|
|