Alien-Judy
view release on metacpan or search on metacpan
src/judy-1.0.5/test/SLcompare.c view on Meta::CPAN
(D) = (double)(__TVEnd_##T.tv_sec - __TVBeg_##T.tv_sec) * 1E6 + \
((double)(__TVEnd_##T.tv_usec - __TVBeg_##T.tv_usec)); \
}
#endif // _TIMEIT_H
//=======================================================================
// M E M O R Y S I Z E M A C R O S
//=======================================================================
// Most mallocs have mallinfo()
// define this if your malloc does not have mallinfo();
#define NOMALLINFO 1
double DeltaMem; // for remembering
#ifndef NOMALLINFO
#include <malloc.h> // mallinfo()
struct mallinfo malStart;
#define STARTmem malStart = mallinfo() /* works with some mallocs */
#define ENDmem \
{ \
struct mallinfo malEnd = mallinfo(); \
/* strange little dance from signed to unsigned to double */ \
unsigned int _un_int = malEnd.arena - malStart.arena; \
DeltaMem = _un_int; /* to double */ \
}
#else // MALLINFO
// this usually works for machines with less than 1-2Gb RAM.
// (it does not include memory ACQUIRED by mmap())
char *malStart;
#define STARTmem (malStart = (char *)sbrk(0))
#define ENDmem \
{ \
char *malEnd = (char *)sbrk(0); \
DeltaMem = malEnd - malStart; \
}
#endif // MALLINFO
//=======================================================================
// G E T S T R I N G F R O M mmap() F I L E M A C R O
//=======================================================================
//
// From memory map POINTER store next '\n' terminated string to BUFFER
// Delete spaces, tabs, returns and resulting blank lines.
// POINTER must be check to be within memory mapped file range
//
// NOTE: This code will core-dump if a corrupt text file because
// POINTER is not checked to exceed end of file.
#define MAXLINE 10000 // max length line
#define GETLINE(BUFFER,POINTER) \
{ \
char _chr; \
int _count = 0; \
for (;;) /* forever */ \
{ \
switch (_chr = *POINTER++) \
{ \
case ' ': /* eat spaces */ \
case '\t': /* eat tabs */ \
case '\r': /* eat returns */ \
continue; \
case '\n': /* eat blank lines */ \
if (_count == 0) continue; \
case '\0': /* Done */ \
BUFFER[_count++] = '\0'; \
break; \
default: /* copy char */ \
if (_count == (MAXLINE - 1)) \
{ /* cut into 2 lines */ \
BUFFER[_count++] = '\0'; \
POINTER--; \
break; \
} \
BUFFER[_count++] = _chr; \
continue; \
} \
break; \
} \
}
//=======================================================================
// J U D Y M E T H O D
//=======================================================================
#ifdef JUDYMETHOD
#define ADTMETHOD "JUDY"
#include <Judy.h>
#define MEMOVD 0 /* no overhead in Judy */
#define INITARRAY Pvoid_t JudyArray = NULL
// store string into array
#define STORESTRING(STRING) \
{ \
PWord_t _PValue; \
JSLI(_PValue, JudyArray, (uint8_t *) STRING); \
if (++(*_PValue) != 1) gDupCnt++; /* count dup strings */ \
}
// get pointer to Value associated with string
#define GETSTRING(STRING) \
{ \
PWord_t _PValue; \
JSLG(_PValue, JudyArray, (uint8_t *) STRING); \
if (_PValue == NULL) /* not found -- bug */ \
( run in 0.302 second using v1.01-cache-2.11-cpan-13bb782fe5a )