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/table/instance.h>
00024
00025 namespace drizzled {
00026
00027 namespace generator {
00028 class TableDefinitionCache;
00029 }
00030
00031 namespace definition {
00032
00033 class Cache
00034 {
00035 public:
00036 static inline Cache &singleton()
00037 {
00038 static Cache open_cache;
00039
00040 return open_cache;
00041 }
00042
00043 size_t size() const
00044 {
00045 return cache.size();
00046 }
00047
00048 void rehash(size_t arg)
00049 {
00050 cache.rehash(arg);
00051 }
00052
00053 table::instance::Shared::shared_ptr find(const identifier::Table::Key &identifier);
00054 void erase(const identifier::Table::Key &identifier);
00055 bool insert(const identifier::Table::Key &identifier, table::instance::Shared::shared_ptr share);
00056
00057 protected:
00058 friend class drizzled::generator::TableDefinitionCache;
00059
00060 void CopyFrom(table::instance::Shared::vector &vector);
00061
00062 private:
00063 typedef boost::unordered_map< identifier::Table::Key, table::instance::Shared::shared_ptr> Map;
00064
00065 Map cache;
00066 boost::mutex _mutex;
00067 };
00068
00069 }
00070 }
00071