78 lines
2.1 KiB
C
78 lines
2.1 KiB
C
/*!
|
|
* \file deque08.h
|
|
* \brief
|
|
* This file provides double ended queue capability based on a ring buffer
|
|
*
|
|
* Copyright (C) 2014 Houtouridis Christos <houtouridis.ch@gmail.com>
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as
|
|
* published by the Free Software Foundation, either version 3
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
*/
|
|
#ifndef __deque08_h__
|
|
#define __deque08_h__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "driver_types.h"
|
|
#include <string.h>
|
|
|
|
typedef struct {
|
|
byte_t *m; /*!< pointer to queue's buffer */
|
|
iterator_t capacity; /*!< queue's max item capacity */
|
|
iterator_t items; /*!< current item count */
|
|
iterator_t f, r; /*!< queue iterators */
|
|
}deque08_t;
|
|
|
|
|
|
/*
|
|
* ============= PUBLIC EE API =============
|
|
*/
|
|
|
|
/*
|
|
* Link and Glue functions
|
|
*/
|
|
void deque08_link_buffer (deque08_t *q, byte_t* buf);
|
|
|
|
/*
|
|
* Set functions
|
|
*/
|
|
void deque08_set_capacity (deque08_t *q, size_t capacity);
|
|
|
|
/*
|
|
* User Functions
|
|
*/
|
|
int deque08_is_full (deque08_t *q);
|
|
int deque08_is_empty (deque08_t *q);
|
|
int deque08_size (deque08_t *q);
|
|
void deque08_flush (deque08_t *q);
|
|
|
|
void deque08_init (deque08_t *q);
|
|
int deque08_push_front (deque08_t *q, byte_t b);
|
|
int deque08_pop_front (deque08_t *q, byte_t *b);
|
|
int deque08_push_back (deque08_t *q, byte_t b);
|
|
int deque08_pop_back (deque08_t *q, byte_t *b);
|
|
|
|
int deque08_back (deque08_t *q, byte_t *b);
|
|
int deque08_front (deque08_t *q, byte_t *b);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif //#ifndef __deque08_h__
|