예제 #1
0
/**
 * Announce again a regular expression previously announced.
 * Does use caching to speed up process.
 *
 * @param h Handle returned by a previous #REGEX_INTERNAL_announce call().
 */
void
REGEX_INTERNAL_reannounce (struct REGEX_INTERNAL_Announcement *h)
{
  GNUNET_assert (NULL != h->dfa); /* make sure to call announce first */
  LOG (GNUNET_ERROR_TYPE_INFO,
       "REGEX_INTERNAL_reannounce: %s\n",
       h->regex);
  REGEX_INTERNAL_iterate_reachable_edges (h->dfa,
                                          &regex_iterator,
                                          h);
}
예제 #2
0
/**
 * The main function of the regex performace test.
 *
 * Read a set of regex from a file, combine them and create a DFA from the
 * resulting combined regex.
 *
 * @param argc number of arguments from the command line
 * @param argv command line arguments
 * @return 0 ok, 1 on error
 */
int
main (int argc, char *const *argv)
{
  struct REGEX_INTERNAL_Automaton* dfa;
  char **regexes;
  char *buffer;
  char *regex;
  int compression;
  long size;

  GNUNET_log_setup ("perf-regex", "DEBUG", NULL);
  if (3 != argc)
  {
    fprintf (stderr,
	     "Usage: %s REGEX_FILE COMPRESSION\n",
	     argv[0]);
    return 1;
  }
  regexes = REGEX_TEST_read_from_file (argv[1]);
  if (NULL == regexes)
  {
    fprintf (stderr,
	     "Failed to read regexes from `%s'\n",
	     argv[1]);
    return 2;
  }
  compression = atoi (argv[2]);

  buffer = REGEX_TEST_combine (regexes);
  GNUNET_asprintf (&regex, "GNUNET_REGEX_PROFILER_(%s)(0|1)*", buffer);
  size = strlen (regex);

  fprintf (stderr,
	   "Combined regex (%ld bytes):\n%s\n",
	   size,
	   regex);
  dfa = REGEX_INTERNAL_construct_dfa (regex, size, compression);
  printf ("********* ALL EDGES *********'\n");
  REGEX_INTERNAL_iterate_all_edges (dfa, &print_edge, NULL);
  printf ("\n\n********* REACHABLE EDGES *********'\n");
  REGEX_INTERNAL_iterate_reachable_edges (dfa, &print_edge, NULL);
  REGEX_INTERNAL_automaton_destroy (dfa);
  GNUNET_free (buffer);
  REGEX_TEST_free_from_file (regexes);
  GNUNET_free (regex);
  return 0;
}