LispBM
Data Structures | Macros | Typedefs | Functions
lbm_channel.h File Reference
#include <stdint.h>
#include <stdbool.h>
#include <platform_mutex.h>
#include <lbm_types.h>
Include dependency graph for lbm_channel.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  lbm_buffered_channel_state_t
 
struct  lbm_string_channel_state_t
 
struct  lbm_char_channel_s
 

Macros

#define TOKENIZER_BUFFER_SIZE   257
 
#define CHANNEL_SUCCESS   1
 
#define CHANNEL_MORE   2
 
#define CHANNEL_END   3
 
#define CHANNEL_FULL   4
 
#define CHANNEL_READER_CLOSED   1000
 

Typedefs

typedef struct lbm_char_channel_s lbm_char_channel_t
 

Functions

bool lbm_channel_more (lbm_char_channel_t *chan)
 
int lbm_channel_peek (lbm_char_channel_t *chan, unsigned int n, char *res)
 
bool lbm_channel_read (lbm_char_channel_t *chan, char *res)
 
bool lbm_channel_drop (lbm_char_channel_t *chan, unsigned int n)
 
bool lbm_channel_comment (lbm_char_channel_t *chan)
 
void lbm_channel_set_comment (lbm_char_channel_t *chan, bool comment)
 
void lbm_channel_reader_close (lbm_char_channel_t *chan)
 
bool lbm_channel_reader_is_closed (lbm_char_channel_t *chan)
 
bool lbm_channel_is_empty (lbm_char_channel_t *chan)
 
bool lbm_channel_is_full (lbm_char_channel_t *chan)
 
int lbm_channel_write (lbm_char_channel_t *chan, char c)
 
void lbm_channel_writer_close (lbm_char_channel_t *chan)
 
unsigned int lbm_channel_row (lbm_char_channel_t *chan)
 
unsigned int lbm_channel_column (lbm_char_channel_t *chan)
 
bool lbm_channel_may_block (lbm_char_channel_t *chan)
 
void lbm_create_string_char_channel (lbm_string_channel_state_t *st, lbm_char_channel_t *chan, char *str)
 
void lbm_create_string_char_channel_size (lbm_string_channel_state_t *st, lbm_char_channel_t *chan, char *str, unsigned int size)
 
void lbm_create_buffered_char_channel (lbm_buffered_channel_state_t *st, lbm_char_channel_t *chan)
 
void lbm_char_channel_set_dependency (lbm_char_channel_t *chan, lbm_value dep)
 

Macro Definition Documentation

◆ CHANNEL_END

#define CHANNEL_END   3

◆ CHANNEL_FULL

#define CHANNEL_FULL   4

◆ CHANNEL_MORE

#define CHANNEL_MORE   2

◆ CHANNEL_READER_CLOSED

#define CHANNEL_READER_CLOSED   1000

◆ CHANNEL_SUCCESS

#define CHANNEL_SUCCESS   1

◆ TOKENIZER_BUFFER_SIZE

#define TOKENIZER_BUFFER_SIZE   257

Typedef Documentation

◆ lbm_char_channel_t

Struct describing the interface to a character channel.

Function Documentation

◆ lbm_channel_column()

unsigned int lbm_channel_column ( lbm_char_channel_t chan)

Obtain current column from a channel.

Parameters
chanThe channel to query.

◆ lbm_channel_comment()

bool lbm_channel_comment ( lbm_char_channel_t chan)

Comment mode. Check if a channel is currently in comment mode.

Parameters
chanThe channel.
Returns
true if the channel is in comment mode, false otherwise.

◆ lbm_channel_drop()

bool lbm_channel_drop ( lbm_char_channel_t chan,
unsigned int  n 
)

Drop n characters from a channel.

Parameters
chanThe channel to drop characters from.
nThe number of characters to drop.
Returns
true on successfully dropping n characters, false otherwise.

◆ lbm_channel_is_empty()

bool lbm_channel_is_empty ( lbm_char_channel_t chan)

Check if a channel is empty. Data cannot be read from an empty channel.

Parameters
chanChannel to query.
Returns
True if empty, false otherwise.

◆ lbm_channel_is_full()

bool lbm_channel_is_full ( lbm_char_channel_t chan)

