/*
 * Copyright (C) 2007 François Pesce : francois.pesce (at) gmail (dot) com
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * 	http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef DEBUG_H
#define DEBUG_H
/**
 * @file debug.h
 * @brief UTIL debug output macros
 */

#include <stdio.h>

/**
 * Display error message at the level error.
 * @param str The format of the string.
 * @param arg The arguments to use while printing the data.
 */
#define DEBUG_ERR(str, arg...) fprintf(stderr, "[DEBUG_ERR]: [%s] " str " at line %d\n", __FUNCTION__, ## arg, __LINE__), fflush(stderr)

/**
 * Display error message at the level debug.
 * @param str The format of the string.
 * @param arg The arguments to use while printing the data.
 */
#define DEBUG_DBG(str, arg...) fprintf(stderr, "[DEBUG_DBG]: [%s] " str " at line %d\n", __FUNCTION__, ## arg, __LINE__), fflush(stderr)

#include <sys/time.h>
#include <sys/resource.h>

#define GET_MEMUSAGE(size)						\
{									\
    FILE *statm=fopen("/proc/self/statm", "r");				\
    if (statm) {							\
	if (1 != fscanf(statm, "%lu",&size)) {				\
	    DEBUG_ERR("Can't fscan proc self statm");			\
	}								\
	if (fclose(statm)) {						\
	    DEBUG_ERR("Can't close proc self statm");			\
	}								\
    } else {								\
	DEBUG_ERR("Can't open proc self statm");			\
    }									\
}

#define DISPLAY_MEMLEAK_open()						\
{									\
    unsigned long int size1, size2;					\
    GET_MEMUSAGE(size1);

#define DISPLAY_MEMLEAK_close()			\
    GET_MEMUSAGE(size2);				\
    if(size2 != size1)					\
        DEBUG_ERR("Delta memory %lu", size2 - size1);	\
}

/** @} */

#endif /* DEBUG_H */


syntax highlighted by Code2HTML, v. 0.9.1