## cr-input

cr-input

## Functions

CRInput * | cr_input_new_from_buf ()
CRInput * | cr_input_new_from_uri ()
void | cr_input_destroy ()
void | cr_input_ref ()
gboolean | cr_input_unref ()
enum CRStatus | cr_input_read_byte ()
enum CRStatus | cr_input_read_char ()
enum CRStatus | cr_input_consume_chars ()
enum CRStatus | cr_input_consume_char ()
enum CRStatus | cr_input_consume_white_spaces ()
enum CRStatus | cr_input_peek_byte ()
guchar | cr_input_peek_byte2 ()
enum CRStatus | cr_input_peek_char ()
guchar * | cr_input_get_byte_addr ()
enum CRStatus | cr_input_get_cur_byte_addr ()
enum CRStatus | cr_input_seek_index ()
enum CRStatus | cr_input_get_cur_index ()
enum CRStatus | cr_input_set_cur_index ()
enum CRStatus | cr_input_get_cur_pos ()
enum CRStatus | cr_input_set_cur_pos ()
enum CRStatus | cr_input_get_parsing_location ()
enum CRStatus | cr_input_get_end_of_line ()
enum CRStatus | cr_input_set_end_of_line ()
enum CRStatus | cr_input_get_end_of_file ()
enum CRStatus | cr_input_set_end_of_file ()
enum CRStatus | cr_input_set_line_num ()
enum CRStatus | cr_input_get_line_num ()
enum CRStatus | cr_input_set_column_num ()
enum CRStatus | cr_input_get_column_num ()
enum CRStatus | cr_input_increment_line_num ()
enum CRStatus | cr_input_increment_col_num ()
glong | cr_input_get_nb_bytes_left ()
enum CRStatus | cr_input_end_of_input ()

## Types and Values

struct | CRInput
struct | CRInputPos
| CRInputPriv

## Description

## Functions

### cr_input_new_from_buf ()

    CRInput *
    cr_input_new_from_buf (guchar *a_buf,
                           gulong a_len,
                           enum CREncoding a_enc,
                           gboolean a_free_buf);

Creates a new input stream from a memory buffer. Returns the newly built instance of CRInput.

#### Parameters

a_buf | the memory buffer to create the input stream from. The CRInput keeps this pointer so user should not free it !. |
a_len | the size of the input buffer. |
a_enc | the buffer's encoding. |
a_free_buf | if set to TRUE, this a_buf will be freed at the destruction of this instance. If set to false, it is up to the caller to free it. |

### cr_input_new_from_uri ()

    CRInput *
    cr_input_new_from_uri (const gchar *a_file_uri,
                           enum CREncoding a_enc);

Creates a new input stream from a file.

Returns the newly created input stream if this method could read the file and create it, NULL otherwise.

#### Parameters

a_file_uri | the file to create *the input stream from. |
a_enc | the encoding of the file *to create the input from. |

### cr_input_destroy ()

    void
    cr_input_destroy (CRInput *a_this);

The destructor of the CRInput class.

#### Parameters

a_this | the current instance of CRInput. |

### cr_input_ref ()

    void
    cr_input_ref (CRInput *a_this);

Increments the reference count of the current instance of CRInput.

#### Parameters

a_this | the current instance of CRInput. |

### cr_input_unref ()

    gboolean
    cr_input_unref (CRInput *a_this);

Decrements the reference count of this instance of CRInput. If the reference count goes down to zero, this instance is destroyed.

Returns TRUE if the instance of CRInput got destroyed, false otherwise.

#### Parameters

a_this | the current instance of CRInput. |

### cr_input_read_byte ()

    enum CRStatus
    cr_input_read_byte (CRInput *a_this,
                        guchar *a_byte);

Gets the next byte of the input. Updates the state of the input so that the next invocation of this method returns the next coming byte.

Returns CR_OK upon successful completion, an error code otherwise. All the out parameters of this method are valid if and only if this method returns CR_OK.

#### Parameters

a_this | the current instance of CRInput. |
a_byte | out parameter the returned byte. |

### cr_input_read_char ()

    enum CRStatus
    cr_input_read_char (CRInput *a_this,
                        guint32 *a_char);

Reads an unicode character from the current instance of CRInput.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRInput. |
a_char | out parameter. The read character. |

### cr_input_consume_chars ()

    enum CRStatus
    cr_input_consume_chars (CRInput *a_this,
                            guint32 a_char,
                            gulong *a_nb_char);

Consumes up to a_nb_char occurences of the next contiguous characters which equal a_char. Note that the next character of the input stream *MUST* equal a_char to trigger the consumption, or else, the error code CR_PARSING_ERROR is returned. If the number of contiguous characters that equals a_char is less than a_nb_char, then this function consumes all the characters it can consume.

Returns CR_OK if at least one character has been consumed, an error code otherwise.

