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

ImageArchiveRepositoryInFile.h

Go to the documentation of this file.
00001 #ifndef Impala_Persistency_ImageArchiveRepositoryInFile_h
00002 #define Impala_Persistency_ImageArchiveRepositoryInFile_h
00003 
00004 #include "Persistency/RepositoryInFileSystem.h"
00005 #include "Core/Array/ImageArchiveFile.h"
00006 #include "Core/Array/ImageArchiveFileFset.h"
00007 #include "Persistency/ImageArchiveLocator.h"
00008 #include "Core/Array/ArrayListDelete.h"
00009 
00010 namespace Impala
00011 {
00012 namespace Persistency
00013 {
00014 
00015 
00016 class ImageArchiveRepositoryInFile
00017 {
00018 public:
00019 
00020     typedef Core::Array::ImageArchive ImageArchive;
00021     typedef Core::Array::Array2dScalarUInt8 Array2dScalarUInt8;
00022 
00023     ImageArchiveRepositoryInFile()
00024     {
00025     }
00026 
00027     bool
00028     Exists(const ImageArchiveLocator& loc)
00029     {
00030         String dir = GetDir(loc);
00031         File file = RepFS().GetFile(loc, dir, loc.GetName(), false, true);
00032         return file.Valid();
00033     }
00034 
00035     ImageArchive*
00036     Get(const ImageArchiveLocator& loc)
00037     {
00038         String dir = GetDir(loc);
00039         File file = RepFS().GetFile(loc, dir, loc.GetName(), false, false);
00040         if (!file.Valid())
00041             return 0;
00042 
00043         ImageArchive* res = 0;
00044         if (loc.GetIsFset())
00045             res = new Core::Array::ImageArchiveFileFset(file);
00046         else
00047             res = new Core::Array::ImageArchiveFile(file);
00048         return res;
00049     }
00050 
00051     void
00052     Add(const ImageArchiveLocator& loc, ImageArchive* archive)
00053     {
00054         std::vector<Array2dScalarUInt8*> images;
00055         if (archive->GetImageDataList() != 0)
00056         {
00057             images = *(archive->GetImageDataList());
00058         }
00059         else
00060         {
00061             for (int i=0 ; i<archive->NrImages() ; i++)
00062             {
00063                 size_t blockSize = 0;
00064                 UInt8* data = archive->GetImageData(i, blockSize);
00065                 Array2dScalarUInt8* im = new Array2dScalarUInt8(blockSize, 1, 0,
00066                                                                 0, data, false);
00067                 images.push_back(im);
00068             }
00069         }
00070 
00071         String dir = GetDir(loc);
00072         File file = RepFS().GetFile(loc, dir, loc.GetName(), true, false);
00073         WriteRawListVar(images, file, true, true);
00074         if (archive->GetImageDataList() == 0)
00075             Core::Array::ArrayListDelete(&images);
00076     }
00077 
00078     void
00079     Delete(const ImageArchiveLocator& loc)
00080     {
00081         String dir = GetDir(loc);
00082         File file = RepFS().GetFile(loc, dir, loc.GetName(), true, true);
00083         file.Delete();
00084         file = RepFS().GetFile(loc, dir, loc.GetName() + ".idx", true, true);
00085         file.Delete();
00086     }
00087 
00088 private:
00089 
00090     RepositoryInFileSystem&
00091     RepFS()
00092     {
00093         return RepositoryInFileSystem::GetInstance();
00094     }
00095 
00096     String
00097     GetDir(const ImageArchiveLocator& loc)
00098     {
00099         String dir = loc.GetFramesString();
00100         dir = FileNameConcat(dir, loc.GetContainer());
00101         return dir;
00102     }
00103 
00104     ILOG_VAR_DEC;
00105 };
00106 
00107 ILOG_VAR_INIT(ImageArchiveRepositoryInFile, Impala.Persistency);
00108 
00109 } // namespace Persistency
00110 } // namespace Impala
00111 
00112 #endif

Generated on Thu Jan 13 09:05:06 2011 for ImpalaSrc by  doxygen 1.5.1