| /* |
| * |
| * Copyright (c) 2021 Project CHIP Authors |
| * Copyright 2019 Google Inc. All Rights Reserved. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #pragma once |
| |
| #include <stddef.h> |
| #include <stdint.h> |
| #include <sys/types.h> |
| |
| #include <cstddef> |
| #include <type_traits> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif // __cplusplus |
| |
| // Initializes the heap (set start and end blocks) |
| void PrivateHeapInit(void * heap, size_t size); |
| |
| // Allocates a new block on the specified heap |
| void * PrivateHeapAlloc(void * heap, size_t size); |
| |
| // Marks the specified block as free |
| void PrivateHeapFree(void * ptr); |
| |
| // Reallocate a block to a new size |
| // Special arguments: |
| // - null ptr value represents an Alloc |
| // - zero size represents a Free |
| void * PrivateHeapRealloc(void * heap, void * ptr, size_t size); |
| |
| void PrivateHeapDump(void * ptr); |
| |
| #ifdef __cplusplus |
| } // extern "C" |
| |
| namespace internal { |
| |
| // Heap structure, exposed for tests |
| // |
| // +---------+---------+-----+ +---------+-----------+ |
| // | prev: 0 | next: n | ... | ....<n_bytes> .... | prev: n | next: ... | |
| // +---------+---------+-----+ +---------+-----------+ |
| // |
| struct PrivateHeapBlockHeader |
| { |
| uint32_t prevBytes; |
| uint32_t nextBytes; |
| uint32_t state; |
| uint32_t checksum; // super-basic attempt to detect errors |
| }; |
| |
| } // namespace internal |
| |
| constexpr size_t kPrivateHeapAllocationAlignment = std::alignment_of<max_align_t>::value; |
| |
| #endif // ifdef __cplusplus |