#### Parameters

a_this | the this pointer of the current instance of CRInput. |
a_char | the character to consume. |
a_nb_char | in/out parameter. The number of characters to consume. If set to a negative value, the function will consume all the occurences of a_char found. After return, if the return value equals CR_OK, this variable contains the number of characters actually consumed. |

### cr_input_consume_char ()

    enum CRStatus
    cr_input_consume_char (CRInput *a_this,
                           guint32 a_char);

Consumes the next character of the input stream if and only if that character equals a_char.

Returns CR_OK upon successful completion, CR_PARSING_ERROR if next char is different from a_char, an other error code otherwise

#### Parameters

a_this | the this pointer. |
a_char | the character to consume. If set to zero, consumes any character. |

### cr_input_consume_white_spaces ()

    enum CRStatus
    cr_input_consume_white_spaces (CRInput *a_this,
                                   gulong *a_nb_chars);

Same as `cr_input_consume_chars()` but this one consumes white spaces.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRInput. |
a_nb_chars | in/out parameter. The number of white spaces to consume. After return, holds the number of white spaces actually consumed. |

### cr_input_peek_byte ()

    enum CRStatus
    cr_input_peek_byte (CRInput const *a_this,
                        enum CRSeekPos a_origin,
                        gulong a_offset,
                        guchar *a_byte);

Gets a byte from the input stream, starting from the current position in the input stream. Unlike `cr_input_peek_next_byte()` this method does not update the state of the current input stream. Subsequent calls to cr_input_peek_byte with the same arguments will return the same byte.

Returns CR_OK upon successful completion or, CR_BAD_PARAM_ERROR if at least one of the parameters is invalid; CR_OUT_OF_BOUNDS_ERROR if the indexed byte is out of bounds.

#### Parameters

a_this | the current instance of CRInput. |
a_origin | the origin to consider in the calculation of the position of the byte to peek. |
a_offset | the offset of the byte to peek, starting from the origin specified by a_origin. |
a_byte | out parameter the peeked byte. |

### cr_input_peek_byte2 ()

    guchar
    cr_input_peek_byte2 (CRInput const *a_this,
                         gulong a_offset,
                         gboolean *a_eof);

Same as `cr_input_peek_byte()` but with a simplified interface.

Returns the read byte or 0 if something bad happened.

#### Parameters

a_this | the current byte input stream. |
a_offset | the offset of the byte to peek, starting from the current input position pointer. |
a_eof | out parameter. Is set to true is we reach end of stream. If set to NULL by the caller, this parameter is not taken in account. |

### cr_input_peek_char ()

    enum CRStatus
    cr_input_peek_char (CRInput const *a_this,
                        guint32 *a_char);

Same as `cr_input_read_char()` but does not update the internal state of the input stream. The next call to `cr_input_peek_char()` or `cr_input_read_char()` will thus return the same character as the current one.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRInput. |
a_char | out parameter. The returned character. |

### cr_input_get_byte_addr ()

    guchar *
    cr_input_get_byte_addr (CRInput *a_this,
                            gulong a_offset);

Gets the memory address of the byte located at a given offset in the input stream.

Returns the address, otherwise NULL if an error occured.

#### Parameters

a_this | the current instance of CRInput. |
a_offset | the offset of the byte in the input stream starting from the beginning of the stream. |

### cr_input_get_cur_byte_addr ()

    enum CRStatus
    cr_input_get_cur_byte_addr (CRInput *a_this,
                                guchar **a_offset);

Gets the address of the current character pointer.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the current input stream |
a_offset | out parameter. The returned address. |

### cr_input_seek_index ()

    enum CRStatus
    cr_input_seek_index (CRInput *a_this,
                         enum CRSeekPos a_origin,
                         gint a_pos);

Sets the "current byte index" of the current instance of CRInput. Next call to `cr_input_get_byte()` will return the byte next after the new "current byte index".

Returns CR_OK upon successful completion otherwise returns CR_BAD_PARAM_ERROR if at least one of the parameters is not valid or CR_OUT_BOUNDS_ERROR in case of error.

#### Parameters

a_this | the current instance of CRInput. |
a_origin | the origin to consider during the calculation of the absolute position of the new "current byte index". |
a_pos | the relative offset of the new "current byte index." This offset is relative to the origin a_origin. |

### cr_input_get_cur_index ()

    enum CRStatus
    cr_input_get_cur_index (CRInput const *a_this,
                            glong *a_index);

Getter of the next byte index. It actually returns the index of the next byte to be read.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRInput |
a_index | out parameter. The returned index. |

### cr_input_set_cur_index ()

    enum CRStatus
    cr_input_set_cur_index (CRInput *a_this,
                            glong a_index);

Setter of the next byte index. It sets the index of the next byte to be read.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRInput . |
a_index | the new index to set. |

