pike.git
/
src
/
modules
/
_WhiteFish
/
whitefish.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/modules/_WhiteFish/whitefish.c:12:
#include "module.h" #include "config.h" #include "whitefish.h" #include "resultset.h" #include "blob.h" #include "blobs.h" #include "linkfarm.h"
-
/* 7.2 compatibility stuff. */
-
-
#ifndef PIKE_MODULE_INIT
-
/* must be included last */
-
#include "module_magic.h"
-
#define PIKE_MODULE_INIT void pike_module_init(void)
-
#define PIKE_MODULE_EXIT void pike_module_exit(void)
-
#endif
-
+
struct tofree { Blob **blobs; Blob **tmp; int nblobs; struct object *res; }; static void free_stuff( void *_t ) {
pike.git/src/modules/_WhiteFish/whitefish.c:70:
static void handle_hit( Blob **blobs, int nblobs, struct object *res, int docid, double *field_c[65], double *prox_c[8], double mc, double mp, int cutoff ) { int i, j, k, end = 0;
-
Hit *hits =
malloc
( nblobs
*
sizeof(Hit) );
+
Hit *hits =
calloc
( nblobs
,
sizeof(Hit) );
unsigned char *nhits = malloc( nblobs ); unsigned char *pos = malloc( nblobs ); int matrix[65][8];
-
MEMSET
(matrix, 0, sizeof(matrix) );
-
MEMSET(hits, 0, nblobs * sizeof(Hit) );
-
MEMSET(pos, 0, nblobs );
+
memset
(matrix, 0, sizeof(matrix) );
for( i = 0; i<nblobs; i++ ) nhits[i] = wf_blob_nhits( blobs[i] ); for( i = 0; i<nblobs; i++ ) {
-
MEMSET
( pos, 0, nblobs );
+
memset
( pos, 0, nblobs );
for( j = 0; j<nhits[i]; j++ ) { hits[i] = wf_blob_hit( blobs[i], j ); matrix[MOFF(hits[i])][3]++; /* forward the other positions */ for( k = 0; k<nblobs; k++ ) if( k != i && pos[ k ] < nhits[ k ] ) { while( (hits[k].raw < hits[i].raw) && (pos[ k ] < nhits[ k ]))
pike.git/src/modules/_WhiteFish/whitefish.c:139:
double field_c[65], double prox_c[8], int cutoff) { struct object *res = wf_resultset_new(); struct tofree *__f = malloc( sizeof( struct tofree ) ); double max_c=0.0, max_p=0.0; ONERROR e; int i, j; Blob **tmp;
-
tmp =
malloc
( nblobs
*
sizeof( Blob *) );
+
tmp =
calloc
( nblobs
,
sizeof( Blob *) );
__f->res = res; __f->blobs = blobs; __f->nblobs = nblobs; __f->tmp = tmp; SET_ONERROR( e, free_stuff, __f ); for( i = 0; i<65; i++ ) if( field_c[i] > max_c )
pike.git/src/modules/_WhiteFish/whitefish.c:205:
int docid, double *field_c[65], double mc ) { int i, j, k; unsigned char *nhits = malloc( nblobs*2 ); unsigned char *first = nhits+nblobs; int matrix[65]; double accum = 0.0;
-
MEMSET
(matrix, 0, sizeof(matrix) );
+
memset
(matrix, 0, sizeof(matrix) );
for( i = 0; i<nblobs; i++ ) { nhits[i] = wf_blob_nhits( blobs[i] ); first[i] = 0; } for( i = 0; i<nhits[0]; i++)
pike.git/src/modules/_WhiteFish/whitefish.c:228:
int hit = 1; Hit m = wf_blob_hit( blobs[0], i ); int h = m.raw; if( (add = (*field_c)[ MOFF(m) ]) == 0.0 ) continue; for( j = 1; j<nblobs; j++) for( k = first[j]; k<nhits[j]; k++ ) { int h2 = wf_blob_hit_raw( blobs[j], k );
-
if( h2 > h )
+
if( h2 >
=
h
+ j
)
{ first[j]=k; if( h2-j == h ) hit++; break; } } if( hit == nblobs ) accum += add/mc;
pike.git/src/modules/_WhiteFish/whitefish.c:380:
free_stuff( __f ); return res; } /*! @module Search */ static void f_do_query_phrase( INT32 args ) /*! @decl ResultSet do_query_phrase( array(string) words, @ *! array(int) field_coefficients, @
-
*! function(int:string) blobfeeder)
+
*! function(
string,
int
,int
:string) blobfeeder)
*! @param words *! *! Arrays of word ids. Note that the order is significant for the *! ranking. *! *! @param field_coefficients *! *! An array of ranking coefficients for the different fields. In the *! range of [0x0000-0xffff]. The array (always) has 65 elements: *! *! @array *! @elem int 0 *! body *! @elem int 1..64 *! Special field 0..63. *! @endarray *! *! @param blobfeeder *! *! This function returns a Pike string containing the word hits for a
-
*! certain word
_id
. Call repeatedly until it returns @expr{0@}.
+
*! certain word. Call repeatedly until it returns @expr{0@}.
*/ { double proximity_coefficients[8]; double field_coefficients[65]; int numblobs, i; Blob **blobs; struct svalue *cb; struct object *res; struct array *_words, *_field;
pike.git/src/modules/_WhiteFish/whitefish.c:429:
numblobs = _words->size; if( !numblobs ) { struct object *o = wf_resultset_new( ); pop_n_elems( args ); wf_resultset_push( o ); return; }
-
blobs =
malloc
( sizeof(Blob *)
* numblobs
);
+
blobs =
calloc
(
numblobs,
sizeof(Blob *) );
for( i = 0; i<numblobs; i++ ) blobs[i] = wf_blob_new( cb, _words->item[i].u.string ); for( i = 0; i<65; i++ ) field_coefficients[i] = (double)_field->item[i].u.integer; res = low_do_query_phrase(blobs,numblobs, field_coefficients ); pop_n_elems( args ); wf_resultset_push( res ); } static void f_do_query_and( INT32 args ) /*! @decl ResultSet do_query_and( array(string) words, @
-
*! array(int) field_coefficients, @
-
*! array(int) proximity_coefficients, @
-
*! function(int:string) blobfeeder)
+
*!
array(int) field_coefficients, @
+
*!
array(int) proximity_coefficients, @
+
*!
int cutoff, @
+
*!
function(
string,
int
,int
:string) blobfeeder)
*! @param words *! *! Arrays of word ids. Note that the order is significant for the *! ranking. *! *! @param field_coefficients *! *! An array of ranking coefficients for the different fields. In the *! range of [0x0000-0xffff]. The array (always) has 65 elements: *!
pike.git/src/modules/_WhiteFish/whitefish.c:492:
*! spread: 41-80 *! @elem int 6 *! spread: 81-160 *! @elem int 7 *! spread: 161- *! @endarray *! *! @param blobfeeder *! *! This function returns a Pike string containing the word hits for a
-
*! certain word
_id
. Call repeatedly until it returns @expr{0@}.
+
*! certain word. Call repeatedly until it returns @expr{0@}.
*/ { double proximity_coefficients[8]; double field_coefficients[65]; int numblobs, i, cutoff; Blob **blobs; struct svalue *cb; struct object *res; struct array *_words, *_field, *_prox;
pike.git/src/modules/_WhiteFish/whitefish.c:522:
numblobs = _words->size; if( !numblobs ) { struct object *o = wf_resultset_new( ); pop_n_elems( args ); wf_resultset_push( o ); return; }
-
blobs =
malloc
( sizeof(Blob *)
* numblobs
);
+
blobs =
calloc
(
numblobs,
sizeof(Blob *) );
for( i = 0; i<numblobs; i++ ) blobs[i] = wf_blob_new( cb, _words->item[i].u.string ); for( i = 0; i<8; i++ ) proximity_coefficients[i] = (double)_prox->item[i].u.integer; for( i = 0; i<65; i++ ) field_coefficients[i] = (double)_field->item[i].u.integer;
pike.git/src/modules/_WhiteFish/whitefish.c:546:
cutoff ); pop_n_elems( args ); wf_resultset_push( res ); } static void f_do_query_or( INT32 args ) /*! @decl ResultSet do_query_or( array(string) words, @ *! array(int) field_coefficients, @ *! array(int) proximity_coefficients, @
-
*! function(int:string) blobfeeder)
+
*!
int cutoff, @
+
*!
function(
string,
int
,int
:string) blobfeeder)
*! @param words *! *! Arrays of word ids. Note that the order is significant for the *! ranking. *! *! @param field_coefficients *! *! An array of ranking coefficients for the different fields. In the *! range of [0x0000-0xffff]. The array (always) has 65 elements: *!
pike.git/src/modules/_WhiteFish/whitefish.c:592:
*! spread: 41-80 *! @elem int 6 *! spread: 81-160 *! @elem int 7 *! spread: 161- *! @endarray *! *! @param blobfeeder *! *! This function returns a Pike string containing the word hits for a
-
*! certain word
_id
. Call repeatedly until it returns @expr{0@}.
+
*! certain word. Call repeatedly until it returns @expr{0@}.
*/ { double proximity_coefficients[8]; double field_coefficients[65]; int numblobs, i, cutoff; Blob **blobs; struct svalue *cb; struct object *res; struct array *_words, *_field, *_prox;
pike.git/src/modules/_WhiteFish/whitefish.c:622:
numblobs = _words->size; if( !numblobs ) { struct object *o = wf_resultset_new( ); pop_n_elems( args ); wf_resultset_push( o ); return; }
-
blobs =
malloc
( sizeof(Blob *)
* numblobs
);
+
blobs =
calloc
(
numblobs,
sizeof(Blob *) );
for( i = 0; i<numblobs; i++ ) blobs[i] = wf_blob_new( cb, _words->item[i].u.string ); for( i = 0; i<8; i++ ) proximity_coefficients[i] = (double)_prox->item[i].u.integer; for( i = 0; i<65; i++ ) field_coefficients[i] = (double)_field->item[i].u.integer;
pike.git/src/modules/_WhiteFish/whitefish.c:654:
PIKE_MODULE_INIT { init_resultset_program(); init_blob_program(); init_blobs_program(); init_linkfarm_program(); add_function( "do_query_or", f_do_query_or, "function(array(string),array(int),array(int),int"
-
",function(string,int:string):object)",
+
",function(string,int
,int
:string):object)",
0 ); add_function( "do_query_and", f_do_query_and, "function(array(string),array(int),array(int),int"
-
",function(string,int:string):object)",
+
",function(string,int
,int
:string):object)",
0 ); add_function( "do_query_phrase", f_do_query_phrase, "function(array(string),array(int)"
-
",function(string,int:string):object)",
+
",function(string,int
,int
:string):object)",
0 ); } PIKE_MODULE_EXIT { exit_resultset_program(); exit_blob_program(); exit_blobs_program(); exit_linkfarm_program(); }