1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <stdint.h>
4 #include <string.h>
5
6 #include "vtv_utils.h"
7 #include "vtv_rts.h"
8
9 /* This configuration will test mostly inserting of elements that are already inserted since
10 the number of repeats is 200 */
11
12 #define NUM_MAPS 4000
13 #define ELEMENTS_PER_MAP 100
14 #define NUM_REPEATS 200
15
16 #define KEY_TYPE_FIXED_SIZE 8
17 void *key_buffer = malloc (17);
18 typedef char * name_string;
19 name_string fake_names[NUM_MAPS];
20
21 /* This variable has to be put in rel.ro */
22 void * maps[NUM_MAPS] VTV_PROTECTED_VAR;
23
24 struct fake_vt {
25 void * fake_vfp [4];
26 };
27 void * fake_vts [NUM_MAPS * ELEMENTS_PER_MAP];
28
29 void
generate_names(void)30 generate_names (void)
31 {
32 int i;
33
34 for (i = 0; i < NUM_MAPS; ++i)
35 {
36 fake_names[i] = (char *) malloc (9 * sizeof (char));
37 snprintf (fake_names[i], 9, "name%d", i);
38 }
39 }
40
41 static uint32_t
vtv_string_hash(const char * in)42 vtv_string_hash(const char *in)
43 {
44 const char *s = in;
45 uint32_t h = 0;
46
47 for ( ; *s; ++s)
48 h = 5 * h + *s;
49 return h;
50 }
51
main()52 int main()
53 {
54 __VLTChangePermission(__VLTP_READ_WRITE);
55
56 generate_names ();
57
58 for (int k = 0; k < NUM_REPEATS; k++)
59 {
60 int curr_fake_vt = 0;
61 for (int i = 0; i < NUM_MAPS; i++)
62 {
63 uint32_t *value_ptr = (uint32_t *) key_buffer;
64 uint32_t len1 = strlen (fake_names[i]);
65 uint32_t hash_value = vtv_string_hash (fake_names[i]);
66 void *temp_array[ELEMENTS_PER_MAP];
67
68 *value_ptr = len1;
69 value_ptr++;
70 *value_ptr = hash_value;
71
72 memcpy ((char *) key_buffer + KEY_TYPE_FIXED_SIZE, fake_names[i],
73 len1);
74
75
76 #ifdef VTV_DEBUG
77 __VLTRegisterPairDebug (&maps[i], (char *) key_buffer, 128,
78 &fake_vts[curr_fake_vt], "", "");
79 #else
80 __VLTRegisterPair (&maps[i], (char *) key_buffer, 128,
81 &fake_vts[curr_fake_vt]);
82 #endif
83 for (int j = 0; j < ELEMENTS_PER_MAP; j++)
84 {
85 temp_array[j] = &fake_vts[curr_fake_vt];
86 curr_fake_vt++;
87 }
88 #ifdef VTV_DEBUG
89 __VLTRegisterSetDebug (&maps[i], (char *) key_buffer, 128, 100,
90 (void **) &temp_array);
91 #else
92 __VLTRegisterSet (&maps[i], (char *) key_buffer, 128, 100,
93 (void **) &temp_array);
94 #endif
95 }
96 }
97
98 __VLTChangePermission(__VLTP_READ_ONLY);
99
100 return 0;
101 }
102