GNUnet 0.21.0
perf-regex.c
Go to the documentation of this file.
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2012 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
20
26#include "platform.h"
27#include <regex.h>
28#include <time.h>
29#include "regex_internal_lib.h"
30#include "regex_test_lib.h"
31
32
44static void
45print_edge (void *cls,
46 const struct GNUNET_HashCode *key,
47 const char *proof,
48 int accepting,
49 unsigned int num_edges,
50 const struct REGEX_BLOCK_Edge *edges)
51{
52 unsigned int i;
53
54 printf ("%s: %s, proof: `%s'\n",
56 accepting ? "ACCEPTING" : "",
57 proof);
58 for (i = 0; i < num_edges; i++)
59 printf (" `%s': %s\n",
60 edges[i].label,
61 GNUNET_h2s (&edges[i].destination));
62}
63
64
75int
76main (int argc, char *const *argv)
77{
78 struct REGEX_INTERNAL_Automaton*dfa;
79 char **regexes;
80 char *buffer;
81 char *regex;
82 int compression;
83 unsigned int alphabet_size;
84 long size;
85
86 GNUNET_log_setup ("perf-regex", "DEBUG", NULL);
87 if (4 != argc)
88 {
89 fprintf (stderr,
90 "Usage: %s REGEX_FILE ALPHABET_SIZE COMPRESSION\n",
91 argv[0]);
92 return 1;
93 }
94 regexes = REGEX_TEST_read_from_file (argv[1]);
95 if (NULL == regexes)
96 {
97 fprintf (stderr,
98 "Failed to read regexes from `%s'\n",
99 argv[1]);
100 return 2;
101 }
102 alphabet_size = atoi (argv[2]);
103 compression = atoi (argv[3]);
104 printf ("********* PERF-REGEX *********'\n");
105 printf ("Using:\n file '%s'\n Alphabet size %u\n compression %d\n",
106 argv[1], alphabet_size, compression);
107 fflush (stdout);
108 buffer = REGEX_TEST_combine (regexes, alphabet_size);
109 GNUNET_asprintf (&regex, "GNUNET_REGEX_PROFILER_(%s)(0|1)*", buffer);
110 size = strlen (regex);
111
112 fprintf (stderr,
113 "Combined regex (%ld bytes):\n%s\n",
114 size,
115 regex);
116 dfa = REGEX_INTERNAL_construct_dfa (regex, size, compression);
117 printf ("********* ALL EDGES *********'\n");
119 printf ("\n\n********* REACHABLE EDGES *********'\n");
122 GNUNET_free (buffer);
125 return 0;
126}
127
128
129/* end of prof-regex.c */
struct GNUNET_HashCode key
The key used in the DHT.
static uint64_t proof
Definition: gnunet-scrypt.c:49
const char * GNUNET_h2s(const struct GNUNET_HashCode *hc)
Convert a hash value to a string (for printing debug messages).
enum GNUNET_GenericReturnValue GNUNET_log_setup(const char *comp, const char *loglevel, const char *logfile)
Setup logging.
int int GNUNET_asprintf(char **buf, const char *format,...) __attribute__((format(printf
Like asprintf, just portable.
#define GNUNET_free(ptr)
Wrapper around free.
static unsigned int size
Size of the "table".
Definition: peer.c:68
static void print_edge(void *cls, const struct GNUNET_HashCode *key, const char *proof, int accepting, unsigned int num_edges, const struct REGEX_BLOCK_Edge *edges)
Print information about the given node and its edges to stdout.
Definition: perf-regex.c:45
int main(int argc, char *const *argv)
The main function of the regex performance test.
Definition: perf-regex.c:76
void REGEX_INTERNAL_iterate_all_edges(struct REGEX_INTERNAL_Automaton *a, REGEX_INTERNAL_KeyIterator iterator, void *iterator_cls)
Iterate over all edges starting from start state of automaton 'a'.
struct REGEX_INTERNAL_Automaton * REGEX_INTERNAL_construct_dfa(const char *regex, const size_t len, unsigned int max_path_len)
Construct DFA for the given 'regex' of length 'len'.
void REGEX_INTERNAL_iterate_reachable_edges(struct REGEX_INTERNAL_Automaton *a, REGEX_INTERNAL_KeyIterator iterator, void *iterator_cls)
Iterate over all edges of automaton 'a' that are reachable from a state with a proof of at least GNUN...
void REGEX_INTERNAL_automaton_destroy(struct REGEX_INTERNAL_Automaton *a)
Free the memory allocated by constructing the REGEX_INTERNAL_Automaton.
library to parse regular expressions into dfa
void REGEX_TEST_free_from_file(char **regexes)
Free all memory reserved for a set of regexes created by read_from_file.
char * REGEX_TEST_combine(char *const regexes[], unsigned int alphabet_size)
Combine an array of regexes into a single prefix-shared regex.
char ** REGEX_TEST_read_from_file(const char *filename)
Read a set of regexes from a file, one per line and return them in an array suitable for REGEX_TEST_c...
A 512-bit hashcode.
Edge representation.
Automaton representation.