Developer World
Spresense SDK Library v3.2.0-ebc0364
queue.h
1/****************************************************************************
2 * modules/include/memutils/s_stl/queue.h
3 *
4 * Copyright 2018 Sony Semiconductor Solutions Corporation
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in
14 * the documentation and/or other materials provided with the
15 * distribution.
16 * 3. Neither the name of Sony Semiconductor Solutions Corporation nor
17 * the names of its contributors may be used to endorse or promote
18 * products derived from this software without specific prior written
19 * permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
28 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 *
34 ****************************************************************************/
35
36#ifndef QUEUE_H_INCLUDED
37#define QUEUE_H_INCLUDED
38
39#include "memutils/s_stl/s_stl_config.h"
40#include "memutils/s_stl/buffer.h"
41
42__STL_BEGIN_NAMESPACE
43
44/*-------------------------------------------------------------------*/
45template<class T, int N> class Queue{
46
47private:
48
49 RingBuffer<T, N> data_buf;
50 int cnt;
51public:
52 Queue() : cnt(0){}
53
54 bool push(const T& new_data){
55 if(cnt>=N){ return FALSE; } else { cnt++; }
56 return data_buf.alloc_front(new_data);
57 }
58
59 bool pop(void){
60 if(cnt<=0){ return FALSE; } else { cnt--; }
61 return data_buf.free_back();
62 }
63
64 const T& top(void) const {
65 return data_buf.get_back();
66 }
67
68 T& writable_at(const int n){
69 return const_cast<T&>(data_buf.at_back(n));
70 }
71
72 const T& at(const int n) const {
73 return data_buf.at_back(n);
74 }
75
76 int size(void) const { return cnt; }
77 int rest(void) const { return (N-cnt); }
78
79 bool empty(void) const { return (cnt==0); }
80 bool full(void) const { return (cnt==N); }
81
82 void clear(void){
83 cnt = 0;
84 data_buf.clear();
85 }
86};
87
88__STL_END_NAMESPACE
89
90#endif /* QUEUE_H_INCLUDED */
91
Definition: queue.h:45
Definition: buffer.h:95