From e948af18513b8bb5ded0c18dd9c56666f439e13d Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Fri, 26 Apr 2013 18:27:17 -0400 Subject: [PATCH] PVScalar::assign and PVScalarArray::assign --- pvDataApp/pv/pvData.h | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/pvDataApp/pv/pvData.h b/pvDataApp/pv/pvData.h index 5cd597a..b7e3e0d 100644 --- a/pvDataApp/pv/pvData.h +++ b/pvDataApp/pv/pvData.h @@ -432,6 +432,8 @@ public: } virtual void putFrom(const void *, ScalarType) = 0; + virtual void assign(const PVScalar&) = 0; + protected: PVScalar(ScalarConstPtr const & scalar); }; @@ -497,6 +499,12 @@ protected: castUnsafeV(1, typeCode, (void*)&result, stype, src); put(result); } + virtual void assign(const PVScalar& scalar) + { + T result; + scalar.getAs((void*)&result, typeCode); + put(result); + } private: friend class PVDataCreate; @@ -652,6 +660,7 @@ public: { getAs(ID, (void*)ptr, count, offset); } + virtual void getAs(ScalarType, void*, size_t, size_t) const = 0; template inline void putFrom(const typename ScalarTypeTraits::type* ptr, @@ -659,11 +668,12 @@ public: { putFrom(ID, (const void*)ptr, count, offset); } + virtual void putFrom(ScalarType, const void*, size_t ,size_t) = 0; + + virtual void assign(const PVScalarArray& pv) = 0; protected: PVScalarArray(ScalarArrayConstPtr const & scalarArray); - virtual void getAs(ScalarType, void*, size_t, size_t) const = 0; - virtual void putFrom(ScalarType, const void*, size_t ,size_t) = 0; private: friend class PVDataCreate; }; @@ -1079,11 +1089,6 @@ public: return o << *(get() + index); } -protected: - PVValueArray(ScalarArrayConstPtr const & scalar) - : PVScalarArray(scalar) {} - friend class PVDataCreate; - virtual void getAs(ScalarType dtype, void* ptr, size_t count, size_t offset) const { castUnsafeV(count, dtype, ptr, typeCode, (const void*)(get()+offset)); @@ -1092,6 +1097,17 @@ protected: { castUnsafeV(count, typeCode, (void*)(get()+offset), dtype, ptr); } + + virtual void assign(const PVScalarArray& pv) + { + setLength(pv.getLength()); + pv.getAs(typeCode, (void*)get(), std::min(getLength(),pv.getLength()), 0); + } + +protected: + PVValueArray(ScalarArrayConstPtr const & scalar) + : PVScalarArray(scalar) {} + friend class PVDataCreate; }; template