blob: 119cfd79b6e311e06d68b33e3173b99e5b24c012 [file] [log] [blame]
/*
-------------------------------------------------------------------------------
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
-------------------------------------------------------------------------------
*/
#include "uima/timedatetools.hpp"
#include "uima/strtools.hpp"
#include "uima/strconvert.hpp"
#include "uima/text.h"
using namespace std;
namespace uima {
const size_t cuiSecDigits_After_Period = 3;
const size_t cuiPctDigits_After_Period = 1;
string Timer::getDescription(size_t padWidth) const {
if (iv_strDecscription.length() == 0) {
return "";
}
return (strpad_r_copy(iv_strDecscription, padWidth, ' ') + ": "); //lint !e1024: No function has same argument count as 'strpad_r_copy(const std::basic_string<char,std::char_traits<char>,std::allocator<char>>, unsigned int, char)', 2 candidates found
}
string Timer::timeString(double dTime) {
string s;
if (dTime <= FLT_MIN) {
s = "0";
} else {
double2String(dTime, cuiSecDigits_After_Period, s);
}
return strpad_l_copy(s, (size_t)6, ' ') + " seconds";
}
string Timer::timeString() const {
return getDescription() + timeString(getAccumulatedTime());
}
string
Timer::timeAndPercentString(double dRelativeToSeconds) const {
string strAccumulatedTime("0");
double dRelativeTime = 0.0;
if (getAccumulatedTime() > FLT_MIN) {
double2String(getAccumulatedTime(), cuiSecDigits_After_Period, strAccumulatedTime);
dRelativeTime = (getAccumulatedTime() / dRelativeToSeconds);
}
string strRelativePct;
double2String(100.0 * dRelativeTime, cuiPctDigits_After_Period , strRelativePct);
return (getDescription() +
strpad_l_copy(strAccumulatedTime, (size_t)6) +
_TEXT(" seconds (") +
strpad_l_copy(strRelativePct, (size_t)cuiPctDigits_After_Period+3) +
_TEXT("%)"));
}
string
Timer::timeAndPercentAndThroughputString(
double dRelativeToSeconds,
size_t uiRelativeToItems,
const string & strItemsname
) const {
string s;
string s2;
return getDescription() +
strpad_l_copy(double2String(getAccumulatedTime(), cuiSecDigits_After_Period, s), (size_t)6) +
_TEXT(" seconds (") +
strpad_l_copy(double2String(100.0 * (getAccumulatedTime() / dRelativeToSeconds), cuiPctDigits_After_Period , s), (size_t)cuiPctDigits_After_Period+3) +
_TEXT("% ") +
double2String(uiRelativeToItems / getAccumulatedTime(), cuiPctDigits_After_Period, s2) +
_TEXT(" ") + (strItemsname.length() == 0 ? (string)_TEXT("items") : strItemsname) +
_TEXT("/sec)");
}
string
Timer::timeAndPercentString(const Timer& crclRelativeToTimer) const {
return timeAndPercentString(crclRelativeToTimer.getAccumulatedTime());
}
string
Timer::relativeThroughputString(size_t uiRelativeToItems, const string & strItemsname) const {
string s;
return getDescription() +
double2String(uiRelativeToItems / getAccumulatedTime(), cuiSecDigits_After_Period, s) +
" " + (strItemsname.length() == 0 ? (string)_TEXT("items") : strItemsname) + _TEXT("/second");
}
string
Timer::percentString(double dRelativeToSeconds) const {
string s;
return getDescription() +
double2String(100.0 * (getAccumulatedTime() / dRelativeToSeconds), cuiPctDigits_After_Period, s) +
_TEXT("%");
}
string
Timer::percentString(const Timer& crclRelativeToTimer) const {
return percentString(crclRelativeToTimer.getAccumulatedTime());
}
} //namespace uima