00001 // Copyright 2007, Massachusetts Institute of Technology. 00002 // The use of this code is permitted for research only. There is 00003 // absolutely no warranty for this software. 00004 // 00005 // Author: John Lee (jjl@mit.edu) 00006 // 00007 #ifndef POINT_SET_POINT_SET_LIST_H 00008 #define POINT_SET_POINT_SET_LIST_H 00009 00010 #include <assert.h> 00011 #include <vector> 00012 #include <string> 00013 #include <iostream> 00014 #include "point_set/point-set.h" 00015 #include "point_set/point-ref.h" 00016 #include "point_set/feature.h" 00017 00018 using namespace std; 00019 00020 namespace libpmk { 00021 00022 class PointRef; 00023 00025 00051 class PointSetList { 00052 public: 00053 virtual ~PointSetList() { } 00054 00056 virtual int GetNumPointSets() const = 0; 00057 00059 00063 virtual int GetNumPoints() const = 0; 00064 00066 virtual int GetFeatureDim() const = 0; 00067 00069 00074 virtual vector<int> GetSetCardinalities() const = 0; 00075 00077 virtual const PointSet& operator[](int index) const = 0; 00078 00080 00085 const Feature& GetFeature(int index) const; 00086 00088 00093 pair<int, int> GetFeatureIndices(int index) const; 00094 00096 00104 void GetPointRefs(vector<PointRef>* out_refs) const; 00105 00107 00108 void WriteToStream(ostream& output_stream) const; 00109 00111 void WriteHeaderToStream(ostream& output_stream) const; 00112 00114 void WritePointSetsToStream(ostream& output_stream) const; 00115 00117 00118 void WriteToFile(const char* output_file) const; 00119 }; 00120 } // namespace libpmk 00121 00122 #endif // POINT_SET_POINT_SET_LIST_H