00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #pragma once
00022
00023 #include <drizzled/session.h>
00024 #include <drizzled/util/storable.h>
00025 #include <boost/unordered_set.hpp>
00026
00027 namespace user_locks {
00028
00029
00030
00031
00032
00033 class Storable : public drizzled::util::Storable {
00034 Keys list_of_locks;
00035 drizzled::session_id_t id;
00036
00037 public:
00038
00039 Storable(drizzled::session_id_t id_arg) :
00040 id(id_arg)
00041 {
00042 }
00043
00044 ~Storable()
00045 {
00046 erase_all();
00047 }
00048
00049 void insert(const Key &arg)
00050 {
00051 list_of_locks.insert(arg);
00052 }
00053
00054 bool erase(const Key &arg)
00055 {
00056 return boost::lexical_cast<bool>(list_of_locks.erase(arg));
00057 }
00058
00059
00060
00061 int64_t erase_all()
00062 {
00063 int64_t count= list_of_locks.size();
00064
00065 for (Keys::iterator iter= list_of_locks.begin();
00066 iter != list_of_locks.end(); iter++)
00067 {
00068 (void)user_locks::Locks::getInstance().release(*iter, id);
00069 }
00070 list_of_locks.clear();
00071
00072 return count;
00073 }
00074
00075 };
00076
00077
00078 }
00079