9aa6fa1997-05-19Fredrik Hübinette (Hubbe) /*\ ||| This file a part of Pike, and is copyright by Fredrik Hubinette ||| Pike is distributed as GPL (General Public License) ||| See the files COPYING and DISCLAIMER for more information. \*/
24ddc71998-03-28Henrik Grubbström (Grubba)  /*
e0755c2000-08-15Henrik Grubbström (Grubba)  * $Id: pike_memory.h,v 1.21 2000/08/15 15:55:35 grubba Exp $
24ddc71998-03-28Henrik Grubbström (Grubba)  */
9aa6fa1997-05-19Fredrik Hübinette (Hubbe) #ifndef MEMORY_H #define MEMORY_H #include "global.h"
3e625c1998-10-11Fredrik Hübinette (Hubbe) #include "stralloc.h"
9aa6fa1997-05-19Fredrik Hübinette (Hubbe)  #define MEMSEARCH_LINKS 512 struct link { struct link *next;
e0755c2000-08-15Henrik Grubbström (Grubba)  INT32 key; ptrdiff_t offset;
9aa6fa1997-05-19Fredrik Hübinette (Hubbe) }; enum methods { no_search, use_memchr, memchr_and_memcmp,
db4a401998-10-09Fredrik Hübinette (Hubbe)  hubbe_search, boyer_moore
9aa6fa1997-05-19Fredrik Hübinette (Hubbe) }; struct mem_searcher { enum methods method; char *needle;
61a8ec2000-08-11Henrik Grubbström (Grubba)  size_t needlelen;
7901142000-08-15Henrik Grubbström (Grubba)  size_t hsize, max;
9aa6fa1997-05-19Fredrik Hübinette (Hubbe)  struct link links[MEMSEARCH_LINKS]; struct link *set[MEMSEARCH_LINKS]; };
db4a401998-10-09Fredrik Hübinette (Hubbe) struct generic_mem_searcher { char needle_shift; char haystack_shift; union data_u { struct mem_searcher eightbit; struct other_search_s { enum methods method; void *needle; SIZE_T needlelen; int first_char; } other; } data; };
4218011999-01-31Fredrik Hübinette (Hubbe) #include "block_alloc_h.h"
db4a401998-10-09Fredrik Hübinette (Hubbe) #define MEMCHR0 MEMCHR
d0e2311999-10-24Henrik Grubbström (Grubba) /* Note to self: Prototypes must be updated manually /Hubbe */
f5757f2000-08-11Henrik Grubbström (Grubba) PMOD_EXPORT ptrdiff_t pcharp_memcmp(PCHARP a, PCHARP b, int sz);
1f21332000-07-28Fredrik Hübinette (Hubbe) PMOD_EXPORT long pcharp_strlen(PCHARP a);
51f0e02000-08-10Henrik Grubbström (Grubba) PMOD_EXPORT INLINE p_wchar1 *MEMCHR1(p_wchar1 *p, p_wchar1 c, ptrdiff_t e); PMOD_EXPORT INLINE p_wchar2 *MEMCHR2(p_wchar2 *p, p_wchar2 c, ptrdiff_t e);
1f21332000-07-28Fredrik Hübinette (Hubbe) PMOD_EXPORT void swap(char *a, char *b, INT32 size); PMOD_EXPORT void reverse(char *memory, INT32 nitems, INT32 size); PMOD_EXPORT void reorder(char *memory, INT32 nitems, INT32 size,INT32 *order);
51f0e02000-08-10Henrik Grubbström (Grubba) PMOD_EXPORT size_t hashmem(const unsigned char *a, size_t len, size_t mlen); PMOD_EXPORT size_t hashstr(const unsigned char *str, ptrdiff_t maxn); PMOD_EXPORT size_t simple_hashmem(const unsigned char *str, ptrdiff_t len, ptrdiff_t maxn);
1f21332000-07-28Fredrik Hübinette (Hubbe) PMOD_EXPORT void init_memsearch(struct mem_searcher *s,
9aa6fa1997-05-19Fredrik Hübinette (Hubbe)  char *needle,
c9f0312000-08-10Henrik Grubbström (Grubba)  size_t needlelen, size_t max_haystacklen);
1f21332000-07-28Fredrik Hübinette (Hubbe) PMOD_EXPORT char *memory_search(struct mem_searcher *s,
9aa6fa1997-05-19Fredrik Hübinette (Hubbe)  char *haystack,
c9f0312000-08-10Henrik Grubbström (Grubba)  size_t haystacklen);
1f21332000-07-28Fredrik Hübinette (Hubbe) PMOD_EXPORT void init_generic_memsearcher(struct generic_mem_searcher *s,
db4a401998-10-09Fredrik Hübinette (Hubbe)  void *needle,
c9f0312000-08-10Henrik Grubbström (Grubba)  size_t needlelen,
db4a401998-10-09Fredrik Hübinette (Hubbe)  char needle_shift,
c9f0312000-08-10Henrik Grubbström (Grubba)  size_t estimated_haystack,
db4a401998-10-09Fredrik Hübinette (Hubbe)  char haystack_shift);
1f21332000-07-28Fredrik Hübinette (Hubbe) PMOD_EXPORT void *generic_memory_search(struct generic_mem_searcher *s,
db4a401998-10-09Fredrik Hübinette (Hubbe)  void *haystack,
c9f0312000-08-10Henrik Grubbström (Grubba)  size_t haystacklen,
db4a401998-10-09Fredrik Hübinette (Hubbe)  char haystack_shift);
1f21332000-07-28Fredrik Hübinette (Hubbe) PMOD_EXPORT char *my_memmem(char *needle,
c9f0312000-08-10Henrik Grubbström (Grubba)  size_t needlelen,
9aa6fa1997-05-19Fredrik Hübinette (Hubbe)  char *haystack,
c9f0312000-08-10Henrik Grubbström (Grubba)  size_t haystacklen);
1f21332000-07-28Fredrik Hübinette (Hubbe) PMOD_EXPORT void memfill(char *to,
9aa6fa1997-05-19Fredrik Hübinette (Hubbe)  INT32 tolen, char *from, INT32 fromlen, INT32 offset);
b6bd0a2000-08-04Henrik Grubbström (Grubba) PMOD_EXPORT char *debug_xalloc(size_t size);
9aa6fa1997-05-19Fredrik Hübinette (Hubbe) 
db4a401998-10-09Fredrik Hübinette (Hubbe) #undef BLOCK_ALLOC
9aa6fa1997-05-19Fredrik Hübinette (Hubbe) #endif