Browse Source

Add decorators to Port functions

Signed-off-by: falkTX <falktx@falktx.com>
tags/23.07
falkTX 1 year ago
parent
commit
d44eed4e88
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
1 changed files with 20 additions and 20 deletions
  1. +20
    -20
      include/engine/Port.hpp

+ 20
- 20
include/engine/Port.hpp View File

@@ -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);
}
};


Loading…
Cancel
Save