An Overlay-based
Virtual Network Substrate
SpoVNet

source: source/ariba/utility/misc/Helper.cpp @ 3683

Last change on this file since 3683 was 3683, checked in by Christoph Mayer, 14 years ago

-getElapsedMillis gefixt

File size: 6.1 KB
Line 
1// [Licence]
2// The Ariba-Underlay Copyright
3//
4// Copyright (c) 2008-2009, Institute of Telematics, UniversitÀt Karlsruhe (TH)
5//
6// Institute of Telematics
7// UniversitÀt Karlsruhe (TH)
8// Zirkel 2, 76128 Karlsruhe
9// Germany
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// THIS SOFTWARE IS PROVIDED BY THE INSTITUTE OF TELEMATICS ``AS IS'' AND
22// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARIBA PROJECT OR
25// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32//
33// The views and conclusions contained in the software and documentation
34// are those of the authors and should not be interpreted as representing
35// official policies, either expressed or implied, of the Institute of
36// Telematics.
37// [Licence]
38
39#include "Helper.h"
40
41namespace ariba {
42namespace utility {
43
44string Helper::ultos(unsigned long val)
45{
46        char buf[16];
47
48#ifdef WIN32
49        _ultoa_s (val, buf, 16, 10);
50#else
51        sprintf (buf, "%lu", val);
52#endif
53
54        return buf;
55}
56
57string Helper::ltos(long val)
58{
59        char buf[16];
60
61#ifdef WIN32
62        _ltoa_s (val, buf, 16, 10);
63#else
64        sprintf (buf, "%li", val);
65#endif
66
67        return buf;
68}
69
70string  Helper::ultohexs (unsigned long val, bool hexdelimiter)
71{
72        char buf[16];
73
74#ifdef WIN32
75        _ultoa_s (val, buf, 16, 16);
76#else
77        sprintf (buf, "%lx", val);
78#endif
79
80        string ret = buf;
81
82        if (hexdelimiter)
83                ret.insert (0, "0x");
84
85        return ret;
86}
87
88string Helper::ltohexs (long val, bool hexdelimiter)
89{
90        char buf[16];
91
92#ifdef WIN32
93        _ltoa_s (val, buf, 16, 16);
94#else
95        sprintf (buf, "%lx", val);
96#endif
97
98        string ret = buf;
99
100        if (hexdelimiter)
101                ret.insert (0, "0x");
102
103        return ret;
104}
105
106string Helper::trim (string str)
107{
108        string ret = str;
109
110        ret.erase (0, ret.find_first_not_of( " \n\r\t" ));
111        ret.erase (ret.find_last_not_of( " \n\r\t") + 1 );
112
113        return ret;
114}
115
116long Helper::stol (string str)
117{
118        return strtol (str.c_str (), NULL, 10);
119}
120
121int     Helper::stoi (string str)
122{
123        return (int) stol (str);
124}
125
126unsigned int Helper::hstoui (string str)
127{
128        return (unsigned int) strtol (str.c_str (), NULL, 16);
129}
130
131Helper::STRING_LIST     Helper::split (string str, string delimiter)
132{
133        STRING_LIST                     ret;
134        string::size_type       offset          = 0;
135        string::size_type       delimIndex      = 0;
136        string                          helpstring      = "";
137
138        if (str.length () <= 0) return ret;
139
140    while ((delimIndex = str.find (delimiter, offset)) != string::npos) {
141
142                helpstring = trim (str.substr (offset, delimIndex - offset));
143                if (helpstring.length () > 0) ret.push_back     (helpstring);
144
145                offset                  = delimIndex + delimiter.length();
146        delimIndex              = str.find (delimiter, offset);
147
148    } // while ((delimIndex = str.find (delimiter, offset)) != string::npos)
149
150        if (offset < str.length ()) {
151                helpstring = trim (str.substr (offset));
152                if (helpstring.length () > 0) ret.push_back (helpstring);
153        }
154
155        return ret;
156}
157
158string Helper::replace (string str, string find, string repl)
159{
160        string ret = str;
161        boost::algorithm::replace_all (ret, find, repl);
162        return ret;
163}
164
165string Helper::getTime (time_t timeval)
166{
167        time_t          rawtime;
168        struct tm*      timeinfo;
169
170        if (timeval == 0)
171                time (&rawtime);
172        else
173                rawtime = timeval;
174
175#ifdef WIN32
176        timeinfo = new struct tm ();
177        localtime_s (timeinfo, &rawtime);
178#else
179        timeinfo = localtime (&rawtime);
180#endif
181
182        ostringstream                           m_formatter;
183
184        m_formatter.str                 ("");
185        m_formatter                             << setw(2) << setfill('0') << timeinfo->tm_hour                 << ":"
186                                                        << setw(2) << setfill('0') << timeinfo->tm_min                  << ":"
187                                                        << setw(2) << setfill('0') << timeinfo->tm_sec                  ;
188        assert                                  (m_formatter.good ());
189
190#ifdef WIN32
191        delete timeinfo;
192#endif
193        return m_formatter.str ();
194}
195
196string Helper::getDate (time_t timeval)
197{
198        time_t          rawtime;
199        struct tm*      timeinfo;
200
201        if (timeval == 0)
202                time (&rawtime);
203        else
204                rawtime = timeval;
205
206#ifdef WIN32
207        timeinfo = new struct tm ();
208        localtime_s (timeinfo, &rawtime);
209#else
210        timeinfo = localtime (&rawtime);
211#endif
212
213        //
214        // cache the date because it changes with very low frequency
215        // and formatting using ostringstream or sprintf is more expensive
216        //
217
218        static struct tm datecache = {0};
219        static string datecachestr = "";
220
221        if (datecachestr.length() != 0 && (     datecache.tm_mday == timeinfo->tm_mday &&
222                                                                                datecache.tm_mon  == timeinfo->tm_mon  &&
223                                                                                datecache.tm_year == timeinfo->tm_year )) {
224                #ifdef WIN32
225                        delete timeinfo;
226                #endif
227                return datecachestr;
228        }
229
230        //
231        // format the date for international use
232        //
233
234        char buffer [32];
235
236        setlocale (LC_ALL, "");
237        strftime (buffer, sizeof (buffer), "%x", timeinfo);
238
239        datecachestr = buffer;
240        datecache        = *timeinfo;
241
242#ifdef WIN32
243        delete timeinfo;
244#endif
245
246        return datecachestr;
247}
248
249unsigned long Helper::getElapsedMillis ()
250{
251        struct timeb tp;
252        ftime( &tp );
253        return ( tp.time*1000 + tp.millitm );
254}
255
256string Helper::dtos     (double val)
257{
258        string ret = boost::lexical_cast<string> (val);
259        return ret;
260}
261
262double Helper::stod (string str)
263{
264        if (str.length() <= 0)  return 0.0;
265        else                                    return boost::lexical_cast<double> (str);
266}
267
268}} // namespace ariba, common
Note: See TracBrowser for help on using the repository browser.