| @@ -78,40 +78,40 @@ struct Port { | |||
| }; | |||
| /** Sets the voltage of the given channel. */ | |||
| void setVoltage(float voltage, int channel = 0) { | |||
| void setVoltage(float voltage, int channel = 0) noexcept { | |||
| voltages[channel] = voltage; | |||
| } | |||
| /** Returns the voltage of the given channel. | |||
| Because of proper bookkeeping, all channels higher than the input port's number of channels should be 0V. | |||
| */ | |||
| float getVoltage(int channel = 0) { | |||
| float getVoltage(int channel = 0) const noexcept { | |||
| return voltages[channel]; | |||
| } | |||
| /** Returns the given channel's voltage if the port is polyphonic, otherwise returns the first voltage (channel 0). */ | |||
| float getPolyVoltage(int channel) { | |||
| float getPolyVoltage(int channel) const noexcept { | |||
| return isMonophonic() ? getVoltage(0) : getVoltage(channel); | |||
| } | |||
| /** Returns the voltage if a cable is connected, otherwise returns the given normal voltage. */ | |||
| float getNormalVoltage(float normalVoltage, int channel = 0) { | |||
| float getNormalVoltage(float normalVoltage, int channel = 0) const noexcept { | |||
| return isConnected() ? getVoltage(channel) : normalVoltage; | |||
| } | |||
| float getNormalPolyVoltage(float normalVoltage, int channel) { | |||
| float getNormalPolyVoltage(float normalVoltage, int channel) const noexcept { | |||
| return isConnected() ? getPolyVoltage(channel) : normalVoltage; | |||
| } | |||
| /** Returns a pointer to the array of voltages beginning with firstChannel. | |||
| The pointer can be used for reading and writing. | |||
| */ | |||
| float* getVoltages(int firstChannel = 0) { | |||
| float* getVoltages(int firstChannel = 0) noexcept { | |||
| return &voltages[firstChannel]; | |||
| } | |||
| /** Copies the port's voltages to an array of size at least `channels`. */ | |||
| void readVoltages(float* v) { | |||
| void readVoltages(float* v) const noexcept { | |||
| for (int c = 0; c < channels; c++) { | |||
| v[c] = voltages[c]; | |||
| } | |||
| @@ -127,14 +127,14 @@ struct Port { | |||
| } | |||
| /** Sets all voltages to 0. */ | |||
| void clearVoltages() { | |||
| void clearVoltages() noexcept { | |||
| for (int c = 0; c < channels; c++) { | |||
| voltages[c] = 0.f; | |||
| } | |||
| } | |||
| /** Returns the sum of all voltages. */ | |||
| float getVoltageSum() { | |||
| float getVoltageSum() const noexcept { | |||
| float sum = 0.f; | |||
| for (int c = 0; c < channels; c++) { | |||
| sum += voltages[c]; | |||
| @@ -145,7 +145,7 @@ struct Port { | |||
| /** Returns the root-mean-square of all voltages. | |||
| Uses sqrt() which is slow, so use a custom approximation if calling frequently. | |||
| */ | |||
| float getVoltageRMS() { | |||
| float getVoltageRMS() const { | |||
| if (channels == 0) { | |||
| return 0.f; | |||
| } | |||
| @@ -162,22 +162,22 @@ struct Port { | |||
| } | |||
| template <typename T> | |||
| T getVoltageSimd(int firstChannel) { | |||
| T getVoltageSimd(int firstChannel) const noexcept { | |||
| return T::load(&voltages[firstChannel]); | |||
| } | |||
| template <typename T> | |||
| T getPolyVoltageSimd(int firstChannel) { | |||
| T getPolyVoltageSimd(int firstChannel) const noexcept { | |||
| return isMonophonic() ? getVoltage(0) : getVoltageSimd<T>(firstChannel); | |||
| } | |||
| template <typename T> | |||
| T getNormalVoltageSimd(T normalVoltage, int firstChannel) { | |||
| T getNormalVoltageSimd(T normalVoltage, int firstChannel) const noexcept { | |||
| return isConnected() ? getVoltageSimd<T>(firstChannel) : normalVoltage; | |||
| } | |||
| template <typename T> | |||
| T getNormalPolyVoltageSimd(T normalVoltage, int firstChannel) { | |||
| T getNormalPolyVoltageSimd(T normalVoltage, int firstChannel) const noexcept { | |||
| return isConnected() ? getPolyVoltageSimd<T>(firstChannel) : normalVoltage; | |||
| } | |||
| @@ -191,7 +191,7 @@ struct Port { | |||
| If disconnected, this does nothing (`channels` remains 0). | |||
| If 0 is given, `channels` is set to 1 but all voltages are cleared. | |||
| */ | |||
| void setChannels(int channels) { | |||
| void setChannels(int channels) noexcept { | |||
| // If disconnected, keep the number of channels at 0. | |||
| if (this->channels == 0) { | |||
| return; | |||
| @@ -212,29 +212,29 @@ struct Port { | |||
| /** Returns the number of channels. | |||
| If the port is disconnected, it has 0 channels. | |||
| */ | |||
| int getChannels() { | |||
| int getChannels() const noexcept { | |||
| return channels; | |||
| } | |||
| /** Returns whether a cable is connected to the Port. | |||
| You can use this for skipping code that generates output voltages. | |||
| */ | |||
| bool isConnected() { | |||
| bool isConnected() const noexcept { | |||
| return channels > 0; | |||
| } | |||
| /** Returns whether the cable exists and has 1 channel. */ | |||
| bool isMonophonic() { | |||
| bool isMonophonic() const noexcept { | |||
| return channels == 1; | |||
| } | |||
| /** Returns whether the cable exists and has more than 1 channel. */ | |||
| bool isPolyphonic() { | |||
| bool isPolyphonic() const noexcept { | |||
| return channels > 1; | |||
| } | |||
| /** Use getNormalVoltage() instead. */ | |||
| DEPRECATED float normalize(float normalVoltage) { | |||
| DEPRECATED float normalize(float normalVoltage) const noexcept { | |||
| return getNormalVoltage(normalVoltage); | |||
| } | |||
| }; | |||