Prism Ruby parser
Loading...
Searching...
No Matches
Data Structures | Typedefs | Functions
pm_list.h File Reference

An abstract linked list. More...

#include "prism/defines.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
Include dependency graph for pm_list.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  pm_list_node
 This struct represents an abstract linked list that provides common functionality. More...
 
struct  pm_list_t
 This represents the overall linked list. More...
 

Typedefs

typedef struct pm_list_node pm_list_node_t
 This struct represents an abstract linked list that provides common functionality.
 

Functions

PRISM_EXPORTED_FUNCTION bool pm_list_empty_p (pm_list_t *list)
 Returns true if the given list is empty.
 
PRISM_EXPORTED_FUNCTION size_t pm_list_size (pm_list_t *list)
 Returns the size of the list.
 
void pm_list_append (pm_list_t *list, pm_list_node_t *node)
 Append a node to the given list.
 
PRISM_EXPORTED_FUNCTION void pm_list_free (pm_list_t *list)
 Deallocate the internal state of the given list.
 

Detailed Description

An abstract linked list.

Typedef Documentation

◆ pm_list_node_t

typedef struct pm_list_node pm_list_node_t

This struct represents an abstract linked list that provides common functionality.

It is meant to be used any time a linked list is necessary to store data.

The linked list itself operates off a set of pointers. Because the pointers are not necessarily sequential, they can be of any size. We use this fact to allow the consumer of this linked list to extend the node struct to include any data they want. This is done by using the pm_list_node_t as the first member of the struct.

For example, if we want to store a list of integers, we can do the following:

typedef struct {
int value;
} pm_int_node_t;
pm_list_t list = { 0 };
pm_int_node_t *node = xmalloc(sizeof(pm_int_node_t));
node->value = 5;
pm_list_append(&list, &node->node);
#define xmalloc
If you build prism with a custom allocator, configure it with "-D PRISM_XALLOCATOR" to use your own a...
Definition defines.h:176
This struct represents an abstract linked list that provides common functionality.
Definition pm_list.h:46
This represents the overall linked list.
Definition pm_list.h:55

The pm_list_t struct is used to represent the overall linked list. It contains a pointer to the head and tail of the list. This allows for easy iteration and appending of new nodes.

Function Documentation

◆ pm_list_empty_p()

PRISM_EXPORTED_FUNCTION bool pm_list_empty_p ( pm_list_t list)

Returns true if the given list is empty.

Parameters
listThe list to check.
Returns
True if the given list is empty, otherwise false.

◆ pm_list_size()

PRISM_EXPORTED_FUNCTION size_t pm_list_size ( pm_list_t list)

Returns the size of the list.

Parameters
listThe list to check.
Returns
The size of the list.

◆ pm_list_append()

void pm_list_append ( pm_list_t list,
pm_list_node_t node 
)

Append a node to the given list.

Parameters
listThe list to append to.
nodeThe node to append.

◆ pm_list_free()

PRISM_EXPORTED_FUNCTION void pm_list_free ( pm_list_t list)

Deallocate the internal state of the given list.

Parameters
listThe list to free.