Annotation of parser3/src/types/pa_vstatus.C, revision 1.15.2.5
1.1 paf 1: /** @file
2: Parser: @b status class impl.
3:
1.15.2.1 paf 4: Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com)
1.6 paf 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.8 paf 6: */
1.1 paf 7:
1.15.2.5! paf 8: static const char* IDENT_VSTATUS_C="$Date: 2003/02/04 11:29:10 $";
1.1 paf 9:
10: #include "pa_vstatus.h"
11: #include "pa_cache_managers.h"
1.2 paf 12: #include "pa_vhash.h"
13: #include "pa_vdouble.h"
14:
15: #ifdef HAVE_SYS_RESOURCE_H
16: // rusage
17: #include <sys/resource.h>
18: #endif
1.1 paf 19:
1.15.2.2 paf 20: ValuePtr VStatus::get_element(StringPtr aname, Value& /*aself*/, bool /*looking_up*/) {
1.1 paf 21: // getstatus
1.15.2.3 paf 22: if(Cache_manager* manager=cache_managers.get(aname))
1.15.2.2 paf 23: return manager->get_status(fpool, aname);
1.1 paf 24:
25: #ifdef HAVE_GETRUSAGE
26: // rusage
1.15.2.4 paf 27: if(*aname=="rusage") {
28: VHashPtr rusage=VHashPtr(new VHash);
1.1 paf 29: struct rusage u;
1.13 paf 30: if(getrusage(RUSAGE_SELF,&u)<0)
1.7 paf 31: throw Exception(0,
1.15.2.4 paf 32: aname,
1.13 paf 33: "getrusage failed (#%d)", errno);
34:
35: #ifdef HAVE_GETTIMEOFDAY
36: struct timeval tp;
37: if(gettimeofday(&tp, NULL)<0)
38: throw Exception(0,
1.15.2.4 paf 39: aname,
1.13 paf 40: "gettimeofday failed (#%d)", errno);
41: #endif
1.1 paf 42:
1.15.2.4 paf 43: HashStringValue& hash=rusage->hash(aname);
44: hash.put(StringPtr(new String("utime")), ValuePtr(new VDouble(
45: u.ru_utime.tv_sec+u.ru_utime.tv_usec/1000000.0)));
46: hash.put(StringPtr(new String("stime")), ValuePtr(new VDouble(
47: u.ru_stime.tv_sec+u.ru_stime.tv_usec/1000000.0)));
48: hash.put(StringPtr(new String("maxrss")), ValuePtr(new VDouble(u.ru_maxrss)));
49: hash.put(StringPtr(new String("ixrss")), ValuePtr(new VDouble(u.ru_ixrss)));
50: hash.put(StringPtr(new String("idrss")), ValuePtr(new VDouble(u.ru_idrss)));
51: hash.put(StringPtr(new String("isrss")), ValuePtr(new VDouble(u.ru_isrss)));
1.13 paf 52:
53: #ifdef HAVE_GETTIMEOFDAY
1.15.2.4 paf 54: hash.put(StringPtr(new String("tv_sec")), ValuePtr(new VDouble(tp.tv_sec)));
55: hash.put(StringPtr(new String("tv_usec")), ValuePtr(new VDouble(tp.tv_usec)));
1.13 paf 56: #endif
1.1 paf 57:
1.15.2.4 paf 58: return rusage;
1.1 paf 59: }
60:
61: #endif
62:
1.15.2.4 paf 63: return ValuePtr(0);
1.1 paf 64: }
E-mail: