From 81dd580c5713eb7bbf1b213e0d97e2a3b258e7ee Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Mon, 26 Mar 2018 21:06:35 -0400 Subject: [PATCH] Pass array and count separately to read/write/define enum --- include/audacity/EffectAutomationParameters.h | 21 ++++++++++++------- src/Shuttle.cpp | 17 ++++++++------- src/Shuttle.h | 20 +++++++++++------- src/commands/DragCommand.cpp | 3 +-- src/commands/GetInfoCommand.cpp | 6 ++---- src/commands/GetTrackInfoCommand.cpp | 3 +-- src/commands/ScreenshotCommand.cpp | 6 ++---- src/commands/SelectCommand.cpp | 6 ++---- src/commands/SetClipCommand.cpp | 3 +-- src/commands/SetTrackInfoCommand.cpp | 13 ++++-------- src/effects/Distortion.cpp | 6 +++--- src/effects/Effect.h | 8 +++---- src/effects/Equalization.cpp | 7 +++---- src/effects/Noise.cpp | 7 +++---- src/effects/ScienFilter.cpp | 14 ++++++------- src/effects/ToneGen.cpp | 10 ++++----- src/effects/TruncSilence.cpp | 15 ++++++------- src/effects/nyquist/Nyquist.cpp | 16 +++++++------- src/effects/vamp/VampEffect.cpp | 12 +++++------ 19 files changed, 91 insertions(+), 102 deletions(-) diff --git a/include/audacity/EffectAutomationParameters.h b/include/audacity/EffectAutomationParameters.h index cca81ae4d..90e05332c 100644 --- a/include/audacity/EffectAutomationParameters.h +++ b/include/audacity/EffectAutomationParameters.h @@ -161,7 +161,8 @@ public: // list of non-obsolete names. using ObsoleteMap = std::pair< wxString, size_t >; - bool ReadEnum(const wxString & key, int *pi, const wxArrayString & choices, + bool ReadEnum(const wxString & key, int *pi, + const wxString choices[], size_t nChoices, const ObsoleteMap obsoletes[] = nullptr, size_t nObsoletes = 0) const { @@ -170,7 +171,10 @@ public: { return false; } - *pi = choices.Index(s); + *pi = std::find( choices, choices + nChoices, + s ) - choices; + if (*pi == nChoices) + *pi = -1; if (*pi < 0 && obsoletes) { auto index = std::find_if(obsoletes, obsoletes + nObsoletes, [&](const ObsoleteMap &entry){ @@ -183,20 +187,21 @@ public: } bool ReadEnum(const wxString & key, int *pi, int defVal, - const wxArrayString & choices, + const wxString choices[], size_t nChoices, const ObsoleteMap obsoletes[] = nullptr, size_t nObsoletes = 0) const { - if (!ReadEnum(key, pi, choices, obsoletes, nObsoletes)) + if (!ReadEnum(key, pi, choices, nChoices, obsoletes, nObsoletes)) { *pi = defVal; } return true; } - bool WriteEnum(const wxString & key, int value, const wxArrayString & choices) + bool WriteEnum(const wxString & key, int value, + const wxString choices[], size_t nChoices) { - if (value < 0 || value >= (int) choices.GetCount()) + if (value < 0 || value >= nChoices) { return false; } @@ -241,11 +246,11 @@ public: } bool ReadAndVerify(const wxString & key, int *val, int defVal, - const wxArrayString & choices, + const wxString choices[], size_t nChoices, const ObsoleteMap obsoletes[] = nullptr, size_t nObsoletes = 0) const { - ReadEnum(key, val, defVal, choices, obsoletes, nObsoletes); + ReadEnum(key, val, defVal, choices, nChoices, obsoletes, nObsoletes); return (*val != wxNOT_FOUND); } diff --git a/src/Shuttle.cpp b/src/Shuttle.cpp index b2b4c0c27..d111c1337 100644 --- a/src/Shuttle.cpp +++ b/src/Shuttle.cpp @@ -343,12 +343,12 @@ void ShuttleParams::Define( float & var, const wxChar * key, const float vdef void ShuttleParams::Define( double & var, const wxChar * key, const float vdefault, const float vmin, const float vmax, const float vscl ){;}; void ShuttleParams::Define( double & var, const wxChar * key, const double vdefault, const double vmin, const double vmax, const double vscl ){;}; void ShuttleParams::Define( wxString &var, const wxChar * key, const wxString vdefault, const wxString vmin, const wxString vmax, const wxString vscl ){;}; -void ShuttleParams::DefineEnum( int &var, const wxChar * key, const int vdefault, wxArrayString strings ){;}; +void ShuttleParams::DefineEnum( int &var, const wxChar * key, const int vdefault, const wxString strings[], size_t nStrings ){;}; /* -void ShuttleParams::DefineEnum( int &var, const wxChar * key, const int vdefault, wxArrayString strings ) +void ShuttleParams::DefineEnum( int &var, const wxChar * key, const int vdefault, const IdentInterfaceSymbol strings[], size_t nStrings ) { } */ @@ -402,7 +402,8 @@ void ShuttleGetAutomation::Define( wxString &var, const wxChar * key, const wxSt mpEap->Write(key, var); } -void ShuttleGetAutomation::DefineEnum( int &var, const wxChar * key, const int vdefault, wxArrayString strings ) + +void ShuttleGetAutomation::DefineEnum( int &var, const wxChar * key, const int vdefault, const wxString strings[], size_t nStrings ) { if( !ShouldSet() ) return; mpEap->Write(key, strings[var]); @@ -512,13 +513,13 @@ void ShuttleSetAutomation::Define( wxString &var, const wxChar * key, const wxSt } -void ShuttleSetAutomation::DefineEnum( int &var, const wxChar * key, const int vdefault, wxArrayString strings ) +void ShuttleSetAutomation::DefineEnum( int &var, const wxChar * key, const int vdefault, const wxString strings[], size_t nStrings ) { CouldGet( key ); if( !bOK ) return; int temp = var; - bOK = mpEap->ReadAndVerify(key, &temp, vdefault, strings); + bOK = mpEap->ReadAndVerify(key, &temp, vdefault, strings, nStrings); if( bWrite && bOK) var = temp; } @@ -627,7 +628,9 @@ void ShuttleGetDefinition::Define( wxString &var, const wxChar * key, const wxSt } -void ShuttleGetDefinition::DefineEnum( int&var, const wxChar * key, const int vdefault, wxArrayString strings ) +void ShuttleGetDefinition::DefineEnum( int &var, + const wxChar * key, const int vdefault, + const wxString strings[], size_t nStrings ) { StartStruct(); AddItem( wxString(key), "key" ); @@ -638,7 +641,7 @@ void ShuttleGetDefinition::DefineEnum( int&var, const wxChar * key, const int vd AddItem( strings[vdefault], "default" ); StartField( "enum" ); StartArray(); - for( size_t i=0;iGetRate() : 44100.0) / 2.0; @@ -303,8 +301,8 @@ bool EffectToneGen::GetAutomationParameters(CommandParameters & parms) bool EffectToneGen::SetAutomationParameters(CommandParameters & parms) { - ReadAndVerifyEnum(Waveform, wxArrayString(nWaveforms, kWaveStrings)); - ReadAndVerifyEnum(Interp, wxArrayString(nInterpolations, kInterStrings)); + ReadAndVerifyEnum(Waveform, kWaveStrings, nWaveforms); + ReadAndVerifyEnum(Interp, kInterStrings, nInterpolations); if (mChirp) { ReadAndVerifyDouble(StartFreq); diff --git a/src/effects/TruncSilence.cpp b/src/effects/TruncSilence.cpp index 57aa31520..1e9d46b85 100644 --- a/src/effects/TruncSilence.cpp +++ b/src/effects/TruncSilence.cpp @@ -77,7 +77,7 @@ enum kActions nActions }; -static const wxChar *kActionStrings[nActions] = +static const wxString kActionStrings[nActions] = { XO("Truncate Detected Silence"), XO("Compress Excess Silence") @@ -176,10 +176,9 @@ EffectType EffectTruncSilence::GetType() // EffectClientInterface implementation bool EffectTruncSilence::DefineParams( ShuttleParams & S ){ - wxArrayString actions(nActions, kActionStrings); - - S.SHUTTLE_ENUM_PARAM( mTruncDbChoiceIndex, DbIndex, mDbChoices ); - S.SHUTTLE_ENUM_PARAM( mActionIndex, ActIndex, actions ); + S.SHUTTLE_ENUM_PARAM( mTruncDbChoiceIndex, DbIndex, + Enums::DbChoices, Enums::NumDbChoices ); + S.SHUTTLE_ENUM_PARAM( mActionIndex, ActIndex, kActionStrings, nActions ); S.SHUTTLE_PARAM( mInitialAllowedSilence, Minimum ); S.SHUTTLE_PARAM( mTruncLongestAllowedSilence, Truncate ); S.SHUTTLE_PARAM( mSilenceCompressPercent, Compress ); @@ -201,13 +200,11 @@ bool EffectTruncSilence::GetAutomationParameters(CommandParameters & parms) bool EffectTruncSilence::SetAutomationParameters(CommandParameters & parms) { - wxArrayString actions(nActions, kActionStrings); - ReadAndVerifyDouble(Minimum); ReadAndVerifyDouble(Truncate); ReadAndVerifyDouble(Compress); - ReadAndVerifyEnum(DbIndex, mDbChoices); - ReadAndVerifyEnumWithObsoletes(ActIndex, actions, + ReadAndVerifyEnum(DbIndex, Enums::DbChoices, Enums::NumDbChoices); + ReadAndVerifyEnumWithObsoletes(ActIndex, kActionStrings, nActions, kObsoleteActions, nObsoleteActions); ReadAndVerifyBool(Independent); diff --git a/src/effects/nyquist/Nyquist.cpp b/src/effects/nyquist/Nyquist.cpp index 1717f8f2a..5a640040a 100644 --- a/src/effects/nyquist/Nyquist.cpp +++ b/src/effects/nyquist/Nyquist.cpp @@ -338,10 +338,10 @@ bool NyquistEffect::DefineParams( ShuttleParams & S ) else if (ctrl.type == NYQ_CTRL_CHOICE) { // untranslated - const wxArrayString &choices = ctrl.choices; int x=d; //parms.WriteEnum(ctrl.var, (int) d, choices); - S.DefineEnum( x, static_cast( ctrl.var.c_str() ), 0, choices ); + S.DefineEnum( x, static_cast( ctrl.var.c_str() ), 0, + &ctrl.choices[0], ctrl.choices.size() ); } else if (ctrl.type == NYQ_CTRL_STRING) { @@ -388,8 +388,8 @@ bool NyquistEffect::GetAutomationParameters(CommandParameters & parms) else if (ctrl.type == NYQ_CTRL_CHOICE) { // untranslated - const wxArrayString &choices = ctrl.choices; - parms.WriteEnum(ctrl.var, (int) d, choices); + parms.WriteEnum(ctrl.var, (int) d, + &ctrl.choices[0], ctrl.choices.size()); } else if (ctrl.type == NYQ_CTRL_STRING) { @@ -439,8 +439,8 @@ bool NyquistEffect::SetAutomationParameters(CommandParameters & parms) { int val; // untranslated - const wxArrayString &choices = ctrl.choices; - good = parms.ReadEnum(ctrl.var, &val, choices) && + good = parms.ReadEnum(ctrl.var, &val, + &ctrl.choices[0], ctrl.choices.size()) && val != wxNOT_FOUND; } else if (ctrl.type == NYQ_CTRL_STRING) @@ -480,8 +480,8 @@ bool NyquistEffect::SetAutomationParameters(CommandParameters & parms) { int val {0}; // untranslated - const wxArrayString &choices = ctrl.choices; - parms.ReadEnum(ctrl.var, &val, choices); + parms.ReadEnum(ctrl.var, &val, + &ctrl.choices[0], ctrl.choices.size()); ctrl.val = (double) val; } else if (ctrl.type == NYQ_CTRL_STRING) diff --git a/src/effects/vamp/VampEffect.cpp b/src/effects/vamp/VampEffect.cpp index 6239cb7af..6ed5d360d 100644 --- a/src/effects/vamp/VampEffect.cpp +++ b/src/effects/vamp/VampEffect.cpp @@ -190,10 +190,10 @@ bool VampEffect::GetAutomationParameters(CommandParameters & parms) { val = i; } - choices.Add(choice); + choices.push_back(choice); } - parms.WriteEnum(key, val, choices); + parms.WriteEnum(key, val, &choices[0], choices.size()); } else { @@ -233,10 +233,10 @@ bool VampEffect::SetAutomationParameters(CommandParameters & parms) for (size_t i = 0, cnt = mParameters[p].valueNames.size(); i < cnt; i++) { wxString choice = wxString::FromUTF8(mParameters[p].valueNames[i].c_str()); - choices.Add(choice); + choices.push_back(choice); } - good = parms.ReadEnum(key, &val, choices) && val != wxNOT_FOUND; + good = parms.ReadEnum(key, &val, &choices[0], choices.size()) && val != wxNOT_FOUND; } else { @@ -279,10 +279,10 @@ bool VampEffect::SetAutomationParameters(CommandParameters & parms) for (size_t i = 0, cnt = mParameters[p].valueNames.size(); i < cnt; i++) { wxString choice = wxString::FromUTF8(mParameters[p].valueNames[i].c_str()); - choices.Add(choice); + choices.push_back(choice); } - parms.ReadEnum(key, &val, choices); + parms.ReadEnum(key, &val, &choices[0], choices.size()); mPlugin->setParameter(mParameters[p].identifier, (float) val); }