Annotation of parser3/src/types/pa_vstatus.C, revision 1.2

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.2     ! paf         7:        $Id: pa_vstatus.C,v 1.1 2002/02/05 14:44:45 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.1       paf        37:                        u.ru_utime.tv_sec+u.ru_utime.tv_usec/10000));
1.2     ! paf        38:                hash.put(*NEW String(pool(), "stime"), NEW VDouble(pool(), 
1.1       paf        39:                        u.ru_stime.tv_sec+u.ru_stime.tv_usec/10000));
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: