Index: libcfa/src/containers/maybe.c
===================================================================
--- libcfa/src/containers/maybe.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ 	(revision )
@@ -1,102 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// maybe.c -- May contain a value.
-//
-// Author           : Andrew Beach
-// Created On       : Wed May 24 15:40:00 2017
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 20 15:23:50 2017
-// Update Count     : 2
-//
-
-#include <containers/maybe>
-#include <assert.h>
-
-
-forall(otype T)
-void ?{}(maybe(T) & this) {
-	this.has_value = false;
-}
-
-forall(otype T)
-void ?{}(maybe(T) & this, T value) {
-	this.has_value = true;
-	(this.value){value};
-}
-
-forall(otype T)
-void ?{}(maybe(T) & this, maybe(T) other) {
-	this.has_value = other.has_value;
-	if (other.has_value) {
-		(this.value){other.value};
-	}
-}
-
-forall(otype T)
-maybe(T) ?=?(maybe(T) & this, maybe(T) that) {
-	if (this.has_value & that.has_value) {
-		this.value = that.value;
-	} else if (this.has_value) {
-		^(this.value){};
-		this.has_value = false;
-	} else if (that.has_value) {
-		this.has_value = true;
-		(this.value){that.value};
-	}
-	return this;
-}
-
-forall(otype T)
-void ^?{}(maybe(T) & this) {
-	if (this.has_value) {
-		^(this.value){};
-	}
-}
-
-forall(otype T)
-bool ?!=?(maybe(T) this, zero_t) {
-	return this.has_value;
-}
-
-forall(otype T)
-maybe(T) maybe_value(T value) {
-	return (maybe(T)){value};
-}
-
-forall(otype T)
-maybe(T) maybe_none() {
-	return (maybe(T)){};
-}
-
-forall(otype T)
-bool has_value(maybe(T) * this) {
-	return this->has_value;
-}
-
-forall(otype T)
-T get(maybe(T) * this) {
-	assertf(this->has_value, "attempt to get from maybe without value");
-	return this->value;
-}
-
-forall(otype T)
-void set(maybe(T) * this, T value) {
-	if (this->has_value) {
-		this->value = value;
-	} else {
-		this->has_value = true;
-		(this->value){value};
-	}
-}
-
-forall(otype T)
-void set_none(maybe(T) * this) {
-	if (this->has_value) {
-		this->has_value = false;
-		^(this->value){};
-	}
-}
Index: libcfa/src/containers/maybe.cfa
===================================================================
--- libcfa/src/containers/maybe.cfa	(revision ba9baadeb7d347b3375a3c22e4ce3628359e9187)
+++ libcfa/src/containers/maybe.cfa	(revision ba9baadeb7d347b3375a3c22e4ce3628359e9187)
@@ -0,0 +1,102 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// maybe.c -- May contain a value.
+//
+// Author           : Andrew Beach
+// Created On       : Wed May 24 15:40:00 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Jul 20 15:23:50 2017
+// Update Count     : 2
+//
+
+#include <containers/maybe>
+#include <assert.h>
+
+
+forall(otype T)
+void ?{}(maybe(T) & this) {
+	this.has_value = false;
+}
+
+forall(otype T)
+void ?{}(maybe(T) & this, T value) {
+	this.has_value = true;
+	(this.value){value};
+}
+
+forall(otype T)
+void ?{}(maybe(T) & this, maybe(T) other) {
+	this.has_value = other.has_value;
+	if (other.has_value) {
+		(this.value){other.value};
+	}
+}
+
+forall(otype T)
+maybe(T) ?=?(maybe(T) & this, maybe(T) that) {
+	if (this.has_value & that.has_value) {
+		this.value = that.value;
+	} else if (this.has_value) {
+		^(this.value){};
+		this.has_value = false;
+	} else if (that.has_value) {
+		this.has_value = true;
+		(this.value){that.value};
+	}
+	return this;
+}
+
+forall(otype T)
+void ^?{}(maybe(T) & this) {
+	if (this.has_value) {
+		^(this.value){};
+	}
+}
+
+forall(otype T)
+bool ?!=?(maybe(T) this, zero_t) {
+	return this.has_value;
+}
+
+forall(otype T)
+maybe(T) maybe_value(T value) {
+	return (maybe(T)){value};
+}
+
+forall(otype T)
+maybe(T) maybe_none() {
+	return (maybe(T)){};
+}
+
+forall(otype T)
+bool has_value(maybe(T) * this) {
+	return this->has_value;
+}
+
+forall(otype T)
+T get(maybe(T) * this) {
+	assertf(this->has_value, "attempt to get from maybe without value");
+	return this->value;
+}
+
+forall(otype T)
+void set(maybe(T) * this, T value) {
+	if (this->has_value) {
+		this->value = value;
+	} else {
+		this->has_value = true;
+		(this->value){value};
+	}
+}
+
+forall(otype T)
+void set_none(maybe(T) * this) {
+	if (this->has_value) {
+		this->has_value = false;
+		^(this->value){};
+	}
+}
Index: libcfa/src/containers/pair.c
===================================================================
--- libcfa/src/containers/pair.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ 	(revision )
@@ -1,47 +1,0 @@
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// pair.c --
-//
-// Author           : Aaron Moss
-// Created On       : Wed Apr 12 15:32:00 2017
-// Last Modified By : Aaron Moss
-// Last Modified On : Wed Apr 12 15:32:00 2017
-// Update Count     : 1
-//
-
-#include <containers/pair>
-
-forall(otype R, otype S 
-	| { int ?==?(R, R); int ?<?(R, R); int ?<?(S, S); })
-int ?<?(pair(R, S) p, pair(R, S) q) {
-	return p.first < q.first || ( p.first == q.first && p.second < q.second );
-}
-
-forall(otype R, otype S 
-	| { int ?==?(R, R); int ?<?(R, R); int ?<=?(S, S); })
-int ?<=?(pair(R, S) p, pair(R, S) q) {
-	return p.first < q.first || ( p.first == q.first && p.second <= q.second );
-}
-
-forall(otype R, otype S | { int ?==?(R, R); int ?==?(S, S); })
-int ?==?(pair(R, S) p, pair(R, S) q) {
-	return p.first == q.first && p.second == q.second;
-}
-
-forall(otype R, otype S | { int ?!=?(R, R); int ?!=?(S, S); })
-int ?!=?(pair(R, S) p, pair(R, S) q) {
-	return p.first != q.first || p.second != q.second;
-}
-
-forall(otype R, otype S 
-	| { int ?==?(R, R); int ?>?(R, R); int ?>?(S, S); })
-int ?>?(pair(R, S) p, pair(R, S) q) {
-	return p.first > q.first || ( p.first == q.first && p.second > q.second );
-}
-
-forall(otype R, otype S 
-	| { int ?==?(R, R); int ?>?(R, R); int ?>=?(S, S); })
-int ?>=?(pair(R, S) p, pair(R, S) q) {
-	return p.first > q.first || ( p.first == q.first && p.second >= q.second );
-}
Index: libcfa/src/containers/pair.cfa
===================================================================
--- libcfa/src/containers/pair.cfa	(revision ba9baadeb7d347b3375a3c22e4ce3628359e9187)
+++ libcfa/src/containers/pair.cfa	(revision ba9baadeb7d347b3375a3c22e4ce3628359e9187)
@@ -0,0 +1,47 @@
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// pair.c --
+//
+// Author           : Aaron Moss
+// Created On       : Wed Apr 12 15:32:00 2017
+// Last Modified By : Aaron Moss
+// Last Modified On : Wed Apr 12 15:32:00 2017
+// Update Count     : 1
+//
+
+#include <containers/pair>
+
+forall(otype R, otype S 
+	| { int ?==?(R, R); int ?<?(R, R); int ?<?(S, S); })
+int ?<?(pair(R, S) p, pair(R, S) q) {
+	return p.first < q.first || ( p.first == q.first && p.second < q.second );
+}
+
+forall(otype R, otype S 
+	| { int ?==?(R, R); int ?<?(R, R); int ?<=?(S, S); })
+int ?<=?(pair(R, S) p, pair(R, S) q) {
+	return p.first < q.first || ( p.first == q.first && p.second <= q.second );
+}
+
+forall(otype R, otype S | { int ?==?(R, R); int ?==?(S, S); })
+int ?==?(pair(R, S) p, pair(R, S) q) {
+	return p.first == q.first && p.second == q.second;
+}
+
+forall(otype R, otype S | { int ?!=?(R, R); int ?!=?(S, S); })
+int ?!=?(pair(R, S) p, pair(R, S) q) {
+	return p.first != q.first || p.second != q.second;
+}
+
+forall(otype R, otype S 
+	| { int ?==?(R, R); int ?>?(R, R); int ?>?(S, S); })
+int ?>?(pair(R, S) p, pair(R, S) q) {
+	return p.first > q.first || ( p.first == q.first && p.second > q.second );
+}
+
+forall(otype R, otype S 
+	| { int ?==?(R, R); int ?>?(R, R); int ?>=?(S, S); })
+int ?>=?(pair(R, S) p, pair(R, S) q) {
+	return p.first > q.first || ( p.first == q.first && p.second >= q.second );
+}
Index: libcfa/src/containers/result.c
===================================================================
--- libcfa/src/containers/result.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ 	(revision )
@@ -1,126 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// result.c -- Contains the expected value or an error value.
-//
-// Author           : Andrew Beach
-// Created On       : Wed May 24 15:40:00 2017
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 20 15:23:58 2017
-// Update Count     : 2
-//
-
-#include <containers/result>
-#include <assert.h>
-
-
-forall(otype T, otype E)
-void ?{}(result(T, E) & this) {
-	this.has_value = false;
-	(this.error){};
-}
-
-forall(otype T, otype E)
-void ?{}(result(T, E) & this, one_t, T value) {
-	this.has_value = true;
-	(this.value){value};
-}
-
-forall(otype T, otype E)
-void ?{}(result(T, E) & this, zero_t, E error) {
-	this.has_value = false;
-	(this.error){error};
-}
-
-forall(otype T, otype E)
-void ?{}(result(T, E) & this, result(T, E) other) {
-	this.has_value = other.has_value;
-	if (other.has_value) {
-		(this.value){other.value};
-	} else {
-		(this.error){other.error};
-	}
-}
-
-forall(otype T, otype E)
-result(T, E) ?=?(result(T, E) & this, result(T, E) that) {
-	if (this.has_value & that.has_value) {
-		this.value = that.value;
-	} else if (this.has_value) {
-		^(this.value){};
-		this.has_value = false;
-		(this.error){that.error};
-	} else if (that.has_value) {
-		^(this.error){};
-		this.has_value = true;
-		(this.value){that.value};
-	} else {
-		this.error = that.error;
-	}
-}
-
-forall(otype T, otype E)
-void ^?{}(result(T, E) & this) {
-	if (this.has_value) {
-		^(this.value){};
-	} else {
-		^(this.error){};
-	}
-}
-
-forall(otype T, otype E)
-bool ?!=?(result(T, E) this, zero_t) {
-	return this.has_value;
-}
-
-forall(otype T, otype E)
-result(T, E) result_value(T value) {
-	return (result(T, E)){1, value};
-}
-
-forall(otype T, otype E)
-result(T, E) result_error(E error) {
-	return (result(T, E)){0, error};
-}
-
-forall(otype T, otype E)
-bool has_value(result(T, E) * this) {
-	return this->has_value;
-}
-
-forall(otype T, otype E)
-T get(result(T, E) * this) {
-	assertf(this->has_value, "attempt to get from result without value");
-	return this->value;
-}
-
-forall(otype T, otype E)
-E get_error(result(T, E) * this) {
-	assertf(!this->has_value, "attempt to get from result without error");
-	return this->error;
-}
-
-forall(otype T, otype E)
-void set(result(T, E) * this, T value) {
-	if (this->has_value) {
-		this->value = value;
-	} else {
-		^(this->error){};
-		this->has_value = true;
-		(this->value){value};
-	}
-}
-
-forall(otype T, otype E)
-void set_error(result(T, E) * this, E error) {
-	if (this->has_value) {
-		^(this->value){};
-		this->has_value = false;
-		(this->error){error};
-	} else {
-		this->error = error;
-	}
-}
Index: libcfa/src/containers/result.cfa
===================================================================
--- libcfa/src/containers/result.cfa	(revision ba9baadeb7d347b3375a3c22e4ce3628359e9187)
+++ libcfa/src/containers/result.cfa	(revision ba9baadeb7d347b3375a3c22e4ce3628359e9187)
@@ -0,0 +1,126 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// result.c -- Contains the expected value or an error value.
+//
+// Author           : Andrew Beach
+// Created On       : Wed May 24 15:40:00 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Jul 20 15:23:58 2017
+// Update Count     : 2
+//
+
+#include <containers/result>
+#include <assert.h>
+
+
+forall(otype T, otype E)
+void ?{}(result(T, E) & this) {
+	this.has_value = false;
+	(this.error){};
+}
+
+forall(otype T, otype E)
+void ?{}(result(T, E) & this, one_t, T value) {
+	this.has_value = true;
+	(this.value){value};
+}
+
+forall(otype T, otype E)
+void ?{}(result(T, E) & this, zero_t, E error) {
+	this.has_value = false;
+	(this.error){error};
+}
+
+forall(otype T, otype E)
+void ?{}(result(T, E) & this, result(T, E) other) {
+	this.has_value = other.has_value;
+	if (other.has_value) {
+		(this.value){other.value};
+	} else {
+		(this.error){other.error};
+	}
+}
+
+forall(otype T, otype E)
+result(T, E) ?=?(result(T, E) & this, result(T, E) that) {
+	if (this.has_value & that.has_value) {
+		this.value = that.value;
+	} else if (this.has_value) {
+		^(this.value){};
+		this.has_value = false;
+		(this.error){that.error};
+	} else if (that.has_value) {
+		^(this.error){};
+		this.has_value = true;
+		(this.value){that.value};
+	} else {
+		this.error = that.error;
+	}
+}
+
+forall(otype T, otype E)
+void ^?{}(result(T, E) & this) {
+	if (this.has_value) {
+		^(this.value){};
+	} else {
+		^(this.error){};
+	}
+}
+
+forall(otype T, otype E)
+bool ?!=?(result(T, E) this, zero_t) {
+	return this.has_value;
+}
+
+forall(otype T, otype E)
+result(T, E) result_value(T value) {
+	return (result(T, E)){1, value};
+}
+
+forall(otype T, otype E)
+result(T, E) result_error(E error) {
+	return (result(T, E)){0, error};
+}
+
+forall(otype T, otype E)
+bool has_value(result(T, E) * this) {
+	return this->has_value;
+}
+
+forall(otype T, otype E)
+T get(result(T, E) * this) {
+	assertf(this->has_value, "attempt to get from result without value");
+	return this->value;
+}
+
+forall(otype T, otype E)
+E get_error(result(T, E) * this) {
+	assertf(!this->has_value, "attempt to get from result without error");
+	return this->error;
+}
+
+forall(otype T, otype E)
+void set(result(T, E) * this, T value) {
+	if (this->has_value) {
+		this->value = value;
+	} else {
+		^(this->error){};
+		this->has_value = true;
+		(this->value){value};
+	}
+}
+
+forall(otype T, otype E)
+void set_error(result(T, E) * this, E error) {
+	if (this->has_value) {
+		^(this->value){};
+		this->has_value = false;
+		(this->error){error};
+	} else {
+		this->error = error;
+	}
+}
Index: libcfa/src/containers/vector.c
===================================================================
--- libcfa/src/containers/vector.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ 	(revision )
@@ -1,137 +1,0 @@
-//
-// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//
-// vector.c --
-//
-// Author           : Thierry Delisle
-// Created On       : Tue Jul  5 18:07:52 2016
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul  5 18:08:31 2016
-// Update Count     : 2
-//
-
-#include <containers/vector>
-
-#include <stdlib>
-
-forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-void copy_internal(vector(T, allocator_t)* this, vector(T, allocator_t)* other);
-
-//------------------------------------------------------------------------------
-//Initialization
-forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-void ?{}(vector(T, allocator_t)& this)
-{
-	(this.storage){};
-	this.size = 0;
-}
-
-forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-void ?{}(vector(T, allocator_t)& this, vector(T, allocator_t) rhs)
-{
-	(this.storage){ rhs.storage };
-	copy_internal(&this, &rhs);
-}
-
-// forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-// vector(T, allocator_t) ?=?(vector(T, allocator_t)* this, vector(T, allocator_t) rhs)
-// {
-// 	(&this->storage){};
-// 	copy_internal(this, &rhs);
-// 	return *this;
-// }
-
-forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-void ^?{}(vector(T, allocator_t)& this)
-{
-	clear(&this);
-	^(this.storage){};
-}
-
-//------------------------------------------------------------------------------
-//Modifiers
-forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-void push_back(vector(T, allocator_t)* this, T value)
-{
-	realloc_storage(&this->storage, this->size+1);
-	data(&this->storage)[this->size] = value;
-	this->size++;
-}
-
-forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-void pop_back(vector(T, allocator_t)* this)
-{
-	this->size--;
-	^(data(&this->storage)[this->size]){};
-}
-
-forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-void clear(vector(T, allocator_t)* this)
-{
-	for(size_t i = 0; i < this->size; i++)
-	{
-		^(data(&this->storage)[this->size]){};
-	}
-	this->size = 0;
-}
-
-//------------------------------------------------------------------------------
-//Internal Helpers
-
-forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
-void copy_internal(vector(T, allocator_t)* this, vector(T, allocator_t)* other)
-{
-	this->size = other->size;
-	for(size_t i = 0; i < this->size; i++) {
-		(data(&this->storage)[this->size]){ data(&other->storage)[other->size] };
-	}
-}
-
-//------------------------------------------------------------------------------
-//Allocator
-forall(otype T)
-void ?{}(heap_allocator(T)& this)
-{
-	this.storage = 0;
-	this.capacity = 0;
-}
-
-forall(otype T)
-void ?{}(heap_allocator(T)& this, heap_allocator(T) rhs)
-{
-	this.capacity = rhs.capacity;
-	this.storage = (T*)realloc((void*)this.storage, this.capacity * sizeof(T));
-}
-
-forall(otype T)
-heap_allocator(T) ?=?(heap_allocator(T)& this, heap_allocator(T) rhs)
-{
-	this.capacity = rhs.capacity;
-	this.storage = (T*)realloc((void*)this.storage, this.capacity * sizeof(T));
-	return this;
-}
-
-forall(otype T)
-void ^?{}(heap_allocator(T)& this)
-{
-	free(this.storage);
-}
-
-forall(otype T)
-inline void realloc_storage(heap_allocator(T)* this, size_t size)
-{
-	enum { GROWTH_RATE = 2 };
-	if(size > this->capacity)
-	{
-		this->capacity = GROWTH_RATE * size;
-		this->storage = (T*)realloc((void*)this->storage, this->capacity * sizeof(T));
-	}
-}
-
-// Local Variables: //
-// mode: c //
-// tab-width: 4 //
-// End: //
Index: libcfa/src/containers/vector.cfa
===================================================================
--- libcfa/src/containers/vector.cfa	(revision ba9baadeb7d347b3375a3c22e4ce3628359e9187)
+++ libcfa/src/containers/vector.cfa	(revision ba9baadeb7d347b3375a3c22e4ce3628359e9187)
@@ -0,0 +1,137 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// vector.c --
+//
+// Author           : Thierry Delisle
+// Created On       : Tue Jul  5 18:07:52 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Tue Jul  5 18:08:31 2016
+// Update Count     : 2
+//
+
+#include <containers/vector>
+
+#include <stdlib>
+
+forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
+void copy_internal(vector(T, allocator_t)* this, vector(T, allocator_t)* other);
+
+//------------------------------------------------------------------------------
+//Initialization
+forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
+void ?{}(vector(T, allocator_t)& this)
+{
+	(this.storage){};
+	this.size = 0;
+}
+
+forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
+void ?{}(vector(T, allocator_t)& this, vector(T, allocator_t) rhs)
+{
+	(this.storage){ rhs.storage };
+	copy_internal(&this, &rhs);
+}
+
+// forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
+// vector(T, allocator_t) ?=?(vector(T, allocator_t)* this, vector(T, allocator_t) rhs)
+// {
+// 	(&this->storage){};
+// 	copy_internal(this, &rhs);
+// 	return *this;
+// }
+
+forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
+void ^?{}(vector(T, allocator_t)& this)
+{
+	clear(&this);
+	^(this.storage){};
+}
+
+//------------------------------------------------------------------------------
+//Modifiers
+forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
+void push_back(vector(T, allocator_t)* this, T value)
+{
+	realloc_storage(&this->storage, this->size+1);
+	data(&this->storage)[this->size] = value;
+	this->size++;
+}
+
+forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
+void pop_back(vector(T, allocator_t)* this)
+{
+	this->size--;
+	^(data(&this->storage)[this->size]){};
+}
+
+forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
+void clear(vector(T, allocator_t)* this)
+{
+	for(size_t i = 0; i < this->size; i++)
+	{
+		^(data(&this->storage)[this->size]){};
+	}
+	this->size = 0;
+}
+
+//------------------------------------------------------------------------------
+//Internal Helpers
+
+forall(otype T, otype allocator_t | allocator_c(T, allocator_t))
+void copy_internal(vector(T, allocator_t)* this, vector(T, allocator_t)* other)
+{
+	this->size = other->size;
+	for(size_t i = 0; i < this->size; i++) {
+		(data(&this->storage)[this->size]){ data(&other->storage)[other->size] };
+	}
+}
+
+//------------------------------------------------------------------------------
+//Allocator
+forall(otype T)
+void ?{}(heap_allocator(T)& this)
+{
+	this.storage = 0;
+	this.capacity = 0;
+}
+
+forall(otype T)
+void ?{}(heap_allocator(T)& this, heap_allocator(T) rhs)
+{
+	this.capacity = rhs.capacity;
+	this.storage = (T*)realloc((void*)this.storage, this.capacity * sizeof(T));
+}
+
+forall(otype T)
+heap_allocator(T) ?=?(heap_allocator(T)& this, heap_allocator(T) rhs)
+{
+	this.capacity = rhs.capacity;
+	this.storage = (T*)realloc((void*)this.storage, this.capacity * sizeof(T));
+	return this;
+}
+
+forall(otype T)
+void ^?{}(heap_allocator(T)& this)
+{
+	free(this.storage);
+}
+
+forall(otype T)
+inline void realloc_storage(heap_allocator(T)* this, size_t size)
+{
+	enum { GROWTH_RATE = 2 };
+	if(size > this->capacity)
+	{
+		this->capacity = GROWTH_RATE * size;
+		this->storage = (T*)realloc((void*)this->storage, this->capacity * sizeof(T));
+	}
+}
+
+// Local Variables: //
+// mode: c //
+// tab-width: 4 //
+// End: //
