aboutsummaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/include')
-rw-r--r--src/include/open-axiom/Charset (renamed from src/include/Charset.H)0
-rw-r--r--src/include/open-axiom/Constructor (renamed from src/include/Constructor.H)0
-rw-r--r--src/include/open-axiom/Database (renamed from src/include/Database.H)0
-rw-r--r--src/include/open-axiom/FileMapping (renamed from src/include/FileMapping.H)0
-rw-r--r--src/include/open-axiom/Input (renamed from src/include/Input.H)0
-rw-r--r--src/include/open-axiom/InputFragment (renamed from src/include/InputFragment.h)0
-rw-r--r--src/include/open-axiom/Lisp (renamed from src/include/Lisp.H)0
-rw-r--r--src/include/open-axiom/SourceFile (renamed from src/include/SourceFile.H)0
-rw-r--r--src/include/open-axiom/defaults (renamed from src/include/defaults.H)0
-rw-r--r--src/include/open-axiom/diagnostics (renamed from src/include/diagnostics.H)0
-rw-r--r--src/include/open-axiom/dialect (renamed from src/include/dialect.H)0
-rw-r--r--src/include/open-axiom/hash-table85
-rw-r--r--src/include/open-axiom/iterator (renamed from src/include/iterator.H)0
-rw-r--r--src/include/open-axiom/sexpr (renamed from src/include/sexpr.H)0
-rw-r--r--src/include/open-axiom/storage (renamed from src/include/storage.H)0
-rw-r--r--src/include/open-axiom/string-pool85
-rw-r--r--src/include/open-axiom/structure (renamed from src/include/structure.H)0
-rw-r--r--src/include/open-axiom/token (renamed from src/include/token.H)0
-rw-r--r--src/include/open-axiom/token-value (renamed from src/include/token-value.def)0
-rw-r--r--src/include/open-axiom/vm (renamed from src/include/vm.H)0
20 files changed, 170 insertions, 0 deletions
diff --git a/src/include/Charset.H b/src/include/open-axiom/Charset
index 58fa9ea8..58fa9ea8 100644
--- a/src/include/Charset.H
+++ b/src/include/open-axiom/Charset
diff --git a/src/include/Constructor.H b/src/include/open-axiom/Constructor
index bfab3940..bfab3940 100644
--- a/src/include/Constructor.H
+++ b/src/include/open-axiom/Constructor
diff --git a/src/include/Database.H b/src/include/open-axiom/Database
index cea082c8..cea082c8 100644
--- a/src/include/Database.H
+++ b/src/include/open-axiom/Database
diff --git a/src/include/FileMapping.H b/src/include/open-axiom/FileMapping
index 0c836efb..0c836efb 100644
--- a/src/include/FileMapping.H
+++ b/src/include/open-axiom/FileMapping
diff --git a/src/include/Input.H b/src/include/open-axiom/Input
index fa4555b8..fa4555b8 100644
--- a/src/include/Input.H
+++ b/src/include/open-axiom/Input
diff --git a/src/include/InputFragment.h b/src/include/open-axiom/InputFragment
index 7f317973..7f317973 100644
--- a/src/include/InputFragment.h
+++ b/src/include/open-axiom/InputFragment
diff --git a/src/include/Lisp.H b/src/include/open-axiom/Lisp
index a189dd38..a189dd38 100644
--- a/src/include/Lisp.H
+++ b/src/include/open-axiom/Lisp
diff --git a/src/include/SourceFile.H b/src/include/open-axiom/SourceFile
index 41b085a3..41b085a3 100644
--- a/src/include/SourceFile.H
+++ b/src/include/open-axiom/SourceFile
diff --git a/src/include/defaults.H b/src/include/open-axiom/defaults
index db399419..db399419 100644
--- a/src/include/defaults.H
+++ b/src/include/open-axiom/defaults
diff --git a/src/include/diagnostics.H b/src/include/open-axiom/diagnostics
index 9cb0fce1..9cb0fce1 100644
--- a/src/include/diagnostics.H
+++ b/src/include/open-axiom/diagnostics
diff --git a/src/include/dialect.H b/src/include/open-axiom/dialect
index bcfddd04..bcfddd04 100644
--- a/src/include/dialect.H
+++ b/src/include/open-axiom/dialect
diff --git a/src/include/open-axiom/hash-table b/src/include/open-axiom/hash-table
new file mode 100644
index 00000000..d74c7760
--- /dev/null
+++ b/src/include/open-axiom/hash-table
@@ -0,0 +1,85 @@
+// Copyright (C) 2010, Gabriel Dos Reis.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// - Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//
+// - Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in
+// the documentation and/or other materials provided with the
+// distribution.
+//
+// - Neither the name of The Numerical Algorithms Group Ltd. nor the
+// names of its contributors may be used to endorse or promote products
+// derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef OPENAXIOM_HASH_TABLE_INCLUDED
+#define OPENAXIOM_HASH_TABLE_INCLUDED
+
+// --% Author: Gabriel Dos Reis.
+// --% Description:
+// --% Simple hash table facility. To be replaced by C++0x
+// --% hash tables when C++0x compilers become common place.
+
+#include <open-axiom/storage>
+
+namespace OpenAxiom {
+ // --------------------
+ // -- HashTableEntry --
+ // --------------------
+ // Datatype for entries in a parameterized hash table.
+ // The type parameter is required to be a value-construcitble datatype.
+ // A table bucket entry is required to be at least 8-byte aligned
+ // so that an instance of it can be used directly as a VM value.
+ // See <open-axiom/vm> for more description.
+ template<typename T>
+ struct alignas(8) HashTableEntry : T {
+ HashTableEntry* chain; // previous item in the same bucket chain
+ size_t hash; // hash code of stored data
+ };
+
+ // --------------------
+ // -- BasicHashTable --
+ // --------------------
+ // A simple hash table data structure. Ideally, we would like to use
+ // standard C++ types, but hash tables were only in a C++ 2003 TR,
+ // officially part of C++0x standard library. We still don't have
+ // wide-spread C++0x compilers.
+ template<typename T>
+ struct BasicHashTable : private Memory::Arena<HashTableEntry<T> > {
+ typedef HashTableEntry<T> EntryType;
+ explicit BasicHashTable(size_t n)
+ : Memory::Arena<HashTableEntry<T> >(n),
+ buckets(this->allocate(n)), nbuckets(n) { }
+
+ EntryType* hash_chain(size_t h) const {
+ return buckets + (h % nbuckets);
+ }
+
+ EntryType* new_bucket() {
+ return this->allocate(1);
+ }
+
+ private:
+ HashTableEntry<T>* const buckets;
+ const size_t nbuckets;
+ };
+}
+
+#endif // OPENAXIOM_HASH_TABLE_INCLUDED
diff --git a/src/include/iterator.H b/src/include/open-axiom/iterator
index 048dc67c..048dc67c 100644
--- a/src/include/iterator.H
+++ b/src/include/open-axiom/iterator
diff --git a/src/include/sexpr.H b/src/include/open-axiom/sexpr
index 6920e436..6920e436 100644
--- a/src/include/sexpr.H
+++ b/src/include/open-axiom/sexpr
diff --git a/src/include/storage.H b/src/include/open-axiom/storage
index e414dec2..e414dec2 100644
--- a/src/include/storage.H
+++ b/src/include/open-axiom/storage
diff --git a/src/include/open-axiom/string-pool b/src/include/open-axiom/string-pool
new file mode 100644
index 00000000..1f746e6d
--- /dev/null
+++ b/src/include/open-axiom/string-pool
@@ -0,0 +1,85 @@
+// Copyright (C) 2010-2015, Gabriel Dos Reis.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// - Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+//
+// - Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in
+// the documentation and/or other materials provided with the
+// distribution.
+//
+// - Neither the name of The Numerical Algorithms Group Ltd. nor the
+// names of its contributors may be used to endorse or promote products
+// derived from this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef OPENAXIOM_STRING_POOL_INCLUDED
+#define OPENAXIOM_STRING_POOL_INCLUDED
+
+#include <open-axiom/hash-table>
+
+// --% Author: Gabriel Dos Reis.
+// --% Description:
+// --% Basic persistent string facility.
+// --% A stringpool for allocating long-living string objects.
+
+namespace OpenAxiom {
+ struct StringPool;
+
+ // ----------------
+ // -- StringItem --
+ // ----------------
+ // String data allocated from a stringpool.
+ struct StringItem {
+ const Byte* begin() const { return text; }
+ const Byte* end() const { return text + length; }
+ size_t size() const { return length; }
+ bool equal(const Byte*, size_t) const;
+ protected:
+ const Byte* text; // pointer to the byte sequence
+ size_t length; // number of bytes in this string
+ friend StringPool;
+ StringItem() : text(), length() { }
+ };
+
+ // ----------------
+ // -- StringPool --
+ // ----------------
+ // A string-pool object is a repository of long-living string objects.
+ // It contains no duplicates, therefore allows fast equality
+ // comparison of string objects.
+ struct StringPool : private BasicHashTable<StringItem> {
+ using BasicHashTable<StringItem>::EntryType;
+
+ StringPool();
+ // Intern a NUL-terminated sequence of characters.
+ EntryType* intern(const char*);
+
+ // Intern a sequence of characters given by its start and length.
+ EntryType* intern(const Byte*, size_t);
+ private:
+ Memory::Arena<Byte> strings; // character blub
+ // Allocate a string from the internal arena.
+ const Byte* make_copy(const Byte*, size_t);
+ };
+
+ typedef const StringPool::EntryType* InternedString;
+}
+
+#endif // OPENAXIOM_STRING_POOL_INCLUDED
diff --git a/src/include/structure.H b/src/include/open-axiom/structure
index 33c084f2..33c084f2 100644
--- a/src/include/structure.H
+++ b/src/include/open-axiom/structure
diff --git a/src/include/token.H b/src/include/open-axiom/token
index b57b69d6..b57b69d6 100644
--- a/src/include/token.H
+++ b/src/include/open-axiom/token
diff --git a/src/include/token-value.def b/src/include/open-axiom/token-value
index 9a949b86..9a949b86 100644
--- a/src/include/token-value.def
+++ b/src/include/open-axiom/token-value
diff --git a/src/include/vm.H b/src/include/open-axiom/vm
index 3bb62250..3bb62250 100644
--- a/src/include/vm.H
+++ b/src/include/open-axiom/vm