summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--README.md11
-rw-r--r--benchmarks/external/ankerl/unordered_dense.h11
-rw-r--r--benchmarks/misc/cbits_benchmark.cpp12
-rw-r--r--benchmarks/misc/rust_cmap.c6
-rw-r--r--benchmarks/picobench/picobench_cmap.cpp34
-rw-r--r--benchmarks/picobench/picobench_csmap.cpp40
-rw-r--r--benchmarks/plotbench/cdeq_benchmark.cpp40
-rw-r--r--benchmarks/plotbench/clist_benchmark.cpp36
-rw-r--r--benchmarks/plotbench/cmap_benchmark.cpp40
-rw-r--r--benchmarks/plotbench/cpque_benchmark.cpp10
-rw-r--r--benchmarks/plotbench/csmap_benchmark.cpp40
-rw-r--r--benchmarks/plotbench/cvec_benchmark.cpp32
-rw-r--r--docs/ccommon_api.md43
-rw-r--r--docs/clist_api.md2
-rw-r--r--docs/cpque_api.md6
-rw-r--r--docs/cqueue_api.md4
-rw-r--r--docs/crandom_api.md2
-rw-r--r--docs/cregex_api.md8
-rw-r--r--examples/arc_demo.c2
-rw-r--r--examples/birthday.c4
-rw-r--r--examples/bits.c12
-rw-r--r--examples/bits2.c6
-rw-r--r--examples/books.c2
-rw-r--r--examples/convert.c2
-rw-r--r--examples/cpque.c6
-rw-r--r--examples/forfilter.c4
-rw-r--r--examples/gauss1.c2
-rw-r--r--examples/gauss2.c2
-rw-r--r--examples/inits.c2
-rw-r--r--examples/list.c2
-rw-r--r--examples/prime.c4
-rw-r--r--examples/priority.c6
-rw-r--r--examples/queue.c4
-rw-r--r--examples/random.c6
-rw-r--r--examples/regex2.c6
-rw-r--r--examples/stack.c4
-rw-r--r--include/stc/cbits.h4
-rw-r--r--include/stc/ccommon.h21
-rw-r--r--src/checkauto.l3
39 files changed, 246 insertions, 235 deletions
diff --git a/README.md b/README.md
index b0585dfb..6108550e 100644
--- a/README.md
+++ b/README.md
@@ -469,12 +469,13 @@ Memory efficiency
- Added **cregex** with documentation - powerful regular expressions.
- Updated **cstr**, now always takes self as pointer, like all containers except csview.
- Updated **cvec**, **cdeq**, changed `*_range*` function names.
-- `c_with`: macro renamed from `c_autovar`, which is deprecated. Like Python's **with** statement.
-- `c_scope`: macro renamed from `c_autoscope`, which is deprecated.
-- `c_defer`: macro renamed from `c_autodefer`, which is deprecated. Like Go's and Zig's **defer**.
-- `c_forrange` with 3 to 5 args: swapped 1st <-> 2nd arg.
-- New `c_forlist` macro to replace usages of `c_forarray`/`c_apply`, which is removed.
- Added back **coption** - command line argument parsing.
+- NEW / DEPRECATED:
+ - `c_forlist`: macro replacing `c_forarray` and `c_apply` which is deprecated. More user friendly.
+ - `c_forloop`: macro replacing `c_forrange` which is deprecated. Uses 'long long' as iterator type.
+ - `c_with`: macro renamed from `c_autovar`, which is deprecated. Like Python's **with** statement.
+ - `c_scope`: macro renamed from `c_autoscope`, which is deprecated.
+ - `c_defer`: macro renamed from `c_autodefer`, which is deprecated. Resembles Go's and Zig's **defer**.
- [See detailed changes for version 3](#version-3).
## Changes version 3.8
diff --git a/benchmarks/external/ankerl/unordered_dense.h b/benchmarks/external/ankerl/unordered_dense.h
index 220c65b8..3d7b256a 100644
--- a/benchmarks/external/ankerl/unordered_dense.h
+++ b/benchmarks/external/ankerl/unordered_dense.h
@@ -1,7 +1,7 @@
///////////////////////// ankerl::unordered_dense::{map, set} /////////////////////////
// A fast & densely stored hashmap and hashset based on robin-hood backward shift deletion.
-// Version 1.3.1
+// Version 1.3.3
// https://github.com/martinus/unordered_dense
//
// Licensed under the MIT License <http://opensource.org/licenses/MIT>.
@@ -32,7 +32,7 @@
// see https://semver.org/spec/v2.0.0.html
#define ANKERL_UNORDERED_DENSE_VERSION_MAJOR 1 // NOLINT(cppcoreguidelines-macro-usage) incompatible API changes
#define ANKERL_UNORDERED_DENSE_VERSION_MINOR 3 // NOLINT(cppcoreguidelines-macro-usage) backwards compatible functionality
-#define ANKERL_UNORDERED_DENSE_VERSION_PATCH 1 // NOLINT(cppcoreguidelines-macro-usage) backwards compatible bug fixes
+#define ANKERL_UNORDERED_DENSE_VERSION_PATCH 3 // NOLINT(cppcoreguidelines-macro-usage) backwards compatible bug fixes
// API versioning with inline namespace, see https://www.foonathan.net/2018/11/inline-namespaces/
#define ANKERL_UNORDERED_DENSE_VERSION_CONCAT1(major, minor, patch) v##major##_##minor##_##patch
@@ -214,10 +214,9 @@ static inline void mum(uint64_t* a, uint64_t* b) {
template <typename T, typename Enable = void>
struct hash {
- using is_avalanching = void;
auto operator()(T const& obj) const noexcept(noexcept(std::declval<std::hash<T>>().operator()(std::declval<T const&>())))
-> uint64_t {
- return detail::wyhash::hash(std::hash<T>{}(obj));
+ return std::hash<T>{}(obj);
}
};
@@ -1189,12 +1188,12 @@ public:
return do_find(key);
}
- auto contains(Key const& key) const -> size_t {
+ auto contains(Key const& key) const -> bool {
return find(key) != end();
}
template <class K, class H = Hash, class KE = KeyEqual, is_transparent<H, KE> = true>
- auto contains(K const& key) const -> size_t {
+ auto contains(K const& key) const -> bool {
return find(key) != end();
}
diff --git a/benchmarks/misc/cbits_benchmark.cpp b/benchmarks/misc/cbits_benchmark.cpp
index dd709db1..6dea2808 100644
--- a/benchmarks/misc/cbits_benchmark.cpp
+++ b/benchmarks/misc/cbits_benchmark.cpp
@@ -42,7 +42,7 @@ int main(int argc, char **argv)
csrandom(seed);
current_time = get_time_in_ms();
- c_forrange (40 * N)
+ c_forloop (40 * N)
{
uint64_t r = crandom();
bools[r & (N-1)] = r & 1<<29;
@@ -51,7 +51,7 @@ int main(int argc, char **argv)
difference1 = get_time_in_ms() - current_time;
current_time = get_time_in_ms();
- c_forrange (100) c_forrange (num, N)
+ c_forloop (100) c_forloop (num, N)
{
total += bools[num];
}
@@ -70,7 +70,7 @@ int main(int argc, char **argv)
current_time = get_time_in_ms();
bitset<N> bits;
- c_forrange (40 * N)
+ c_forloop (40 * N)
{
uint64_t r = crandom();
bits[r & (N-1)] = r & 1<<29;
@@ -79,7 +79,7 @@ int main(int argc, char **argv)
difference1 = get_time_in_ms() - current_time;
current_time = get_time_in_ms();
- c_forrange (100) c_forrange (num, N)
+ c_forloop (100) c_forloop (num, N)
{
total += bits[num];
}
@@ -96,7 +96,7 @@ int main(int argc, char **argv)
current_time = get_time_in_ms();
cbits bits2 = cbits_with_size(N, false);
- c_forrange (40 * N)
+ c_forloop (40 * N)
{
uint64_t r = crandom();
cbits_set_value(&bits2, r & (N-1), r & 1<<29);
@@ -105,7 +105,7 @@ int main(int argc, char **argv)
difference1 = get_time_in_ms() - current_time;
current_time = get_time_in_ms();
- c_forrange (100) c_forrange (num, N)
+ c_forloop (100) c_forloop (num, N)
{
total += cbits_at(&bits2, num);
}
diff --git a/benchmarks/misc/rust_cmap.c b/benchmarks/misc/rust_cmap.c
index afd384fc..e5d85b1c 100644
--- a/benchmarks/misc/rust_cmap.c
+++ b/benchmarks/misc/rust_cmap.c
@@ -33,7 +33,7 @@ int main()
uint64_t rng[3] = {1872361123, 123879177, 87739234}, sum;
clock_t now = clock();
- c_forrange (n) {
+ c_forloop (n) {
uint64_t key = romu_trio(rng) & mask;
cmap_u64_insert(&m, key, 0).ref->second += 1;
}
@@ -41,7 +41,7 @@ int main()
now = clock();
sum = 0;
- c_forrange (key, mask + 1) { sum += cmap_u64_contains(&m, key); }
+ c_forloop (key, mask + 1) { sum += cmap_u64_contains(&m, key); }
printf("lookup : %" PRIuMAX "ms \tsum : %" PRIuMAX "\n", (clock() - now)/ms, sum);
now = clock();
@@ -51,7 +51,7 @@ int main()
uint64_t rng2[3] = {1872361123, 123879177, 87739234};
now = clock();
- c_forrange (n) {
+ c_forloop (n) {
uint64_t key = romu_trio(rng2) & mask;
cmap_u64_erase(&m, key);
}
diff --git a/benchmarks/picobench/picobench_cmap.cpp b/benchmarks/picobench/picobench_cmap.cpp
index 7d114d30..afc3e3d1 100644
--- a/benchmarks/picobench/picobench_cmap.cpp
+++ b/benchmarks/picobench/picobench_cmap.cpp
@@ -54,14 +54,14 @@ static void ins_and_erase_i(picobench::state& s)
csrandom(seed);
picobench::scope scope(s);
- c_forrange (s.iterations())
+ c_forloop (s.iterations())
map[crandom()];
map.clear();
csrandom(seed);
- c_forrange (s.iterations())
+ c_forloop (s.iterations())
map[crandom()];
csrandom(seed);
- c_forrange (s.iterations())
+ c_forloop (s.iterations())
map.erase(crandom());
s.set_result(map.size());
}
@@ -73,14 +73,14 @@ static void ins_and_erase_cmap_i(picobench::state& s)
csrandom(seed);
picobench::scope scope(s);
- c_forrange (s.iterations())
+ c_forloop (s.iterations())
cmap_i_insert(&map, crandom(), 0);
cmap_i_clear(&map);
csrandom(seed);
- c_forrange (s.iterations())
+ c_forloop (s.iterations())
cmap_i_insert(&map, crandom(), 0);
csrandom(seed);
- c_forrange (s.iterations())
+ c_forloop (s.iterations())
cmap_i_erase(&map, crandom());
s.set_result(cmap_i_size(&map));
cmap_i_drop(&map);
@@ -93,14 +93,14 @@ static void ins_and_erase_cmap_x(picobench::state& s)
csrandom(seed);
picobench::scope scope(s);
- c_forrange (s.iterations())
+ c_forloop (s.iterations())
cmap_x_insert(&map, crandom(), 0);
cmap_x_clear(&map);
csrandom(seed);
- c_forrange (s.iterations())
+ c_forloop (s.iterations())
cmap_x_insert(&map, crandom(), 0);
csrandom(seed);
- c_forrange (s.iterations())
+ c_forloop (s.iterations())
cmap_x_erase(&map, crandom());
s.set_result(cmap_x_size(&map));
cmap_x_drop(&map);
@@ -126,7 +126,7 @@ static void ins_and_access_i(picobench::state& s)
csrandom(seed);
picobench::scope scope(s);
- c_forrange (N1)
+ c_forloop (N1)
result += ++map[crandom() & mask];
s.set_result(result);
}
@@ -140,7 +140,7 @@ static void ins_and_access_cmap_i(picobench::state& s)
csrandom(seed);
picobench::scope scope(s);
- c_forrange (N1)
+ c_forloop (N1)
result += ++cmap_i_insert(&map, crandom() & mask, 0).ref->second;
s.set_result(result);
cmap_i_drop(&map);
@@ -174,7 +174,7 @@ static void ins_and_access_s(picobench::state& s)
csrandom(seed);
picobench::scope scope(s);
- c_forrange (s.iterations()) {
+ c_forloop (s.iterations()) {
randomize(&str[0], str.size());
map.emplace(str, str);
randomize(&str[0], str.size());
@@ -193,7 +193,7 @@ static void ins_and_access_cmap_s(picobench::state& s)
csrandom(seed);
picobench::scope scope(s);
- c_forrange (s.iterations()) {
+ c_forloop (s.iterations()) {
randomize(buf, s.arg());
//if (s.arg() > 30) { printf("%s\n", buf); exit(0); }
cmap_str_emplace(&map, buf, buf);
@@ -228,7 +228,7 @@ static void iterate_x(picobench::state& s)
size_t result = 0;
// measure insert then iterate whole map
- c_forrange (n, s.iterations()) {
+ c_forloop (n, s.iterations()) {
map[crandom()] = n;
if (!(n & K)) for (auto const& keyVal : map)
result += keyVal.second;
@@ -238,7 +238,7 @@ static void iterate_x(picobench::state& s)
csrandom(seed);
// measure erase then iterate whole map
- c_forrange (n, s.iterations()) {
+ c_forloop (n, s.iterations()) {
map.erase(crandom());
if (!(n & K)) for (auto const& keyVal : map)
result += keyVal.second;
@@ -257,7 +257,7 @@ static void iterate_cmap_x(picobench::state& s)
size_t result = 0;
// measure insert then iterate whole map
- c_forrange (n, s.iterations()) {
+ c_forloop (n, s.iterations()) {
cmap_x_insert_or_assign(&map, crandom(), n);
if (!(n & K)) c_foreach (i, cmap_x, map)
result += i.ref->second;
@@ -267,7 +267,7 @@ static void iterate_cmap_x(picobench::state& s)
csrandom(seed);
// measure erase then iterate whole map
- c_forrange (n, s.iterations()) {
+ c_forloop (n, s.iterations()) {
cmap_x_erase(&map, crandom());
if (!(n & K)) c_foreach (i, cmap_x, map)
result += i.ref->second;
diff --git a/benchmarks/picobench/picobench_csmap.cpp b/benchmarks/picobench/picobench_csmap.cpp
index 5caab6cc..1007cfbb 100644
--- a/benchmarks/picobench/picobench_csmap.cpp
+++ b/benchmarks/picobench/picobench_csmap.cpp
@@ -38,7 +38,7 @@ static void ctor_and_ins_one_i(picobench::state& s)
{
size_t result = 0;
picobench::scope scope(s);
- c_forrange (n, s.iterations()) {
+ c_forloop (n, s.iterations()) {
MapInt map;
map[n];
result += map.size();
@@ -50,7 +50,7 @@ static void ctor_and_ins_one_csmap_i(picobench::state& s)
{
size_t result = 0;
picobench::scope scope(s);
- c_forrange (n, s.iterations()) {
+ c_forloop (n, s.iterations()) {
csmap_i map = csmap_i_init();
csmap_i_insert(&map, n, 0);
result += csmap_i_size(&map);
@@ -73,7 +73,7 @@ static void insert_i(picobench::state& s)
MapInt map;
csrandom(seed);
picobench::scope scope(s);
- c_forrange (n, s.iterations())
+ c_forloop (n, s.iterations())
map.emplace(crandom() & 0xfffffff, n);
s.set_result(map.size());
}
@@ -83,7 +83,7 @@ static void insert_csmap_i(picobench::state& s)
csmap_i map = csmap_i_init();
csrandom(seed);
picobench::scope scope(s);
- c_forrange (n, s.iterations())
+ c_forloop (n, s.iterations())
csmap_i_insert(&map, crandom() & 0xfffffff, n);
s.set_result(csmap_i_size(&map));
csmap_i_drop(&map);
@@ -106,17 +106,17 @@ static void ins_and_erase_i(picobench::state& s)
csrandom(seed);
picobench::scope scope(s);
- c_forrange (i, s.iterations())
+ c_forloop (i, s.iterations())
map.emplace(crandom() & mask, i);
result = map.size();
map.clear();
csrandom(seed);
- c_forrange (i, s.iterations())
+ c_forloop (i, s.iterations())
map[crandom() & mask] = i;
csrandom(seed);
- c_forrange (s.iterations())
+ c_forloop (s.iterations())
map.erase(crandom() & mask);
s.set_result(result);
}
@@ -129,17 +129,17 @@ static void ins_and_erase_csmap_i(picobench::state& s)
csrandom(seed);
picobench::scope scope(s);
- c_forrange (i, s.iterations())
+ c_forloop (i, s.iterations())
csmap_i_insert(&map, crandom() & mask, i);
result = csmap_i_size(&map);
csmap_i_clear(&map);
csrandom(seed);
- c_forrange (i, s.iterations())
+ c_forloop (i, s.iterations())
csmap_i_insert_or_assign(&map, crandom() & mask, i);
csrandom(seed);
- c_forrange (s.iterations())
+ c_forloop (s.iterations())
csmap_i_erase(&map, crandom() & mask);
s.set_result(result);
csmap_i_drop(&map);
@@ -161,7 +161,7 @@ static void ins_and_access_i(picobench::state& s)
csrandom(seed);
picobench::scope scope(s);
- c_forrange (s.iterations()) {
+ c_forloop (s.iterations()) {
result += ++map[crandom() & mask];
auto it = map.find(crandom() & mask);
if (it != map.end()) map.erase(it->first);
@@ -177,7 +177,7 @@ static void ins_and_access_csmap_i(picobench::state& s)
csrandom(seed);
picobench::scope scope(s);
- c_forrange (s.iterations()) {
+ c_forloop (s.iterations()) {
result += ++csmap_i_insert(&map, crandom() & mask, 0).ref->second;
const csmap_i_value* val = csmap_i_get(&map, crandom() & mask);
if (val) csmap_i_erase(&map, val->first);
@@ -208,12 +208,12 @@ static void ins_and_access_s(picobench::state& s)
picobench::scope scope(s);
csrandom(seed);
- c_forrange (s.iterations()) {
+ c_forloop (s.iterations()) {
randomize(&str[0], str.size());
map.emplace(str, str);
}
csrandom(seed);
- c_forrange (s.iterations()) {
+ c_forloop (s.iterations()) {
randomize(&str[0], str.size());
result += map.erase(str);
}
@@ -229,12 +229,12 @@ static void ins_and_access_csmap_s(picobench::state& s)
picobench::scope scope(s);
csrandom(seed);
- c_forrange (s.iterations()) {
+ c_forloop (s.iterations()) {
randomize(buf, s.arg());
csmap_str_emplace(&map, buf, buf);
}
csrandom(seed);
- c_forrange (s.iterations()) {
+ c_forloop (s.iterations()) {
randomize(buf, s.arg());
result += csmap_str_erase(&map, buf);
/*csmap_str_iter it = csmap_str_find(&map, buf);
@@ -266,7 +266,7 @@ static void iterate_x(picobench::state& s)
size_t result = 0;
// measure insert then iterate whole map
- c_forrange (n, s.iterations()) {
+ c_forloop (n, s.iterations()) {
map[crandom()] = n;
if (!(n & K)) for (auto const& keyVal : map)
result += keyVal.second;
@@ -276,7 +276,7 @@ static void iterate_x(picobench::state& s)
csrandom(seed);
// measure erase then iterate whole map
- c_forrange (n, s.iterations()) {
+ c_forloop (n, s.iterations()) {
map.erase(crandom());
if (!(n & K)) for (auto const& keyVal : map)
result += keyVal.second;
@@ -294,7 +294,7 @@ static void iterate_csmap_x(picobench::state& s)
size_t result = 0;
// measure insert then iterate whole map
- c_forrange (n, s.iterations()) {
+ c_forloop (n, s.iterations()) {
csmap_x_insert_or_assign(&map, crandom(), n);
if (!(n & K)) c_foreach (i, csmap_x, map)
result += i.ref->second;
@@ -304,7 +304,7 @@ static void iterate_csmap_x(picobench::state& s)
csrandom(seed);
// measure erase then iterate whole map
- c_forrange (n, s.iterations()) {
+ c_forloop (n, s.iterations()) {
csmap_x_erase(&map, crandom());
if (!(n & K)) c_foreach (i, csmap_x, map)
result += i.ref->second;
diff --git a/benchmarks/plotbench/cdeq_benchmark.cpp b/benchmarks/plotbench/cdeq_benchmark.cpp
index 49db3914..de85114f 100644
--- a/benchmarks/plotbench/cdeq_benchmark.cpp
+++ b/benchmarks/plotbench/cdeq_benchmark.cpp
@@ -29,29 +29,29 @@ Sample test_std_deque() {
s.test[INSERT].t1 = clock();
container con;
csrandom(seed);
- c_forrange (N/3) con.push_front(crandom() & mask1);
- c_forrange (N/3) {con.push_back(crandom() & mask1); con.pop_front();}
- c_forrange (N/3) con.push_back(crandom() & mask1);
+ c_forloop (N/3) con.push_front(crandom() & mask1);
+ c_forloop (N/3) {con.push_back(crandom() & mask1); con.pop_front();}
+ c_forloop (N/3) con.push_back(crandom() & mask1);
s.test[INSERT].t2 = clock();
s.test[INSERT].sum = con.size();
s.test[ERASE].t1 = clock();
- c_forrange (con.size()/2) { con.pop_front(); con.pop_back(); }
+ c_forloop (con.size()/2) { con.pop_front(); con.pop_back(); }
s.test[ERASE].t2 = clock();
s.test[ERASE].sum = con.size();
}{
container con;
csrandom(seed);
- c_forrange (N) con.push_back(crandom() & mask2);
+ c_forloop (N) con.push_back(crandom() & mask2);
s.test[FIND].t1 = clock();
size_t sum = 0;
// Iteration - not inherent find - skipping
//container::iterator it;
- //c_forrange (S) if ((it = std::find(con.begin(), con.end(), crandom() & mask2)) != con.end()) sum += *it;
+ //c_forloop (S) if ((it = std::find(con.begin(), con.end(), crandom() & mask2)) != con.end()) sum += *it;
s.test[FIND].t2 = clock();
s.test[FIND].sum = sum;
s.test[ITER].t1 = clock();
sum = 0;
- c_forrange (R) c_forrange (i, N) sum += con[i];
+ c_forloop (R) c_forloop (i, N) sum += con[i];
s.test[ITER].t2 = clock();
s.test[ITER].sum = sum;
s.test[DESTRUCT].t1 = clock();
@@ -73,29 +73,29 @@ Sample test_stc_deque() {
container con = cdeq_x_init();
//cdeq_x_reserve(&con, N);
csrandom(seed);
- c_forrange (N/3) cdeq_x_push_front(&con, crandom() & mask1);
- c_forrange (N/3) {cdeq_x_push_back(&con, crandom() & mask1); cdeq_x_pop_front(&con);}
- c_forrange (N/3) cdeq_x_push_back(&con, crandom() & mask1);
+ c_forloop (N/3) cdeq_x_push_front(&con, crandom() & mask1);
+ c_forloop (N/3) {cdeq_x_push_back(&con, crandom() & mask1); cdeq_x_pop_front(&con);}
+ c_forloop (N/3) cdeq_x_push_back(&con, crandom() & mask1);
s.test[INSERT].t2 = clock();
s.test[INSERT].sum = cdeq_x_size(&con);
s.test[ERASE].t1 = clock();
- c_forrange (cdeq_x_size(&con)/2) { cdeq_x_pop_front(&con); cdeq_x_pop_back(&con); }
+ c_forloop (cdeq_x_size(&con)/2) { cdeq_x_pop_front(&con); cdeq_x_pop_back(&con); }
s.test[ERASE].t2 = clock();
s.test[ERASE].sum = cdeq_x_size(&con);
cdeq_x_drop(&con);
}{
csrandom(seed);
container con = cdeq_x_init();
- c_forrange (N) cdeq_x_push_back(&con, crandom() & mask2);
+ c_forloop (N) cdeq_x_push_back(&con, crandom() & mask2);
s.test[FIND].t1 = clock();
size_t sum = 0;
//cdeq_x_iter it, end = cdeq_x_end(&con);
- //c_forrange (S) if ((it = cdeq_x_find(&con, crandom() & mask2)).ref != end.ref) sum += *it.ref;
+ //c_forloop (S) if ((it = cdeq_x_find(&con, crandom() & mask2)).ref != end.ref) sum += *it.ref;
s.test[FIND].t2 = clock();
s.test[FIND].sum = sum;
s.test[ITER].t1 = clock();
sum = 0;
- c_forrange (R) c_forrange (i, N) sum += con.data[i];
+ c_forloop (R) c_forloop (i, N) sum += con.data[i];
s.test[ITER].t2 = clock();
s.test[ITER].sum = sum;
s.test[DESTRUCT].t1 = clock();
@@ -109,30 +109,30 @@ Sample test_stc_deque() {
int main(int argc, char* argv[])
{
Sample std_s[SAMPLES + 1], stc_s[SAMPLES + 1];
- c_forrange (i, int, SAMPLES) {
+ c_forloop (i, SAMPLES) {
std_s[i] = test_std_deque();
stc_s[i] = test_stc_deque();
- if (i > 0) c_forrange (j, int, N_TESTS) {
+ if (i > 0) c_forloop (j, N_TESTS) {
if (secs(std_s[i].test[j]) < secs(std_s[0].test[j])) std_s[0].test[j] = std_s[i].test[j];
if (secs(stc_s[i].test[j]) < secs(stc_s[0].test[j])) stc_s[0].test[j] = stc_s[i].test[j];
- if (stc_s[i].test[j].sum != stc_s[0].test[j].sum) printf("Error in sum: test %d, sample %d\n", i, j);
+ if (stc_s[i].test[j].sum != stc_s[0].test[j].sum) printf("Error in sum: test %lld, sample %lld\n", i, j);
}
}
const char* comp = argc > 1 ? argv[1] : "test";
bool header = (argc > 2 && argv[2][0] == '1');
float std_sum = 0, stc_sum = 0;
- c_forrange (j, N_TESTS) {
+ c_forloop (j, N_TESTS) {
std_sum += secs(std_s[0].test[j]);
stc_sum += secs(stc_s[0].test[j]);
}
if (header) printf("Compiler,Library,C,Method,Seconds,Ratio\n");
- c_forrange (j, N_TESTS)
+ c_forloop (j, N_TESTS)
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, std_s[0].name, N, operations[j], secs(std_s[0].test[j]), 1.0f);
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, std_s[0].name, N, "total", std_sum, 1.0f);
- c_forrange (j, N_TESTS)
+ c_forloop (j, N_TESTS)
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, stc_s[0].name, N, operations[j], secs(stc_s[0].test[j]), secs(std_s[0].test[j]) ? secs(stc_s[0].test[j])/secs(std_s[0].test[j]) : 1.0f);
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, stc_s[0].name, N, "total", stc_sum, stc_sum/std_sum);
}
diff --git a/benchmarks/plotbench/clist_benchmark.cpp b/benchmarks/plotbench/clist_benchmark.cpp
index ddd1e2f0..c18ee78e 100644
--- a/benchmarks/plotbench/clist_benchmark.cpp
+++ b/benchmarks/plotbench/clist_benchmark.cpp
@@ -29,28 +29,28 @@ Sample test_std_forward_list() {
s.test[INSERT].t1 = clock();
container con;
csrandom(seed);
- c_forrange (N/2) con.push_front(crandom() & mask1);
- c_forrange (N/2) con.push_front(crandom() & mask1);
+ c_forloop (N/2) con.push_front(crandom() & mask1);
+ c_forloop (N/2) con.push_front(crandom() & mask1);
s.test[INSERT].t2 = clock();
s.test[INSERT].sum = 0;
s.test[ERASE].t1 = clock();
- c_forrange (N) con.pop_front();
+ c_forloop (N) con.pop_front();
s.test[ERASE].t2 = clock();
s.test[ERASE].sum = 0;
}{
container con;
csrandom(seed);
- c_forrange (N) con.push_front(crandom() & mask2);
+ c_forloop (N) con.push_front(crandom() & mask2);
s.test[FIND].t1 = clock();
size_t sum = 0;
container::iterator it;
// Iteration - not inherent find - skipping
- //c_forrange (S) if ((it = std::find(con.begin(), con.end(), crandom() & mask2)) != con.end()) sum += *it;
+ //c_forloop (S) if ((it = std::find(con.begin(), con.end(), crandom() & mask2)) != con.end()) sum += *it;
s.test[FIND].t2 = clock();
s.test[FIND].sum = sum;
s.test[ITER].t1 = clock();
sum = 0;
- c_forrange (R) for (auto i: con) sum += i;
+ c_forloop (R) for (auto i: con) sum += i;
s.test[ITER].t2 = clock();
s.test[ITER].sum = sum;
s.test[DESTRUCT].t1 = clock();
@@ -71,28 +71,28 @@ Sample test_stc_forward_list() {
s.test[INSERT].t1 = clock();
container con = clist_x_init();
csrandom(seed);
- c_forrange (N/2) clist_x_push_front(&con, crandom() & mask1);
- c_forrange (N/2) clist_x_push_back(&con, crandom() & mask1);
+ c_forloop (N/2) clist_x_push_front(&con, crandom() & mask1);
+ c_forloop (N/2) clist_x_push_back(&con, crandom() & mask1);
s.test[INSERT].t2 = clock();
s.test[INSERT].sum = 0;
s.test[ERASE].t1 = clock();
- c_forrange (N) clist_x_pop_front(&con);
+ c_forloop (N) clist_x_pop_front(&con);
s.test[ERASE].t2 = clock();
s.test[ERASE].sum = 0;
clist_x_drop(&con);
}{
csrandom(seed);
container con = clist_x_init();
- c_forrange (N) clist_x_push_front(&con, crandom() & mask2);
+ c_forloop (N) clist_x_push_front(&con, crandom() & mask2);
s.test[FIND].t1 = clock();
size_t sum = 0;
//clist_x_iter it, end = clist_x_end(&con);
- //c_forrange (S) if ((it = clist_x_find(&con, crandom() & mask2)).ref != end.ref) sum += *it.ref;
+ //c_forloop (S) if ((it = clist_x_find(&con, crandom() & mask2)).ref != end.ref) sum += *it.ref;
s.test[FIND].t2 = clock();
s.test[FIND].sum = sum;
s.test[ITER].t1 = clock();
sum = 0;
- c_forrange (R) c_foreach (i, clist_x, con) sum += *i.ref;
+ c_forloop (R) c_foreach (i, clist_x, con) sum += *i.ref;
s.test[ITER].t2 = clock();
s.test[ITER].sum = sum;
s.test[DESTRUCT].t1 = clock();
@@ -106,30 +106,30 @@ Sample test_stc_forward_list() {
int main(int argc, char* argv[])
{
Sample std_s[SAMPLES + 1], stc_s[SAMPLES + 1];
- c_forrange (i, int, SAMPLES) {
+ c_forloop (i, SAMPLES) {
std_s[i] = test_std_forward_list();
stc_s[i] = test_stc_forward_list();
- if (i > 0) c_forrange (j, int, N_TESTS) {
+ if (i > 0) c_forloop (j, N_TESTS) {
if (secs(std_s[i].test[j]) < secs(std_s[0].test[j])) std_s[0].test[j] = std_s[i].test[j];
if (secs(stc_s[i].test[j]) < secs(stc_s[0].test[j])) stc_s[0].test[j] = stc_s[i].test[j];
- if (stc_s[i].test[j].sum != stc_s[0].test[j].sum) printf("Error in sum: test %d, sample %d\n", i, j);
+ if (stc_s[i].test[j].sum != stc_s[0].test[j].sum) printf("Error in sum: test %lld, sample %lld\n", i, j);
}
}
const char* comp = argc > 1 ? argv[1] : "test";
bool header = (argc > 2 && argv[2][0] == '1');
float std_sum = 0, stc_sum = 0;
- c_forrange (j, N_TESTS) {
+ c_forloop (j, N_TESTS) {
std_sum += secs(std_s[0].test[j]);
stc_sum += secs(stc_s[0].test[j]);
}
if (header) printf("Compiler,Library,C,Method,Seconds,Ratio\n");
- c_forrange (j, N_TESTS)
+ c_forloop (j, N_TESTS)
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, std_s[0].name, N, operations[j], secs(std_s[0].test[j]), 1.0f);
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, std_s[0].name, N, "total", std_sum, 1.0f);
- c_forrange (j, N_TESTS)
+ c_forloop (j, N_TESTS)
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, stc_s[0].name, N, operations[j], secs(stc_s[0].test[j]), secs(std_s[0].test[j]) ? secs(stc_s[0].test[j])/secs(std_s[0].test[j]) : 1.0f);
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, stc_s[0].name, N, "total", stc_sum, stc_sum/std_sum);
} \ No newline at end of file
diff --git a/benchmarks/plotbench/cmap_benchmark.cpp b/benchmarks/plotbench/cmap_benchmark.cpp
index cf20c927..cca90461 100644
--- a/benchmarks/plotbench/cmap_benchmark.cpp
+++ b/benchmarks/plotbench/cmap_benchmark.cpp
@@ -29,30 +29,30 @@ Sample test_std_unordered_map() {
csrandom(seed);
s.test[INSERT].t1 = clock();
container con;
- c_forrange (i, N/2) con.emplace(crandom() & mask1, i);
- c_forrange (i, N/2) con.emplace(i, i);
+ c_forloop (i, N/2) con.emplace(crandom() & mask1, i);
+ c_forloop (i, N/2) con.emplace(i, i);
s.test[INSERT].t2 = clock();
s.test[INSERT].sum = con.size();
csrandom(seed);
s.test[ERASE].t1 = clock();
- c_forrange (N) con.erase(crandom() & mask1);
+ c_forloop (N) con.erase(crandom() & mask1);
s.test[ERASE].t2 = clock();
s.test[ERASE].sum = con.size();
}{
container con;
csrandom(seed);
- c_forrange (i, N/2) con.emplace(crandom() & mask1, i);
- c_forrange (i, N/2) con.emplace(i, i);
+ c_forloop (i, N/2) con.emplace(crandom() & mask1, i);
+ c_forloop (i, N/2) con.emplace(i, i);
csrandom(seed);
s.test[FIND].t1 = clock();
size_t sum = 0;
container::iterator it;
- c_forrange (N) if ((it = con.find(crandom() & mask1)) != con.end()) sum += it->second;
+ c_forloop (N) if ((it = con.find(crandom() & mask1)) != con.end()) sum += it->second;
s.test[FIND].t2 = clock();
s.test[FIND].sum = sum;
s.test[ITER].t1 = clock();
sum = 0;
- c_forrange (R) for (auto i: con) sum += i.second;
+ c_forloop (R) for (auto i: con) sum += i.second;
s.test[ITER].t2 = clock();
s.test[ITER].sum = sum;
s.test[DESTRUCT].t1 = clock();
@@ -73,33 +73,33 @@ Sample test_stc_unordered_map() {
csrandom(seed);
s.test[INSERT].t1 = clock();
container con = cmap_x_init();
- c_forrange (i, N/2) cmap_x_insert(&con, crandom() & mask1, i);
- c_forrange (i, N/2) cmap_x_insert(&con, i, i);
+ c_forloop (i, N/2) cmap_x_insert(&con, crandom() & mask1, i);
+ c_forloop (i, N/2) cmap_x_insert(&con, i, i);
s.test[INSERT].t2 = clock();
s.test[INSERT].sum = cmap_x_size(&con);
csrandom(seed);
s.test[ERASE].t1 = clock();
- c_forrange (N) cmap_x_erase(&con, crandom() & mask1);
+ c_forloop (N) cmap_x_erase(&con, crandom() & mask1);
s.test[ERASE].t2 = clock();
s.test[ERASE].sum = cmap_x_size(&con);
cmap_x_drop(&con);
}{
container con = cmap_x_init();
csrandom(seed);
- c_forrange (i, N/2) cmap_x_insert(&con, crandom() & mask1, i);
- c_forrange (i, N/2) cmap_x_insert(&con, i, i);
+ c_forloop (i, N/2) cmap_x_insert(&con, crandom() & mask1, i);
+ c_forloop (i, N/2) cmap_x_insert(&con, i, i);
csrandom(seed);
s.test[FIND].t1 = clock();
size_t sum = 0;
const cmap_x_value* val;
- c_forrange (N)
+ c_forloop (N)
if ((val = cmap_x_get(&con, crandom() & mask1)))
sum += val->second;
s.test[FIND].t2 = clock();
s.test[FIND].sum = sum;
s.test[ITER].t1 = clock();
sum = 0;
- c_forrange (R) c_foreach (i, cmap_x, con) sum += i.ref->second;
+ c_forloop (R) c_foreach (i, cmap_x, con) sum += i.ref->second;
s.test[ITER].t2 = clock();
s.test[ITER].sum = sum;
s.test[DESTRUCT].t1 = clock();
@@ -113,30 +113,30 @@ Sample test_stc_unordered_map() {
int main(int argc, char* argv[])
{
Sample std_s[SAMPLES + 1], stc_s[SAMPLES + 1];
- c_forrange (i, int, SAMPLES) {
+ c_forloop (i, SAMPLES) {
std_s[i] = test_std_unordered_map();
stc_s[i] = test_stc_unordered_map();
- if (i > 0) c_forrange (j, int, N_TESTS) {
+ if (i > 0) c_forloop (j, N_TESTS) {
if (secs(std_s[i].test[j]) < secs(std_s[0].test[j])) std_s[0].test[j] = std_s[i].test[j];
if (secs(stc_s[i].test[j]) < secs(stc_s[0].test[j])) stc_s[0].test[j] = stc_s[i].test[j];
- if (stc_s[i].test[j].sum != stc_s[0].test[j].sum) printf("Error in sum: test %d, sample %d\n", i, j);
+ if (stc_s[i].test[j].sum != stc_s[0].test[j].sum) printf("Error in sum: test %lld, sample %lld\n", i, j);
}
}
const char* comp = argc > 1 ? argv[1] : "test";
bool header = (argc > 2 && argv[2][0] == '1');
float std_sum = 0, stc_sum = 0;
- c_forrange (j, N_TESTS) {
+ c_forloop (j, N_TESTS) {
std_sum += secs(std_s[0].test[j]);
stc_sum += secs(stc_s[0].test[j]);
}
if (header) printf("Compiler,Library,C,Method,Seconds,Ratio\n");
- c_forrange (j, N_TESTS)
+ c_forloop (j, N_TESTS)
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, std_s[0].name, N, operations[j], secs(std_s[0].test[j]), 1.0f);
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, std_s[0].name, N, "total", std_sum, 1.0f);
- c_forrange (j, N_TESTS)
+ c_forloop (j, N_TESTS)
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, stc_s[0].name, N, operations[j], secs(stc_s[0].test[j]), secs(std_s[0].test[j]) ? secs(stc_s[0].test[j])/secs(std_s[0].test[j]) : 1.0f);
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, stc_s[0].name, N, "total", stc_sum, stc_sum/std_sum);
} \ No newline at end of file
diff --git a/benchmarks/plotbench/cpque_benchmark.cpp b/benchmarks/plotbench/cpque_benchmark.cpp
index ca28082b..1290e3b3 100644
--- a/benchmarks/plotbench/cpque_benchmark.cpp
+++ b/benchmarks/plotbench/cpque_benchmark.cpp
@@ -20,14 +20,14 @@ void std_test()
std::priority_queue<float, std::vector<float>, std::greater<float>> pq;
rng = stc64_new(seed);
clock_t start = clock();
- c_forrange (i, N)
+ c_forloop (i, N)
pq.push((float) stc64_randf(&rng)*100000);
printf("Built priority queue: %f secs\n", (clock() - start) / (float) CLOCKS_PER_SEC);
printf("%g ", pq.top());
start = clock();
- c_forrange (i, N) {
+ c_forloop (i, N) {
pq.pop();
}
@@ -44,18 +44,18 @@ void stc_test()
{
rng = stc64_new(seed);
clock_t start = clock();
- c_forrange (i, N)
+ c_forloop (i, N)
cpque_f_push(&pq, (float) stc64_randf(&rng)*100000);
printf("Built priority queue: %f secs\n", (clock() - start) / (float) CLOCKS_PER_SEC);
printf("%g ", *cpque_f_top(&pq));
- c_forrange (i, int, M) {
+ c_forloop (i, M) {
cpque_f_pop(&pq);
}
start = clock();
- c_forrange (i, int, M, N)
+ c_forloop (i, M, N)
cpque_f_pop(&pq);
printf("\npopped PQ: %f secs\n", (clock() - start) / (float) CLOCKS_PER_SEC);
}
diff --git a/benchmarks/plotbench/csmap_benchmark.cpp b/benchmarks/plotbench/csmap_benchmark.cpp
index 7e6d62c6..e8243285 100644
--- a/benchmarks/plotbench/csmap_benchmark.cpp
+++ b/benchmarks/plotbench/csmap_benchmark.cpp
@@ -29,30 +29,30 @@ Sample test_std_map() {
csrandom(seed);
s.test[INSERT].t1 = clock();
container con;
- c_forrange (i, N/2) con.emplace(crandom() & mask1, i);
- c_forrange (i, N/2) con.emplace(i, i);
+ c_forloop (i, N/2) con.emplace(crandom() & mask1, i);
+ c_forloop (i, N/2) con.emplace(i, i);
s.test[INSERT].t2 = clock();
s.test[INSERT].sum = con.size();
csrandom(seed);
s.test[ERASE].t1 = clock();
- c_forrange (N) con.erase(crandom() & mask1);
+ c_forloop (N) con.erase(crandom() & mask1);
s.test[ERASE].t2 = clock();
s.test[ERASE].sum = con.size();
}{
container con;
csrandom(seed);
- c_forrange (i, N/2) con.emplace(crandom() & mask1, i);
- c_forrange (i, N/2) con.emplace(i, i);
+ c_forloop (i, N/2) con.emplace(crandom() & mask1, i);
+ c_forloop (i, N/2) con.emplace(i, i);
csrandom(seed);
s.test[FIND].t1 = clock();
size_t sum = 0;
container::iterator it;
- c_forrange (N) if ((it = con.find(crandom() & mask1)) != con.end()) sum += it->second;
+ c_forloop (N) if ((it = con.find(crandom() & mask1)) != con.end()) sum += it->second;
s.test[FIND].t2 = clock();
s.test[FIND].sum = sum;
s.test[ITER].t1 = clock();
sum = 0;
- c_forrange (R) for (auto i: con) sum += i.second;
+ c_forloop (R) for (auto i: con) sum += i.second;
s.test[ITER].t2 = clock();
s.test[ITER].sum = sum;
s.test[DESTRUCT].t1 = clock();
@@ -74,33 +74,33 @@ Sample test_stc_map() {
csrandom(seed);
s.test[INSERT].t1 = clock();
container con = csmap_x_init();
- c_forrange (i, N/2) csmap_x_insert(&con, crandom() & mask1, i);
- c_forrange (i, N/2) csmap_x_insert(&con, i, i);
+ c_forloop (i, N/2) csmap_x_insert(&con, crandom() & mask1, i);
+ c_forloop (i, N/2) csmap_x_insert(&con, i, i);
s.test[INSERT].t2 = clock();
s.test[INSERT].sum = csmap_x_size(&con);
csrandom(seed);
s.test[ERASE].t1 = clock();
- c_forrange (N) csmap_x_erase(&con, crandom() & mask1);
+ c_forloop (N) csmap_x_erase(&con, crandom() & mask1);
s.test[ERASE].t2 = clock();
s.test[ERASE].sum = csmap_x_size(&con);
csmap_x_drop(&con);
}{
container con = csmap_x_init();
csrandom(seed);
- c_forrange (i, N/2) csmap_x_insert(&con, crandom() & mask1, i);
- c_forrange (i, N/2) csmap_x_insert(&con, i, i);
+ c_forloop (i, N/2) csmap_x_insert(&con, crandom() & mask1, i);
+ c_forloop (i, N/2) csmap_x_insert(&con, i, i);
csrandom(seed);
s.test[FIND].t1 = clock();
size_t sum = 0;
const csmap_x_value* val;
- c_forrange (N)
+ c_forloop (N)
if ((val = csmap_x_get(&con, crandom() & mask1)))
sum += val->second;
s.test[FIND].t2 = clock();
s.test[FIND].sum = sum;
s.test[ITER].t1 = clock();
sum = 0;
- c_forrange (R) c_foreach (i, csmap_x, con) sum += i.ref->second;
+ c_forloop (R) c_foreach (i, csmap_x, con) sum += i.ref->second;
s.test[ITER].t2 = clock();
s.test[ITER].sum = sum;
s.test[DESTRUCT].t1 = clock();
@@ -114,30 +114,30 @@ Sample test_stc_map() {
int main(int argc, char* argv[])
{
Sample std_s[SAMPLES + 1], stc_s[SAMPLES + 1];
- c_forrange (i, int, SAMPLES) {
+ c_forloop (i, SAMPLES) {
std_s[i] = test_std_map();
stc_s[i] = test_stc_map();
- if (i > 0) c_forrange (j, int, N_TESTS) {
+ if (i > 0) c_forloop (j, N_TESTS) {
if (secs(std_s[i].test[j]) < secs(std_s[0].test[j])) std_s[0].test[j] = std_s[i].test[j];
if (secs(stc_s[i].test[j]) < secs(stc_s[0].test[j])) stc_s[0].test[j] = stc_s[i].test[j];
- if (stc_s[i].test[j].sum != stc_s[0].test[j].sum) printf("Error in sum: test %d, sample %d\n", i, j);
+ if (stc_s[i].test[j].sum != stc_s[0].test[j].sum) printf("Error in sum: test %lld, sample %lld\n", i, j);
}
}
const char* comp = argc > 1 ? argv[1] : "test";
bool header = (argc > 2 && argv[2][0] == '1');
float std_sum = 0, stc_sum = 0;
- c_forrange (j, N_TESTS) {
+ c_forloop (j, N_TESTS) {
std_sum += secs(std_s[0].test[j]);
stc_sum += secs(stc_s[0].test[j]);
}
if (header) printf("Compiler,Library,C,Method,Seconds,Ratio\n");
- c_forrange (j, N_TESTS)
+ c_forloop (j, N_TESTS)
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, std_s[0].name, N, operations[j], secs(std_s[0].test[j]), 1.0f);
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, std_s[0].name, N, "total", std_sum, 1.0f);
- c_forrange (j, N_TESTS)
+ c_forloop (j, N_TESTS)
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, stc_s[0].name, N, operations[j], secs(stc_s[0].test[j]), secs(std_s[0].test[j]) ? secs(stc_s[0].test[j])/secs(std_s[0].test[j]) : 1.0f);
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, stc_s[0].name, N, "total", stc_sum, stc_sum/std_sum);
}
diff --git a/benchmarks/plotbench/cvec_benchmark.cpp b/benchmarks/plotbench/cvec_benchmark.cpp
index a0faf679..347a6319 100644
--- a/benchmarks/plotbench/cvec_benchmark.cpp
+++ b/benchmarks/plotbench/cvec_benchmark.cpp
@@ -29,27 +29,27 @@ Sample test_std_vector() {
s.test[INSERT].t1 = clock();
container con;
csrandom(seed);
- c_forrange (N) con.push_back(crandom() & mask1);
+ c_forloop (N) con.push_back(crandom() & mask1);
s.test[INSERT].t2 = clock();
s.test[INSERT].sum = con.size();
s.test[ERASE].t1 = clock();
- c_forrange (N) con.pop_back();
+ c_forloop (N) con.pop_back();
s.test[ERASE].t2 = clock();
s.test[ERASE].sum = con.size();
}{
container con;
csrandom(seed);
- c_forrange (N) con.push_back(crandom() & mask2);
+ c_forloop (N) con.push_back(crandom() & mask2);
s.test[FIND].t1 = clock();
size_t sum = 0;
//container::iterator it;
// Iteration - not inherent find - skipping
- //c_forrange (S) if ((it = std::find(con.begin(), con.end(), crandom() & mask2)) != con.end()) sum += *it;
+ //c_forloop (S) if ((it = std::find(con.begin(), con.end(), crandom() & mask2)) != con.end()) sum += *it;
s.test[FIND].t2 = clock();
s.test[FIND].sum = sum;
s.test[ITER].t1 = clock();
sum = 0;
- c_forrange (R) c_forrange (i, N) sum += con[i];
+ c_forloop (R) c_forloop (i, N) sum += con[i];
s.test[ITER].t2 = clock();
s.test[ITER].sum = sum;
s.test[DESTRUCT].t1 = clock();
@@ -71,27 +71,27 @@ Sample test_stc_vector() {
s.test[INSERT].t1 = clock();
container con = cvec_x_init();
csrandom(seed);
- c_forrange (N) cvec_x_push_back(&con, crandom() & mask1);
+ c_forloop (N) cvec_x_push_back(&con, crandom() & mask1);
s.test[INSERT].t2 = clock();
s.test[INSERT].sum = cvec_x_size(&con);
s.test[ERASE].t1 = clock();
- c_forrange (N) { cvec_x_pop_back(&con); }
+ c_forloop (N) { cvec_x_pop_back(&con); }
s.test[ERASE].t2 = clock();
s.test[ERASE].sum = cvec_x_size(&con);
cvec_x_drop(&con);
}{
csrandom(seed);
container con = cvec_x_init();
- c_forrange (N) cvec_x_push_back(&con, crandom() & mask2);
+ c_forloop (N) cvec_x_push_back(&con, crandom() & mask2);
s.test[FIND].t1 = clock();
size_t sum = 0;
//cvec_x_iter it, end = cvec_x_end(&con);
- //c_forrange (S) if ((it = cvec_x_find(&con, crandom() & mask2)).ref != end.ref) sum += *it.ref;
+ //c_forloop (S) if ((it = cvec_x_find(&con, crandom() & mask2)).ref != end.ref) sum += *it.ref;
s.test[FIND].t2 = clock();
s.test[FIND].sum = sum;
s.test[ITER].t1 = clock();
sum = 0;
- c_forrange (R) c_forrange (i, N) sum += con.data[i];
+ c_forloop (R) c_forloop (i, N) sum += con.data[i];
s.test[ITER].t2 = clock();
s.test[ITER].sum = sum;
s.test[DESTRUCT].t1 = clock();
@@ -105,30 +105,30 @@ Sample test_stc_vector() {
int main(int argc, char* argv[])
{
Sample std_s[SAMPLES + 1] = {{NULL}}, stc_s[SAMPLES + 1] = {{NULL}};
- c_forrange (i, int, SAMPLES) {
+ c_forloop (i, SAMPLES) {
std_s[i] = test_std_vector();
stc_s[i] = test_stc_vector();
- if (i > 0) c_forrange (j, int, N_TESTS) {
+ if (i > 0) c_forloop (j, N_TESTS) {
if (secs(std_s[i].test[j]) < secs(std_s[0].test[j])) std_s[0].test[j] = std_s[i].test[j];
if (secs(stc_s[i].test[j]) < secs(stc_s[0].test[j])) stc_s[0].test[j] = stc_s[i].test[j];
- if (stc_s[i].test[j].sum != stc_s[0].test[j].sum) printf("Error in sum: test %d, sample %d\n", i, j);
+ if (stc_s[i].test[j].sum != stc_s[0].test[j].sum) printf("Error in sum: test %lld, sample %lld\n", i, j);
}
}
const char* comp = argc > 1 ? argv[1] : "test";
bool header = (argc > 2 && argv[2][0] == '1');
float std_sum = 0, stc_sum = 0;
- c_forrange (j, N_TESTS) {
+ c_forloop (j, N_TESTS) {
std_sum += secs(std_s[0].test[j]);
stc_sum += secs(stc_s[0].test[j]);
}
if (header) printf("Compiler,Library,C,Method,Seconds,Ratio\n");
- c_forrange (j, N_TESTS)
+ c_forloop (j, N_TESTS)
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, std_s[0].name, N, operations[j], secs(std_s[0].test[j]), 1.0f);
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, std_s[0].name, N, "total", std_sum, 1.0f);
- c_forrange (j, N_TESTS)
+ c_forloop (j, N_TESTS)
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, stc_s[0].name, N, operations[j], secs(stc_s[0].test[j]), secs(std_s[0].test[j]) ? secs(stc_s[0].test[j])/secs(std_s[0].test[j]) : 1.0f);
printf("%s,%s n:%d,%s,%.3f,%.3f\n", comp, stc_s[0].name, N, "total", stc_sum, stc_sum/std_sum);
}
diff --git a/docs/ccommon_api.md b/docs/ccommon_api.md
index 2d26fbe3..70033445 100644
--- a/docs/ccommon_api.md
+++ b/docs/ccommon_api.md
@@ -180,37 +180,36 @@ c_forlist (i, csmap_ii_raw, { {23,1}, {3,2}, {7,3}, {5,4}, {12,5} })
c_foreach (i, csmap_ii, map)
printf(" %d", i.ref->first);
-// out: 3 5 7 12 23
+// 3 5 7 12 23
csmap_ii_iter it = csmap_ii_find(&map, 7);
c_foreach (i, csmap_ii, it, csmap_ii_end(&map))
printf(" %d", i.ref->first);
-// out: 7 12 23
+// 7 12 23
c_forpair (id, count, csmap_ii, map)
printf(" (%d %d)", *_.id, *_.count);
-// out: (3 2) (5 4) (7 3) (12 5) (23 1)
+// (3 2) (5 4) (7 3) (12 5) (23 1)
```
-### c_forrange
-Abstaction for iterating sequence of numbers. Like python's ***for i in range()*** loop.
+### c_forloop
+Abstaction for iterating sequence of numbers. Like python's **for** *i* **in** *range()* loop.
-| Usage | Python equivalent |
-|:----------------------------------------------|:-------------------------------------|
-| `c_forrange (stop)` | `for _ in range(stop):` |
-| `c_forrange (i, stop) // IntType = size_t` | `for i in range(stop):` |
-| `c_forrange (i, IntType, stop)` | `for i in range(stop):` |
-| `c_forrange (i, IntType, start, stop)` | `for i in range(start, stop):` |
-| `c_forrange (i, IntType, start, stop, step)` | `for i in range(start, stop, step):` |
+| Usage | Python equivalent |
+|:--------------------------------------------|:-------------------------------------|
+| `c_forloop (stop)` | `for _ in range(stop):` |
+| `c_forloop (i, stop) // i type = long long` | `for i in range(stop):` |
+| `c_forloop (i, start, stop)` | `for i in range(start, stop):` |
+| `c_forloop (i, start, stop, step)` | `for i in range(start, stop, step):` |
```c
-c_forrange (5) printf("x");
+c_forloop (5) printf("x");
// xxxxx
-c_forrange (i, 5) printf(" %" PRIuMAX "", i);
+c_forloop (i, 5) printf(" %lld", i);
// 0 1 2 3 4
-c_forrange (i, int, -3, 3) printf(" %d", i);
+c_forloop (i, -3, 3) printf(" %lld", i);
// -3 -2 -1 0 1 2
-c_forrange (i, int, 30, 0, -5) printf(" %d", i);
+c_forloop (i, 30, 0, -5) printf(" %lld", i);
// 30 25 20 15 10 5
```
@@ -244,7 +243,7 @@ bool isPrime(int i) {
int main() {
c_auto (IVec, vec) {
- c_forrange (i, 1000) IVec_push(&vec, 1000000 + i);
+ c_forloop (i, 1000) IVec_push(&vec, 1000000 + i);
c_forfilter (i, IVec, vec,
isOdd(*i.ref)
@@ -261,12 +260,12 @@ int main() {
Note that `c_flt_take()` is given as an optional argument, which makes the loop stop when it becomes false (for efficiency). Chaining it after `isPrime()` instead will give same result, but the full input is processed.
### crange
-**crange** is a number sequence generator type. The **crange_value** type is `long long`. Below, *start*, *end*, *step* are type *crange_value*:
+**crange** is a number sequence generator type. The **crange_value** type is `long long`. Below, *start*, *stop*, *step* are type *crange_value*:
```c
crange crange_init(void); // will generate 0, 1, 2, ...
-crange crange_from(start); // will generate start, start+1, ...
-crange crange_from(start, end); // will generate start, start+1, ... end-1
-crange crange_from(start, end, step); // will generate start, start+step, ... upto-not-including end
+crange crange_make(stop); // will generate 0, 1, ..., stop-1
+crange crange_make(start, stop); // will generate start, start+1, ... stop-1
+crange crange_make(start, stop, step); // will generate start, start+step, ... upto-not-including stop
// note that step may be negative.
crange_iter crange_begin(crange* self);
crange_iter crange_end(crange* self);
@@ -281,7 +280,7 @@ c_forfilter (i, crange, r1,
// 2 3 5 7 11 13 17 19 23 29 31
// 2. The 11 first primes:
-crange r2 = crange_from(3, INTMAX_MAX, 2);
+crange r2 = crange_make(3, INTMAX_MAX, 2);
printf("2");
c_forfilter (i, crange, r2,
isPrime(*i.ref)
diff --git a/docs/clist_api.md b/docs/clist_api.md
index 9927087d..58afb64a 100644
--- a/docs/clist_api.md
+++ b/docs/clist_api.md
@@ -114,7 +114,7 @@ int main() {
c_forlist (i, double, {10., 20., 30., 40., 50., 60., 70., 80., 90.})
DList_push_back(&list, *i.ref);
- c_forrange (i, int, 1, 10) {
+ c_forloop (i, 1, 10) {
if (i & 1) DList_push_front(&list, (double) i);
else DList_push_back(&list, (double) i);
}
diff --git a/docs/cpque_api.md b/docs/cpque_api.md
index 8b990be8..f3e36a3d 100644
--- a/docs/cpque_api.md
+++ b/docs/cpque_api.md
@@ -76,16 +76,16 @@ int main()
c_auto (cpque_i, heap)
{
// Push ten million random numbers to priority queue.
- c_forrange (N)
+ c_forloop (N)
cpque_i_push(&heap, stc64_uniform(&rng, &dist));
// Add some negative ones.
int nums[] = {-231, -32, -873, -4, -343};
- c_forrange (i, c_arraylen(nums))
+ c_forloop (i, c_arraylen(nums))
cpque_i_push(&heap, nums[i]);
// Extract and display the fifty smallest.
- c_forrange (50) {
+ c_forloop (50) {
printf("%" PRIdMAX " ", *cpque_i_top(&heap));
cpque_i_pop(&heap);
}
diff --git a/docs/cqueue_api.md b/docs/cqueue_api.md
index a8be9e86..43f953b3 100644
--- a/docs/cqueue_api.md
+++ b/docs/cqueue_api.md
@@ -68,10 +68,10 @@ int main() {
cqueue_i Q = cqueue_i_init();
// push() and pop() a few.
- c_forrange (i, 20)
+ c_forloop (i, 20)
cqueue_i_push(&Q, i);
- c_forrange (5)
+ c_forloop (5)
cqueue_i_pop(&Q);
c_foreach (i, cqueue_i, Q)
diff --git a/docs/crandom_api.md b/docs/crandom_api.md
index 3e6ae8f0..d6180490 100644
--- a/docs/crandom_api.md
+++ b/docs/crandom_api.md
@@ -94,7 +94,7 @@ int main()
// Create histogram map
csmap_i mhist = csmap_i_init();
- c_forrange (N) {
+ c_forloop (N) {
int index = (int) round( stc64_normalf(&rng, &dist) );
csmap_i_emplace(&mhist, index, 0).ref->second += 1;
}
diff --git a/docs/cregex_api.md b/docs/cregex_api.md
index 2a0b22a8..66b97834 100644
--- a/docs/cregex_api.md
+++ b/docs/cregex_api.md
@@ -128,14 +128,14 @@ To iterate multiple matches in an input string, you may use
```c
csview match[5] = {0};
while (cregex_find(&re, input, match, cre_m_next) == cre_success)
- c_forrange (k, int, cregex_captures(&re))
- printf("submatch %d: %.*s\n", k, c_ARGsv(match[k]));
+ c_forloop (k, cregex_captures(&re))
+ printf("submatch %lld: %.*s\n", k, c_ARGsv(match[k]));
```
There is also a safe macro which simplifies this:
```c
c_formatch (it, &re, input)
- c_forrange (k, int, cregex_captures(&re))
- printf("submatch %d: %.*s\n", k, c_ARGsv(it.match[k]));
+ c_forloop (k, cregex_captures(&re))
+ printf("submatch %lld: %.*s\n", k, c_ARGsv(it.match[k]));
```
## Using cregex in a project
diff --git a/examples/arc_demo.c b/examples/arc_demo.c
index 688fe72f..345432b6 100644
--- a/examples/arc_demo.c
+++ b/examples/arc_demo.c
@@ -25,7 +25,7 @@ int main()
c_auto (csset_Arc, set) // declare and init set, call csset_Arc_drop() at scope exit
{
const int years[] = {2021, 2012, 2022, 2015};
- c_forrange (i, c_arraylen(years))
+ c_forloop (i, c_arraylen(years))
cvec_Arc_push_back(&vec, Arc_make(years[i]));
printf("vec:");
diff --git a/examples/birthday.c b/examples/birthday.c
index e09d84f1..8b23f7ab 100644
--- a/examples/birthday.c
+++ b/examples/birthday.c
@@ -21,7 +21,7 @@ static void test_repeats(void)
c_auto (cmap_ic, m)
{
cmap_ic_reserve(&m, N);
- c_forrange (i, N) {
+ c_forloop (i, N) {
uint64_t k = stc64_rand(&rng) & mask;
int v = cmap_ic_insert(&m, k, 0).ref->second += 1;
if (v > 1) printf("repeated value %" PRIuMAX " (%d) at 2^%d\n", k, v, (int) log2((double) i));
@@ -42,7 +42,7 @@ void test_distribution(void)
const size_t N = 1ull << BITS ;
c_auto (cmap_x, map) {
- c_forrange (N) {
+ c_forloop (N) {
uint64_t k = stc64_rand(&rng);
cmap_x_insert(&map, k & 0xf, 0).ref->second += 1;
}
diff --git a/examples/bits.c b/examples/bits.c
index c6e70517..c89ad7d3 100644
--- a/examples/bits.c
+++ b/examples/bits.c
@@ -17,7 +17,7 @@ int main()
printf(" str: %s\n", cbits_to_str(&set, str, 0, -1));
printf("%4" PRIuMAX ": ", cbits_size(&set));
- c_forrange (i, cbits_size(&set))
+ c_forloop (i, cbits_size(&set))
printf("%d", cbits_test(&set, i));
puts("");
@@ -27,12 +27,12 @@ int main()
cbits_resize(&set, 102, true);
cbits_set_value(&set, 99, false);
printf("%4" PRIuMAX ": ", cbits_size(&set));
- c_forrange (i, cbits_size(&set))
+ c_forloop (i, cbits_size(&set))
printf("%d", cbits_test(&set, i));
puts("\nIterate:");
printf("%4" PRIuMAX ": ", cbits_size(&set));
- c_forrange (i, cbits_size(&set))
+ c_forloop (i, cbits_size(&set))
printf("%d", cbits_test(&set, i));
puts("");
@@ -42,19 +42,19 @@ int main()
cbits_set(&s2, 17);
cbits_set(&s2, 18);
printf(" new: ");
- c_forrange (i, cbits_size(&s2))
+ c_forloop (i, cbits_size(&s2))
printf("%d", cbits_test(&s2, i));
puts("");
printf(" xor: ");
cbits_xor(&set, &s2);
- c_forrange (i, cbits_size(&set))
+ c_forloop (i, cbits_size(&set))
printf("%d", cbits_test(&set, i));
puts("");
cbits_set_all(&set, false);
printf("%4" PRIuMAX ": ", cbits_size(&set));
- c_forrange (i, cbits_size(&set))
+ c_forloop (i, cbits_size(&set))
printf("%d", cbits_test(&set, i));
puts("");
}
diff --git a/examples/bits2.c b/examples/bits2.c
index 3f3085b6..0161376b 100644
--- a/examples/bits2.c
+++ b/examples/bits2.c
@@ -24,19 +24,19 @@ int main()
Bits_reset(&s2, 66);
Bits_reset(&s2, 67);
printf(" s2: ");
- c_forrange (i, Bits_size(&s2))
+ c_forloop (i, Bits_size(&s2))
printf("%d", Bits_test(&s2, i));
puts("");
printf("xor: ");
Bits_xor(&s1, &s2);
- c_forrange (i, Bits_size(&s1))
+ c_forloop (i, Bits_size(&s1))
printf("%d", Bits_test(&s1, i));
puts("");
printf("all: ");
Bits_set_pattern(&s1, 0x3333333333333333);
- c_forrange (i, Bits_size(&s1))
+ c_forloop (i, Bits_size(&s1))
printf("%d", Bits_test(&s1, i));
puts("");
}
diff --git a/examples/books.c b/examples/books.c
index fb9e4564..eed19540 100644
--- a/examples/books.c
+++ b/examples/books.c
@@ -41,7 +41,7 @@ int main()
// Look up the values associated with some keys.
const char* to_find[] = {"Pride and Prejudice", "Alice's Adventure in Wonderland"};
- c_forrange (i, c_arraylen(to_find)) {
+ c_forloop (i, c_arraylen(to_find)) {
const cmap_str_value* b;
if ((b = cmap_str_get(&book_reviews, to_find[i])))
printf("%s: %s\n", cstr_str(&b->first), cstr_str(&b->second));
diff --git a/examples/convert.c b/examples/convert.c
index 74f4f865..a8260564 100644
--- a/examples/convert.c
+++ b/examples/convert.c
@@ -37,7 +37,7 @@ int main()
cvec_str_emplace_back(&keys, cstr_str(&i.ref->first));
cvec_str_emplace_back(&values, cstr_str(&i.ref->second));
}
- c_forrange (i, cvec_str_size(&keys))
+ c_forloop (i, cvec_str_size(&keys))
printf(" %s: %s\n", cstr_str(keys.data + i), cstr_str(values.data + i));
puts("\nCOPY VEC TO LIST:");
diff --git a/examples/cpque.c b/examples/cpque.c
index 5866f17b..183f83c1 100644
--- a/examples/cpque.c
+++ b/examples/cpque.c
@@ -31,15 +31,15 @@ int main()
c_auto (ipque, q, q2, q3) // init() and defered drop()
{
less_fn = int_less;
- c_forrange (i, n) ipque_push(&q, data[i]);
+ c_forloop (i, n) ipque_push(&q, data[i]);
print_queue(q);
less_fn = int_greater;
- c_forrange (i, n) ipque_push(&q2, data[i]);
+ c_forloop (i, n) ipque_push(&q2, data[i]);
print_queue(q2);
less_fn = int_lambda;
- c_forrange (i, n) ipque_push(&q3, data[i]);
+ c_forloop (i, n) ipque_push(&q3, data[i]);
print_queue(q3);
}
}
diff --git a/examples/forfilter.c b/examples/forfilter.c
index 29128836..3ac7821b 100644
--- a/examples/forfilter.c
+++ b/examples/forfilter.c
@@ -59,7 +59,7 @@ fn main() {
void demo2(void)
{
c_auto (IVec, vector) {
- crange rv = crange_from(1);
+ crange rv = crange_make(1, INTMAX_MAX);
c_forfilter (x, crange, rv,
flt_odd(x)
, c_flt_take(x, 5))
@@ -121,7 +121,7 @@ void demo5(void)
#define flt_even(i) ((*i.ref & 1) == 0)
#define flt_mid_decade(i) ((*i.ref % 10) != 0)
puts("demo5:");
- crange r1 = crange_from(1963);
+ crange r1 = crange_make(1963, INTMAX_MAX);
c_forfilter (i, crange, r1,
c_flt_drop(i,15)
&& c_flt_dropwhile(i, flt_mid_decade(i))
diff --git a/examples/gauss1.c b/examples/gauss1.c
index da6d73f4..81d57852 100644
--- a/examples/gauss1.c
+++ b/examples/gauss1.c
@@ -32,7 +32,7 @@ int main()
c_auto (cvec_ii, histvec)
c_auto (cmap_ii, histmap)
{
- c_forrange (N) {
+ c_forloop (N) {
int index = (int) round( stc64_normalf(&rng, &dist) );
cmap_ii_insert(&histmap, index, 0).ref->second += 1;
}
diff --git a/examples/gauss2.c b/examples/gauss2.c
index 2e07c5a5..6bbd7fb3 100644
--- a/examples/gauss2.c
+++ b/examples/gauss2.c
@@ -25,7 +25,7 @@ int main()
// Create and init histogram map with defered destruct
c_auto (csmap_int, mhist)
{
- c_forrange (N) {
+ c_forloop (N) {
int index = (int) round( stc64_normalf(&rng, &dist) );
csmap_int_insert(&mhist, index, 0).ref->second += 1;
}
diff --git a/examples/inits.c b/examples/inits.c
index ab6cdce9..875406e1 100644
--- a/examples/inits.c
+++ b/examples/inits.c
@@ -40,7 +40,7 @@ int main(void)
const float nums[] = {4.0f, 2.0f, 5.0f, 3.0f, 1.0f};
// PRIORITY QUEUE
- c_forrange (i, c_arraylen(nums))
+ c_forloop (i, c_arraylen(nums))
cpque_f_push(&floats, nums[i]);
puts("\npop and show high priorites first:");
diff --git a/examples/list.c b/examples/list.c
index e94a9f18..42be81f3 100644
--- a/examples/list.c
+++ b/examples/list.c
@@ -17,7 +17,7 @@ int main() {
stc64_t rng = stc64_new(1234);
stc64_uniformf_t dist = stc64_uniformf_new(100.0f, n);
int m = 0;
- c_forrange (n)
+ c_forloop (n)
clist_fx_push_back(&list, stc64_uniformf(&rng, &dist)), ++m;
double sum = 0.0;
printf("sumarize %d:\n", m);
diff --git a/examples/prime.c b/examples/prime.c
index d2a95af5..12d33a9e 100644
--- a/examples/prime.c
+++ b/examples/prime.c
@@ -39,9 +39,9 @@ int main(void)
puts("");
int k = 20;
- c_forrange (i, intptr_t, n-1, 1, -2) {
+ c_forloop (i, n-1, 1, -2) {
if (k == 0) break;
- else if (cbits_test(&primes, i>>1)) printf("%" PRIdMAX "\n", i), k--;
+ else if (cbits_test(&primes, i>>1)) printf("%lld\n", i), k--;
}
puts("");
}
diff --git a/examples/priority.c b/examples/priority.c
index d801c118..452ed9d4 100644
--- a/examples/priority.c
+++ b/examples/priority.c
@@ -16,18 +16,18 @@ int main() {
{
// Push ten million random numbers to priority queue
printf("Push %" PRIuMAX " numbers\n", N);
- c_forrange (N)
+ c_forloop (N)
cpque_i_push(&heap, stc64_uniform(&rng, &dist));
// push some negative numbers too.
c_forlist (i, int, {-231, -32, -873, -4, -343})
cpque_i_push(&heap, *i.ref);
- c_forrange (N)
+ c_forloop (N)
cpque_i_push(&heap, stc64_uniform(&rng, &dist));
puts("Extract the hundred smallest.");
- c_forrange (100) {
+ c_forloop (100) {
printf("%" PRIdMAX " ", *cpque_i_top(&heap));
cpque_i_pop(&heap);
}
diff --git a/examples/queue.c b/examples/queue.c
index cc6f8302..7be25367 100644
--- a/examples/queue.c
+++ b/examples/queue.c
@@ -14,12 +14,12 @@ int main() {
c_auto (cqueue_i, queue)
{
// Push ten million random numbers onto the queue.
- c_forrange (n)
+ c_forloop (n)
cqueue_i_push(&queue, stc64_uniform(&rng, &dist));
// Push or pop on the queue ten million times
printf("%d\n", n);
- c_forrange (n) { // forrange uses initial n only.
+ c_forloop (n) { // forrange uses initial n only.
int r = stc64_uniform(&rng, &dist);
if (r & 1)
++n, cqueue_i_push(&queue, r);
diff --git a/examples/random.c b/examples/random.c
index 30751a6c..99001a1a 100644
--- a/examples/random.c
+++ b/examples/random.c
@@ -14,7 +14,7 @@ int main()
printf("Compare speed of full and unbiased ranged random numbers...\n");
sum = 0;
before = clock();
- c_forrange (N) {
+ c_forloop (N) {
sum += (uint32_t) stc64_rand(&rng);
}
diff = clock() - before;
@@ -24,7 +24,7 @@ int main()
rng = stc64_new(seed);
sum = 0;
before = clock();
- c_forrange (N) {
+ c_forloop (N) {
sum += stc64_uniform(&rng, &dist1); // unbiased
}
diff = clock() - before;
@@ -33,7 +33,7 @@ int main()
sum = 0;
rng = stc64_new(seed);
before = clock();
- c_forrange (N) {
+ c_forloop (N) {
sum += stc64_rand(&rng) % (range + 1); // biased
}
diff = clock() - before;
diff --git a/examples/regex2.c b/examples/regex2.c
index 28291915..d3a22f5a 100644
--- a/examples/regex2.c
+++ b/examples/regex2.c
@@ -15,7 +15,7 @@ int main()
};
c_with (cregex re = cregex_init(), cregex_drop(&re))
- c_forrange (i, c_arraylen(s))
+ c_forloop (i, c_arraylen(s))
{
int res = cregex_compile(&re, s[i].pattern, 0);
if (res < 0) {
@@ -25,8 +25,8 @@ int main()
printf("input: %s\n", s[i].input);
c_formatch (j, &re, s[i].input) {
- c_forrange (k, cregex_captures(&re))
- printf(" submatch %d: %.*s\n", (int)k, c_ARGsv(j.match[k]));
+ c_forloop (k, cregex_captures(&re))
+ printf(" submatch %lld: %.*s\n", k, c_ARGsv(j.match[k]));
puts("");
}
}
diff --git a/examples/stack.c b/examples/stack.c
index 580b6428..fad2093b 100644
--- a/examples/stack.c
+++ b/examples/stack.c
@@ -14,12 +14,12 @@ int main() {
c_auto (cstack_i, stack)
c_auto (cstack_c, chars)
{
- c_forrange (i, int, 101)
+ c_forloop (i, 101)
cstack_i_push(&stack, i*i);
printf("%d\n", *cstack_i_top(&stack));
- c_forrange (i, int, 90)
+ c_forloop (i, 90)
cstack_i_pop(&stack);
c_foreach (i, cstack_i, stack)
diff --git a/include/stc/cbits.h b/include/stc/cbits.h
index 06871934..fcb5808d 100644
--- a/include/stc/cbits.h
+++ b/include/stc/cbits.h
@@ -33,7 +33,7 @@ int main() {
cbits_resize(&bset, 43, false);
printf("%4zu: ", cbits_size(&bset));
- c_forrange (i, cbits_size(&bset))
+ c_forloop (i, cbits_size(&bset))
printf("%d", cbits_at(&bset, i));
puts("");
cbits_set(&bset, 28);
@@ -43,7 +43,7 @@ int main() {
cbits_set_value(&bset, 99, false);
printf("%4zu: ", cbits_size(&bset));
- c_forrange (i, cbits_size(&bset))
+ c_forloop (i, cbits_size(&bset))
printf("%d", cbits_at(&bset, i));
puts("");
}
diff --git a/include/stc/ccommon.h b/include/stc/ccommon.h
index 2b3cfd76..70d829ff 100644
--- a/include/stc/ccommon.h
+++ b/include/stc/ccommon.h
@@ -193,6 +193,7 @@ STC_INLINE char* c_strnstrn(const char *s, const char *needle,
; _._it.ref && (_.key = &_._it.ref->first, _.val = &_._it.ref->second) \
; C##_next(&_._it))
+// [deprecated]:
#define c_forrange(...) c_MACRO_OVERLOAD(c_forrange, __VA_ARGS__)
#define c_forrange1(stop) c_forrange4(_c_i, size_t, 0, stop)
#define c_forrange2(i, stop) c_forrange4(i, size_t, 0, stop)
@@ -202,16 +203,24 @@ STC_INLINE char* c_strnstrn(const char *s, const char *needle,
#define c_forrange5(i, itype, start, stop, step) \
for (itype i=start, _inc=step, _end=(stop) - (_inc > 0) \
; (_inc > 0) ^ (i > _end); i += _inc)
+// [new]:
+#define c_forloop(...) c_MACRO_OVERLOAD(c_forloop, __VA_ARGS__)
+#define c_forloop1(stop) for (crange_value _i=0, _end=stop; _i<_end; ++_i)
+#define c_forloop2(i, stop) c_forloop4(i, 0, stop, 1)
+#define c_forloop3(i, start, stop) c_forloop4(i, start, stop, 1)
+#define c_forloop4(i, start, stop, step) \
+ for (crange_value i=start, _inc=step, _end=(stop) - (_inc > 0) \
+ ; (_inc > 0) ^ (i > _end); i += _inc)
typedef long long crange_value;
struct {crange_value val, end, step; } typedef crange;
struct {crange_value *ref, end, step; } typedef crange_iter;
-#define crange_init() crange_from3(0, INTMAX_MAX, 1)
-#define crange_from(...) c_MACRO_OVERLOAD(crange_from, __VA_ARGS__)
-#define crange_from1(start) crange_from3(start, INTMAX_MAX, 1)
-#define crange_from2(start, end) crange_from3(start, end, 1)
-STC_INLINE crange crange_from3(crange_value start, crange_value finish, crange_value step)
- { crange r = {start, finish - (step > 0), step}; return r; }
+#define crange_init() crange_make3(0, INTMAX_MAX, 1)
+#define crange_make(...) c_MACRO_OVERLOAD(crange_make, __VA_ARGS__)
+#define crange_make1(stop) crange_make3(0, stop, 1)
+#define crange_make2(start, stop) crange_make3(start, stop, 1)
+STC_INLINE crange crange_make3(crange_value start, crange_value stop, crange_value step)
+ { crange r = {start, stop - (step > 0), step}; return r; }
STC_INLINE crange_iter crange_begin(crange* self)
{ crange_iter it = {&self->val, self->end, self->step}; return it; }
STC_INLINE crange_iter crange_end(crange* self)
diff --git a/src/checkauto.l b/src/checkauto.l
index 384b3855..00f7ef45 100644
--- a/src/checkauto.l
+++ b/src/checkauto.l
@@ -34,6 +34,9 @@ STR \"([^"\\]|\\.)*\"
c_foreach |
c_forpair |
c_forrange |
+c_forloop |
+c_forfilter |
+c_forwhile |
for |
while |
switch { block_type |= LOOP; state = BRACES; }