Annotation of parser3/src/types/pa_vstatus.C, revision 1.15.2.4
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.4! paf 8: static const char* IDENT_VSTATUS_C="$Date: 2003/02/03 12:40:26 $";
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.3 paf 23: if(Cache_manager* manager=cache_managers.get(aname))
1.15.2.2 paf 24: return manager->get_status(fpool, aname);
1.1 paf 25:
26: #ifdef HAVE_GETRUSAGE
27: // rusage
1.15.2.4! paf 28: if(*aname=="rusage") {
! 29: VHashPtr rusage=VHashPtr(new VHash);
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.15.2.4! 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,
1.15.2.4! paf 40: aname,
1.13 paf 41: "gettimeofday failed (#%d)", errno);
42: #endif
1.1 paf 43:
1.15.2.4! paf 44: HashStringValue& hash=rusage->hash(aname);
! 45: hash.put(StringPtr(new String("utime")), ValuePtr(new VDouble(
! 46: u.ru_utime.tv_sec+u.ru_utime.tv_usec/1000000.0)));
! 47: hash.put(StringPtr(new String("stime")), ValuePtr(new VDouble(
! 48: u.ru_stime.tv_sec+u.ru_stime.tv_usec/1000000.0)));
! 49: hash.put(StringPtr(new String("maxrss")), ValuePtr(new VDouble(u.ru_maxrss)));
! 50: hash.put(StringPtr(new String("ixrss")), ValuePtr(new VDouble(u.ru_ixrss)));
! 51: hash.put(StringPtr(new String("idrss")), ValuePtr(new VDouble(u.ru_idrss)));
! 52: hash.put(StringPtr(new String("isrss")), ValuePtr(new VDouble(u.ru_isrss)));
1.13 paf 53:
54: #ifdef HAVE_GETTIMEOFDAY
1.15.2.4! paf 55: hash.put(StringPtr(new String("tv_sec")), ValuePtr(new VDouble(tp.tv_sec)));
! 56: hash.put(StringPtr(new String("tv_usec")), ValuePtr(new VDouble(tp.tv_usec)));
1.13 paf 57: #endif
1.1 paf 58:
1.15.2.4! paf 59: return rusage;
1.1 paf 60: }
61:
62: #endif
63:
1.15.2.4! paf 64: return ValuePtr(0);
1.1 paf 65: }
E-mail: