From 73450bdbc7ebcf329456681b355e9c234aff5879 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Wed, 3 Jul 2013 14:23:17 -0400 Subject: [PATCH] combine shared_vector for void and const void --- pvDataApp/misc/sharedVector.h | 59 ++++++++++------------------------- 1 file changed, 17 insertions(+), 42 deletions(-) diff --git a/pvDataApp/misc/sharedVector.h b/pvDataApp/misc/sharedVector.h index bbe949f..953660d 100644 --- a/pvDataApp/misc/sharedVector.h +++ b/pvDataApp/misc/sharedVector.h @@ -12,7 +12,7 @@ namespace epics { namespace pvData { -template class shared_vector; +template class shared_vector; namespace detail { template @@ -221,7 +221,7 @@ namespace detail { * by make_unique() that unique()==true implies exclusive * ownership. */ -template +template class shared_vector : public detail::shared_vector_base { typedef detail::shared_vector_base base_t; @@ -243,7 +243,7 @@ public: typedef std::tr1::shared_ptr shared_pointer_type; // allow specialization for all E to be friends - template friend class shared_vector; + template friend class shared_vector; //! @brief Empty vector (not very interesting) @@ -476,17 +476,25 @@ public: }; +namespace detail { + template struct is_void {}; + template<> struct is_void { typedef void type; }; + template<> struct is_void { typedef void type; }; +} + //! Specialization for storing untyped pointers //! Does not allow access or iteration of contents -template<> -class shared_vector : public detail::shared_vector_base { - typedef detail::shared_vector_base base_t; +template +class shared_vector::type > + : public detail::shared_vector_base +{ + typedef detail::shared_vector_base base_t; public: - typedef void* pointer; + typedef E* pointer; typedef ptrdiff_t difference_type; typedef size_t size_type; - typedef std::tr1::shared_ptr shared_pointer_type; + typedef std::tr1::shared_ptr shared_pointer_type; shared_vector() :base_t() {} @@ -504,40 +512,7 @@ public: template shared_vector(const shared_vector& o) :base_t(o) {} - size_t max_size() const{return (size_t)-1;} - - pointer data() const{ - return (pointer)(((char*)this->m_data.get())+this->m_offset); - } -}; - -//! Specialization for storing constant untyped pointers -//! Does not allow access or iteration of contents -template<> -class shared_vector : public detail::shared_vector_base { - typedef detail::shared_vector_base base_t; -public: - typedef const void* pointer; - typedef ptrdiff_t difference_type; - typedef size_t size_type; - - typedef std::tr1::shared_ptr shared_pointer_type; - - shared_vector() :base_t() {} - - template - shared_vector(A v, size_t o, size_t c) :base_t(v,o,c) {} - - template - shared_vector(const std::tr1::shared_ptr& d, size_t o, size_t c) - :base_t(d,o,c) {} - - template - shared_vector(A d, B b, size_t o, size_t c) - :base_t(d,b,o,c) {} - - template - shared_vector(const shared_vector& o) :base_t(o) {} + shared_vector(const shared_vector& o) :base_t(o) {} size_t max_size() const{return (size_t)-1;}