diff options
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r-- | libs/ardour/ardour/audio_buffer.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/automation_control.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/buffer_set.h | 4 | ||||
-rw-r--r-- | libs/ardour/ardour/chan_count.h | 43 | ||||
-rw-r--r-- | libs/ardour/ardour/data_type.h | 45 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_buffer.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_model.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/port_set.h | 2 |
8 files changed, 55 insertions, 47 deletions
diff --git a/libs/ardour/ardour/audio_buffer.h b/libs/ardour/ardour/audio_buffer.h index 7caea82287..b2c62466bf 100644 --- a/libs/ardour/ardour/audio_buffer.h +++ b/libs/ardour/ardour/audio_buffer.h @@ -48,7 +48,7 @@ public: void read_from(const Buffer& src, nframes_t len, nframes_t offset) { assert(_capacity > 0); - assert(src.type() == _type == DataType::AUDIO); + assert(src.type() == DataType::AUDIO); assert(offset + len <= _capacity); memcpy(_data + offset, ((AudioBuffer&)src).data(), sizeof(Sample) * len); _silent = src.silent(); diff --git a/libs/ardour/ardour/automation_control.h b/libs/ardour/ardour/automation_control.h index d9e7a232af..5810ced9f9 100644 --- a/libs/ardour/ardour/automation_control.h +++ b/libs/ardour/ardour/automation_control.h @@ -1,6 +1,6 @@ /* Copyright (C) 2007 Paul Davis - Author: Dave Robillard + Author: Dave Robillard This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/libs/ardour/ardour/buffer_set.h b/libs/ardour/ardour/buffer_set.h index 2e0f604ace..c750615798 100644 --- a/libs/ardour/ardour/buffer_set.h +++ b/libs/ardour/ardour/buffer_set.h @@ -71,7 +71,7 @@ public: Buffer& get(DataType type, size_t i) { assert(i <= _count.get(type)); - return *_buffers[type.to_index()][i]; + return *_buffers[type][i]; } AudioBuffer& get_audio(size_t i) @@ -140,7 +140,7 @@ public: private: typedef std::vector<Buffer*> BufferVec; - /// Vector of vectors, indexed by DataType::to_index() + /// Vector of vectors, indexed by DataType std::vector<BufferVec> _buffers; /// Use counts (there may be more actual buffers than this) diff --git a/libs/ardour/ardour/chan_count.h b/libs/ardour/ardour/chan_count.h index 1ed50f7abb..986ef76e25 100644 --- a/libs/ardour/ardour/chan_count.h +++ b/libs/ardour/ardour/chan_count.h @@ -1,5 +1,6 @@ /* Copyright (C) 2006 Paul Davis + Author: Dave Robillard This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -14,24 +15,28 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - $Id: insert.cc 712 2006-07-28 01:08:57Z drobilla $ */ #ifndef __ardour_chan_count_h__ #define __ardour_chan_count_h__ #include <ardour/data_type.h> +#include <cassert> namespace ARDOUR { +/** A count of channels, possibly with many types. + * + * Operators are defined so this may safely be used as if it were a simple + * (single-typed) integer count of channels. + */ class ChanCount { public: ChanCount() { reset(); } // Convenience constructor for making single-typed streams (stereo, mono, etc) - ChanCount(DataType type, size_t channels) + ChanCount(DataType type, uint32_t channels) { reset(); set(type, channels); @@ -40,31 +45,31 @@ public: void reset() { for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) { - _counts[(*t).to_index()] = 0; + _counts[*t] = 0; } } - // -1 is what to_index does. inlined for speed. this should maybe be changed.. - inline size_t n_audio() const { return _counts[DataType::AUDIO-1]; } - inline size_t n_midi() const { return _counts[DataType::MIDI-1]; } - inline void set_audio(size_t a) { _counts[DataType::AUDIO-1] = a; } - inline void set_midi(size_t m) { _counts[DataType::MIDI-1] = m; } + void set(DataType t, uint32_t count) { assert(t != DataType::NIL); _counts[t] = count; } + uint32_t get(DataType t) const { assert(t != DataType::NIL); return _counts[t]; } + + inline uint32_t n_audio() const { return _counts[DataType::AUDIO]; } + inline void set_audio(uint32_t a) { _counts[DataType::AUDIO] = a; } - size_t n_total() const + inline uint32_t n_midi() const { return _counts[DataType::MIDI]; } + inline void set_midi(uint32_t m) { _counts[DataType::MIDI] = m; } + + uint32_t n_total() const { - size_t ret = 0; - for (size_t i=0; i < DataType::num_types; ++i) + uint32_t ret = 0; + for (uint32_t i=0; i < DataType::num_types; ++i) ret += _counts[i]; return ret; } - void set(DataType type, size_t count) { _counts[type.to_index()] = count; } - size_t get(DataType type) const { return _counts[type.to_index()]; } - bool operator==(const ChanCount& other) const { - for (size_t i=0; i < DataType::num_types; ++i) + for (uint32_t i=0; i < DataType::num_types; ++i) if (_counts[i] != other._counts[i]) return false; @@ -79,7 +84,7 @@ public: bool operator<(const ChanCount& other) const { for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) { - if (_counts[(*t).to_index()] > other._counts[(*t).to_index()]) { + if (_counts[*t] > other._counts[*t]) { return false; } } @@ -94,7 +99,7 @@ public: bool operator>(const ChanCount& other) const { for (DataType::iterator t = DataType::begin(); t != DataType::end(); ++t) { - if (_counts[(*t).to_index()] < other._counts[(*t).to_index()]) { + if (_counts[*t] < other._counts[*t]) { return false; } } @@ -111,7 +116,7 @@ public: private: - size_t _counts[DataType::num_types]; + uint32_t _counts[DataType::num_types]; }; diff --git a/libs/ardour/ardour/data_type.h b/libs/ardour/ardour/data_type.h index 3818a8d74f..68d9554904 100644 --- a/libs/ardour/ardour/data_type.h +++ b/libs/ardour/ardour/data_type.h @@ -1,5 +1,6 @@ /* Copyright (C) 2006 Paul Davis + Author: Dave Robillard This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -35,17 +36,25 @@ namespace ARDOUR { class DataType { public: - /// WARNING: make REALLY sure you don't mess up indexes if you change this + /** Numeric symbol for this DataType. + * + * Castable to int for use as an array index (e.g. by ChanCount). + * Note this means NIL is (ntypes-1) and guaranteed to change when + * types are added, so this number is NOT suitable for serialization, + * network, or binary anything. + * + * WARNING: The number of non-NIL entries here must match num_types. + */ enum Symbol { - NIL = 0, - AUDIO, - MIDI + AUDIO = 0, + MIDI = 1, + NIL = 2, }; /** Number of types (not including NIL). * WARNING: make sure this matches Symbol! */ - static const size_t num_types = 2; + static const uint32_t num_types = 2; DataType(const Symbol& symbol) : _symbol(symbol) @@ -54,17 +63,12 @@ public: /** Construct from a string (Used for loading from XML and Ports) * The string can be as in an XML file (eg "audio" or "midi"), or a * Jack type string (from jack_port_type) */ - DataType(const std::string& str) { - if (str == "audio") - _symbol = AUDIO; - else if (str == JACK_DEFAULT_AUDIO_TYPE) + DataType(const std::string& str) + : _symbol(NIL) { + if (str == "audio" || str == JACK_DEFAULT_AUDIO_TYPE) _symbol = AUDIO; - else if (str == "midi") - _symbol = MIDI; - else if (str == JACK_DEFAULT_MIDI_TYPE) + else if (str == "midi" || str == JACK_DEFAULT_MIDI_TYPE) _symbol = MIDI; - else - _symbol = NIL; } /** Get the Jack type this DataType corresponds to */ @@ -85,8 +89,7 @@ public: } } - //Symbol to_symbol() const { return _symbol; } - inline size_t to_index() const { return (size_t)_symbol - 1; } + inline operator uint32_t() const { return (uint32_t)_symbol; } /** DataType iterator, for writing generic loops that iterate over all * available types. @@ -94,7 +97,7 @@ public: class iterator { public: - iterator(size_t index) : _index(index) {} + iterator(uint32_t index) : _index(index) {} DataType operator*() { return DataType((Symbol)_index); } iterator& operator++() { ++_index; return *this; } // yes, prefix only @@ -104,11 +107,11 @@ public: private: friend class DataType; - size_t _index; + uint32_t _index; }; - static iterator begin() { return iterator(1); } - static iterator end() { return iterator(num_types+1); } + static iterator begin() { return iterator(0); } + static iterator end() { return iterator(num_types); } bool operator==(const Symbol symbol) { return (_symbol == symbol); } bool operator!=(const Symbol symbol) { return (_symbol != symbol); } @@ -117,7 +120,7 @@ public: bool operator!=(const DataType other) { return (_symbol != other._symbol); } private: - Symbol _symbol; + Symbol _symbol; // could be const if not for the string constructor }; diff --git a/libs/ardour/ardour/midi_buffer.h b/libs/ardour/ardour/midi_buffer.h index 7e69cc9014..ecb48d9da9 100644 --- a/libs/ardour/ardour/midi_buffer.h +++ b/libs/ardour/ardour/midi_buffer.h @@ -1,6 +1,6 @@ /* Copyright (C) 2006 Paul Davis - Author: Dave Robillard + Author: Dave Robillard This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free diff --git a/libs/ardour/ardour/midi_model.h b/libs/ardour/ardour/midi_model.h index d9eb8447d2..909603a017 100644 --- a/libs/ardour/ardour/midi_model.h +++ b/libs/ardour/ardour/midi_model.h @@ -1,6 +1,6 @@ /* Copyright (C) 2006 Paul Davis - Author: Dave Robillard + Author: Dave Robillard This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/libs/ardour/ardour/port_set.h b/libs/ardour/ardour/port_set.h index 947730a5b9..51673472c3 100644 --- a/libs/ardour/ardour/port_set.h +++ b/libs/ardour/ardour/port_set.h @@ -39,7 +39,7 @@ public: PortSet(); size_t num_ports() const; - size_t num_ports(DataType type) const { return _ports[type.to_index()].size(); } + size_t num_ports(DataType type) const { return _ports[type].size(); } void add(Port* port); bool remove(Port* port); |