Home || Visual Search || Applications || Architecture || Important Messages || OGL || Src

VirtualFeatureTableFactory.h

Go to the documentation of this file.
00001 #ifndef Impala_Core_Feature_VirtualFeatureTableFactory_h
00002 #define Impala_Core_Feature_VirtualFeatureTableFactory_h
00003 
00004 #include "Core/Feature/VirtualFeatureTableIOBufferReader.h"
00005 #include "Core/Feature/VirtualFeatureTableIOBufferWriter.h"
00006 #include "Core/Feature/VirtualFeatureTableMemory.h"
00007 #include "Persistency/FeatureTableRepository.h"
00008 #include "Util/SimpleMap.h"
00009 
00010 namespace Impala
00011 {
00012 namespace Core
00013 {
00014 namespace Feature
00015 {
00016 
00017 
00018 class VirtualFeatureTableFactory
00019 {
00020 public:
00021 
00022     static VirtualFeatureTableFactory&
00023     GetInstance()
00024     {
00025         static VirtualFeatureTableFactory theVirtualFeatureTableFactory;
00026         return theVirtualFeatureTableFactory;
00027     }
00028 
00029     VirtualFeatureTable*
00030     ConstructIOBufferReader(const Persistency::FeatureLocator& loc, bool cacheIt)
00031     {
00032         if (!mUseCache)
00033             cacheIt = false;
00034         Util::IOBuffer* buf = 0;
00035         if (mIOBuffers.Get(loc.ToString(), buf))
00036         {
00037             buf->SetPosition(0);
00038             return new VirtualFeatureTableIOBufferReader(buf, false);
00039         }
00040         typedef Persistency::FeatureTableRepository FeatureTableRepository;
00041         typedef Persistency::File File;
00042         File file = FeatureTableRepository().ExposeFile(loc, false);
00043         //buf = file.GetReadBuffer();
00044         buf = file.GetReadBuffer(true, "");
00045         if (!buf)
00046         {
00047             ILOG_ERROR("[ConstructIOBufferReader] Couldn't get readbuffer for "
00048                        << loc);
00049             return 0;
00050         }
00051         if (cacheIt)
00052             mIOBuffers.Add(loc.ToString(), buf);
00053         return new VirtualFeatureTableIOBufferReader(buf, !cacheIt);
00054     }
00055 
00056     // Up till now, this is only used to write kernel data, so interface
00057     // is still inconsistent...
00058     VirtualFeatureTableIOBufferWriter*
00059     ConstructIOBufferWriter(int nrVectors, int vectorLength,
00060                             Persistency::File file, bool write32)
00061     {
00062         Util::IOBuffer* buf = file.GetWriteBuffer();
00063         if (!buf)
00064         {
00065             ILOG_ERROR("[ConstructIOBufferWriter] Couldn't get writebuffer for "
00066                        << file.GetPath());
00067             return 0;
00068         }
00069         return new VirtualFeatureTableIOBufferWriter(nrVectors, vectorLength,
00070                                                      buf, true, write32);
00071     }
00072 
00073     VirtualFeatureTable*
00074     ConstructMemory(const Persistency::FeatureLocator& loc)
00075     {
00076         typedef Persistency::FeatureTableRepository FeatureTableRepository;
00077         FeatureTable* tab = FeatureTableRepository().Get(loc);
00078         if (!tab)
00079         {
00080             ILOG_ERROR("[ConstructMemory] Couldn't get " << loc);
00081             return 0;
00082         }
00083         return new VirtualFeatureTableMemory(tab);
00084     }
00085 
00086     void
00087     SetUseCache(bool flag)
00088     {
00089         mUseCache = flag;
00090     }
00091 
00092     void
00093     ClearCache()
00094     {
00095         mIOBuffers.Clear();
00096     }
00097 
00098 private:
00099 
00100     VirtualFeatureTableFactory()
00101     {
00102         mUseCache = true;
00103         if (CmdOptions::GetInstance().GetBool("noFeatureCache"))
00104             mUseCache = false;
00105     }
00106 
00107     Util::SimpleMapDelete<String, Util::IOBuffer*> mIOBuffers;
00108     bool                                           mUseCache;
00109 
00110     ILOG_VAR_DEC;
00111 
00112 };
00113 
00114 ILOG_VAR_INIT(VirtualFeatureTableFactory, Impala.Core.Feature);
00115 
00116 } // namespace Feature
00117 } // namespace Core
00118 } // namespace Impala
00119 
00120 #endif

Generated on Thu Jan 13 09:04:26 2011 for ImpalaSrc by  doxygen 1.5.1