- Added new dir for the library
[textus:php-language-detection.git] / textcat / textcat_internal.h
1 /*
2    +----------------------------------------------------------------------+
3    | Copyright (c) 2010 The PHP Group                                     |
4    +----------------------------------------------------------------------+
5    | This source file is subject to version 3.01 of the PHP license,      |
6    | that is bundled with this package in the file LICENSE, and is        |
7    | available through the world-wide-web at the following url:           |
8    | http://www.php.net/license/3_01.txt                                  |
9    | If you did not receive a copy of the PHP license and are unable to   |
10    | obtain it through the world-wide-web, please send a note to          |
11    | license@php.net so we can mail you a copy immediately.               |
12    +----------------------------------------------------------------------+
13    | Author:  C├ęsar Rodas <crodas@member.fsf.org>                         |
14    +----------------------------------------------------------------------+
15  */
16
17 #include <string.h>
18 #include <limits.h>
19 #include <assert.h>
20 #include <math.h>
21 #ifdef HAVE_CONFIG
22 #   include "config.h"
23 #endif
24
25
26 #define CHECK_MEM(x)        if (x == NULL) { tc->error = TC_ERR_MEM; return TC_FALSE;  }
27 #define CHECK_MEM_EX(x,Y)   if (x == NULL) { tc->error = TC_ERR_MEM; Y; return TC_FALSE;  }
28
29                                 
30 #define INIT_MEMORY(x)      if (tc->x == NULL) { \
31                                 mempool_init(&tc->x, tc->malloc, tc->free, tc->allocate_size); \
32                                 CHECK_MEM_EX(tc->x, textcat_destroy_hash(tc); tc->status=TC_FREE;)  \
33                             }
34
35 #define LOCK_INSTANCE(tc)   if (tc->status != TC_FREE) {\
36                                 tc->error = TC_BUSY; \
37                                 return TC_FALSE; \
38                             } \
39                             tc->status = TC_BUSY; /* lock it for our thread */ \
40                             INIT_MEMORY(memory);  /* initialize tc->memory if it wasn't before */
41
42 #define UNLOCK_INSTANCE(tc)   tc->status = TC_FREE;
43
44 typedef struct {
45     long dist;
46     uchar * name;
47 } _cands;
48
49 /* Backward declarations {{{ */
50 Bool mempool_init(void ** memory, void * (*xmalloc)(size_t), void (*xfree)(void *), size_t block_size);
51 void mempool_done(void ** memory);
52 void * mempool_calloc(void * memory, size_t nmemb, size_t size);
53 void * mempool_malloc(void * memory, size_t size);
54 uchar * mempool_strndup(void * memory, uchar * key, size_t len);
55 void mempool_reset(void * memory);
56
57
58 long textcat_simple_hash(const uchar *p, size_t len, size_t max_number);
59 Bool textcat_ngram_find(const ngram_set * nset, const uchar * key, size_t len, ngram_t ** item);
60 Bool textcat_ngram_create(TextCat * tc, ngram_set * nset, const uchar * key, size_t len, ngram_t ** item);
61 Bool textcat_ngram_incr(TextCat * tc, const uchar * key, size_t len);
62 Bool textcat_copy_result(TextCat * tc, NGrams ** result);
63 void textcat_ngram_sort_by_str(NGrams * ngrams);
64 void textcat_ngram_sort_by_freq(NGrams * ngrams);
65 Bool textcat_init_hash(TextCat * tc);
66 void textcat_destroy_hash(TextCat * tc);
67 Bool textcat_result_merge(TextCat *tc, result_stack * stack, NGrams ** result);
68 /* */
69 Bool knowledge_save(void *, const uchar * id, NGrams * ngrams, void *);
70 Bool knowledge_list(void *, uchar *** list, int * size, void *);
71 Bool knowledge_load(void * memory, const uchar * id, NGrams * result, int max, void *);
72 long knowledge_dist(NGrams *a, NGrams *b, void *);
73 Bool textcat_default_text_parser(TextCat *tc, const uchar * text, size_t length, int * (*set_ngram)(TextCat *, const uchar *, size_t), void *);
74 /* }}} */
75
76 #define mempool_strdup(x,y) mempool_strndup(x, y, strlen(y))
77
78 /*
79  * Local variables:
80  * tab-width: 4
81  * c-basic-offset: 4
82  * End:
83  * vim600: sw=4 ts=4 fdm=marker
84  * vim<600: sw=4 ts=4
85  */