1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef DATA_IMPL_H
17 #define DATA_IMPL_H
18 
19 #include "base_impl.h"
20 
21 extern "C" {
22     typedef struct OH_NativeBuffer OH_NativeBuffer;
23 }
24 
25 namespace OHOS {
26 namespace Rosen {
27 namespace Drawing {
28 class Data;
29 typedef void (*DataReleaseProc)(const void* ptr, void* context);
30 class DataImpl : public BaseImpl {
31 public:
DataImpl()32     DataImpl() noexcept {}
~DataImpl()33     ~DataImpl() override {}
34 
35     virtual bool BuildFromMalloc(const void* data, size_t length) = 0;
36     virtual bool BuildFromOHNativeBuffer(OH_NativeBuffer* nativeBuffer, size_t length) = 0;
37     virtual bool BuildWithCopy(const void* data, size_t length) = 0;
38     virtual bool BuildWithProc(const void* ptr, size_t length, DataReleaseProc proc, void* ctx) = 0;
39     virtual bool BuildWithoutCopy(const void* data, size_t length) = 0;
40     virtual bool BuildUninitialized(size_t length) = 0;
41     virtual bool BuildEmpty() = 0;
42 
43     virtual void* WritableData() = 0;
44     virtual size_t GetSize() const = 0;
45     virtual const void* GetData() const = 0;
46 
47     virtual std::shared_ptr<Data> Serialize() const = 0;
48 };
49 } // namespace Drawing
50 } // namespace Rosen
51 } // namespace OHOS
52 #endif
53