/** * PANDA 3D SOFTWARE * Copyright (c) Carnegie Mellon University. All rights reserved. * * All use of this software is subject to the terms of the revised BSD * license. You should have received a copy of this license along * with this source code in a file named "LICENSE." * * @file cycleDataReader.I * @author drose * @date 2002-02-21 */ #ifndef CPPPARSER #ifdef DO_PIPELINING // This is the implementation for full support of pipelining (as well as the // sanity-check only implementation). /** * */ template INLINE CycleDataReader:: CycleDataReader(const PipelineCycler &cycler, Thread *current_thread) : _cycler(&cycler), _current_thread(current_thread) { _pointer = _cycler->read_unlocked(_current_thread); } /** * */ template INLINE CycleDataReader:: CycleDataReader(const CycleDataReader ©) : _cycler(copy._cycler), _current_thread(copy._current_thread), _pointer(copy._pointer) { } /** * */ template INLINE void CycleDataReader:: operator = (const CycleDataReader ©) { nassertv(_current_thread == copy._current_thread); _cycler = copy._cycler; _pointer = copy._pointer; } /** * */ template INLINE CycleDataReader:: ~CycleDataReader() { } /** * This provides an indirect member access to the actual CycleData data. */ template INLINE const CycleDataType *CycleDataReader:: operator -> () const { return _pointer; } /** * This allows the CycleDataReader to be passed to any function that expects a * const CycleDataType pointer. */ template INLINE CycleDataReader:: operator const CycleDataType * () const { return _pointer; } /** * This allows the CycleDataReader to be passed to any function that expects a * const CycleDataType pointer. */ template INLINE const CycleDataType *CycleDataReader:: p() const { return _pointer; } /** * Returns the Thread pointer of the currently-executing thread, as passed to * the constructor of this object. */ template INLINE Thread *CycleDataReader:: get_current_thread() const { return _current_thread; } #else // !DO_PIPELINING // This is the trivial, do-nothing implementation. /** * */ template INLINE CycleDataReader:: CycleDataReader(const PipelineCycler &cycler, Thread *) { _pointer = cycler.cheat(); } /** * */ template INLINE CycleDataReader:: CycleDataReader(const CycleDataReader ©) : _pointer(copy._pointer) { } /** * */ template INLINE void CycleDataReader:: operator = (const CycleDataReader ©) { _pointer = copy._pointer; } /** * */ template INLINE CycleDataReader:: ~CycleDataReader() { } /** * This provides an indirect member access to the actual CycleData data. */ template INLINE const CycleDataType *CycleDataReader:: operator -> () const { return _pointer; } /** * This allows the CycleDataReader to be passed to any function that expects a * const CycleDataType pointer. */ template INLINE CycleDataReader:: operator const CycleDataType * () const { return _pointer; } /** * This allows the CycleDataReader to be passed to any function that expects a * const CycleDataType pointer. */ template INLINE const CycleDataType *CycleDataReader:: p() const { return _pointer; } /** * Returns the Thread pointer of the currently-executing thread, as passed to * the constructor of this object. */ template INLINE Thread *CycleDataReader:: get_current_thread() const { return Thread::get_current_thread(); } #endif // DO_PIPELINING #endif // CPPPARSER