/*
  One dimensional Python array can be directly passed to
  vectors. If not a function will be invoked. If it has 
  to work on the array it will increase this counter via
  PyGSL_INCREASE_vector_transform_counter
 */
static long pygsl_profile_vector_transform_counter = 0;
/*
 * Two dimensional Python array can be directly passed to
 * matrices, if they are contingous. (Currently not performed )
 * If not a function will be invoked. If it has 
 * to work on the array it will increase this counter via
 * INCREASE_matrix_transform_counter
 */
static long pygsl_profile_matrix_transform_counter = 0;

/*
 * From a mathematical point of view 0 is also a legal 
 * complex number. (YMMV;-) Complex objects are 
 * transferred directly  to  the underlying  function,
 * whereas other numeric objects have to  be converted. 
 * In that case this counter is increased. via 
 * 
 */
static long pygsl_profile_complex_transform_counter = 0;

/*
 * From a mathematical point of view 0 is also a legal 
 * float. Float objects are 
 * transferred directly  to  the underlying  function,
 * whereas other numeric objects have to  be converted. 
 * In that case this counter is increased. via 
 * 
 */
static long pygsl_profile_float_transform_counter = 0;

#define GETCOUNTER(name) \
static PyObject* PyGSL_get_ ## name(PyObject *self, PyObject *args) \
     {return PyInt_FromLong((long) pygsl_profile_ ## name);}

GETCOUNTER(vector_transform_counter)
GETCOUNTER(matrix_transform_counter)
GETCOUNTER(complex_transform_counter)
GETCOUNTER(float_transform_counter)



syntax highlighted by Code2HTML, v. 0.9.1