Index: kernel/include/IMP/Vector3D.h =================================================================== --- kernel/include/IMP/Vector3D.h (revision 514) +++ kernel/include/IMP/Vector3D.h (working copy) @@ -10,6 +10,7 @@ #include "IMP_config.h" #include "base_types.h" +#include "macros.h" #include @@ -90,10 +91,17 @@ operator[](1)-o[1], operator[](2)-o[2]); } + + void show(std::ostream &out) const { + out << "(" << operator[](0) << ", " << operator[](1) << ", " + << operator[](2) << ")"; + } private: Float vec_[3]; }; +IMP_OUTPUT_OPERATOR(Vector3D); + } // namespace IMP #endif /* __IMP_VECTOR_3D_H */ Index: kernel/include/IMP/decorators/macros.h =================================================================== --- kernel/include/IMP/decorators/macros.h (revision 514) +++ kernel/include/IMP/decorators/macros.h (working copy) @@ -183,20 +183,20 @@ - unsigned int internal_get_number_of_name() const */ -#define IMP_DECORATOR_ARRAY_DECL(name, Type) \ +#define IMP_DECORATOR_ARRAY_DECL(name, TypeName, Type, Default) \ protected: \ static IntKey number_of_##name##_key_; \ - static std::vector name##_keys_; \ + static std::vector name##_keys_; \ static void generate_##name##_keys(unsigned int i); \ - static const Type##Key get_##name##_key(unsigned int i) { \ + static const TypeName##Key get_##name##_key(unsigned int i) { \ if (i >= name##_keys_.size()) generate_##name##_keys(i); \ return name##_keys_[i]; \ } \ Type internal_get_##name(unsigned int i) const{ \ IMP_DECORATOR_GET(get_##name##_key(i), Type, \ return VALUE, \ - throw IndexException("Particle missing attribute");\ - return Type()); \ + throw IndexException("Particle missing attribute"); \ + return Default); \ } \ int internal_add_##name(Type t); \ unsigned int internal_get_number_of_##name() const { \ @@ -205,15 +205,15 @@ } \ //! See IMP_DECORATOR_ARRAY_DECL -#define IMP_DECORATOR_ARRAY_DEF(DecoratorType, name, Type) \ +#define IMP_DECORATOR_ARRAY_DEF(DecoratorType, name, TypeName, Type) \ IntKey DecoratorType##Decorator::number_of_##name##_key_; \ - std::vector DecoratorType##Decorator::name##_keys_; \ + std::vector DecoratorType##Decorator::name##_keys_; \ void DecoratorType##Decorator::generate_##name##_keys(unsigned int i) \ { \ while (!(i < name##_keys_.size())) { \ std::ostringstream oss; \ oss << #DecoratorType " " #name " " << name##_keys_.size(); \ - name##_keys_.push_back(Type##Key(oss.str().c_str())); \ + name##_keys_.push_back(TypeName##Key(oss.str().c_str())); \ } \ } \ int DecoratorType##Decorator::internal_add_##name(Type t) { \ @@ -224,7 +224,7 @@ } //! See IMP_DECORATOR_ARRAY_DECL -#define IMP_DECORATOR_ARRAY_INIT(DecoratorType, name, Type) \ +#define IMP_DECORATOR_ARRAY_INIT(DecoratorType, name, TypeName, Type) \ number_of_##name##_key_= IntKey(#DecoratorType " num " #name); Index: kernel/include/IMP/log.h =================================================================== --- kernel/include/IMP/log.h (revision 514) +++ kernel/include/IMP/log.h (working copy) @@ -9,7 +9,6 @@ #define __IMP_LOG_H #include "IMP_config.h" -#include "exception.h" #include #include Index: kernel/src/Log.cpp =================================================================== --- kernel/src/Log.cpp (revision 514) +++ kernel/src/Log.cpp (working copy) @@ -6,6 +6,7 @@ */ #include "IMP/log.h" +#include "IMP/exception.h" namespace IMP {