C Container Collection (CCC)
Loading...
Searching...
No Matches
private_singly_linked_list.h File Reference

The Private Singly Linked List Types and Interface. More...

#include "../types.h"
Include dependency graph for private_singly_linked_list.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Detailed Description

The Private Singly Linked List Types and Interface.

The private singly linked list interface and type management. The singly linked list aims to be a simple and efficient push to and pop from front alternative to the doubly linked list. Notably, it can be sorted with the same space and runtime guarantees as the doubly linked list variant with some additional implementation efforts.

Data Structures

struct  CCC_Singly_linked_list_node
 
struct  CCC_Singly_linked_list
 

Macros

#define CCC_private_singly_linked_list_for( private_struct_name, private_singly_linked_list_node_field)
 
#define CCC_private_singly_linked_list_default( private_struct_name, private_singly_linked_list_node_field)
 
#define CCC_private_singly_linked_list_from( private_type_intruder_field, private_allocator, private_destructor, private_compound_literal_array...)
 
#define CCC_private_singly_linked_list_emplace_front( list_pointer, private_allocator_pointer, struct_initializer...)
 

Functions

void CCC_private_singly_linked_list_push_front (struct CCC_Singly_linked_list *, struct CCC_Singly_linked_list_node *)
 
struct CCC_Singly_linked_list_nodeCCC_private_singly_linked_list_node_in (struct CCC_Singly_linked_list const *, void const *)
 

Macro Definition Documentation

◆ CCC_private_singly_linked_list_default

#define CCC_private_singly_linked_list_default (   private_struct_name,
  private_singly_linked_list_node_field 
)
Value:
private_struct_name, private_singly_linked_list_node_field \
)
#define CCC_private_singly_linked_list_for( private_struct_name, private_singly_linked_list_node_field)
Definition: private_singly_linked_list.h:97

◆ CCC_private_singly_linked_list_emplace_front

#define CCC_private_singly_linked_list_emplace_front (   list_pointer,
  private_allocator_pointer,
  struct_initializer... 
)
Value:
(__extension__({ \
typeof(struct_initializer) *private_singly_linked_list_res = NULL; \
struct CCC_Singly_linked_list *private_singly_linked_list \
= (list_pointer); \
CCC_Allocator const *const private_singly_linked_list_allocator \
= (private_allocator_pointer); \
if (private_singly_linked_list && private_singly_linked_list_allocator \
&& private_singly_linked_list_allocator->allocate) { \
private_singly_linked_list_res \
= private_singly_linked_list->allocate( \
.input = NULL, \
.bytes = private_singly_linked_list->sizeof_type, \
.context = private_singly_linked_list->context, \
} \
); \
if (private_singly_linked_list_res) { \
*private_singly_linked_list_res = struct_initializer; \
CCC_private_singly_linked_list_push_front( \
private_singly_linked_list, \
private_singly_linked_list, \
private_singly_linked_list_res \
) \
); \
} \
} \
private_singly_linked_list_res; \
}))
struct CCC_Singly_linked_list_node * CCC_private_singly_linked_list_node_in(struct CCC_Singly_linked_list const *, void const *)
A bundle of arguments to pass to the user-implemented Allocator_interface function interface....
Definition: types.h:277
The type passed by reference to any container function that may need to allocate memory....
Definition: types.h:384
CCC_Allocator_interface * allocate
Definition: types.h:386
Definition: private_singly_linked_list.h:72

◆ CCC_private_singly_linked_list_for

#define CCC_private_singly_linked_list_for (   private_struct_name,
  private_singly_linked_list_node_field 
)
Value:
.head = NULL, .sizeof_type = sizeof(private_struct_name), \
.alignof_type = alignof(private_struct_name), \
.type_intruder_offset = offsetof( \
private_struct_name, private_singly_linked_list_node_field \
), \
}
size_t alignof_type
Definition: private_singly_linked_list.h:78

◆ CCC_private_singly_linked_list_from

#define CCC_private_singly_linked_list_from (   private_type_intruder_field,
  private_allocator,
  private_destructor,
  private_compound_literal_array... 
)

Function Documentation

◆ CCC_private_singly_linked_list_node_in()

struct CCC_Singly_linked_list_node * CCC_private_singly_linked_list_node_in ( struct CCC_Singly_linked_list const *  ,
void const *   
)

◆ CCC_private_singly_linked_list_push_front()

void CCC_private_singly_linked_list_push_front ( struct CCC_Singly_linked_list ,
struct CCC_Singly_linked_list_node  
)