libcute 0.1
Loading...
Searching...
No Matches
Macros
rc.h File Reference
#include "memory/allocator.h"
#include "object/optional.h"
#include "object/result.h"
#include "utility.h"
#include <stdalign.h>
Include dependency graph for rc.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define CU_RC_NAME(NAME)   NAME##_Rc
 
#define CU_RC_FN(NAME, SUFFIX)   CU_CONCAT(CU_RC_NAME(NAME), SUFFIX)
 
#define CU_RC_OPTIONAL_NAME(NAME)   CU_CONCAT(CU_RC_NAME(NAME), _Optional)
 
#define CU_RC_OPTIONAL_FN(NAME, SUFFIX)    CU_CONCAT(CU_RC_OPTIONAL_NAME(NAME), SUFFIX)
 
#define CU_RC_DESTRUCTOR_OPTIONAL_NAME(NAME)    CU_CONCAT(CU_RC_DESTRUCTOR_NAME(NAME), _Optional)
 
#define CU_RC_DESTRUCTOR_OPTIONAL_FN(NAME, SUFFIX)    CU_OPTIONAL_FN(CU_RC_DESTRUCTOR_NAME(NAME), SUFFIX)
 
#define CU_RC_DESTRUCTOR_NAME(NAME)   CU_RC_FN(NAME, _Destructor)
 
#define CU_RC_CONTAINER(NAME, T)
 
#define CU_RC_RESULT_NAME(NAME)   NAME##_Rc_Result
 
#define CU_RC_HEADER(NAME, T)
 
#define CU_RC_DECL(NAME, T)
 
#define CU_RC_IMPL(NAME, T)
 

Detailed Description

Reference counted pointer utilities.

Macro Definition Documentation

◆ CU_RC_CONTAINER

#define CU_RC_CONTAINER (   NAME,
 
)
Value:
typedef void (*CU_RC_DESTRUCTOR_NAME(NAME))(T *); \
CU_OPTIONAL_DECL(CU_RC_DESTRUCTOR_NAME(NAME), CU_RC_DESTRUCTOR_NAME(NAME)) \
struct CU_RC_FN(NAME, _Container) { \
T item; \
size_t ref_count; \
CU_RC_DESTRUCTOR_OPTIONAL_NAME(NAME) destructor; \
};
#define CU_RC_DESTRUCTOR_NAME(NAME)
Definition rc.h:25
#define CU_RC_FN(NAME, SUFFIX)
Definition rc.h:13

◆ CU_RC_DECL

#define CU_RC_DECL (   NAME,
 
)
Value:
CU_RC_CONTAINER(NAME, T) \
typedef struct { \
struct CU_RC_FN(NAME, _Container) * inner; \
cu_Allocator alloc; \
} CU_RC_NAME(NAME); \
CU_OPTIONAL_DECL(CU_RC_NAME(NAME), CU_RC_NAME(NAME)) \
CU_RESULT_DECL(CU_RC_NAME(NAME), CU_RC_NAME(NAME), cu_Io_Error) \
CU_RC_HEADER(NAME, T)
Definition allocator.h:24
Definition error.h:27

Declare the rc struct and its helpers.

◆ CU_RC_DESTRUCTOR_NAME

#define CU_RC_DESTRUCTOR_NAME (   NAME)    CU_RC_FN(NAME, _Destructor)

Container holding the value and reference count.

◆ CU_RC_DESTRUCTOR_OPTIONAL_NAME

#define CU_RC_DESTRUCTOR_OPTIONAL_NAME (   NAME)     CU_CONCAT(CU_RC_DESTRUCTOR_NAME(NAME), _Optional)

Destructor optional helper names.

◆ CU_RC_FN

#define CU_RC_FN (   NAME,
  SUFFIX 
)    CU_CONCAT(CU_RC_NAME(NAME), SUFFIX)

Construct a helper function name for the rc type.

◆ CU_RC_HEADER

#define CU_RC_HEADER (   NAME,
 
)
Value:
CU_RC_FN(NAME, _create)(cu_Allocator alloc, T value, \
CU_RC_DESTRUCTOR_OPTIONAL_NAME(NAME) destructor); \
CU_RC_OPTIONAL_NAME(NAME) \
CU_RC_FN(NAME, _clone)(const CU_RC_NAME(NAME) * rc); \
void CU_RC_FN(NAME, _destroy)(CU_RC_NAME(NAME) * rc); \
T *CU_RC_FN(NAME, _get)(const CU_RC_NAME(NAME) * rc);
#define CU_RC_RESULT_NAME(NAME)
Definition rc.h:36

◆ CU_RC_IMPL

#define CU_RC_IMPL (   NAME,
 
)

Define the implementation for the rc helpers.

◆ CU_RC_OPTIONAL_NAME

#define CU_RC_OPTIONAL_NAME (   NAME)    CU_CONCAT(CU_RC_NAME(NAME), _Optional)

Optional type helper names for rc.

◆ CU_RC_RESULT_NAME

#define CU_RC_RESULT_NAME (   NAME)    NAME##_Rc_Result

Declare functions for a reference counted type.