00001 #ifndef Impala_Persistency_FrameHashesRepositoryInFile_h
00002 #define Impala_Persistency_FrameHashesRepositoryInFile_h
00003
00004 #include "Core/Array/Arrays.h"
00005 #include "Core/Array/ReadFile.h"
00006 #include "Core/Array/WriteFile.h"
00007
00008 #include "Persistency/RepositoryInFileSystem.h"
00009 #include "Persistency/FrameHashesLocator.h"
00010
00011 #include "Core/VideoSet/FrameHashes.h"
00012
00013
00014 namespace Impala
00015 {
00016 namespace Persistency
00017 {
00018
00019 class FrameHashesRepositoryInFile
00020 {
00021
00022 typedef Core::VideoSet::FrameHashes FrameHashes;
00023
00024 public:
00025
00026 FrameHashesRepositoryInFile()
00027 {
00028 }
00029
00030 FrameHashes*
00031 Get(const FrameHashesLocator& loc)
00032 {
00033 String dir = GetDir(loc);
00034 File file = RepFS().GetFile(loc, dir, "hashes.tab", false, false);
00035 if (!file.Valid())
00036 return 0;
00037 FrameHashes* frameHashes = new FrameHashes(100);
00038 Core::Table::Read(frameHashes, file);
00039 return frameHashes;
00040 }
00041
00042 void
00043 Add(const FrameHashesLocator& loc, FrameHashes* frameHashes)
00044 {
00045 String dir = GetDir(loc);
00046 File file = RepFS().GetFile(loc, dir, "hashes.tab", true, false);
00047 Util::IOBuffer* buffer = file.GetWriteBuffer();
00048 const bool binary = true;
00049 Core::Table::Write(frameHashes, buffer, binary);
00050 delete buffer;
00051 }
00052
00053 private:
00054
00055 RepositoryInFileSystem&
00056 RepFS()
00057 {
00058 return RepositoryInFileSystem::GetInstance();
00059 }
00060
00061 String
00062 GetDir(const FrameHashesLocator& loc)
00063 {
00064 String dir = "Frames";
00065 dir = FileNameConcat(dir, loc.GetContainer());
00066 return dir;
00067 }
00068
00069 ILOG_VAR_DECL;
00070 };
00071
00072 ILOG_VAR_INIT(FrameHashesRepositoryInFile, Impala.Persistency);
00073
00074 }
00075 }
00076
00077 #endif