Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 3 4 #ifndef tools_sg_sf_img 5 #define tools_sg_sf_img 6 7 #include "sf" 8 9 #include "../img" 10 11 namespace tools { 12 namespace sg { 13 14 template <class T> 15 class sf_img : public bsf< img<T> > { 16 typedef bsf< img<T> > parent; 17 public: 18 static const std::string& s_class() { 19 static const std::string s_v("tools::sg::sf_img<"+stype(T())+">"); 20 return s_v; 21 } 22 virtual void* cast(const std::string& a_class) const { 23 if(void* p = cmp_cast< sf_img<T> >(this,a_class)) {return p;} 24 return parent::cast(a_class); 25 } 26 virtual const std::string& s_cls() const {return s_class();} 27 public: 28 virtual bool write(io::iwbuf& a_buffer) { 29 const img<T>& im = parent::m_value; 30 return a_buffer.write_img(im.width(),im.height(),im.bpp(),im.buffer()); 31 } 32 virtual bool read(io::irbuf& a_buffer) { 33 uint32 w,h,n;uchar* b; 34 if(!a_buffer.read_img(w,h,n,b)) return false; 35 img<T>& im = parent::m_value; 36 if(w && h && n && b) { 37 im.set(w,h,n,b,true); 38 #ifdef TOOLS_MEM 39 mem::decrement(s_new().c_str()); 40 #endif 41 } 42 return true; 43 } 44 virtual bool dump(std::ostream&) { 45 //a_out << parent::m_value << std::endl; 46 return true; 47 } 48 virtual bool s_value(std::string& a_s) const {a_s.clear();return false;} 49 virtual bool s2value(const std::string&) {return false;} 50 public: 51 sf_img():parent(){} 52 sf_img(const img<T>& a_value):parent(a_value){} 53 virtual ~sf_img(){} 54 public: 55 sf_img(const sf_img& a_from):parent(a_from){} 56 sf_img& operator=(const sf_img& a_from){ 57 parent::operator=(a_from); 58 return *this; 59 } 60 public: 61 sf_img& operator=(const img<T>& a_value){ 62 parent::operator=(a_value); 63 return *this; 64 } 65 }; 66 67 }} 68 69 #endif