00001 //////////////////////////////////////////////////////////////////////////////// 00002 // Scorched3D (c) 2000-2009 00003 // 00004 // This file is part of Scorched3D. 00005 // 00006 // Scorched3D 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; either version 2 of the License, or 00009 // (at your option) any later version. 00010 // 00011 // Scorched3D is distributed in the hope that it will be useful, 00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 // GNU General Public License for more details. 00015 // 00016 // You should have received a copy of the GNU General Public License 00017 // along with Scorched3D; if not, write to the Free Software 00018 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00019 //////////////////////////////////////////////////////////////////////////////// 00020 00021 #include <net/NetBufferPool.h> 00022 00023 NetBufferPool *NetBufferPool::instance_ = 0; 00024 00025 NetBufferPool *NetBufferPool::instance() 00026 { 00027 if (!instance_) 00028 { 00029 instance_ = new NetBufferPool; 00030 } 00031 return instance_; 00032 } 00033 00034 NetBufferPool::NetBufferPool() : messagePoolMutex_(0) 00035 { 00036 messagePoolMutex_ = SDL_CreateMutex(); 00037 } 00038 00039 NetBufferPool::~NetBufferPool() 00040 { 00041 SDL_DestroyMutex(messagePoolMutex_); 00042 } 00043 00044 void NetBufferPool::addToPool(NetBuffer *message) 00045 { 00046 SDL_LockMutex(messagePoolMutex_); 00047 messagePool_.push_back(message); 00048 SDL_UnlockMutex(messagePoolMutex_); 00049 } 00050 00051 NetBuffer *NetBufferPool::getFromPool() 00052 { 00053 SDL_LockMutex(messagePoolMutex_); 00054 00055 NetBuffer *result = 0; 00056 if (messagePool_.empty()) 00057 { 00058 result = new NetBuffer; 00059 } 00060 else 00061 { 00062 result = messagePool_.front(); 00063 messagePool_.pop_front(); 00064 } 00065 result->reset(); 00066 SDL_UnlockMutex(messagePoolMutex_); 00067 00068 return result; 00069 }
1.5.3