• Main Page
  • Modules
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

/export/development/ViennaData/release/ViennaData-1.0.1/viennadata/config/storage.hpp

Go to the documentation of this file.
00001 /* =======================================================================
00002    Copyright (c) 2010, Institute for Microelectronics, TU Vienna.
00003    http://www.iue.tuwien.ac.at
00004                              -----------------
00005                      ViennaData - The Vienna Data Storage Library
00006                              -----------------
00007 
00008    authors:    Karl Rupp                          rupp@iue.tuwien.ac.at
00009 
00010    license:    MIT (X11), see file LICENSE in the ViennaData base directory
00011 ======================================================================= */
00012 
00013 #ifndef VIENNADATA_CONFIG_STORAGE_HPP
00014 #define VIENNADATA_CONFIG_STORAGE_HPP
00015 
00016 #include "viennadata/forwards.h"
00017 
00023 namespace viennadata
00024 {
00025   namespace config
00026   {
00045     template <typename KeyType,
00046               typename DataType,
00047               typename ObjectType>
00048     struct storage
00049     {
00050       typedef sparse_data_tag    tag;
00051     };
00052 
00053   } //namespace config  
00054   
00055 } //namespace viennadata
00056 
00057 
00059 
00061 #define VIENNADATA_ENABLE_DENSE_DATA_STORAGE_FOR_KEY_DATA_OBJECT(arg_KEYCLASS, arg_DATACLASS, arg_OBJECTCLASS) \
00062 namespace viennadata { namespace config { \
00063     template <>  struct storage<arg_KEYCLASS, arg_DATACLASS, arg_OBJECTCLASS> { typedef dense_data_tag    tag; }; \
00064 } }
00065 
00070 #define VIENNADATA_DISABLE_DENSE_DATA_STORAGE_FOR_KEY_DATA_OBJECT(arg_KEYCLASS, arg_DATACLASS, arg_OBJECTCLASS) \
00071 namespace viennadata { namespace config { \
00072     template <>  struct storage<arg_KEYCLASS, arg_DATACLASS, arg_OBJECTCLASS> { typedef sparse_data_tag    tag; }; \
00073 } }
00074 
00076 
00077 // (key, data):
00078 
00080 #define VIENNADATA_ENABLE_DENSE_DATA_STORAGE_FOR_KEY_DATA(arg_KEYCLASS, arg_DATACLASS) \
00081 namespace viennadata { namespace config { \
00082     template <typename ObjectType>  struct storage<arg_KEYCLASS, arg_DATACLASS, ObjectType> { typedef dense_data_tag    tag; }; \
00083 } }
00084 
00089 #define VIENNADATA_DISABLE_DENSE_DATA_STORAGE_FOR_KEY_DATA(arg_KEYCLASS, arg_DATACLASS) \
00090 namespace viennadata { namespace config { \
00091     template <typename ObjectType>  struct storage<arg_KEYCLASS, arg_DATACLASS, ObjectType> { typedef sparse_data_tag    tag; }; \
00092 } }
00093 
00094 
00095 
00096 // (key, object):
00097 
00099 #define VIENNADATA_ENABLE_DENSE_DATA_STORAGE_FOR_KEY_OBJECT(arg_KEYCLASS, arg_OBJECTCLASS) \
00100 namespace viennadata { namespace config { \
00101     template <typename DataType>  struct storage<arg_KEYCLASS, DataType, arg_OBJECTCLASS> { typedef dense_data_tag    tag; }; \
00102 } }
00103 
00108 #define VIENNADATA_DISABLE_DENSE_DATA_STORAGE_FOR_KEY_OBJECT(arg_KEYCLASS, arg_OBJECTCLASS) \
00109 namespace viennadata { namespace config { \
00110     template <typename DataType>  struct storage<arg_KEYCLASS, DataType, arg_OBJECTCLASS> { typedef sparse_data_tag    tag; }; \
00111 } }
00112 
00113 
00114 // (data, object):
00115 
00117 #define VIENNADATA_ENABLE_DENSE_DATA_STORAGE_FOR_DATA_OBJECT(arg_DATACLASS, arg_OBJECTCLASS) \
00118 namespace viennadata { namespace config { \
00119     template <typename KeyType>  struct storage<KeyType, arg_DATACLASS, arg_OBJECTCLASS> { typedef dense_data_tag    tag; }; \
00120 } }
00121 
00126 #define VIENNADATA_DISABLE_DENSE_DATA_STORAGE_FOR_DATA_OBJECT(arg_DATACLASS, arg_OBJECTCLASS) \
00127 namespace viennadata { namespace config { \
00128     template <typename KeyType>  struct storage<KeyType, arg_DATACLASS, arg_OBJECTCLASS> { typedef sparse_data_tag    tag; }; \
00129 } }
00130 
00131 
00133 
00135 #define VIENNADATA_ENABLE_DENSE_DATA_STORAGE_FOR_KEY(arg_KEYCLASS) \
00136 namespace viennadata { namespace config { \
00137     template <typename DataType, typename ObjectType> \
00138     struct storage<arg_KEYCLASS, DataType, ObjectType> { typedef dense_data_tag    tag; }; \
00139 } }
00140 
00142 #define VIENNADATA_ENABLE_DENSE_DATA_STORAGE_FOR_DATA(arg_DATACLASS) \
00143 namespace viennadata { namespace config { \
00144     template <typename KeyType, typename ObjectType> \
00145     struct storage<KeyType, arg_DATACLASS, ObjectType> { typedef dense_data_tag    tag; }; \
00146 } }
00147 
00149 #define VIENNADATA_ENABLE_DENSE_DATA_STORAGE_FOR_OBJECT(arg_OBJECTCLASS) \
00150 namespace viennadata { namespace config { \
00151     template <typename KeyType, typename DataType> \
00152     struct storage<KeyType, DataType, arg_OBJECTCLASS> { typedef dense_data_tag    tag; }; \
00153 } }
00154 
00155 //Note that selective disablers with one argument do not make sense, since there is no 'stronger' global enabler for dense storage.
00156 
00157 #endif
00158 

Generated on Wed Sep 14 2011 18:17:05 for ViennaData - The Vienna Data Storage Library by  doxygen 1.7.1