get rid of unnecessary copies for StringArray

This commit is contained in:
Marty Kraimer
2012-10-29 13:32:34 -04:00
parent 51abc5032c
commit 1d3c4d1762
8 changed files with 3684 additions and 37 deletions
+23 -21
View File
@@ -32,19 +32,20 @@ AlarmSeverity AlarmSeverityFunc::getSeverity(int value)
throw std::logic_error(String("should never get here"));
}
StringArray AlarmSeverityFunc::getSeverityNames()
StringArrayPtr AlarmSeverityFunc::getSeverityNames()
{
static size_t severityCount = 5;
static StringArray severityNames;
static StringArrayPtr severityNames;
static Mutex mutex;
Lock xx(mutex);
if(severityNames.size()==0) {
severityNames.reserve(severityCount);
severityNames.push_back("NONE");
severityNames.push_back("MINOR");
severityNames.push_back("MAJOR");
severityNames.push_back("INVALID");
severityNames.push_back("UNDEFINED");
if(severityNames.get()==NULL) {
severityNames = StringArrayPtr(new StringArray());
severityNames->reserve(severityCount);
severityNames->push_back("NONE");
severityNames->push_back("MINOR");
severityNames->push_back("MAJOR");
severityNames->push_back("INVALID");
severityNames->push_back("UNDEFINED");
}
return severityNames;
}
@@ -79,22 +80,23 @@ AlarmStatus AlarmStatusFunc::getStatus(int value)
throw std::logic_error(String("should never get here"));
}
StringArray AlarmStatusFunc::getStatusNames()
StringArrayPtr AlarmStatusFunc::getStatusNames()
{
static size_t statusCount = 8;
static StringArray statusNames;
static StringArrayPtr statusNames;
static Mutex mutex;
Lock xx(mutex);
if(statusNames.size()==0) {
statusNames.reserve(statusCount);
statusNames.push_back("NONE");
statusNames.push_back("DEVICE");
statusNames.push_back("DRIVER");
statusNames.push_back("RECORD");
statusNames.push_back("DB");
statusNames.push_back("CONF");
statusNames.push_back("UNDEFINED");
statusNames.push_back("CLIENT");
if(statusNames.get()==NULL) {
statusNames = StringArrayPtr(new StringArray());
statusNames->reserve(statusCount);
statusNames->push_back("NONE");
statusNames->push_back("DEVICE");
statusNames->push_back("DRIVER");
statusNames->push_back("RECORD");
statusNames->push_back("DB");
statusNames->push_back("CONF");
statusNames->push_back("UNDEFINED");
statusNames->push_back("CLIENT");
}
return statusNames;
}