ObjectProducer.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include "ObjectProducer.h"
00008 #include "ObjectReader.h"
00009
00010
00011 ObjectProducer::ObjectProducer(ObjectReader * r, bool setMaxSDs)
00012 : reader(r),
00013 hasMore(false),
00014 isCurrent(false),
00015 maxOrthoSD(0.0),
00016 maxDecSD(0.0)
00017 {
00018 reader->open();
00019
00020 if (setMaxSDs)
00021 {
00022 scanForMaxSDs();
00023 }
00024 }
00025
00026 ObjectProducer::ObjectProducer(ObjectReader * r, double maxSD)
00027 : reader(r),
00028 hasMore(false),
00029 isCurrent(false),
00030 maxOrthoSD(maxSD),
00031 maxDecSD(maxSD)
00032 {
00033 reader->open();
00034 }
00035
00036 ObjectProducer::ObjectProducer(ObjectReader * r, double mOSD, double mDSD)
00037 : reader(r),
00038 hasMore(false),
00039 isCurrent(false),
00040 maxOrthoSD(mOSD),
00041 maxDecSD(mDSD)
00042 {
00043 reader->open();
00044 }
00045
00046 ObjectProducer::~ObjectProducer()
00047 {
00048 reader->close();
00049 delete reader;
00050 }
00051
00052 void ObjectProducer::scanForMaxSDs() const
00053 {
00054 std::cout << "Scanning for max SDs!" << std::endl;
00055 maxDecSD = 0.0;
00056 maxOrthoSD = 0.0;
00057
00058 unsigned long long cnt = 0;
00059 while (hasNext())
00060 {
00061 cnt++;
00062 Object * obj = next();
00063
00064 if (obj->getDecSD() > maxDecSD)
00065 maxDecSD = obj->getDecSD();
00066 if (obj->getOrthoSD() > maxOrthoSD)
00067 maxOrthoSD = obj->getOrthoSD();
00068
00069 delete obj;
00070 }
00071
00072 std::cout << "Num records: " << cnt << std::endl;
00073
00074 reader->reopen();
00075 }
00076
00077 bool ObjectProducer::hasNext() const
00078 {
00079 if (isCurrent)
00080 return hasMore;
00081
00082 current = reader->read();
00083
00084 bool success = (current != 0);
00085 hasMore = success;
00086 isCurrent = success;
00087
00088 return success;
00089 }
00090
00091 Object * ObjectProducer::next() const
00092 {
00093 bool ok = true;
00094
00095 if (!isCurrent)
00096 {
00097
00098 if (!hasNext())
00099 {
00100 ok = false;
00101 }
00102 }
00103
00104
00105 if (ok)
00106 {
00107 isCurrent = false;
00108 }
00109
00110 return current;
00111 }