summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorJosh Blum2013-09-05 00:53:21 -0700
committerJosh Blum2013-09-05 00:53:21 -0700
commita7ae7925eb8c393cdec972ed59a1ca0cb48253bd (patch)
tree35fb700245824046e842483c34ddde24edcdcf0f /include
parenteeb4d1e7e38e98f372ee21936c220ac6a5cb4efb (diff)
downloadsandhi-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.hpp49
-rw-r--r--include/gras/sbuffer.hpp6
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
*/