From a7ae7925eb8c393cdec972ed59a1ca0cb48253bd Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Thu, 5 Sep 2013 00:53:21 -0700 Subject: gras: move sbuffer inlines into lib This avoids inline ASM to be LLVM JIT friendly. This commit includes a unit test for jit factory + sbuffer. --- include/gras/detail/sbuffer.hpp | 49 ++++------------------------------------- 1 file changed, 4 insertions(+), 45 deletions(-) (limited to 'include/gras/detail') diff --git a/include/gras/detail/sbuffer.hpp b/include/gras/detail/sbuffer.hpp index 720c8db..cdd4191 100644 --- a/include/gras/detail/sbuffer.hpp +++ b/include/gras/detail/sbuffer.hpp @@ -8,57 +8,16 @@ namespace gras { +extern GRAS_API void intrusive_ptr_add_ref(SBufferImpl *impl); +extern GRAS_API void intrusive_ptr_release(SBufferImpl *impl); + struct SBufferImpl { - SBufferImpl(const SBufferConfig &config): - count(0), - config(config) - { - //NOP - } - + SBufferImpl(const SBufferConfig &config); boost::detail::atomic_count count; SBufferConfig config; }; -GRAS_FORCE_INLINE void intrusive_ptr_add_ref(SBufferImpl *impl) -{ - ++impl->count; -} - -GRAS_FORCE_INLINE void intrusive_ptr_release(SBufferImpl *impl) -{ - if GRAS_LIKELY(--impl->count) return; - - //call the deleter if possible - boost::shared_ptr token_deleter = impl->config.token.lock(); - if GRAS_LIKELY(token_deleter) - { - SBuffer buff; - buff.reset(impl); - (*token_deleter)(buff); - } - else if (impl->config.deleter) - { - SBuffer buff; - buff.reset(impl); - impl->config.deleter(buff); - impl->config.deleter = SBufferDeleter(); //reset deleter, so we dont double delete - } - else - { - delete impl; //its really dead now - } -} - -GRAS_FORCE_INLINE SBuffer::SBuffer(void): - offset(0), - length(0), - last(NULL) -{ - //NOP -} - GRAS_FORCE_INLINE const void *SBuffer::get_actual_memory(void) const { return (*this)->config.memory; -- cgit