### cr_input_get_cur_pos ()

    enum CRStatus
    cr_input_get_cur_pos (CRInput const *a_this,
                          CRInputPos *a_pos);

Gets the position of the "current byte index" which is basically the position of the last returned byte in the input stream.

Returns CR_OK upon successful completion. Otherwise, CR_BAD_PARAMETER_ERROR if at least one of the arguments is invalid. CR_START_OF_INPUT if no call to either `cr_input_read_byte()` or `cr_input_seek_index()` have been issued before calling `cr_input_get_cur_pos()` Note that the out parameters of this function are valid if and only if this function returns CR_OK.

#### Parameters

a_this | the current instance of CRInput. |
a_pos | out parameter. The returned position. |

### cr_input_set_cur_pos ()

    enum CRStatus
    cr_input_set_cur_pos (CRInput *a_this,
                          CRInputPos const *a_pos);

Sets the current position in the input stream.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRInput. |
a_pos | the new position. |

### cr_input_get_parsing_location ()

    enum CRStatus
    cr_input_get_parsing_location (CRInput const *a_this,
                                   CRParsingLocation *a_loc);

Gets the current parsing location. The Parsing location is a public datastructure that represents the current line/column/byte offset/ in the input stream.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRInput |
a_loc | the set parsing location. |

### cr_input_get_end_of_line ()

    enum CRStatus
    cr_input_get_end_of_line (CRInput const *a_this,
                              gboolean *a_eol);

Gets the end of line flag of the current input.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRInput |
a_eol | out parameter. The place to put the returned flag |

### cr_input_set_end_of_line ()

    enum CRStatus
    cr_input_set_end_of_line (CRInput *a_this,
                              gboolean a_eol);

Sets the end of line flag.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRInput. |
a_eol | the new end of line flag. |

### cr_input_get_end_of_file ()

    enum CRStatus
    cr_input_get_end_of_file (CRInput const *a_this,
                              gboolean *a_eof);

Gets the end of file flag.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRInput. |
a_eof | out parameter the place to put the end of file flag. |

### cr_input_set_end_of_file ()

    enum CRStatus
    cr_input_set_end_of_file (CRInput *a_this,
                              gboolean a_eof);

Sets the end of file flag.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the current instance of CRInput. |
a_eof | the new end of file flag. |

### cr_input_set_line_num ()

    enum CRStatus
    cr_input_set_line_num (CRInput *a_this,
                           glong a_line_num);

Setter of the current line number.

Return CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRInput. |
a_line_num | the new line number. |

### cr_input_get_line_num ()

    enum CRStatus
    cr_input_get_line_num (CRInput const *a_this,
                           glong *a_line_num);

Getter of the current line number.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRInput. |
a_line_num | the returned line number. |

### cr_input_set_column_num ()

    enum CRStatus
    cr_input_set_column_num (CRInput *a_this,
                             glong a_col);

Setter of the current column number.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRInput. |
a_col | the new column number. |

### cr_input_get_column_num ()

    enum CRStatus
    cr_input_get_column_num (CRInput const *a_this,
                             glong *a_col);

Getter of the current column number.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRInput. |
a_col | out parameter |

### cr_input_increment_line_num ()

    enum CRStatus
    cr_input_increment_line_num (CRInput *a_this,
                                 glong a_increment);

Increments the current line number.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRInput. |
a_increment | the increment to add to the line number. |

### cr_input_increment_col_num ()

    enum CRStatus
    cr_input_increment_col_num (CRInput *a_this,
                                glong a_increment);

Increments the current column number.

Returns CR_OK upon successful completion, an error code otherwise.

#### Parameters

a_this | the "this pointer" of the current instance of CRInput. |
a_increment | the increment to add to the column number. |

### cr_input_get_nb_bytes_left ()

    glong
    cr_input_get_nb_bytes_left (CRInput const *a_this);

Returns the number of bytes left in the input stream before the end, -1 in case of error.

#### Parameters

a_this | the current instance of CRInput. |

### cr_input_end_of_input ()

    enum CRStatus
    cr_input_end_of_input (CRInput const *a_this,
                           gboolean *a_end_of_input);

Tests wether the current instance of CRInput has reached its input buffer.

Returns CR_OK upon successful completion, an error code otherwise. Note that all the out parameters of this method are valid if and only if this method returns CR_OK.

#### Parameters

a_this | the current instance of CRInput. |
a_end_of_input | out parameter. Is set to TRUE if the current instance has reached the end of its input buffer, FALSE otherwise. |

## Types and Values

### struct CRInput

    struct CRInput {
            CRInputPriv *priv ;
    };

### struct CRInputPos

    struct CRInputPos {
            glong line ;
            glong col ;
            gboolean end_of_file ;
            gboolean end_of_line ;
            glong next_byte_index ;
    };

### CRInputPriv

    typedef struct _CRInputPriv CRInputPriv;