From 776ee87caacca18be729b5336dc1c21eb8de6cc1 Mon Sep 17 00:00:00 2001 From: Ludovic 'Archivist' Lagouardette Date: Wed, 3 Oct 2018 21:34:06 +0200 Subject: [PATCH] Improved GC and added a GC pass to the shell --- .gitignore | 1 + crank.h | 20 ++++++++++++++++++++ main.cpp | 1 + 3 files changed, 22 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cba7efc --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +a.out diff --git a/crank.h b/crank.h index bbe3485..a3a1884 100644 --- a/crank.h +++ b/crank.h @@ -289,6 +289,26 @@ public: void collect() { + auto elems = &elements; + while(elems->ptr) + { + auto elems_after = &(elems->ptr->next); + while(elems_after->ptr) + { + if( + elems->ptr->data.first == elems_after->ptr->data.first + ) + { + *elems_after = std::move(elems_after->ptr->next); + } + else + { + elems_after = &(elems_after->ptr->next); + } + } + elems = &(elems->ptr->next); + } + auto cps = &copies; while(cps->ptr) { diff --git a/main.cpp b/main.cpp index b58cb77..19b09b9 100644 --- a/main.cpp +++ b/main.cpp @@ -30,6 +30,7 @@ int main() for(auto c : ret) std::cout< "; + ctx.collect(); } }