FileProducerFactory.cpp

Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2004 CSIRO ICT Centre
00003  *
00004  * $Id: FileProducerFactory.cpp 587 2004-12-03 15:06:33Z nch $
00005  */
00006 
00007 #include "String.h"
00008 #include <vector>
00009 #include <algorithm>
00010 #include <sys/types.h>
00011 #include <dirent.h>
00012 #include <stdio.h>
00013 
00014 #include "BinaryFileDatumReader.h"
00015 #include "Destroyer.h"
00016 #include "FileProducerFactory.h"
00017 #include "FileObjectReader.h"
00018 #include "FileUtil.h"
00019 #include "ObjectProducer.h"
00020 #include "SplitFileReader.h"
00021 #include "SplitMergePairFileReader.h"
00022 #include "TextFileDatumReader.h"
00023 
00024 
00025 FileProducerFactory * FileProducerFactory::s_instance = 0;
00026 DestroyerDeclare(FileProducerFactory)
00027 
00028 
00029 ObjectProducer * FileProducerFactory::createProducer(char * dir,
00030                                                      char * name,
00031                                                      bool isBinary,
00032                                                      bool isMerge,
00033                                                      bool isLarge,
00034                                                      double maxSD)
00035 {
00036   ObjectProducer * prod = 0;
00037   if (dir == 0 || strcmp(dir, "0") == 0)
00038   {
00039     prod = createProducer(name, isBinary, isLarge, false, 1, maxSD);
00040   }
00041   else
00042   {
00043     prod = createSplitProducer(dir, name, isBinary, isMerge, isLarge, false, 1, maxSD);
00044   }
00045 
00046   return prod;
00047 }
00048 
00049 ObjectProducer * FileProducerFactory::createProducer(char * dir,
00050                                                      char * name,
00051                                                      bool isBinary,
00052                                                      bool isMerge,
00053                                                      bool isLarge,
00054                                                      double orthoSD,
00055                                                      double decSD)
00056 {
00057   ObjectProducer * prod = 0;
00058   if (dir == 0 || strcmp(dir, "0") == 0)
00059   {
00060     prod = createProducer(name, isBinary, false, isLarge, 2, 0.0, orthoSD, decSD);
00061   }
00062   else
00063   {
00064     prod = createSplitProducer(dir, name, isBinary, isMerge, isLarge, false, 2, 0.0, orthoSD, decSD);
00065   }
00066 
00067   return prod;
00068 }
00069 
00070 ObjectProducer * FileProducerFactory::createProducer(char * dir,
00071                                                      char * name,
00072                                                      bool isBinary,
00073                                                      bool isMerge,
00074                                                      bool isLarge,
00075                                                      bool setMaxSDs)
00076 {
00077   ObjectProducer * prod = 0;
00078   if (dir == 0 || strcmp(dir, "0") == 0)
00079   {
00080     prod = createProducer(name, isBinary, isLarge, setMaxSDs);
00081   }
00082   else
00083   {
00084     prod = createSplitProducer(dir, name, isBinary, isMerge, isLarge, setMaxSDs);
00085   }
00086 
00087   return prod;
00088 }
00089 
00090 ObjectProducer * FileProducerFactory::createSplitProducer(char * dir,
00091                                                           char * prefix,
00092                                                           bool isBinary,
00093                                                           bool isMerge,
00094                                                           bool isLarge,
00095                                                           bool setMaxSDs,
00096                                                           unsigned short numSDs,
00097                                                           double maxSD,
00098                                                           double orthoSD,
00099                                                           double decSD)
00100 {
00101   ObjectProducer * pp = 0;
00102 
00103   std::vector<String> fileNames;
00104   FileUtil::instance()->readDir(fileNames, dir, prefix);
00105 
00106   FileObjectReader * fileObj =
00107         (isBinary) ? (FileObjectReader *) new BinaryFileDatumReader()
00108                    : (FileObjectReader *) new TextFileDatumReader();
00109   ObjectReader * objReader = (isMerge) ? new SplitMergePairFileReader(fileObj, fileNames, isLarge)
00110                                        : new SplitFileReader(fileObj, fileNames, isLarge);
00111 
00112   if (numSDs == 0)
00113     pp = new ObjectProducer(objReader, setMaxSDs);
00114   else if (numSDs == 1)
00115     pp = new ObjectProducer(objReader, maxSD);
00116   else
00117     pp = new ObjectProducer(objReader, orthoSD, decSD);
00118 
00119   return pp;
00120 }
00121 
00122 ObjectProducer * FileProducerFactory::createProducer(char * name,
00123                                                      bool isBinary,
00124                                                      bool isLarge,
00125                                                      bool setMaxSDs,
00126                                                      unsigned short numSDs,
00127                                                      double maxSD,
00128                                                      double orthoSD,
00129                                                      double decSD)
00130 {
00131   ObjectProducer * pp = 0;
00132 
00133   FileObjectReader * fileObj = 
00134         (isBinary) ? (FileObjectReader *) new BinaryFileDatumReader()
00135                    : (FileObjectReader *) new TextFileDatumReader();
00136   ObjectReader * objReader = new FileReader(fileObj, name, isLarge);
00137 
00138   if (numSDs == 0)
00139     pp = new ObjectProducer(objReader, setMaxSDs);
00140   else if (numSDs == 1)
00141     pp = new ObjectProducer(objReader, maxSD);
00142   else
00143     pp = new ObjectProducer(objReader, orthoSD, decSD);
00144 
00145   return pp;
00146 }
Generated on Mon Oct 4 10:39:55 2010 for Matching.kdevelop by  doxygen 1.6.3