include/utilities/memory.h
author Aravindakshan Babu <akshan@stanford.edu>
Thu, 08 Jul 2010 23:50:39 -0700
branchdev
changeset 217 64a272a34cb2
parent 174 3f1034dca432
permissions -rw-r--r--
Added extra functionality to Point class( an iterator ) and PersistenceDiagram( dimension property and __len__ func ). persistence-diagram.h: Added a new read-only dimension member and member function to access it. With a new constructor that that takes in an int type to initialize dimension. persistence-diagram.cpp: Added new bp::init constructor. Takes in an integer type to initialize the dimension. Exposed the dimension property. Exposed the size property via a __len__ method. __init__.py: Added an iterator for Point objects. This iterates over the coords and then the data( if present ).

#ifndef __MEMORY_H__
#define __MEMORY_H__

#if LOGGING     // TODO: add check for Linux (and preferably the right version of Linux)

#include "log.h"
#include <fstream>
#include <sstream>
#include <string>
#include <unistd.h>

static rlog::RLogChannel* rlMemory =                   DEF_CHANNEL("memory",    rlog::Log_Debug);

unsigned    report_memory()
{
    pid_t pid = getpid();
    std::stringstream smaps_name;
    smaps_name << "/proc/" << pid << "/smaps";
    std::ifstream in(smaps_name.str().c_str());

    std::string str;
    unsigned memory = 0, value;
    while (in)
    {
        in >> str;
        if (std::string(str, 0, 7) == "Private")
        {
            in >> value;
            memory += value;
        }
    }
    rLog(rlMemory, "Private memory usage: %d kB", memory);
    
    return memory;
}

#else

unsigned report_memory() { return 0; }

#endif // LOGGING

#endif // __MEMORY_H__