Annotation of parser3/src/types/pa_vstatus.C, revision 1.3
1.1 paf 1: /** @file
2: Parser: @b status class impl.
3:
4: Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
5: Author: Alexander Petrosyan <paf@design.ru> (http://paf.design.ru)
6:
1.3 ! paf 7: $Id: pa_vstatus.C,v 1.2 2002/02/05 14:57:51 paf Exp $
1.1 paf 8: */
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:
20: Value *VStatus::get_element(const String& aname) {
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))
31: throw Exception(0, 0,
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.3 ! paf 37: u.ru_utime.tv_sec+u.ru_utime.tv_usec/1000000));
1.2 paf 38: hash.put(*NEW String(pool(), "stime"), NEW VDouble(pool(),
1.3 ! paf 39: u.ru_stime.tv_sec+u.ru_stime.tv_usec/1000000));
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: