OPeNDAP Hyrax Back End Server (BES)  Updated for version 3.8.3
AggMemberDatasetWithDimensionCacheBase.h
Go to the documentation of this file.
1 // This file is part of the "NcML Module" project, a BES module designed
3 // to allow NcML files to be used to be used as a wrapper to add
4 // AIS to existing datasets of any format.
5 //
6 // Copyright (c) 2010 OPeNDAP, Inc.
7 // Author: Michael Johnson <m.johnson@opendap.org>
8 //
9 // For more information, please also see the main website: http://opendap.org/
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 //
25 // Please see the files COPYING and COPYRIGHT for more information on the GLPL.
26 //
27 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
29 #ifndef __AGG_UTIL__AGG_MEMBER_DATASET_WITH_DIMENSION_CACHE_BASE_H__
30 #define __AGG_UTIL__AGG_MEMBER_DATASET_WITH_DIMENSION_CACHE_BASE_H__
31 
32 #include "AggMemberDataset.h"
33 #include <vector>
34 
35 namespace libdap
36 {
37  class BaseType;
38 };
39 
40 namespace agg_util
41 {
42 
45  {
46  public:
47  AggMemberDatasetWithDimensionCacheBase(const std::string& location);
48 
51 
53 
56 
57  /* This will stay pure virtual for subclasses */
58  /* virtual const libdap::DataDDS* getDataDDS() = 0; */
59 
60  virtual unsigned int getCachedDimensionSize(const std::string& dimName) const;
61  virtual bool isDimensionCached(const std::string& dimName) const;
62  virtual void setDimensionCacheFor(const Dimension& dim, bool throwIfFound);
63  virtual void fillDimensionCacheByUsingDataDDS();
64  virtual void flushDimensionCache();
65 
67  virtual void saveDimensionCache(std::ostream& ostr);
68  virtual void loadDimensionCache(std::istream& istr);
69 
70  private: // Helper Functions
71 
75  Dimension* findDimension(const std::string& dimName);
76 
82  void addDimensionsForVariableRecursive(libdap::BaseType& var);
83 
84  void saveDimensionCacheInternal(std::ostream& ostr);
85  void loadDimensionCacheInternal(std::istream& istr);
86 
87  private: // Data Rep
88  std::vector<Dimension> _dimensionCache;
89 
90  };
91 
92 }
93 
94 #endif /* __AGG_UTIL__AGG_MEMBER_DATASET_WITH_DIMENSION_CACHE_BASE_H__ */
Abstract helper superclass for allowing lazy access to the DataDDS for an aggregation.
virtual bool isDimensionCached(const std::string &dimName) const
Return whether the dimension is already cached, or would have to be loaded to be found.
virtual void setDimensionCacheFor(const Dimension &dim, bool throwIfFound)
Seed the dimension cache using the given dimension, so that later calls to getDimensionSize for dim...
virtual unsigned int getCachedDimensionSize(const std::string &dimName) const
Get the size of the given dimension named dimName cached within the dataset.
Helper class for temporarily hijacking an existing dhi to load a DDX response for one particular file...
virtual void loadDimensionCache(std::istream &istr)
Load the values in the dimension cache from the input stream.
static class NCMLUtil overview
AggMemberDatasetWithDimensionCacheBase & operator=(const AggMemberDatasetWithDimensionCacheBase &rhs)
Struct for holding information about a dimension of data, minimally a name and a cardinality (size)...
Definition: Dimension.h:50
virtual void flushDimensionCache()
Flush out any cache for the Dimensions so that it will have to be loaded.
virtual void saveDimensionCache(std::ostream &ostr)
Append the values in the dimension cache to the output stream.
virtual void fillDimensionCacheByUsingDataDDS()
Uses the getDataDDS() call in order to find all named dimensions within it and to seed them into the ...