diff options
author | Josh Blum | 2013-09-05 00:53:21 -0700 |
---|---|---|
committer | Josh Blum | 2013-09-05 00:53:21 -0700 |
commit | a7ae7925eb8c393cdec972ed59a1ca0cb48253bd (patch) | |
tree | 35fb700245824046e842483c34ddde24edcdcf0f /include | |
parent | eeb4d1e7e38e98f372ee21936c220ac6a5cb4efb (diff) | |
download | sandhi-a7ae7925eb8c393cdec972ed59a1ca0cb48253bd.tar.gz sandhi-a7ae7925eb8c393cdec972ed59a1ca0cb48253bd.tar.bz2 sandhi-a7ae7925eb8c393cdec972ed59a1ca0cb48253bd.zip |
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.
Diffstat (limited to 'include')
-rw-r--r-- | include/gras/detail/sbuffer.hpp | 49 | ||||
-rw-r--r-- | include/gras/sbuffer.hpp | 6 |
2 files changed, 10 insertions, 45 deletions
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<SBufferDeleter> 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; diff --git a/include/gras/sbuffer.hpp b/include/gras/sbuffer.hpp index 7980c30..d1bc2d1 100644 --- a/include/gras/sbuffer.hpp +++ b/include/gras/sbuffer.hpp @@ -34,6 +34,9 @@ struct GRAS_API SBufferConfig //! Default constructor zeros out buffer config SBufferConfig(void); + //! Destructor + ~SBufferConfig(void); + //! pointer to the memory start void *memory; @@ -94,6 +97,9 @@ struct GRAS_API SBuffer : boost::intrusive_ptr<SBufferImpl> */ SBuffer(const SBufferConfig &config); + //! Destructor + ~SBuffer(void); + /*! * Get a pointer to the start of the underlying memory */ |