Browse Source

Add more documentation to Port.

tags/v1.0.0
Andrew Belt 5 years ago
parent
commit
b4bd09a2eb
1 changed files with 11 additions and 4 deletions
  1. +11
    -4
      include/engine/Port.hpp

+ 11
- 4
include/engine/Port.hpp View File

@@ -7,6 +7,7 @@ namespace rack {
namespace engine { namespace engine {




/** This is inspired by the number of MIDI channels. */
static const int PORT_MAX_CHANNELS = 16; static const int PORT_MAX_CHANNELS = 16;




@@ -32,6 +33,7 @@ struct alignas(32) Port {
*/ */
Light plugLights[3]; Light plugLights[3];


/** Sets the voltage of the given channel. */
void setVoltage(float voltage, int channel = 0) { void setVoltage(float voltage, int channel = 0) {
voltages[channel] = voltage; voltages[channel] = voltage;
} }
@@ -45,7 +47,7 @@ struct alignas(32) Port {


/** Returns the given channel's voltage if the port is polyphonic, otherwise returns the first voltage (channel 0). */ /** 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) {
return (channels == 1) ? getVoltage(0) : getVoltage(channel);
return isMonophonic() ? getVoltage(0) : getVoltage(channel);
} }


/** Returns the voltage if a cable is connected, otherwise returns the given normal voltage. */ /** Returns the voltage if a cable is connected, otherwise returns the given normal voltage. */
@@ -59,7 +61,6 @@ struct alignas(32) Port {


/** Returns a pointer to the array of voltages beginning with firstChannel. /** Returns a pointer to the array of voltages beginning with firstChannel.
The pointer can be used for reading and writing. The pointer can be used for reading and writing.
Useful for SIMD.
*/ */
float *getVoltages(int firstChannel = 0) { float *getVoltages(int firstChannel = 0) {
return &voltages[firstChannel]; return &voltages[firstChannel];
@@ -81,6 +82,7 @@ struct alignas(32) Port {
} }
} }


/** Sets all voltages to 0. */
void clearVoltages() { void clearVoltages() {
for (int c = 0; c < channels; c++) { for (int c = 0; c < channels; c++) {
voltages[c] = 0.f; voltages[c] = 0.f;
@@ -103,7 +105,7 @@ struct alignas(32) Port {


template <typename T> template <typename T>
T getPolyVoltageSimd(int firstChannel) { T getPolyVoltageSimd(int firstChannel) {
return (channels == 1) ? getVoltage(0) : getVoltageSimd<T>(firstChannel);
return isMonophonic() ? getVoltage(0) : getVoltageSimd<T>(firstChannel);
} }


template <typename T> template <typename T>
@@ -142,21 +144,26 @@ struct alignas(32) Port {
this->channels = channels; this->channels = channels;
} }


/** Returns the number of channels.
If the port is disconnected, it has 0 channels.
*/
int getChannels() { int getChannels() {
return channels; return channels;
} }


/** Returns if a cable is connected to the Port.
/** Returns whether a cable is connected to the Port.
You can use this for skipping code that generates output voltages. You can use this for skipping code that generates output voltages.
*/ */
bool isConnected() { bool isConnected() {
return channels > 0; return channels > 0;
} }


/** Returns whether the cable exists and has 1 channel. */
bool isMonophonic() { bool isMonophonic() {
return channels == 1; return channels == 1;
} }


/** Returns whether the cable exists and has more than 1 channel. */
bool isPolyphonic() { bool isPolyphonic() {
return channels > 1; return channels > 1;
} }


Loading…
Cancel
Save