Algorithm-MarkovChain-GHash
view release on metacpan or search on metacpan
CODE:
IM* im = g_malloc(sizeof(IM));
SV* obj = newSViv((IV)im);
im->longest = 0;
im->dictionary = g_hash_table_new(g_str_hash, g_str_equal);
im->chains = g_hash_table_new(g_str_hash, g_str_equal);
SvREADONLY_on(obj);
RETVAL = obj;
OUTPUT:
RETVAL
void
_c_destroy (obj)
SV *obj
CODE:
{
IM* im = (IM*) SvIV(phash_value(SvRV(obj), "_cstuff"));
g_free(keys);
}
int
longest_sequence (obj)
SV* obj;
CODE:
IM* im = (IM*) SvIV(phash_value(SvRV(obj), "_cstuff"));
RETVAL = im->longest;
OUTPUT:
RETVAL
int
sequence_known (obj, stub)
SV* obj;
char *stub;
CODE:
IM* im = (IM*) SvIV(phash_value(SvRV(obj), "_cstuff"));
RETVAL = (int) g_hash_table_lookup(im->chains, stub);
OUTPUT:
RETVAL
char*
random_sequence (obj)
SV *obj;
CODE:
IM* im = (IM*) SvIV(phash_value(SvRV(obj), "_cstuff"));
int nkeys = g_hash_table_size(im->chains);
char **keys = g_malloc(nkeys * sizeof(char *));
keys[0] = (char*) nkeys;
g_hash_table_foreach(im->chains, get_keys, keys);
nkeys = (1.0 * nkeys * rand()) / (1.0*RAND_MAX);
RETVAL = keys[nkeys];
g_free(keys);
OUTPUT:
RETVAL
( run in 0.350 second using v1.01-cache-2.11-cpan-4e96b696675 )