31 #if defined _MSC_VER && _MSC_VER<1900    32 #define snprintf _snprintf    39 #if defined(HAVE_UNORDERED_MAP)    40 #include <unordered_map>    41 #define HASHMAP std::unordered_map    43 #elif defined(HAVE_TR1_UNORDERED_MAP)    44 #include <tr1/unordered_map>    45 #define HASHMAP std::tr1::unordered_map    48 #elif defined(HAVE_EXT_HASH_MAP)    49 #include <ext/hash_map>    50 #define HASHMAP __gnu_cxx::hash_map    59     struct hash<
std::string> {
    60       size_t operator() (
const std::string& x)
 const {
    61         return hash<const char*>()(x.c_str());
    69 #define HASHMAP std::map    71 #endif // End of #if defined    76 #ifdef HAVE_EXT_POOL_ALLOCATOR    77 #include <ext/pool_allocator.h>   100   unsigned long maxSize;
   103   unsigned long currentSize;
   106 #ifdef HAVE_EXT_POOL_ALLOCATOR   107   typedef std::list < std::pair<const std::string,RawTile>,
   108     __gnu_cxx::__pool_alloc< std::pair<const std::string,RawTile> > > TileList;
   110   typedef std::list < std::pair<const std::string,RawTile> > TileList;
   114   typedef std::list < std::pair<const std::string,RawTile> >::iterator List_Iter;
   117 #ifdef HAVE_EXT_POOL_ALLOCATOR   118   typedef HASHMAP < std::string, List_Iter,
   119     __gnu_cxx::hash< const std::string >,
   120     std::equal_to< const std::string >,
   121     __gnu_cxx::__pool_alloc< std::pair<const std::string, List_Iter> >
   124   typedef HASHMAP < std::string,List_Iter > TileMap;
   140   TileMap::iterator _touch( 
const std::string &key ) {
   141     TileMap::iterator miter = tileMap.find( key );
   142     if( miter == tileMap.end() ) 
return miter;
   144     tileList.splice( tileList.begin(), tileList, miter->second );
   154   void _remove( 
const TileMap::iterator &miter ) {
   156     currentSize -= ( (miter->second->second).dataLength +
   157                      ( (miter->second->second).filename.capacity() + (miter->second->first).capacity() )*
sizeof(
char) +
   159     tileList.erase( miter->second );
   160     tileMap.erase( miter );
   166   void _remove( 
const std::string &key ) {
   167     TileMap::iterator miter = tileMap.find( key );
   168     this->_remove( miter );
   178     maxSize = (
unsigned long)(max*1024000) ; currentSize = 0;
   180     tileSize = 
sizeof( 
RawTile ) + 
sizeof( std::pair<const std::string,RawTile> ) +
   181       sizeof( std::pair<const std::string, List_Iter> ) + 
sizeof(
char)*64 + 
sizeof(List_Iter);
   203     if( maxSize == 0 ) 
return;
   209     TileMap::iterator miter = this->_touch( key );
   212     if( miter != tileMap.end() ){
   214       if( miter->second->second.timestamp < r.
timestamp ){
   215         this->_remove( miter );
   223     tileList.push_front( std::make_pair(key,r) );
   226     List_Iter liter = tileList.begin();
   227     tileMap[ key ] = liter;
   232     currentSize += (r.
dataLength + (r.
filename.capacity()+key.capacity())*
sizeof(
char) + tileSize);
   235     while( currentSize > maxSize ) {
   237       liter = tileList.end();
   239       this->_remove( liter->first );
   264   RawTile* 
getTile( std::string f, 
int r, 
int t, 
int h, 
int v, CompressionType c, 
int q ) {
   266     if( maxSize == 0 ) 
return NULL;
   268     std::string key = this->
getIndex( f, r, t, h, v, c, q );
   270     TileMap::iterator miter = tileMap.find( key );
   271     if( miter == tileMap.end() ) 
return NULL;
   274     return &(miter->second->second);
   289   std::string 
getIndex( std::string f, 
int r, 
int t, 
int h, 
int v, CompressionType c, 
int q ) {
   291     snprintf( tmp, 1024, 
"%s:%d:%d:%d:%d:%d:%d", f.c_str(), r, t, h, v, c, q );
   292     return std::string( tmp );
 int vSequence
The vertical angle to which this tile belongs. 
Definition: RawTile.h:59
unsigned int dataLength
The size of the data pointed to by data. 
Definition: RawTile.h:82
int resolution
The resolution to which this tile belongs. 
Definition: RawTile.h:53
void insert(const RawTile &r)
Insert a tile. 
Definition: Cache.h:201
int hSequence
The horizontal angle to which this tile belongs. 
Definition: RawTile.h:56
int tileNum
The tile number for this tile. 
Definition: RawTile.h:50
CompressionType compressionType
Compression type. 
Definition: RawTile.h:62
float getMemorySize()
Return the number of MB stored. 
Definition: Cache.h:250
std::string filename
Name of the file from which this tile comes. 
Definition: RawTile.h:68
Cache to store raw tile data. 
Definition: Cache.h:91
std::string getIndex(std::string f, int r, int t, int h, int v, CompressionType c, int q)
Create a hash index. 
Definition: Cache.h:289
void clear()
Empty the cache. 
Definition: Cache.h:192
~Cache()
Destructor. 
Definition: Cache.h:186
int quality
Compression rate or quality. 
Definition: RawTile.h:65
Cache(float max)
Constructor. 
Definition: Cache.h:177
unsigned int getNumElements()
Return the number of tiles in the cache. 
Definition: Cache.h:246
RawTile * getTile(std::string f, int r, int t, int h, int v, CompressionType c, int q)
Get a tile from the cache. 
Definition: Cache.h:264
time_t timestamp
Tile timestamp. 
Definition: RawTile.h:71
Class to represent a single image tile. 
Definition: RawTile.h:45