FlightGear next
tilecache.hxx
Go to the documentation of this file.
1// TileCache.hxx -- routines to handle scenery tile caching
2//
3// Written by Curtis Olson, started December 2000.
4//
5// Copyright (C) 2000 Curtis L. Olson - http://www.flightgear.org/~curt
6//
7// This program is free software; you can redistribute it and/or
8// modify it under the terms of the GNU General Public License as
9// published by the Free Software Foundation; either version 2 of the
10// License, or (at your option) any later version.
11//
12// This program is distributed in the hope that it will be useful, but
13// WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15// General Public License for more details.
16//
17// You should have received a copy of the GNU General Public License
18// along with this program; if not, write to the Free Software
19// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20//
21// $Id$
22
23
24#pragma once
25
26#include <map>
27
28#include <simgear/bucket/newbucket.hxx>
29#include "tileentry.hxx"
30
31
32// A class to store and manage a pile of tiles
33class TileCache {
34public:
35 typedef std::map < long, TileEntry * > tile_map;
36 typedef tile_map::iterator tile_map_iterator;
37 typedef tile_map::const_iterator const_tile_map_iterator;
38private:
39 // cache storage space
40 tile_map tile_cache;
41
42 // maximum cache size
43 int max_cache_size;
44
45 // pointers to allow an external linear traversal of cache entries
46 tile_map_iterator current;
47
48 double current_time;
49
50 // Free a tile cache entry
51 void entry_free( long cache_index );
52
53public:
54 tile_map_iterator begin() { return tile_cache.begin(); }
55 tile_map_iterator end() { return tile_cache.end(); }
56 const_tile_map_iterator begin() const { return tile_cache.begin(); }
57 const_tile_map_iterator end() const { return tile_cache.end(); }
58
59 // Constructor
60 TileCache();
61
62 // Destructor
63 ~TileCache();
64
65 // Initialize the tile cache subsystem
66 void init( void );
67
68 // Check if the specified "bucket" exists in the cache
69 bool exists_stg( const SGBucket& b ) const;
70 bool exists_vpb( const SGBucket& b ) const;
71
72 // Return the index of a tile to be dropped from the cache, return -1 if
73 // nothing available to be removed.
74 long get_drop_tile();
75
76 long get_first_expired_tile() const;
77
78 // Clear all flags indicating tiles belonging to the current view
79 void clear_current_view();
80
81 // Clear a cache entry, note that the cache only holds pointers
82 // and this does not free the object which is pointed to.
83 void clear_entry( long cache_entry );
84
85 // Clear all completely loaded tiles (ignores partially loaded tiles)
86 void clear_cache();
87
88 // Return a pointer to the specified tile cache entry
89 inline TileEntry *get_tile( const long tile_index ) const {
90 const_tile_map_iterator it = tile_cache.find( tile_index );
91 if ( it != tile_cache.end() ) {
92 return it->second;
93 } else {
94 return NULL;
95 }
96 }
97
98 STGTileEntry* get_stg_tile( const SGBucket& b ) const;
99 VPBTileEntry* get_vpb_tile( const SGBucket& b ) const;
100
101 // Return the cache size
102 inline size_t get_size() const { return tile_cache.size(); }
103
104 // External linear traversal of cache
105 inline void reset_traversal() { current = tile_cache.begin(); }
106 inline bool at_end() { return current == tile_cache.end(); }
107 inline TileEntry *get_current() const {
108 // cout << "index = " << current->first << endl;
109 return current->second;
110 }
111 inline void next() { ++current; }
112
113 inline int get_max_cache_size() const { return max_cache_size; }
114 inline void set_max_cache_size( int m ) { max_cache_size = m; }
115
121 bool insert_tile( STGTileEntry* e );
122 bool insert_tile( VPBTileEntry* e );
123
124 void set_current_time(double val) { current_time = val; }
125 double get_current_time() const { return current_time; }
126
127 // update tile's priority and expiry time according to current request
128 void request_tile(TileEntry* t,float priority,bool current_view,double requesttime);
129};
void set_max_cache_size(int m)
const_tile_map_iterator begin() const
Definition tilecache.hxx:56
const_tile_map_iterator end() const
Definition tilecache.hxx:57
tile_map::const_iterator const_tile_map_iterator
Definition tilecache.hxx:37
size_t get_size() const
STGTileEntry * get_stg_tile(const SGBucket &b) const
void request_tile(TileEntry *t, float priority, bool current_view, double requesttime)
TileEntry * get_current() const
tile_map_iterator begin()
Definition tilecache.hxx:54
bool at_end()
tile_map_iterator end()
Definition tilecache.hxx:55
tile_map::iterator tile_map_iterator
Definition tilecache.hxx:36
TileEntry * get_tile(const long tile_index) const
Definition tilecache.hxx:89
void next()
void clear_current_view()
int get_max_cache_size() const
std::map< long, TileEntry * > tile_map
Definition tilecache.hxx:35
void init(void)
Definition tilecache.cxx:63
long get_first_expired_tile() const
bool exists_stg(const SGBucket &b) const
Definition tilecache.cxx:78
void set_current_time(double val)
void clear_entry(long cache_entry)
bool exists_vpb(const SGBucket &b) const
Definition tilecache.cxx:85
void clear_cache()
long get_drop_tile()
Definition tilecache.cxx:96
double get_current_time() const
void reset_traversal()
VPBTileEntry * get_vpb_tile(const SGBucket &b) const
bool insert_tile(STGTileEntry *e)
Create a new tile and enqueue it for loading.
A class to encapsulate everything we need to know about a scenery tile.
Definition tileentry.hxx:53