Developer World
Spresense SDK Library v3.3.0-375c679
MsgQue.h
1/****************************************************************************
2 * modules/include/memutils/message/MsgQue.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 MSG_QUE_H_INCLUDED
37#define MSG_QUE_H_INCLUDED
38
39#include "memutils/common_utils/common_types.h" /* drm_t, uint16_t */
40#include "memutils/common_utils/common_assert.h" /* D_ASSERT2 */
41#include "memutils/message/BasicQueue.h" /* BasicQueue */
42#include "memutils/message/MsgPacket.h" /* MsgPacket, MsgPacketHeader */
43
44/* Message area fill value after message poped */
45#define MSG_FILL_VALUE_AFTER_POP 0x0
46
47/*****************************************************************
48 * Message queue class
49 * Make it protected inheritance to hide the base class template function
50 *****************************************************************/
51
52class MsgQue : protected BasicQueue<drm_t, uint16_t, uint16_t, MSG_FILL_VALUE_AFTER_POP> {
54public:
55 MsgQue() : Base() {}
56
57 MsgQue(drm_t data_area, uint16_t elem, uint16_t num) :
58 Base(data_area, elem, num) {}
59
60 /* Make certain functions public only. */
61
62 using Base::init;
63 using Base::is_init;
64 using Base::elem_size;
65 using Base::capacity;
66 using Base::size;
67 using Base::rest;
68 using Base::empty;
69 using Base::full;
70 using Base::dump;
71 using Base::clear;
72 using Base::pop;
73
74 /* Insert a message packet header at the end of the queue
75 * and return that address.
76 */
77
78 MsgPacket* pushHeader(const MsgPacketHeader& header) {
79 return (push(header) == true) ? backMsg() : NULL;
80 }
81
82 MsgPacket* frontMsg() { return &front<MsgPacket>(); }
83 MsgPacket* backMsg() { return &back<MsgPacket>(); }
84}; /* class MsgQue */
85
86#endif /* MSG_QUE_H_INCLUDED */
Definition: BasicQueue.h:79
Definition: MsgPacket.h:75
Definition: MsgPacket.h:142
Definition: MsgQue.h:52