// // Copyright 2002 by Craig Stuart Sapp, All Rights Reserved. // Programmer: Craig Stuart Sapp // Creation Date: Sun Feb 10 19:42:45 PST 2002 // Last Modified: Tue Mar 24 18:40:22 PST 2009 // Last Modified: Fri Aug 24 08:33:10 PDT 2012 Renovation // Filename: ...sig/src/sigInfo/ScoreParameters.cpp // Web Address: http://sig.sapp.org/src/sigInfo/ScoreParameters.cpp // Syntax: C++ // // Description: Base parameter class for SCORE musical objects. This // data structure consists of an array of fixed doubleing-point // numbers which are the standard SCORE parameters for an object // as well as a list of "Extended" Score numberic parameters // which are accessed as a key/value pair. // #include "ScoreParameters.h" #include #include #ifndef OLDCPP using namespace std; #endif ////////////////////////////////////////////////////////////////////////// // // ScoreNamedParameter fuctions // ////////////////////////////// // // ScoreNamedParameter::ScoreNamedParameter -- constructor. // ScoreNamedParameter::ScoreNamedParameter(void) { name.setSize(0); value = 0.0; } ScoreNamedParameter::ScoreNamedParameter(ScoreNamedParameter& aKeyParam) { name = aKeyParam.name; value = aKeyParam.value; } ////////////////////////////// // // ScoreNamedParameter::~ScoreNamedParameter -- deconstructor. // ScoreNamedParameter::~ScoreNamedParameter() { clear(); } ////////////////////////////// // // ScoreNamedParameter::clear -- Remove the name and set the value to 0.0. // void ScoreNamedParameter::clear(void) { name.setSize(0); value = 0.0; } ////////////////////////////// // // ScoreNamedParameter::getName -- Get the key parameter's name, or "" if // no name. // const char* ScoreNamedParameter::getName(void) { if (name.getSize() > 0) { return name.getBase(); } else { return ""; } } ////////////////////////////// // // ScoreNamedParameter::getValue -- Get the key parameter's value. // double ScoreNamedParameter::getValue(void) { return value; } ////////////////////////////// // // ScoreNamedParameter::setNameAndValue -- Set the name and value of // the key parameter. // void ScoreNamedParameter::setNameAndValue(const char* string, double aValue) { int len = strlen(string); name.setSize(len+1); strcpy(name.getBase(), string); value = aValue; } ////////////////////////////// // // ScoreNamedParameter::setName -- set the name of the key parameter. // void ScoreNamedParameter::setName(const char* aName) { int len = strlen(aName); name.setSize(len+1); strcpy(name.getBase(), aName); } ////////////////////////////// // // ScoreNamedParameter::setValue -- Set the name of the key parameter. // void ScoreNamedParameter::setValue(double aValue) { value = aValue; } ////////////////////////////// // // ScoreNamedParameter::isValid -- Returns true if the length of name is // not zero. // int ScoreNamedParameter::isValid(void) { return name.getSize() == 0 ? 0 : 1; } ////////////////////////////// // // ScoreNamedParameter::isInvalid -- // int ScoreNamedParameter::isInvalid(void) { return name.getSize() == 0 ? 1 : 0; } ////////////////////////////// // // ScoreNamedParameter::isNamed -- // int ScoreNamedParameter::isNamed(const char* aName) { if (strcmp(aName, getName()) == 0) { return 1; } else { return 0; } } ////////////////////////////// // // ScoreNamedParameter::operator= -- // ScoreNamedParameter& ScoreNamedParameter::operator=(ScoreNamedParameter& aKeyParam) { if (&aKeyParam == this) { return *this; } name = aKeyParam.name; value = aKeyParam.value; return *this; } ////////////////////////////////////////////////////////////////////////// /////////////////////////////// // // ScoreParameters::ScoreParameters -- constructor // ScoreParameters::ScoreParameters(void) { fixedParameters.setSize(0); fixedParameters.setGrowth(32); keyParameters.setSize(0); keyParameters.setGrowth(32); text.setSize(0); textFont = 0; } ScoreParameters::ScoreParameters(ScoreParameters& item) { fixedParameters = item.fixedParameters; keyParameters = item.keyParameters; text = item.text; textFont = item.textFont; } /////////////////////////////// // // ScoreParameters::~ScoreParameters -- destructor // ScoreParameters::~ScoreParameters() { clear(); } /////////////////////////////// // // ScoreParameters::clear -- // void ScoreParameters::clear(void) { fixedParameters.setSize(0); text.setSize(0); clearKeyParameters(); } /////////////////////////////// // // ScoreParameters::getText -- Return the fixed text parameter value. // Only valid if P1=16; otherwise should return an empty string. // const char* ScoreParameters::getText(void) { if (text.getSize() > 0) { return text.getBase(); } else { return ""; } } const char* ScoreParameters::getTextData(void) { return getText(); } /////////////////////////////// // // ScoreParameters::setText -- Set the fixed text parameter value. // Only valid if P1=16; otherwise should be an empty string. // void ScoreParameters::setText(const char* aString) { int len = strlen(aString); text.setSize(len+1); strcpy(text.getBase(), aString); } void ScoreParameters::setTextData(const char* aString) { setText(aString); } /////////////////////////////// // // ScoreParameters::getValue -- Get a fixed parameter value starting offset // at 0 for parameter 1 (object type). Use the P1, P2, P3, P4 // enumerations as the index number. // double ScoreParameters::getValue(int index) { double output = 0.0; if (index < fixedParameters.getSize()) { output = fixedParameters[index]; } return output; } double ScoreParameters::getValue(const char* keyName) { for (int i=0; i= 0) { keyParameters[invalid].setNameAndValue(keyName, keyValue); return; } // There was no invalid slot, so add a new one to the end of the list keyParameters.increase(1); keyParameters.last().setNameAndValue(keyName, keyValue); } /////////////////////////////// // // ScoreParameters::setPValue -- Set a value for a fixed/named parameter, // with fixed paramter indices starting offset at 1. // void ScoreParameters::setPValue(int number, double value) { setValue(number-1, value); } void ScoreParameters::setPValue(const char* keyName, double keyValue) { setValue(keyName, keyValue); } /////////////////////////////// // // ScoreParameters::operator= -- // ScoreParameters& ScoreParameters::operator=(ScoreParameters& anItem) { if (&anItem == this) { return *this; } fixedParameters = anItem.fixedParameters; keyParameters = anItem.keyParameters; textFont = anItem.textFont; text = anItem.text; return *this; } ////////////////////////////// // // ScoreParameters::getFixedSize -- // int ScoreParameters::getFixedSize(void) { return fixedParameters.getSize(); } ////////////////////////////// // // ScoreParameters::setFixedSize -- // void ScoreParameters::setFixedSize(int aSize) { int oldsize = fixedParameters.getSize(); fixedParameters.setSize(aSize); if (aSize > oldsize) { for (int i=oldsize; i fixedParameters.getAllocSize()) { int oldsize = fixedParameters.getSize(); fixedParameters.setSize(aSize); fixedParameters.setSize(oldsize); } } ////////////////////////////// // // ScoreParameters::clearKeyParameters -- // void ScoreParameters::clearKeyParameters(void) { keyParameters.setSize(0); } ////////////////////////////// // // ScoreParameters::hasKey -- Return true if there is a key parameter // by that name. The return value is the index position of the key parameter // in the list, plus one. // int ScoreParameters::hasKey(const char* aName) { for (int i=0; i0; i--) { if (getValue(i) != 0.0) { break; } else { setFixedSize(i); } } } ////////////////////////////// // // ScoreParameters::hasExtraParameters -- Returns true if there are any // extra (analysis) parameters store in the keyParameters database. // int ScoreParameters::hasExtraParameters(void) { for (int i =0; i