EtcPal  HEAD (unstable)
ETC Platform Abstraction Layer (EtcPal)
View other versions:
handle_manager

Overview

A utility to manage handing out integer handles to resources.

#include "etcpal/handle_manager.h"

This struct and the accompanying functions are a utility to manage handing out integer handles to resources. It first assigns monotonically-increasing positive values starting at 0 to handles; after wraparound, it uses the value_in_use function to find holes where new handle values can be assigned.

Data Structures

struct  IntHandleManager
 State for managing generic integer handle values. More...
 

Typedefs

typedef bool(* HandleValueInUseFunction) (int handle_val, void *context)
 A pointer to a function that tests if a given handle value is currently assigned to a resource.
 
typedef struct IntHandleManager IntHandleManager
 State for managing generic integer handle values.
 

Functions

void init_int_handle_manager (IntHandleManager *manager, int max_value, HandleValueInUseFunction value_in_use_func, void *context)
 Initialize an IntHandleManager instance. More...
 
int get_next_int_handle (IntHandleManager *manager)
 Once the int handle manager is initialized, this is used to get the next handle value. More...
 

Function Documentation

◆ get_next_int_handle()

int get_next_int_handle ( IntHandleManager manager)

Once the int handle manager is initialized, this is used to get the next handle value.

This function provides the next handle value that is not currently assigned to a resource.

Parameters
[in,out]managerThe handle manager to get the new handle from.
Returns
The new handle, or -1 if all handles are used.

◆ init_int_handle_manager()

void init_int_handle_manager ( IntHandleManager manager,
int  max_value,
HandleValueInUseFunction  value_in_use_func,
void *  context 
)

Initialize an IntHandleManager instance.

Once an IntHandleManager has been instantiated, it should be passed to this function to initialize its state.

Parameters
[in,out]managerThe handle manager instance to initialize.
[in]max_valueDetermines a custom wrap-around point. It will be ignored if it's negative. Otherwise it represents the highest allowed handle value.
[in]value_in_use_funcThe function that tests if a given handle value is currently assigned to a resource.
[in,out]contextAn optional pointer that will be passed to the value-in-use function. This can be NULL.