LMMS
Loading...
Searching...
No Matches
juce_UMPacket.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 The code included in this file is provided under the terms of the ISC license
11 http://www.isc.org/downloads/software-support-policy/isc-license. Permission
12 To use, copy, modify, and/or distribute this software for any purpose with or
13 without fee is hereby granted provided that the above copyright notice and
14 this permission notice appear in all copies.
15
16 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
17 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
18 DISCLAIMED.
19
20 ==============================================================================
21*/
22
23#ifndef DOXYGEN
24
25namespace juce
26{
28{
29
35template <size_t numWords>
36class Packet
37{
38public:
39 Packet() = default;
40
41 template <size_t w = numWords, typename std::enable_if<w == 1, int>::type = 0>
43 : contents { { a } }
44 {
45 jassert (Utils::getNumWordsForMessageType (a) == 1);
46 }
47
48 template <size_t w = numWords, typename std::enable_if<w == 2, int>::type = 0>
50 : contents { { a, b } }
51 {
52 jassert (Utils::getNumWordsForMessageType (a) == 2);
53 }
54
55 template <size_t w = numWords, typename std::enable_if<w == 3, int>::type = 0>
57 : contents { { a, b, c } }
58 {
59 jassert (Utils::getNumWordsForMessageType (a) == 3);
60 }
61
62 template <size_t w = numWords, typename std::enable_if<w == 4, int>::type = 0>
64 : contents { { a, b, c, d } }
65 {
66 jassert (Utils::getNumWordsForMessageType (a) == 4);
67 }
68
69 template <size_t w, typename std::enable_if<w == numWords, int>::type = 0>
70 explicit Packet (const std::array<uint32_t, w>& fullPacket)
71 : contents (fullPacket)
72 {
73 jassert (Utils::getNumWordsForMessageType (fullPacket.front()) == numWords);
74 }
75
77 {
78 return withU4<0> (type);
79 }
80
81 Packet withGroup (uint8_t group) const noexcept
82 {
83 return withU4<1> (group);
84 }
85
86 Packet withStatus (uint8_t status) const noexcept
87 {
88 return withU4<2> (status);
89 }
90
91 Packet withChannel (uint8_t channel) const noexcept
92 {
93 return withU4<3> (channel);
94 }
95
97
99
101
103
104 template <size_t index>
105 Packet withU4 (uint8_t value) const noexcept
106 {
107 constexpr auto word = index / 8;
108 auto copy = *this;
109 std::get<word> (copy.contents) = Utils::U4<index % 8>::set (copy.template getU32<word>(), value);
110 return copy;
111 }
112
113 template <size_t index>
114 Packet withU8 (uint8_t value) const noexcept
115 {
116 constexpr auto word = index / 4;
117 auto copy = *this;
118 std::get<word> (copy.contents) = Utils::U8<index % 4>::set (copy.template getU32<word>(), value);
119 return copy;
120 }
121
122 template <size_t index>
123 Packet withU16 (uint16_t value) const noexcept
124 {
125 constexpr auto word = index / 2;
126 auto copy = *this;
127 std::get<word> (copy.contents) = Utils::U16<index % 2>::set (copy.template getU32<word>(), value);
128 return copy;
129 }
130
131 template <size_t index>
132 Packet withU32 (uint32_t value) const noexcept
133 {
134 auto copy = *this;
135 std::get<index> (copy.contents) = value;
136 return copy;
137 }
138
139 template <size_t index>
141 {
142 return Utils::U4<index % 8>::get (this->template getU32<index / 8>());
143 }
144
145 template <size_t index>
147 {
148 return Utils::U8<index % 4>::get (this->template getU32<index / 4>());
149 }
150
151 template <size_t index>
153 {
154 return Utils::U16<index % 2>::get (this->template getU32<index / 2>());
155 }
156
157 template <size_t index>
159 {
160 return std::get<index> (contents);
161 }
162
163 //==============================================================================
164 using Contents = std::array<uint32_t, numWords>;
165
166 using const_iterator = typename Contents::const_iterator;
167
170
173
174 const uint32_t* data() const noexcept { return contents.data(); }
175
176 const uint32_t& front() const noexcept { return contents.front(); }
177 const uint32_t& back() const noexcept { return contents.back(); }
178
179 const uint32_t& operator[] (size_t index) const noexcept { return contents[index]; }
180
181private:
183};
184
189
190}
191}
192
193#endif
#define copy(x)
Definition ADnoteParameters.cpp:1011
#define noexcept
Definition DistrhoDefines.h:72
uint8_t a
Definition Spc_Cpu.h:141
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
Definition juce_UMPacket.h:37
const uint32_t & back() const noexcept
Definition juce_UMPacket.h:177
const uint32_t * data() const noexcept
Definition juce_UMPacket.h:174
Packet(uint32_t a, uint32_t b, uint32_t c, uint32_t d)
Definition juce_UMPacket.h:63
const_iterator end() const noexcept
Definition juce_UMPacket.h:171
uint8_t getU4() const noexcept
Definition juce_UMPacket.h:140
Packet(uint32_t a, uint32_t b, uint32_t c)
Definition juce_UMPacket.h:56
Packet withGroup(uint8_t group) const noexcept
Definition juce_UMPacket.h:81
Packet withU8(uint8_t value) const noexcept
Definition juce_UMPacket.h:114
Packet(uint32_t a)
Definition juce_UMPacket.h:42
Packet withU16(uint16_t value) const noexcept
Definition juce_UMPacket.h:123
Packet withStatus(uint8_t status) const noexcept
Definition juce_UMPacket.h:86
uint16_t getU16() const noexcept
Definition juce_UMPacket.h:152
Packet withU4(uint8_t value) const noexcept
Definition juce_UMPacket.h:105
uint8_t getStatus() const noexcept
Definition juce_UMPacket.h:100
uint8_t getGroup() const noexcept
Definition juce_UMPacket.h:98
Packet(const std::array< uint32_t, w > &fullPacket)
Definition juce_UMPacket.h:70
const_iterator begin() const noexcept
Definition juce_UMPacket.h:168
uint32_t getU32() const noexcept
Definition juce_UMPacket.h:158
typename Contents::const_iterator const_iterator
Definition juce_UMPacket.h:166
Contents contents
Definition juce_UMPacket.h:182
const_iterator cend() const noexcept
Definition juce_UMPacket.h:172
uint8_t getMessageType() const noexcept
Definition juce_UMPacket.h:96
uint8_t getU8() const noexcept
Definition juce_UMPacket.h:146
uint8_t getChannel() const noexcept
Definition juce_UMPacket.h:102
const_iterator cbegin() const noexcept
Definition juce_UMPacket.h:169
const uint32_t & front() const noexcept
Definition juce_UMPacket.h:176
Packet(uint32_t a, uint32_t b)
Definition juce_UMPacket.h:49
Packet withChannel(uint8_t channel) const noexcept
Definition juce_UMPacket.h:91
std::array< uint32_t, numWords > Contents
Definition juce_UMPacket.h:164
Packet withU32(uint32_t value) const noexcept
Definition juce_UMPacket.h:132
Packet withMessageType(uint8_t type) const noexcept
Definition juce_UMPacket.h:76
unsigned d
Definition inflate.c:940
static PuglViewHint int value
Definition pugl.h:1708
#define jassert(expression)
unsigned short uint16_t
Definition mid.cpp:99
unsigned int uint32_t
Definition mid.cpp:100
unsigned char uint8_t
Definition mid.cpp:98
Definition juce_UMP_test.cpp:26
Packet< 4 > PacketX4
Definition juce_UMPacket.h:188
Packet< 3 > PacketX3
Definition juce_UMPacket.h:187
Packet< 1 > PacketX1
Definition juce_UMPacket.h:185
Packet< 2 > PacketX2
Definition juce_UMPacket.h:186
Definition carla_juce.cpp:31
@ group
Definition juce_AccessibilityRole.h:61
short word
Definition private.h:22
static constexpr uint16_t get(uint32_t word)
Definition juce_UMPUtils.h:102
static constexpr uint32_t set(uint32_t word, uint16_t value)
Definition juce_UMPUtils.h:97
static constexpr uint32_t set(uint32_t word, uint8_t value)
Definition juce_UMPUtils.h:59
static constexpr uint8_t get(uint32_t word)
Definition juce_UMPUtils.h:64
static constexpr uint8_t get(uint32_t word)
Definition juce_UMPUtils.h:83
static constexpr uint32_t set(uint32_t word, uint8_t value)
Definition juce_UMPUtils.h:78
static uint32_t getNumWordsForMessageType(uint32_t)
Definition juce_UMPUtils.cpp:28
return c
Definition crypt.c:175
b
Definition crypt.c:628
#define const
Definition zconf.h:137