/simpletypesystem/trunk

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/simpletypesystem/trunk

« back to all changes in this revision

Viewing changes to libssts/primes.h

  • Committer: Gustav Hartvigsson
  • Date: 2017-01-24 20:55:19 UTC
  • Revision ID: gustav.hartvigsson@gmail.com-20170124205519-gtr18o3dwbunrrnx
* Fixed the tests in the CMake file
* Made doxygen output static declarations.
* Started work on SApplication
* Played with BaseN.c
  * Now it is a lil' bit better
* Spilt defs.h
  * Added types.h
    * Started work on the full typesystem.
      (Still needs testing)
  * Added primes.[c,h]
    * Contains some static array with primes.
      ("Good" primes, and all primes up to 5 000.
    * And helper functions related to Primes (Needs Tests).
* fixed s_dynamic_array_dump_array.
  (The old version did not make much sense)
* removed some functions from DymanicArray.c
* fixed compiler warnings in Mainloop.c
* removed s_map_(de)serialize_json functions.
* Made s_thread_status_get_name be less prone to error
  (This due to the C11 standard not specifing what these
   values should be)
* fixed s_thread_run
* fixed s_threa_stop

  TODO:
* Write tests for the s_prime_* functions
* Write tests for the s_type_* functions.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#pragma once
 
2
 
 
3
#include "defs.h"
 
4
 
 
5
/**
 
6
 * @file
 
7
 * @addtogroup Definitions
 
8
 * @{
 
9
 * @defgroup Primes Primes
 
10
 * @addtogroup Primes
 
11
 *   @{
 
12
 * @brief List of prime numbers and prime number utinity functions.
 
13
 */
 
14
 
 
15
/**
 
16
 *
 
17
 * We skip the first 100 primes and then add 100 and see what prime is closest
 
18
 * in and add it. This will create a good distrobution of primes that can be
 
19
 * used in hash maps.
 
20
 *
 
21
 * The list goes up to 1999. (there are 20 elements in the list.)
 
22
 */
 
23
S_UNUSED
 
24
static suint SPrimeListGood [20] = {
 
25
  101,
 
26
  199,
 
27
  307,
 
28
  401,
 
29
  499,
 
30
  601,
 
31
  701,
 
32
  797,
 
33
  887,
 
34
  997,
 
35
  1103,
 
36
  1201,
 
37
  1301,
 
38
  1399,
 
39
  1499,
 
40
  1601,
 
41
  1699,
 
42
  1789,
 
43
  1901,
 
44
  1999
 
45
};
 
46
 
 
47
#define S_PRIME_LIST_GOOD_LEN 20
 
48
 
 
49
/**
 
50
 * A longer list of primes between 1 and 5000
 
51
 */
 
52
S_UNUSED
 
53
static suint SPrimeListLong[670] = {
 
54
  2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
 
55
  73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
 
56
  157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
 
57
  239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
 
58
  331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
 
59
  421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
 
60
  509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
 
61
  613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
 
62
  709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
 
63
  821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
 
64
  919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997,
 
65
  
 
66
  1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087,
 
67
  1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181,
 
68
  1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279,
 
69
  1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373,
 
70
  1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471,
 
71
  1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559,
 
72
  1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637,
 
73
  1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747,
 
74
  1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867,
 
75
  1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973,
 
76
  1979, 1987, 1993, 1997, 1999,
 
77
  
 
78
  2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089,
 
79
  2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207,
 
80
  2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297,
 
81
  2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389,
 
82
  2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503,
 
83
  2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621,
 
84
  2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707,
 
85
  2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797,
 
86
  2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903,
 
87
  2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999,
 
88
  
 
89
  3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109,
 
90
  3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221,
 
91
  3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329,
 
92
  3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449,
 
93
  3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539,
 
94
  3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631,
 
95
  3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733,
 
96
  3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851,
 
97
  3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943,
 
98
  3947, 3967, 3989,
 
99
  
 
100
  4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091,
 
101
  4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211,
 
102
  4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289,
 
103
  4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423,
 
104
  4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523,
 
105
  4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649,
 
106
  4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759,
 
107
  4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889,
 
108
  4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987,
 
109
  4993, 4999
 
110
};
 
111
 
 
112
#define S_PRIME_LIST_LONG_LEN 669
 
113
 
 
114
 
 
115
/**
 
116
 * Sees wether n is a prime or not.
 
117
 *
 
118
 * @param n The number to check.
 
119
 *
 
120
 * @returns TRUE when n is a prime.
 
121
 * @returns FALSE when n is not otherwise.
 
122
 */
 
123
S_EXPORTED
 
124
sboolean
 
125
s_prime_is (suint n);
 
126
 
 
127
/**
 
128
 * Alias
 
129
 */
 
130
#define s_prime_is_prime(n) s_prime_is(n)
 
131
 
 
132
/**
 
133
 * Get a random prime from a list of primes.
 
134
 *
 
135
 * @returns a random prime from SPrimeListLong
 
136
 */
 
137
S_EXPORTED
 
138
suint
 
139
s_prime_random ();
 
140
 
 
141
 
 
142
 
 
143
/**
 
144
 * @}
 
145
 * @}
 
146
 */