Algorithm-MarkovChain-GHash

 view release on metacpan or  search on metacpan

GHash.xs  view on Meta::CPAN

  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"));

GHash.xs  view on Meta::CPAN

    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 )