Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

lockable.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 /***********************************************************************
00019  Copyright (c) 2005 by Educational Technology Resources, Inc.
00020  Others may also hold copyrights on code in this file.  See the CREDITS
00021  file in the top directory of the distribution for details.
00022 
00023  This file is part of MySQL++.
00024 
00025  MySQL++ is free software; you can redistribute it and/or modify it
00026  under the terms of the GNU Lesser General Public License as published
00027  by the Free Software Foundation; either version 2.1 of the License, or
00028  (at your option) any later version.
00029 
00030  MySQL++ is distributed in the hope that it will be useful, but WITHOUT
00031  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00032  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
00033  License for more details.
00034 
00035  You should have received a copy of the GNU Lesser General Public
00036  License along with MySQL++; if not, write to the Free Software
00037  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
00038  USA
00039 ***********************************************************************/
00040 
00041 #ifndef MYSQLPP_LOCKABLE_H
00042 #define MYSQLPP_LOCKABLE_H
00043 
00044 namespace mysqlpp {
00045 
00048 
00049 class MYSQLPP_EXPORT Lock
00050 {
00051 public:
00053         virtual ~Lock() { }
00054 
00058         virtual bool lock() = 0;
00059 
00061         virtual void unlock() = 0;
00062 
00064         virtual bool locked() const = 0;
00065 
00067         virtual void set(bool b) = 0;
00068 };
00069 
00070 
00077 
00078 class MYSQLPP_EXPORT BasicLock : public Lock
00079 {
00080 public:
00082         BasicLock(bool is_locked = false) :
00083         locked_(is_locked)
00084         {
00085         }
00086         
00088         ~BasicLock() { }
00089 
00093         bool lock()
00094         {
00095                 if (locked_) {
00096                         return true;
00097                 }
00098                 locked_ = true;
00099                 return false;
00100         }
00101 
00103         void unlock() { locked_ = false; }
00104 
00106         bool locked() const { return locked_; }
00107 
00109         void set(bool b) { locked_ = b; }
00110 
00111 private:
00112         bool locked_;
00113 };
00114 
00115 
00120 
00121 class MYSQLPP_EXPORT Lockable
00122 {
00123 protected:
00125         Lockable(bool is_locked) :
00126         pimpl_(new BasicLock(is_locked))
00127         {
00128         }
00129 
00131         virtual ~Lockable()
00132         {
00133                 delete pimpl_;
00134         }
00135 
00139         virtual bool lock() { return pimpl_->lock(); }
00140 
00142         virtual void unlock() { pimpl_->unlock(); }
00143 
00145         bool locked() const { return pimpl_->locked(); }
00146 
00147 protected:
00150         void set_lock(bool b) { pimpl_->set(b); }
00151 
00152 private:
00153         // Don't allow default construction
00154         Lockable();
00155 
00156         // Pointer to implementation object
00157         Lock* pimpl_;
00158 };
00159 
00160 } // end namespace mysqlpp
00161 
00162 #endif // MYSQLPP_LOCKABLE_H
00163 

Generated on Wed Jul 11 15:34:34 2007 for MySQL++ by doxygen 1.3.5