~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
21
#include "config.h"
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
1877.2.10 by Brian Aker
Merge in work for cache (fetch directly from).
27
#include "drizzled/session.h"
28
#include "drizzled/identifier/table.h"
1938.4.1 by Brian Aker
Fix style on naming of shared_ptr for tableshare.
29
#include "drizzled/definition/cache.h"
2069.4.3 by Brian Aker
Merge in move for share to be instance.
30
31
#include "drizzled/table/instance.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);
1877.2.10 by Brian Aker
Merge in work for cache (fetch directly from).
40
1938.4.4 by Brian Aker
Remove dead getShare() call which should have been a call on the cache
41
  Map::iterator iter= cache.find(key);
1877.2.10 by Brian Aker
Merge in work for cache (fetch directly from).
42
  if (iter != cache.end())
43
  {
44
    return (*iter).second;
45
  }
46
2069.4.4 by Brian Aker
Create a shared form of the instance which is a bit more heavier weight then
47
  return table::instance::Shared::shared_ptr();
1877.2.10 by Brian Aker
Merge in work for cache (fetch directly from).
48
}
49
2087.4.2 by Brian Aker
Modify TableIdentifier to fit with the rest of the identifiers.
50
void Cache::erase(const identifier::Table::Key &key)
1877.2.11 by Brian Aker
Merge in changes for encapsulation out to cache.
51
{
1938.4.3 by Brian Aker
Added generator for table_definition cache. Now no one can touch the guts :)
52
  boost::mutex::scoped_lock scopedLock(_mutex);
1877.2.11 by Brian Aker
Merge in changes for encapsulation out to cache.
53
  
1938.4.4 by Brian Aker
Remove dead getShare() call which should have been a call on the cache
54
  cache.erase(key);
1877.2.11 by Brian Aker
Merge in changes for encapsulation out to cache.
55
}
56
2087.4.2 by Brian Aker
Modify TableIdentifier to fit with the rest of the identifiers.
57
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.
58
{
1938.4.3 by Brian Aker
Added generator for table_definition cache. Now no one can touch the guts :)
59
  boost::mutex::scoped_lock scopedLock(_mutex);
60
  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
61
    cache.insert(std::make_pair(key, share));
1877.2.11 by Brian Aker
Merge in changes for encapsulation out to cache.
62
63
  return ret.second;
64
}
65
2069.4.4 by Brian Aker
Create a shared form of the instance which is a bit more heavier weight then
66
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
67
{
68
  boost::mutex::scoped_lock scopedLock(_mutex);
69
70
  vector.reserve(definition::Cache::singleton().size());
71
72
  std::transform(cache.begin(),
73
                 cache.end(),
74
                 std::back_inserter(vector),
75
                 boost::bind(&Map::value_type::second, _1) );
76
  assert(vector.size() == cache.size());
77
}
78
1877.2.10 by Brian Aker
Merge in work for cache (fetch directly from).
79
} /* namespace definition */
80
} /* namespace drizzled */