00001 #ifndef __PLYPROPERTY_HPP__ 00002 #define __PLYPROPERTY_HPP__ 00003 00004 #include <string> 00005 #include <iostream> 00006 using std::string; 00007 00008 #include "PLYTraits.hpp" 00009 00010 namespace lssr 00011 { 00012 00017 class Property 00018 { 00019 public: 00020 00021 00027 virtual size_t getCountSize() = 0; 00028 00032 virtual size_t getValueSize() = 0; 00033 00039 virtual string getCountTypeStr() = 0; 00040 00045 virtual string getElementTypeStr() = 0; 00046 00050 string getName() {return m_name;} 00051 00055 size_t getCount() {return m_count;} 00056 00060 virtual bool isList() = 0; 00061 00062 00063 protected: 00064 00066 string m_name; 00067 00069 size_t m_count; 00070 }; 00071 00072 00076 template<typename ElementT> 00077 class ScalarProperty : public Property 00078 { 00079 public: 00080 00085 ScalarProperty(string name) 00086 { 00087 this->m_name = name; 00088 this->m_count = 0; 00089 } 00090 00094 string getElementTypeStr() { return PLYTraits<ElementT>::NAME;} 00095 00099 size_t getValueSize() {return PLYTraits<ElementT>::SIZE;} 00100 00104 size_t getCountSize() { return 0;} 00105 00109 string getCountTypeStr() { return "";} 00110 00114 bool isList() { return false;} 00115 }; 00116 00117 00121 template<typename ListT> 00122 class ListProperty : public Property 00123 { 00124 public: 00125 00138 ListProperty(size_t count, Property* p) : m_property(p) 00139 { 00140 this->m_name = p->getName(); 00141 this->m_count = count; 00142 } 00143 00147 size_t getValueSize() { return m_property->getValueSize();} 00148 00153 string getElementTypeStr() { return m_property->getElementTypeStr();} 00154 00158 size_t getCountSize() { return PLYTraits<ListT>::SIZE;} 00159 00163 string getCountTypeStr() { return PLYTraits<ListT>::NAME; } 00164 00168 bool isList() { return true;} 00169 00170 private: 00171 00173 Property* m_property; 00174 }; 00175 00176 00177 00178 } // namespace lssr 00179 00180 #endif