Annotation of parser3/src/types/pa_vstatus.C, revision 1.15.2.2
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.2! paf 8: static const char* IDENT_VSTATUS_C="$Date: 2003/01/31 12:34:45 $";
1.1 paf 9:
1.15.2.2! paf 10: #include "pa_value_includes.h"
1.1 paf 11: #include "pa_vstatus.h"
12: #include "pa_cache_managers.h"
1.2 paf 13: #include "pa_vhash.h"
14: #include "pa_vdouble.h"
15:
16: #ifdef HAVE_SYS_RESOURCE_H
17: // rusage
18: #include <sys/resource.h>
19: #endif
1.1 paf 20:
1.15.2.2! paf 21: ValuePtr VStatus::get_element(StringPtr aname, Value& /*aself*/, bool /*looking_up*/) {
1.1 paf 22: // getstatus
1.15.2.2! paf 23: if(Cache_managerPtr manager=cache_managers.get(aname))
! 24: return manager->get_status(fpool, aname);
1.1 paf 25:
26: #ifdef HAVE_GETRUSAGE
27: // rusage
28: if(aname=="rusage") {
1.2 paf 29: VHash& rusage=*NEW VHash(pool());
1.1 paf 30: struct rusage u;
1.13 paf 31: if(getrusage(RUSAGE_SELF,&u)<0)
1.7 paf 32: throw Exception(0,
1.1 paf 33: &aname,
1.13 paf 34: "getrusage failed (#%d)", errno);
35:
36: #ifdef HAVE_GETTIMEOFDAY
37: struct timeval tp;
38: if(gettimeofday(&tp, NULL)<0)
39: throw Exception(0,
40: &aname,
41: "gettimeofday failed (#%d)", errno);
42: #endif
1.1 paf 43:
1.2 paf 44: Hash& hash=rusage.hash(&aname);
45: hash.put(*NEW String(pool(), "utime"), NEW VDouble(pool(),
1.4 paf 46: u.ru_utime.tv_sec+u.ru_utime.tv_usec/1000000.0));
1.2 paf 47: hash.put(*NEW String(pool(), "stime"), NEW VDouble(pool(),
1.4 paf 48: u.ru_stime.tv_sec+u.ru_stime.tv_usec/1000000.0));
1.2 paf 49: hash.put(*NEW String(pool(), "maxrss"), NEW VDouble(pool(), u.ru_maxrss));
50: hash.put(*NEW String(pool(), "ixrss"), NEW VDouble(pool(), u.ru_ixrss));
51: hash.put(*NEW String(pool(), "idrss"), NEW VDouble(pool(), u.ru_idrss));
52: hash.put(*NEW String(pool(), "isrss"), NEW VDouble(pool(), u.ru_isrss));
1.13 paf 53:
54: #ifdef HAVE_GETTIMEOFDAY
55: hash.put(*NEW String(pool(), "tv_sec"), NEW VDouble(pool(), tp.tv_sec));
56: hash.put(*NEW String(pool(), "tv_usec"), NEW VDouble(pool(), tp.tv_usec));
57: #endif
1.1 paf 58:
59: return &rusage;
60: }
61:
62: #endif
63:
64: return 0;
65: }
E-mail: