~drizzle-trunk/drizzle/development

1877.2.10 by Brian Aker
Merge in work for cache (fetch directly from).
1
/* - mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 *
4
 *  Copyright (C) 2010 Brian Aker
5
 *
6
 *  This program is free software; you can redistribute it and/or modify
7
 *  it under the terms of the GNU General Public License as published by
8
 *  the Free Software Foundation; either version 2 of the License, or
9
 *  (at your option) any later version.
10
 *
11
 *  This program is distributed in the hope that it will be useful,
12
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 *  GNU General Public License for more details.
15
 *
16
 *  You should have received a copy of the GNU General Public License
17
 *  along with this program; if not, write to the Free Software
18
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19
 */
20
2173.2.1 by Monty Taylor
Fixes incorrect usage of include
21
#include <config.h>
1877.2.10 by Brian Aker
Merge in work for cache (fetch directly from).
22
1938.4.5 by Brian Aker
REmove the allowance for seeing the raw cache, and remove the ability for an
23
#include <boost/bind.hpp>
1938.4.3 by Brian Aker
Added generator for table_definition cache. Now no one can touch the guts :)
24
#include <boost/thread/mutex.hpp>
25
#include <boost/thread/shared_mutex.hpp>
26
2173.2.1 by Monty Taylor
Fixes incorrect usage of include
27
#include <drizzled/session.h>
28
#include <drizzled/identifier/table.h>
29
#include <drizzled/definition/cache.h>
30
#include <drizzled/table/instance.h>
2192.4.5 by Olaf van der Spek
Use find_ptr
31
#include <drizzled/util/find_ptr.h>
1877.2.10 by Brian Aker
Merge in work for cache (fetch directly from).
32
33
namespace drizzled {
34
35
namespace definition {
36
2087.4.2 by Brian Aker
Modify TableIdentifier to fit with the rest of the identifiers.
37
table::instance::Shared::shared_ptr Cache::find(const identifier::Table::Key &key)
1877.2.10 by Brian Aker
Merge in work for cache (fetch directly from).
38
{
1938.4.3 by Brian Aker
Added generator for table_definition cache. Now no one can touch the guts :)
39
  boost::mutex::scoped_lock scopedLock(_mutex);
2192.4.8 by Olaf van der Spek
Use ptr instead of i
40
  if (Map::mapped_type* ptr= find_ptr(cache, key))
41
    return *ptr;
2069.4.4 by Brian Aker
Create a shared form of the instance which is a bit more heavier weight then
42
  return table::instance::Shared::shared_ptr();
1877.2.10 by Brian Aker
Merge in work for cache (fetch directly from).
43
}
44
2087.4.2 by Brian Aker
Modify TableIdentifier to fit with the rest of the identifiers.
45
void Cache::erase(const identifier::Table::Key &key)
1877.2.11 by Brian Aker
Merge in changes for encapsulation out to cache.
46
{
1938.4.3 by Brian Aker
Added generator for table_definition cache. Now no one can touch the guts :)
47
  boost::mutex::scoped_lock scopedLock(_mutex);
1877.2.11 by Brian Aker
Merge in changes for encapsulation out to cache.
48
  
1938.4.4 by Brian Aker
Remove dead getShare() call which should have been a call on the cache
49
  cache.erase(key);
1877.2.11 by Brian Aker
Merge in changes for encapsulation out to cache.
50
}
51
2087.4.2 by Brian Aker
Modify TableIdentifier to fit with the rest of the identifiers.
52
bool Cache::insert(const identifier::Table::Key &key, table::instance::Shared::shared_ptr share)
1877.2.11 by Brian Aker
Merge in changes for encapsulation out to cache.
53
{
1938.4.3 by Brian Aker
Added generator for table_definition cache. Now no one can touch the guts :)
54
  boost::mutex::scoped_lock scopedLock(_mutex);
55
  std::pair<Map::iterator, bool> ret=
1938.4.4 by Brian Aker
Remove dead getShare() call which should have been a call on the cache
56
    cache.insert(std::make_pair(key, share));
1877.2.11 by Brian Aker
Merge in changes for encapsulation out to cache.
57
58
  return ret.second;
59
}
60
2069.4.4 by Brian Aker
Create a shared form of the instance which is a bit more heavier weight then
61
void Cache::CopyFrom(drizzled::table::instance::Shared::vector &vector)
1938.4.5 by Brian Aker
REmove the allowance for seeing the raw cache, and remove the ability for an
62
{
63
  boost::mutex::scoped_lock scopedLock(_mutex);
64
65
  vector.reserve(definition::Cache::singleton().size());
66
67
  std::transform(cache.begin(),
68
                 cache.end(),
69
                 std::back_inserter(vector),
70
                 boost::bind(&Map::value_type::second, _1) );
71
  assert(vector.size() == cache.size());
72
}
73
1877.2.10 by Brian Aker
Merge in work for cache (fetch directly from).
74
} /* namespace definition */
75
} /* namespace drizzled */