Check if a channel is full. Data cannot be written into a full channel.

Parameters
chanChannel to query.
Returns
True if channel is full, false otherwise.

◆ lbm_channel_may_block()

bool lbm_channel_may_block ( lbm_char_channel_t chan)

query if a channel has a potentially blocking interface. Buffered channels do, string backed channels don't.

◆ lbm_channel_more()

bool lbm_channel_more ( lbm_char_channel_t chan)

Check if there are more characters comming on a character channel. This returns false if the sender has closed the send side of the channel.

Parameters
chanThe channel.
Returns
True if sender end is still open false if closed.

◆ lbm_channel_peek()

int lbm_channel_peek ( lbm_char_channel_t chan,
unsigned int  n,
char *  res 
)

Peek into a character channel.

Parameters
chanThe channel to peek into.
nThe position to peek at.
resPointer to a character that will hold the result.
Returns
  • CHANNEL_SUCCESS: successfully peeked.
  • CHANNEL_MORE: The data you try to peek at has not yet arrived into the channel.
  • CHANNEL_END: The sender side is closed and you are peeking outside of valid data.

◆ lbm_channel_read()

bool lbm_channel_read ( lbm_char_channel_t chan,
char *  res 
)

Read a character from the head of the channel.

Parameters
chanThe channel to read from.
resThe resulting character is stored here.
Returns
true on success, otherwise false.

◆ lbm_channel_reader_close()

void lbm_channel_reader_close ( lbm_char_channel_t chan)

Close a channel reader side.

Parameters
chanChannel to close the reader side of.

◆ lbm_channel_reader_is_closed()

bool lbm_channel_reader_is_closed ( lbm_char_channel_t chan)

Check if the reader side of channel is closed.

Parameters
chanChannel to query.
Returns
True if closed, false otherwise.

◆ lbm_channel_row()

unsigned int lbm_channel_row ( lbm_char_channel_t chan)

Obtain current row number from a channel.

Parameters
chanThe channel to query.
Returns
The current row as seen by the calls to "read".

◆ lbm_channel_set_comment()

void lbm_channel_set_comment ( lbm_char_channel_t chan,
bool  comment 
)

Enter into or exit from comment mode.

Parameters
chanChannel to change mode of.
commentTrue to enter into comment mode and false to exit.

◆ lbm_channel_write()

int lbm_channel_write ( lbm_char_channel_t chan,
char  c 
)

Write a character onto the end of a channel.

Parameters
chanChannel to write to.
cCharacter to place onto the channel.
Returns
  • CHANNEL_SUCCESS: Successfully wrote.
  • CHANNEL_READER_CLOSED: The reader end is closed, you should abort writing.
  • CHANNEL_FULL: The channel is full and cannot accept the character. Try again later.

◆ lbm_channel_writer_close()

void lbm_channel_writer_close ( lbm_char_channel_t chan)

Close the writer side of a channel. \ param chan The channel to close the writer side of.

◆ lbm_char_channel_set_dependency()

void lbm_char_channel_set_dependency ( lbm_char_channel_t chan,
lbm_value  dep 
)

Set the dependency field of a channel. Garbage collection will ensure that the dependency is alive for at least as long as the channel itself.

Parameters
chanpointer to channel to set dependency in.
depdependency to associate with the channel.

◆ lbm_create_buffered_char_channel()

void lbm_create_buffered_char_channel ( lbm_buffered_channel_state_t st,
lbm_char_channel_t chan 
)

Create a buffered channel that can be read from and written to.

Parameters
stPointer to lbm_buffered_channel_state_t.
chanPointer to lbm_char_channel_t.

◆ lbm_create_string_char_channel()

void lbm_create_string_char_channel ( lbm_string_channel_state_t st,
lbm_char_channel_t chan,
char *  str 
)

Create a channel from a string. This channel can be read from but not written to.

Parameters
stPointer to lbm_string_channel_state.
chanPointer to lbm_char_channel_t.
strThe string to base the channel contents upon.

◆ lbm_create_string_char_channel_size()

void lbm_create_string_char_channel_size ( lbm_string_channel_state_t st,
lbm_char_channel_t chan,
char *  str,
unsigned int  size 
)