Equalizer 1.0

sharedDataProxy.cpp

00001 
00002 /*
00003  * Copyright (c) 2009, Philippe Robert <philippe.robert@gmail.com> 
00004  *
00005  * Redistribution and use in source and binary forms, with or without
00006  * modification, are permitted provided that the following conditions are met:
00007  *
00008  * - Redistributions of source code must retain the above copyright notice, this
00009  *   list of conditions and the following disclaimer.
00010  * - Redistributions in binary form must reproduce the above copyright notice,
00011  *   this list of conditions and the following disclaimer in the documentation
00012  *   and/or other materials provided with the distribution.
00013  * - Neither the name of Eyescale Software GmbH nor the names of its
00014  *   contributors may be used to endorse or promote products derived from this
00015  *   software without specific prior written permission.
00016  *
00017  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00018  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00019  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00020  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
00021  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00022  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00023  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00024  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00025  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00026  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00027  * POSSIBILITY OF SUCH DAMAGE.
00028  */
00029 
00030 #include "sharedDataProxy.h"
00031 #include "client.h"
00032 
00033 namespace eqNbody
00034 {
00035     
00036     SharedDataProxy::SharedDataProxy() : _offset(0), _numBytes(0)
00037     {            
00038         _hPos = NULL;
00039         _hVel = NULL;
00040         _hCol = NULL;
00041     }
00042         
00043     void SharedDataProxy::serialize( co::DataOStream& os, const uint64_t dirtyBits )
00044     {
00045         eq::fabric::Serializable::serialize( os, dirtyBits );
00046         
00047         if( dirtyBits & DIRTY_DATA ) {
00048             os << _offset << _numBytes;
00049 
00050             EQASSERT(_hPos != NULL);
00051             EQASSERT(_hVel != NULL);
00052 
00053             os.write(_hPos+_offset, _numBytes);
00054             os.write(_hVel+_offset, _numBytes);
00055             //os.write(_hCol+_offset, _numBytes);
00056         }        
00057     }
00058     
00059     void SharedDataProxy::deserialize( co::DataIStream& is, const uint64_t dirtyBits )
00060     {
00061         eq::fabric::Serializable::deserialize( is, dirtyBits );
00062 
00063         if( dirtyBits & DIRTY_DATA ) {
00064             is >> _offset >> _numBytes;
00065 
00066             EQASSERT(_hPos != NULL);
00067             EQASSERT(_hVel != NULL);
00068 
00069             is.read(_hPos+_offset, _numBytes);
00070             is.read(_hVel+_offset, _numBytes);
00071             //is.read(_hCol+_offset, _numBytes);
00072         }        
00073     }
00074         
00075     void SharedDataProxy::init(const unsigned int offset, const unsigned int numBytes, float *pos, float *vel, float *col)
00076     {
00077         _offset        = offset;
00078         _numBytes    = numBytes;
00079 
00080         _hPos        = pos;
00081         _hVel        = vel;
00082         _hCol        = col;
00083         
00084         setDirty( DIRTY_DATA );
00085     }
00086 
00087     void SharedDataProxy::init(float *pos, float *vel, float *col)
00088     {
00089         _hPos        = pos;
00090         _hVel        = vel;
00091         _hCol        = col;
00092         
00093         setDirty( DIRTY_DATA );
00094     }
00095     
00096     void SharedDataProxy::exit()
00097     {
00098         _offset      = 0;
00099         _numBytes    = 0;
00100         
00101         _hPos        = NULL;
00102         _hVel        = NULL;
00103         _hCol        = NULL;
00104     }
00105     
00106     void SharedDataProxy::markDirty()
00107     {
00108         setDirty( DIRTY_DATA );
00109     }
00110     
00111 }
00112 
Generated on Sun May 8 2011 19:11:07 for Equalizer 1.0 by  doxygen 1.7.3