00001 // 00002 // protos/object.h 00003 // 00004 // Copyright (c) 2008-2009, Mike Austin 00005 // All rights reserved. 00006 // 00007 00008 #ifndef _IMPULSE_OBJECT_H_ 00009 #define _IMPULSE_OBJECT_H_ 00010 00011 #include <cmath> 00012 #include <typeinfo> 00013 00014 #include "../impulse.h" 00015 00016 namespace impulse { 00017 00018 // 00019 // class Object 00020 // 00021 00027 00028 class Object : public Frame { 00029 00030 public: 00031 00032 Object() { } 00033 00034 void initSlots() 00035 { 00036 setSlot( Symbol::at("test"), new Method<Object>( "test", &Object::_test ) ); 00037 setSlot( Symbol::at("set-slot"), new Method<Object>( "set-slot", &Object::_setSlot_ ) ); 00038 } 00039 00040 string inspect() { return "[Object]"; } 00041 00042 //protected: 00043 00044 Value _test( Array& args, Value self ) 00045 { 00046 BEG( "Object::_test()" ); 00047 00048 Value result = self.setSlot( Symbol::at("foo"), 15.0 ); 00049 00050 END( "" ); 00051 00052 return result; 00053 } 00054 00055 Value _setSlot_( Array& args, Value self ) 00056 { 00057 BEG( "Object::_setSlot()" ); 00058 00059 cout << ">>> " << args.at(1).inspect() << endl; 00060 Value result = self.setSlot( *args.at(0).get<Symbol>(), args.at(1) ); 00061 00062 END( result.inspect() ); 00063 00064 return result; 00065 } 00066 00067 }; 00068 00069 } 00070 00071 #endif