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

SimilarityTableSetRepositoryInFile.h

Go to the documentation of this file.
00001 #ifndef Impala_Persistency_SimilarityTableSetRepositoryInFile_h
00002 #define Impala_Persistency_SimilarityTableSetRepositoryInFile_h
00003 
00004 #include "Persistency/RepositoryInFileSystem.h"
00005 #include "Core/Table/SimilarityTableSet.h"
00006 #include "Persistency/SimilarityTableSetLocator.h"
00007 
00008 namespace Impala
00009 {
00010 namespace Persistency
00011 {
00012 
00013 
00014 class SimilarityTableSetRepositoryInFile
00015 {
00016 public:
00017 
00018     typedef Core::Table::SimilarityTableSet SimilarityTableSet;
00019 
00020     SimilarityTableSetRepositoryInFile()
00021     {
00022     }
00023 
00024     SimilarityTableSet*
00025     Get(const SimilarityTableSetLocator& loc)
00026     {
00027         String dir = GetDir(loc);
00028         File file = RepFS().GetFile(loc, dir, "names.txt", false, false);
00029         if (!file.Valid())
00030             return 0;
00031         std::vector<String> names;
00032         file.ReadStrings(std::back_inserter(names));
00033         SimilarityTableSet* res = new SimilarityTableSet(names, 0);
00034         res->SetDescription(loc.GetFeature());
00035 
00036         LoadQuids(res, loc, dir);
00037         LoadSims(res, loc, dir);
00038         LoadRanks(res, loc, dir);
00039         return res;
00040     }
00041 
00042     void
00043     Add(const SimilarityTableSetLocator& loc, SimilarityTableSet* simSet)
00044     {
00045         String dir = GetDir(loc);
00046         Save(simSet, loc, dir);
00047     }
00048 
00049 private:
00050 
00051     RepositoryInFileSystem&
00052     RepFS()
00053     {
00054         return RepositoryInFileSystem::GetInstance();
00055     }
00056 
00057     String
00058     GetDir(const SimilarityTableSetLocator& loc)
00059     {
00060         String dir = loc.GetInIndexString();
00061         if (!loc.GetInIndex())
00062             dir = FileNameConcat(dir, loc.GetWalkType());
00063         dir = FileNameConcat(dir, loc.GetConceptSet());
00064         dir = FileNameConcat(dir, loc.GetModel());
00065         dir = FileNameConcat(dir, loc.GetFeature());
00066         if (!loc.GetInIndex())
00067             dir = FileNameConcat(dir, loc.GetContainer());
00068         return dir;
00069     }
00070 
00071     void
00072     LoadQuids(SimilarityTableSet* res, const SimilarityTableSetLocator& loc,
00073               CString dir)
00074     {
00075         File file = RepFS().GetFile(loc, dir, "all_quids.tab", false, false);
00076         Read(res->GetQuidTable(), file);
00077     }
00078 
00079     void
00080     LoadSim(SimilarityTableSet* res, int tableIdx,
00081             const SimilarityTableSetLocator& loc, CString dir)
00082     {
00083         String name = res->GetName(tableIdx) + "_sim.tab";
00084         File file = RepFS().GetFile(loc, dir, name, false, false);
00085         Read(res->GetSimTable(tableIdx), file);
00086     }
00087 
00088     void
00089     LoadSims(SimilarityTableSet* res, const SimilarityTableSetLocator& loc,
00090              CString dir)
00091     {
00092         for (int i=0 ; i<res->NrTables() ; i++)
00093             LoadSim(res, i, loc, dir);
00094     }
00095 
00096     void
00097     LoadRank(SimilarityTableSet* res, int tableIdx,
00098              const SimilarityTableSetLocator& loc, CString dir)
00099     {
00100         String name = res->GetName(tableIdx) + "_rank.tab";
00101         File file = RepFS().GetFile(loc, dir, name, false, false);
00102         Read(res->GetRankTable(tableIdx), file);
00103     }
00104 
00105     void
00106     LoadRanks(SimilarityTableSet* res, const SimilarityTableSetLocator& loc,
00107               CString dir)
00108     {
00109         for (int i=0 ; i<res->NrTables() ; i++)
00110             LoadRank(res, i, loc, dir);
00111     }
00112 
00113     void
00114     Save(SimilarityTableSet* simSet, const SimilarityTableSetLocator& loc,
00115          CString dir)
00116     {
00117         SaveNames(simSet, loc, dir);
00118         SaveQuids(simSet, loc, dir);
00119         SaveSims(simSet, loc, dir);
00120         SaveRanks(simSet, loc, dir);
00121     }
00122 
00123     void
00124     SaveNames(SimilarityTableSet* simSet, const SimilarityTableSetLocator& loc,
00125               CString dir)
00126     {
00127         File file = RepFS().GetFile(loc, dir, "names.txt", true, false);
00128         std::vector<String> names = simSet->GetNames();
00129         file.WriteStrings(names);
00130     }
00131 
00132     void
00133     SaveQuids(SimilarityTableSet* simSet, const SimilarityTableSetLocator& loc,
00134               CString dir)
00135     {
00136         File file = RepFS().GetFile(loc, dir, "all_quids.tab", true, false);
00137         Write(simSet->GetQuidTable(), file);
00138     }
00139 
00140     void
00141     SaveSim(SimilarityTableSet* simSet, int tableIdx,
00142             const SimilarityTableSetLocator& loc, CString dir)
00143     {
00144         String name = simSet->GetName(tableIdx) + "_sim.tab";
00145         File file = RepFS().GetFile(loc, dir, name, true, false);
00146         Write(simSet->GetSimTable(tableIdx), file);
00147     }
00148 
00149     void
00150     SaveSims(SimilarityTableSet* simSet, const SimilarityTableSetLocator& loc,
00151              CString dir)
00152     {
00153         for (int i=0 ; i<simSet->NrTables() ; i++)
00154             SaveSim(simSet, i, loc, dir);
00155     }
00156 
00157     void
00158     SaveRank(SimilarityTableSet* simSet, int tableIdx,
00159              const SimilarityTableSetLocator& loc, CString dir)
00160     {
00161         String name = simSet->GetName(tableIdx) + "_rank.tab";
00162         File file = RepFS().GetFile(loc, dir, name, true, false);
00163         Write(simSet->GetRankTable(tableIdx), file);
00164     }
00165 
00166     void
00167     SaveRanks(SimilarityTableSet* simSet, const SimilarityTableSetLocator& loc,
00168               CString dir)
00169     {
00170         for (int i=0 ; i<simSet->NrTables() ; i++)
00171             SaveRank(simSet, i, loc, dir);
00172     }
00173 
00174     ILOG_VAR_DEC;
00175 };
00176 
00177 ILOG_VAR_INIT(SimilarityTableSetRepositoryInFile, Impala.Persistency);
00178 
00179 } // namespace Persistency
00180 } // namespace Impala
00181 
00182 #endif

Generated on Fri Mar 19 09:31:45 2010 for ImpalaSrc by  doxygen 1.5.1