OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimElevationCellDatabase.h
Go to the documentation of this file.
1 #ifndef ossimElevationCellDatabase_HEADER
2 #define ossimElevationCellDatabase_HEADER 1
4 #include <mutex>
5 
7 {
8 public:
10  {
12  :ossimReferenced(),
13  m_id(id),
14  m_handler(handler),
15  m_timestamp(0)
16  {
17  m_timestamp = ossimTimer::instance()->tick();
18  }
19  CellInfo(const CellInfo& src)
20  :ossimReferenced(src),
21  m_id(src.m_id),
22  m_handler(src.m_handler),
23  m_timestamp(src.m_timestamp)
24  {
25  }
27  :ossimReferenced(),
28  m_id(0),
29  m_handler(0),
30  m_timestamp(0)
31  {
32  }
33  const CellInfo& operator =(const CellInfo& src)
34  {
35  if (this != &src)
36  {
37  m_id = src.m_id;
38  m_handler = src.m_handler;
39  m_timestamp = src.m_timestamp;
40  }
41  return *this;
42  }
44  {
45  m_timestamp = ossimTimer::instance()->tick();
46  }
48  {
49  return m_id;
50  }
54  };
55 
56  typedef std::map<ossim_uint64, ossimRefPtr<CellInfo> > CellMap;
57 
60  m_minOpenCells(5),
61  m_maxOpenCells(10),
62  m_memoryMapCellsFlag(false)
63  {
64  }
67  m_minOpenCells(src.m_minOpenCells),
68  m_maxOpenCells(src.m_maxOpenCells),
69  m_cacheMap(src.m_cacheMap),
70  m_memoryMapCellsFlag(src.m_memoryMapCellsFlag)
71  {
72  }
73 
74  virtual bool loadState(const ossimKeywordlist& kwl, const char* prefix=0);
75  virtual bool saveState(ossimKeywordlist& kwl, const char* prefix=0)const;
77  {
78  return m_minOpenCells;
79  }
81  {
82  return m_maxOpenCells;
83  }
84  virtual void setMinMaxOpenCells(ossim_uint64 minCellCount,
85  ossim_uint64 maxCellCount)
86  {
87  m_minOpenCells = minCellCount;
88  m_maxOpenCells = maxCellCount;
89  }
90  virtual bool getMemoryMapCellsFlag()const
91  {
92  return m_memoryMapCellsFlag;
93  }
94  virtual void setMemoryMapCellsFlag(bool flag)
95  {
96  m_memoryMapCellsFlag = flag;
97  }
98 
99  virtual void getOpenCellList(std::vector<ossimFilename>& list) const;
100 
113  void getCellsForBounds( const ossim_float64& minLat,
114  const ossim_float64& minLon,
115  const ossim_float64& maxLat,
116  const ossim_float64& maxLon,
117  std::vector<ossimFilename>& cells,
118  ossim_uint32 maxNumberOfCells=0 );
119 
120  virtual ossim_uint64 createId(const ossimGpt& /* pt */)const
121  {
122  return 0;
123  }
124  virtual ossimRefPtr<ossimElevCellHandler> getOrCreateCellHandler(const ossimGpt& gpt);
125 
126  virtual std::ostream& print(std::ostream& out) const;
127 
128 protected:
130  {
131  return 0;
132  }
133  virtual void remove(ossim_uint64 id)
134  {
135  CellMap::iterator iter = m_cacheMap.find(id);
136  if(iter != m_cacheMap.end())
137  {
138  m_cacheMap.erase(iter);
139  }
140  }
142  {
143  // lets flush the cache from least recently used to recent.
144  //
145  CellMap sortedMap;
146  CellMap::iterator iter = m_cacheMap.begin();
147 
148  while(iter != m_cacheMap.end())
149  {
150  sortedMap.insert(std::make_pair(iter->second->m_timestamp, iter->second));
151  ++iter;
152  }
153 
154  iter = sortedMap.begin();
155  while((iter!=sortedMap.end())&&(m_cacheMap.size() > m_minOpenCells))
156  {
157  remove(iter->second->id());
158  ++iter;
159  }
160  }
161 
164  mutable std::mutex m_cacheMapMutex;
167 
169 };
170 
171 #endif /* #ifndef ossimElevationCellDatabase_HEADER */
CellInfo(ossim_uint64 id, ossimElevCellHandler *handler=0)
virtual ossimRefPtr< ossimElevCellHandler > createCell(const ossimGpt &)
unsigned long long Timer_t
Definition: ossimTimer.h:16
std::map< ossim_uint64, ossimRefPtr< CellInfo > > CellMap
Represents serializable keyword/value map.
ossimReferenced allows for shared object ref counting if the reference count ever gets to 0 or less i...
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
virtual void setMinMaxOpenCells(ossim_uint64 minCellCount, ossim_uint64 maxCellCount)
ossimElevationCellDatabase(const ossimElevationCellDatabase &src)
double ossim_float64
virtual ossim_uint32 getMinOpenCells() const
virtual void setMemoryMapCellsFlag(bool flag)
static ossimTimer * instance()
Definition: ossimTimer.cpp:19
virtual bool getMemoryMapCellsFlag() const
unsigned long long ossim_uint64
unsigned int ossim_uint32
virtual ossim_uint32 getMaxOpenCells() const
virtual ossim_uint64 createId(const ossimGpt &) const
#define OSSIM_DLL
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
virtual std::ostream & print(std::ostream &out) const
Outputs theErrorStatus as an ossimErrorCode and an ossimString.
Timer_t tick() const
Get the timers tick value.
Definition: ossimTimer.cpp:95
ossimRefPtr< ossimElevCellHandler > m_handler
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23