|
- /*
- ==============================================================================
-
- This file is part of the JUCE library.
- Copyright (c) 2013 - Raw Material Software Ltd.
-
- Permission is granted to use this software under the terms of either:
- a) the GPL v2 (or any later version)
- b) the Affero GPL v3
-
- Details of these licenses can be found at: www.gnu.org/licenses
-
- JUCE 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 General Public License for more details.
-
- ------------------------------------------------------------------------------
-
- To release a closed-source product which uses JUCE, commercial licenses are
- available: visit www.juce.com for more information.
-
- ==============================================================================
- */
-
- #ifndef JUCE_OSCBUNDLE_H_INCLUDED
- #define JUCE_OSCBUNDLE_H_INCLUDED
-
- //==============================================================================
- /**
- An OSC bundle.
-
- An OSCBundle contains an OSCTimeTag and zero or more OSCBundle Elements.
- The elements of a bundle can be OSC messages or other OSC bundles (this
- means that OSC bundles can be nested).
-
- This is an advanced OSC structure useful to bundle OSC messages together
- whose effects must occur simultaneously at some given time. For most
- use cases it is probably enough to send and receive plain OSC messages.
- */
- class JUCE_API OSCBundle
- {
- public:
- //==============================================================================
- /** Constructs an OSCBundle with no content and a default time tag ("immediately"). */
- OSCBundle();
-
- /** Constructs an OSCBundle with no content and a given time tag. */
- OSCBundle (OSCTimeTag timeTag);
-
- //==============================================================================
- /** Sets the OSCBundle's OSC time tag. */
- void setTimeTag (OSCTimeTag newTimeTag) noexcept { timeTag = newTimeTag; }
-
- /** Returns the OSCBundle's OSC time tag. */
- OSCTimeTag getTimeTag() const noexcept { return timeTag; }
-
- //==============================================================================
- /**
- An OSC bundle element.
-
- An OSCBundle Element contains either one OSCMessage or one OSCBundle.
- */
- class Element
- {
- public:
- //==========================================================================
- /** Constructs an OSCBundle Element from an OSCMessage. */
- Element (OSCMessage message);
-
- /** Constructs an OSCBundle Element from an OSCBundle. */
- Element (OSCBundle bundle);
-
- /** Copy constructor. */
- Element (const Element& other);
-
- /** Destructor. */
- ~Element();
-
- /** Returns true if the OSCBundle element is an OSCMessage. */
- bool isMessage() const noexcept;
-
- /** Returns true if the OSCBundle element is an OSCBundle. */
- bool isBundle() const noexcept;
-
- /** Returns a reference to the contained OSCMessage.
- If the OSCBundle element is not an OSCMessage, behaviour is undefined.
- */
- const OSCMessage& getMessage() const;
-
- /** Returns a reference to the contained OSCBundle.
- If the OSCBundle element is not an OSCBundle, behaviour is undefined.
- */
- const OSCBundle& getBundle() const;
-
- private:
- //==========================================================================
- ScopedPointer<OSCMessage> message;
- ScopedPointer<OSCBundle> bundle;
- };
-
- //==============================================================================
- /** Returns the number of elements contained in the bundle. */
- int size() const noexcept { return elements.size(); }
-
- /** Returns true if the bundle contains no elements; false otherwise. */
- bool empty() const noexcept { return elements.empty(); }
-
- /** Returns a reference to the OSCBundle element at index i in this bundle.
- This method does not check the range and results in undefined behavour
- in case i < 0 or i >= size().
- */
- OSCBundle::Element& operator[] (const int i) const noexcept
- {
- return elements.getReference (i);
- }
-
- /** Adds an OSCBundleElement to the OSCBundle's content. s*/
- void addElement (const OSCBundle::Element& element) { elements.add (element); }
-
- /** Returns a pointer to the first element of the OSCBundle. */
- OSCBundle::Element* begin() const noexcept { return elements.begin(); }
-
- /** Returns a pointer past the last element of the OSCBundle. */
- OSCBundle::Element* end() const noexcept { return elements.end(); }
-
- private:
- //==============================================================================
- Array<OSCBundle::Element> elements;
- OSCTimeTag timeTag;
- };
-
-
- #endif // JUCE_OSCBUNDLE_H_INCLUDED
|