Annotation of parser3/src/types/pa_vstatus.C, revision 1.12
1.1 paf 1: /** @file
2: Parser: @b status class impl.
3:
1.5 paf 4: Copyright (c) 2001, 2002 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.12 ! paf 8: static const char* IDENT_VSTATUS_C="$Date: 2002/08/13 15:55:45 $";
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.12 ! paf 20: Value *VStatus::get_element(const String& aname, Value * /*aself*/, bool /*looking_up*/) {
1.1 paf 21: // getstatus
22: if(Cache_manager *manager=static_cast<Cache_manager *>(cache_managers->get(aname)))
23: return &manager->get_status(pool(), &aname);
24:
25: #ifdef HAVE_GETRUSAGE
26: // rusage
27: if(aname=="rusage") {
1.2 paf 28: VHash& rusage=*NEW VHash(pool());
1.1 paf 29: struct rusage u;
30: if(int error=getrusage(RUSAGE_SELF,&u))
1.7 paf 31: throw Exception(0,
1.1 paf 32: &aname,
33: "getrusage failed (%d)", error);
34:
1.2 paf 35: Hash& hash=rusage.hash(&aname);
36: hash.put(*NEW String(pool(), "utime"), NEW VDouble(pool(),
1.4 paf 37: u.ru_utime.tv_sec+u.ru_utime.tv_usec/1000000.0));
1.2 paf 38: hash.put(*NEW String(pool(), "stime"), NEW VDouble(pool(),
1.4 paf 39: u.ru_stime.tv_sec+u.ru_stime.tv_usec/1000000.0));
1.2 paf 40: hash.put(*NEW String(pool(), "maxrss"), NEW VDouble(pool(), u.ru_maxrss));
41: hash.put(*NEW String(pool(), "ixrss"), NEW VDouble(pool(), u.ru_ixrss));
42: hash.put(*NEW String(pool(), "idrss"), NEW VDouble(pool(), u.ru_idrss));
43: hash.put(*NEW String(pool(), "isrss"), NEW VDouble(pool(), u.ru_isrss));
1.1 paf 44:
45: return &rusage;
46: }
47:
48: #endif
49:
50: return 0;
51: }
E-mail: