diff --git a/panda/src/pipeline/cycleDataLockedReader.I b/panda/src/pipeline/cycleDataLockedReader.I index 05a66c6213..0ac88ebb67 100644 --- a/panda/src/pipeline/cycleDataLockedReader.I +++ b/panda/src/pipeline/cycleDataLockedReader.I @@ -61,6 +61,36 @@ operator = (const CycleDataLockedReader ©) { _cycler->increment_read(_pointer); } +#ifdef USE_MOVE_SEMANTICS +/** + * + */ +template +INLINE CycleDataLockedReader:: +CycleDataLockedReader(CycleDataLockedReader &&from) NOEXCEPT : + _cycler(from._cycler), + _current_thread(from._current_thread), + _pointer(from._pointer) +{ + from._pointer = NULL; +} + +/** + * + */ +template +INLINE void CycleDataLockedReader:: +operator = (CycleDataLockedReader &&from) NOEXCEPT { + nassertv(_pointer == (CycleDataType *)NULL); + nassertv(_current_thread == from._current_thread); + + _cycler = from._cycler; + _pointer = from._pointer; + + from._pointer = NULL; +} +#endif // USE_MOVE_SEMANTICS + /** * */ diff --git a/panda/src/pipeline/cycleDataLockedReader.h b/panda/src/pipeline/cycleDataLockedReader.h index 80deaf3dce..f66143fab4 100644 --- a/panda/src/pipeline/cycleDataLockedReader.h +++ b/panda/src/pipeline/cycleDataLockedReader.h @@ -47,6 +47,11 @@ public: INLINE CycleDataLockedReader(const CycleDataLockedReader ©); INLINE void operator = (const CycleDataLockedReader ©); +#if defined(USE_MOVE_SEMANTICS) && defined(DO_PIPELINING) + INLINE CycleDataLockedReader(CycleDataLockedReader &&from) NOEXCEPT; + INLINE void operator = (CycleDataLockedReader &&from) NOEXCEPT; +#endif + INLINE ~CycleDataLockedReader(); INLINE const CycleDataType *operator -> () const; diff --git a/panda/src/pipeline/cycleDataLockedStageReader.I b/panda/src/pipeline/cycleDataLockedStageReader.I index 521df13494..9f2c74d23a 100644 --- a/panda/src/pipeline/cycleDataLockedStageReader.I +++ b/panda/src/pipeline/cycleDataLockedStageReader.I @@ -64,6 +64,38 @@ operator = (const CycleDataLockedStageReader ©) { _cycler->increment_read(_pointer); } +#ifdef USE_MOVE_SEMANTICS +/** + * + */ +template +INLINE CycleDataLockedStageReader:: +CycleDataLockedStageReader(CycleDataLockedStageReader &&from) NOEXCEPT : + _cycler(from._cycler), + _current_thread(from._current_thread), + _pointer(from._pointer), + _stage(from._stage) +{ + from._pointer = NULL; +} + +/** + * + */ +template +INLINE void CycleDataLockedStageReader:: +operator = (CycleDataLockedStageReader &&from) NOEXCEPT { + nassertv(_pointer == (CycleDataType *)NULL); + nassertv(_current_thread == from._current_thread); + + _cycler = from._cycler; + _pointer = from._pointer; + _stage = from._stage; + + from._pointer = NULL; +} +#endif // USE_MOVE_SEMANTICS + /** * */ diff --git a/panda/src/pipeline/cycleDataLockedStageReader.h b/panda/src/pipeline/cycleDataLockedStageReader.h index 5b7e84cc19..6837a6edf4 100644 --- a/panda/src/pipeline/cycleDataLockedStageReader.h +++ b/panda/src/pipeline/cycleDataLockedStageReader.h @@ -34,6 +34,11 @@ public: INLINE CycleDataLockedStageReader(const CycleDataLockedStageReader ©); INLINE void operator = (const CycleDataLockedStageReader ©); +#if defined(USE_MOVE_SEMANTICS) && defined(DO_PIPELINING) + INLINE CycleDataLockedStageReader(CycleDataLockedStageReader &&from) NOEXCEPT; + INLINE void operator = (CycleDataLockedStageReader &&from) NOEXCEPT; +#endif + INLINE ~CycleDataLockedStageReader(); INLINE const CycleDataType *operator -> () const; diff --git a/panda/src/pipeline/cycleDataStageWriter.I b/panda/src/pipeline/cycleDataStageWriter.I index ab6c53544d..3e6d464768 100644 --- a/panda/src/pipeline/cycleDataStageWriter.I +++ b/panda/src/pipeline/cycleDataStageWriter.I @@ -114,6 +114,38 @@ CycleDataStageWriter(PipelineCycler &cycler, int stage, force_to_0, _current_thread); } +#ifdef USE_MOVE_SEMANTICS +/** + * + */ +template +INLINE CycleDataStageWriter:: +CycleDataStageWriter(CycleDataStageWriter &&from) NOEXCEPT : + _cycler(from._cycler), + _current_thread(from._current_thread), + _pointer(from._pointer), + _stage(from._stage) +{ + from._pointer = NULL; +} + +/** + * + */ +template +INLINE void CycleDataStageWriter:: +operator = (CycleDataStageWriter &&from) NOEXCEPT { + nassertv(_pointer == (CycleDataType *)NULL); + nassertv(_current_thread == from._current_thread); + + _cycler = from._cycler; + _pointer = from._pointer; + _stage = from._stage; + + from._pointer = NULL; +} +#endif // USE_MOVE_SEMANTICS + /** * */ diff --git a/panda/src/pipeline/cycleDataStageWriter.h b/panda/src/pipeline/cycleDataStageWriter.h index 967a367284..d154adb6d8 100644 --- a/panda/src/pipeline/cycleDataStageWriter.h +++ b/panda/src/pipeline/cycleDataStageWriter.h @@ -47,6 +47,11 @@ public: CycleDataLockedStageReader &take_from, bool force_to_0); +#if defined(USE_MOVE_SEMANTICS) && defined(DO_PIPELINING) + INLINE CycleDataStageWriter(CycleDataStageWriter &&from) NOEXCEPT; + INLINE void operator = (CycleDataStageWriter &&from) NOEXCEPT; +#endif + INLINE ~CycleDataStageWriter(); INLINE CycleDataType *operator -> (); diff --git a/panda/src/pipeline/cycleDataWriter.I b/panda/src/pipeline/cycleDataWriter.I index 0f0bc481eb..3706468612 100644 --- a/panda/src/pipeline/cycleDataWriter.I +++ b/panda/src/pipeline/cycleDataWriter.I @@ -122,7 +122,7 @@ template INLINE CycleDataWriter:: CycleDataWriter(PipelineCycler &cycler, CycleDataLockedReader &take_from, - bool force_to_0) : + bool force_to_0) : _cycler(&cycler), _current_thread(take_from.get_current_thread()) { @@ -130,6 +130,36 @@ CycleDataWriter(PipelineCycler &cycler, force_to_0, _current_thread); } +#ifdef USE_MOVE_SEMANTICS +/** + * + */ +template +INLINE CycleDataWriter:: +CycleDataWriter(CycleDataWriter &&from) NOEXCEPT : + _cycler(from._cycler), + _current_thread(from._current_thread), + _pointer(from._pointer) +{ + from._pointer = NULL; +} + +/** + * + */ +template +INLINE void CycleDataWriter:: +operator = (CycleDataWriter &&from) NOEXCEPT { + nassertv(_pointer == (CycleDataType *)NULL); + nassertv(_current_thread == from._current_thread); + + _cycler = from._cycler; + _pointer = from._pointer; + + from._pointer = NULL; +} +#endif // USE_MOVE_SEMANTICS + /** * */ diff --git a/panda/src/pipeline/cycleDataWriter.h b/panda/src/pipeline/cycleDataWriter.h index c62f034ca3..e2a4da7831 100644 --- a/panda/src/pipeline/cycleDataWriter.h +++ b/panda/src/pipeline/cycleDataWriter.h @@ -49,6 +49,11 @@ public: INLINE CycleDataWriter(PipelineCycler &cycler, CycleDataLockedReader &take_from); INLINE CycleDataWriter(PipelineCycler &cycler, CycleDataLockedReader &take_from, bool force_to_0); +#if defined(USE_MOVE_SEMANTICS) && defined(DO_PIPELINING) + INLINE CycleDataWriter(CycleDataWriter &&from) NOEXCEPT; + INLINE void operator = (CycleDataWriter &&from) NOEXCEPT; +#endif + INLINE ~CycleDataWriter(); INLINE CycleDataType *operator -> ();