4 years agoref<T>::ref() now initializes to nullptr. Improve boolean comparisons for ref.
Robert Sesek [Sun, 9 Oct 2016 00:54:21 +0000 (20:54 -0400)]
ref<T>::ref() now initializes to nullptr. Improve boolean comparisons for ref.

Also add internal::OwnedPtrDeleter::operator= to suport std::move of owned.

4 years agoIntroduce a basic EXPECT() and EXPECT_UAF() to test.cc.
Robert Sesek [Sun, 9 Oct 2016 00:44:50 +0000 (20:44 -0400)]
Introduce a basic EXPECT() and EXPECT_UAF() to test.cc.

4 years agoAdd a Suggested Usage section to the README.
Robert Sesek [Sat, 8 Oct 2016 22:17:18 +0000 (18:17 -0400)]
Add a Suggested Usage section to the README.

4 years agoThrow a custom exception type and attempt to catch it in the test program.
Robert Sesek [Sat, 8 Oct 2016 21:56:52 +0000 (17:56 -0400)]
Throw a custom exception type and attempt to catch it in the test program.

This allows all the tests to run. It is possible to inspect the exception by
breaking on __cxa_throw.

4 years agoFix ref<T>::~ref to not try to RemoveRef if already deleted.
Robert Sesek [Sat, 8 Oct 2016 21:55:40 +0000 (17:55 -0400)]
Fix ref<T>::~ref to not try to RemoveRef if already deleted.

Caught by TestReset.

4 years agoRemove unnecessary owned<T>::GetRawPointer().
Robert Sesek [Sat, 8 Oct 2016 21:30:25 +0000 (17:30 -0400)]
Remove unnecessary owned<T>::GetRawPointer().

4 years agoReduce the size of ref<T> to a single pointer.
Robert Sesek [Sat, 8 Oct 2016 21:23:27 +0000 (17:23 -0400)]
Reduce the size of ref<T> to a single pointer.

Rather than tracking |T*|, |OwnedPtrDeleter<T>|, and a |bool|; ref<T> now just
holds an |owned<T>*|. It uses uintptr_t's max value as a deletion sentinel
rather than a separate flag. And with the actual owned<T>*, the deleter doesn't
need to be held separately either.

4 years agoAdd a README.
Robert Sesek [Sat, 8 Oct 2016 20:14:29 +0000 (16:14 -0400)]

4 years agoFix ref::operator= for non-const lvalue binding to a temporary.
Robert Sesek [Sat, 8 Oct 2016 19:29:59 +0000 (15:29 -0400)]
Fix ref::operator= for non-const lvalue binding to a temporary.

Implement operator= manually and reimplement the copy-ctor using it, rather than
vice versa. In addition, deleter_ gets changed to a pointer rather than
reference, so that a default ctor can be added.

4 years agoMove exception raising into a .cc file so that -fno-exceptions can be used with the...
Robert Sesek [Sat, 8 Oct 2016 19:29:27 +0000 (15:29 -0400)]
Move exception raising into a .cc file so that -fno-exceptions can be used with the header.

4 years agoAdd a Makefile.
Robert Sesek [Sat, 8 Oct 2016 18:59:18 +0000 (14:59 -0400)]
Add a Makefile.

4 years agoMake ref(owned<T>) explicit.
Robert Sesek [Sat, 8 Oct 2016 18:48:57 +0000 (14:48 -0400)]
Make ref(owned<T>) explicit.

4 years agoInitial implementation of zero-cost unique_ptr with exploding weak references.
Robert Sesek [Sat, 8 Oct 2016 18:16:46 +0000 (14:16 -0400)]
Initial implementation of zero-cost unique_ptr with exploding weak references.