diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2018-09-14 14:16:28 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-09-14 14:16:28 -0400 |
| commit | 3c505c22673701339d35eb2151f01c16eb3c78c3 (patch) | |
| tree | ff21543fcc846c693cbb6aba43a4e8ae9918f600 /source/core/smart-pointer.h | |
| parent | e1c934972509f4bbd2c05affe565f91e7a1e6c16 (diff) | |
Improvements around IR representation and memory usage (#635)
* * Remove dispose from IRInst
* Use MemoryArena instead of MemoryPool
* Make all IRInst not require Dtor - by having ref counted array store ptrs that need freeing
* Increase block size - typically compilation is 2Mb of IR space(!)
* Fix issues around StringRepresentation::equal because null has special meaning.
* Don't bother to construct as String to compare StringRepresentation, just used UnownedStringSlice.
* Added fromLiteral support to UnownedStringSlice and use instead of strlen version.
* Use more conventional way to test StringRepresentation against a String.
* Fix gcc/clang template problem with cast.
Diffstat (limited to 'source/core/smart-pointer.h')
| -rw-r--r-- | source/core/smart-pointer.h | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/source/core/smart-pointer.h b/source/core/smart-pointer.h index f45618050..abd7763ee 100644 --- a/source/core/smart-pointer.h +++ b/source/core/smart-pointer.h @@ -61,6 +61,18 @@ namespace Slang { return referenceCount; } + + // Use instead of dynamic_cast as it allows for replacement without using Rtti in the future + template<typename T> + SLANG_FORCE_INLINE const T* dynamicCast() const + { + return dynamic_cast<const T*>(this); + } + template<typename T> + SLANG_FORCE_INLINE T* dynamicCast() + { + return dynamic_cast<T*>(this); + } }; inline void addReference(RefObject* obj) @@ -78,7 +90,7 @@ namespace Slang struct RefPtr { RefPtr() - : pointer(0) + : pointer(nullptr) {} RefPtr(T* p) @@ -96,7 +108,7 @@ namespace Slang RefPtr(RefPtr<T>&& p) : pointer(p.pointer) { - p.pointer = 0; + p.pointer = nullptr; } template <typename U> @@ -170,8 +182,7 @@ namespace Slang template<typename U> RefPtr<U> As() const { - RefPtr<U> result(dynamic_cast<U*>(pointer)); - return result; + return RefPtr<U>(pointer->template dynamicCast<U>()); } ~RefPtr() |
