Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

PsnOnceSyncedSharedMemoryManager.cxx

Go to the documentation of this file.
00001 /*
00002  * This file is part of openMask © INRIA, CNRS, Universite de Rennes 1 1993-2002, thereinafter the Software
00003  * 
00004  * The Software has been developped within the Siames Project. 
00005  * INRIA, the University of Rennes 1 and CNRS jointly hold intellectual property rights
00006  * 
00007  * The Software has been registered with the Agence pour la Protection des
00008  * Programmes (APP) under registration number IDDN.FR.001.510008.00.S.P.2001.000.41200
00009  *  
00010  * This file may be distributed under the terms of the Q Public License
00011  * version 1.0 as defined by Trolltech AS of Norway and appearing in the file
00012  * LICENSE.QPL included in the packaging of this file.
00013  *
00014  * Licensees holding valid specific licenses issued by INRIA, CNRS or Université de Rennes 1 
00015  * for the software may use this file in accordance with that specific license
00016  *
00017  */
00018 #ifdef _MOME
00019 
00020 #include "PsnOnceSyncedSharedMemoryManager.h"
00021 
00022 #include "PsnRelaxedMemoryManager.h"
00023 #include "PsnMemoryElementDescriptor.h"
00024 #include "MomeDsm.h"
00025 #include "iostream"
00026 
00027 PsnOnceSyncedSharedMemoryManager::PsnOnceSyncedSharedMemoryManager(size_t sizeDsm, size_t pageSize, size_t alignedSize, PsnRelaxedMemoryManager & memoryManager, int queueSize) :
00028    PsnSecondarySharedMemoryManager(sizeDsm,
00029                                    pageSize,
00030                                    alignedSize,
00031                                    memoryManager),
00032    _sizeLeft(sizeDsm),
00033    _syncedAtLastSync(false),
00034    _toSyncAtNextSync(false)
00035 {
00036    //because _firstPageOffset is used as the number of the pages used in memoryManager
00037    assert (_sizeDsm == _pageSize) ;
00038    _freeMem = new((PsnSharedMemoryManager *)NULL) PsnMemoryElementDescriptor() ;
00039    _freeMem->size = _sizeDsm ;
00040    _freeMem->base = 0 ;
00041    _freeMem->next = getAnInvalidOffset() ;
00042    memoryManager._whenSynced [ _firstPageOffset ] = -1 ;
00043 }
00044 
00045 PsnOnceSyncedSharedMemoryManager::~PsnOnceSyncedSharedMemoryManager() {
00046 
00047 }
00048 
00049 void PsnOnceSyncedSharedMemoryManager::sync() {
00050    if (_syncedAtLastSync && !_toSyncAtNextSync ) {
00051       _myMemoryManager._whenSynced [ _firstPageOffset ] = -1 ;
00052    }
00053    if (_toSyncAtNextSync) {
00054       _myMemoryManager._whenSynced [ _firstPageOffset ] = _myMemoryManager.getNextSyncedQueueIndex() ;
00055       _toSyncAtNextSync = false ;
00056       _syncedAtLastSync = true ;   
00057    }
00058 }
00059 
00060 void * PsnOnceSyncedSharedMemoryManager::getFromFree(size_t size) {
00061    void * resul = NULL ;
00062    if (size <= _sizeLeft ) resul = getFromThisFree(&_freeMem, size);
00063    if (resul != NULL) {
00064       _sizeLeft -= size ;
00065    }
00066    else {
00067 #ifdef _DEBUGALLOCATIONMOME
00068       cerr<<"impossible de casser "<<size<<" dans "<<_sizeLeft<<endl;
00069 #endif
00070    }
00071 #ifdef _DEBUGALLOCATIONMOME
00072    cerr<<"PsnOnceSyncedSharedMemoryManager::getFromFree "<<size<<" "<<resul<<endl;
00073 #endif
00074    return resul ;
00075 }
00076 
00077 void PsnOnceSyncedSharedMemoryManager::addInFree(void * ptr, size_t size) {
00078    addInThisFree(&_freeMem, globalAddressToLocal(ptr), size);
00079    _sizeLeft += size ;
00080 }
00081 
00082 #endif

logo OpenMask

Documentation generated on Mon Nov 25 15:25:01 2002

Generated with doxygen 1.2.12 by Dimitri van Heesch ,   1997-2001