|
/**
|
|
* Copyright © 2019, Oracle and/or its affiliates. All rights reserved.
|
|
*
|
|
* Licensed under the Universal Permissive License v 1.0 as shown at
|
|
* http://oss.oracle.com/licenses/upl
|
|
*
|
|
*/
|
|
#ifndef INODEMAP_H
|
|
#define INODEMAP_H
|
|
/* Maintain a set of inodes */
|
|
|
|
#include <sys/stat.h>
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
|
|
struct inodemap;
|
|
|
|
// An inodemap is a mapping from pairs (dev_t, ino_t) to values (which
|
|
// are void* pointers.)
|
|
|
|
struct inodemap *mk_inodemap(void);
|
|
|
|
struct inodemap *inodemap_destroy(struct inodemap *im,
|
|
void (*destroy_value_fun)(void*));
|
|
// Destroy all the
|
|
|
|
bool
|
|
inodemap_lookup(struct inodemap *im,
|
|
dev_t dev,
|
|
ino_t inode,
|
|
void const **value);
|
|
// Effect: If there's a value in the map for (dev,inode) then return
|
|
// true and set *value to that value. Else return false.
|
|
|
|
void
|
|
inodemap_insert(struct inodemap *im, dev_t dev, ino_t inode, void *value);
|
|
// Effect: Create a map from (dev,inode) to value.
|
|
//
|
|
// Requires: There was no map from (dev, inode) before.
|
|
|
|
|
|
uint64_t inodemap_hash(dev_t dev, ino_t inode);
|
|
// Compute and return a hash of dev and inode.
|
|
|
|
#endif
|