blob: 6ba9b1e4a53ab06e872c56c17fcc6ba92ba28799 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "flutter/shell/platform/darwin/common/buffer_conversions.h"
#include "flutter/fml/platform/darwin/scoped_nsobject.h"
namespace flutter {
namespace {
class NSDataMapping : public fml::Mapping {
public:
explicit NSDataMapping(NSData* data) : data_([data retain]) {}
size_t GetSize() const override { return [data_.get() length]; }
const uint8_t* GetMapping() const override {
return static_cast<const uint8_t*>([data_.get() bytes]);
}
bool IsDontNeedSafe() const override { return false; }
private:
fml::scoped_nsobject<NSData> data_;
FML_DISALLOW_COPY_AND_ASSIGN(NSDataMapping);
};
} // namespace
fml::MallocMapping CopyNSDataToMapping(NSData* data) {
const uint8_t* bytes = static_cast<const uint8_t*>(data.bytes);
return fml::MallocMapping::Copy(bytes, data.length);
}
NSData* ConvertMappingToNSData(fml::MallocMapping buffer) {
size_t size = buffer.GetSize();
return [NSData dataWithBytesNoCopy:buffer.Release() length:size];
}
std::unique_ptr<fml::Mapping> ConvertNSDataToMappingPtr(NSData* data) {
return std::make_unique<NSDataMapping>(data);
}
NSData* CopyMappingPtrToNSData(std::unique_ptr<fml::Mapping> mapping) {
return [NSData dataWithBytes:mapping->GetMapping() length:mapping->GetSize()];
}
} // namespace flutter