OShmPtrBase.cc

Go to the documentation of this file.
00001 /*
00002  * This file is part of openSDK.
00003  *
00004  * Copyright (C) 2006-2007 openSDK team
00005  *
00006  * openSDK is free software; you can redistribute it and/or modify
00007  * it under the terms of the GNU General Public License as published by
00008  * the Free Software Foundation; version 2.
00009  *
00010  * openSDK is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00013  * GNU General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU General Public License
00016  * along with openSDK; if not, write to the Free Software
00017  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00018  *
00019  *     $Id: OShmPtrBase.cc,v 1.4 2007/01/26 23:12:05 nuno-lopes Exp $
00020  */
00021 
00022 #include <OPENR/OShmPtrBase.h>
00023 #include <cstring>
00024 
00025 OShmPtrBase::OShmPtrBase()
00026 {
00027         init();
00028 }
00029 
00030 OShmPtrBase::OShmPtrBase(const OShmPtrBase& rhs)
00031 {
00032         pointee_ = rhs.RCRPtr();
00033         pointee_->AddReference();
00034 }
00035 
00036 OShmPtrBase::OShmPtrBase(RCRegion *p)
00037 {
00038         pointee_ = p;
00039         pointee_->AddReference();
00040 }
00041 
00042 OShmPtrBase::~OShmPtrBase()
00043 {
00044         Deallocate();
00045 }
00046 
00047 void OShmPtrBase::Deallocate()
00048 {
00049         if (pointee_) {
00050                 pointee_->RemoveReference();
00051                 init();
00052         }
00053 }
00054 
00055 const OShmPtrBase& OShmPtrBase::operator=(const OShmPtrBase& rhs)
00056 {
00057         Deallocate();
00058         pointee_ = rhs.RCRPtr();
00059         pointee_->AddReference();
00060         return *this;
00061 }
00062 
00063 void OShmPtrBase::init()
00064 {
00065         pointee_ = NULL;
00066 }
00067 
00068 
00069 // non member function, but also defined in the header
00070 void memcpy(void* s1, const OShmPtrBase& s2, size_t size)
00071 {
00072         memcpy(s1, s2.Base(), size);
00073 }

Generated on Sun Dec 2 23:04:30 2007 for openSDK by  doxygen 1.3.9.1