1/* 2 * Copyright (c) 2022 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 OHOS_UTILS_MEMORY_LIBPURGEABLEMEM_CPP_INCLUDE_PURGEABLE_MEM_BUILDER_H 17#define OHOS_UTILS_MEMORY_LIBPURGEABLEMEM_CPP_INCLUDE_PURGEABLE_MEM_BUILDER_H 18 19#include <memory> /* unique_ptr */ 20#include <functional> 21 22namespace OHOS { 23namespace PurgeableMem { 24/* 25 * Class PurgeableMemBuilder is a base class of user's builder. 26 * PurgeableMem users can define their builders by inheriting this class. 27 * In its member func Build(), user should define how to build the content of a PurgeableMem obj. 28 */ 29class PurgeableMemBuilder { 30public: 31 virtual ~PurgeableMemBuilder(); 32 33 /* 34 * User should define how to build the content of a PurgeableMem obj in this func. 35 * Input: data: data ptr, ponits to start address of a PurgeableMem obj's content. 36 * Input: size: data size of the content. 37 * Return: build content result, true means success, while false is fail. 38 */ 39 virtual bool Build(void *data, size_t size) = 0; 40 41 void SetRebuildSuccessCallback(std::function<void()> &callback) 42 { 43 rebuildSuccessCallback_ = callback; 44 } 45 46 void DoRebuildSuccessCallback() 47 { 48 if (rebuildSuccessCallback_) { 49 rebuildSuccessCallback_(); 50 } 51 } 52 53private: 54 std::function<void()> rebuildSuccessCallback_ = nullptr; 55 std::unique_ptr<PurgeableMemBuilder> nextBuilder_ = nullptr; 56 57 /* Only called by its friend */ 58 void AppendBuilder(std::unique_ptr<PurgeableMemBuilder> builder); 59 bool BuildAll(void *data, size_t size); 60 friend class PurgeableMemBase; 61}; 62} /* namespace PurgeableMem */ 63} /* namespace OHOS */ 64#endif /* OHOS_UTILS_MEMORY_LIBPURGEABLEMEM_CPP_INCLUDE_PURGEABLE_MEM_BUILDER_H */ 65