/* * Copyright (C) 2015-2016 The Android Open Source Project * * 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 "block_tree.h" struct block_map { struct block_tree tree; }; #define BLOCK_MAP_INITIAL_VALUE(block_map) \ { .tree = BLOCK_TREE_INITIAL_VALUE(block_map.tree), } struct block_map_path { struct block_tree_path path; }; void block_map_init(const struct transaction* tr, struct block_map* block_map, const struct block_mac* root, size_t block_size); bool block_map_get(struct transaction* tr, struct block_map* block_map, data_block_t index, struct block_mac* block_mac); void block_map_set(struct transaction* tr, struct block_map* block_map, data_block_t index, const struct block_mac* block_mac); void block_map_put_dirty(struct transaction* tr, struct block_map* block_map, data_block_t index, void* data, struct obj_ref* data_ref); void block_map_truncate(struct transaction* tr, struct block_map* block_map, data_block_t index); bool block_map_check(struct transaction* tr, struct block_map* block_map, data_block_t count); void block_map_free(struct transaction* tr, struct block_map* block_map);