Equalizer  1.2.1
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,
00044                                      const uint64_t dirtyBits )
00045     {
00046         co::Serializable::serialize( os, dirtyBits );
00047         
00048         if( dirtyBits & DIRTY_DATA ) {
00049             os << _offset << _numBytes;
00050 
00051             EQASSERT(_hPos != NULL);
00052             EQASSERT(_hVel != NULL);
00053 
00054             os.write(_hPos+_offset, _numBytes);
00055             os.write(_hVel+_offset, _numBytes);
00056             //os.write(_hCol+_offset, _numBytes);
00057         }        
00058     }
00059     
00060     void SharedDataProxy::deserialize( co::DataIStream& is,
00061                                        const uint64_t dirtyBits )
00062     {
00063         co::Serializable::deserialize( is, dirtyBits );
00064 
00065         if( dirtyBits & DIRTY_DATA ) {
00066             is >> _offset >> _numBytes;
00067 
00068             EQASSERT(_hPos != NULL);
00069             EQASSERT(_hVel != NULL);
00070 
00071             is.read(_hPos+_offset, _numBytes);
00072             is.read(_hVel+_offset, _numBytes);
00073             //is.read(_hCol+_offset, _numBytes);
00074         }        
00075     }
00076         
00077     void SharedDataProxy::init(const unsigned int offset, const unsigned int numBytes, float *pos, float *vel, float *col)
00078     {
00079         _offset        = offset;
00080         _numBytes    = numBytes;
00081 
00082         _hPos        = pos;
00083         _hVel        = vel;
00084         _hCol        = col;
00085         
00086         setDirty( DIRTY_DATA );
00087     }
00088 
00089     void SharedDataProxy::init(float *pos, float *vel, float *col)
00090     {
00091         _hPos        = pos;
00092         _hVel        = vel;
00093         _hCol        = col;
00094         
00095         setDirty( DIRTY_DATA );
00096     }
00097     
00098     void SharedDataProxy::exit()
00099     {
00100         _offset      = 0;
00101         _numBytes    = 0;
00102         
00103         _hPos        = NULL;
00104         _hVel        = NULL;
00105         _hCol        = NULL;
00106     }
00107     
00108     void SharedDataProxy::markDirty()
00109     {
00110         setDirty( DIRTY_DATA );
00111     }
00112     
00113 }
00114 
Generated on Fri Jun 8 2012 15:44:32 for Equalizer 1.2.1 by  doxygen 1.8.0