9 #ifndef IMPKERNEL_OBJECT_H 
   10 #define IMPKERNEL_OBJECT_H 
   12 #include <IMP/kernel_config.h> 
   13 #include <IMP/kernel_config.h> 
   26 #include <boost/scoped_array.hpp> 
   27 #include <cereal/access.hpp> 
   31 #include <cereal/archives/binary.hpp> 
   33 #if !defined(IMP_HAS_CHECKS) 
   34 #error "IMP_HAS_CHECKS not defined, something is broken" 
   36 #if !defined(IMP_NONE) 
   37 #error "IMP_NONE not defined, something is broken" 
   39 #if !defined(IMP_HAS_LOG) 
   40 #error "IMP_HAS_LOG not defined, something is broken" 
   42 #if !defined(IMP_SILENT) 
   43 #error "IMP_SILENT not defined, something is broken" 
   46 IMPKERNEL_BEGIN_NAMESPACE
 
  113   boost::scoped_array<char> quoted_name_;
 
  115   static unsigned int live_objects_;
 
  118 #if IMP_HAS_LOG != IMP_NONE 
  122 #if IMP_HAS_CHECKS >= IMP_USAGE 
  124   mutable bool was_owned_;
 
  128 #if IMP_HAS_CHECKS >= IMP_INTERNAL 
  129   static void add_live_object(
Object* o);
 
  130   static void remove_live_object(
Object* o);
 
  133  friend class cereal::access;
 
  135  template<
class Archive> 
void serialize(Archive &ar) {
 
  137 #if IMP_HAS_LOG != IMP_NONE 
  140 #if IMP_HAS_CHECKS >= IMP_USAGE 
  141     ar(check_level_, was_owned_, check_value_);
 
  143     if (std::is_base_of<cereal::detail::InputArchiveBase, Archive>::value) {
 
  145       set_name_internal(name_);
 
  149   void set_name_internal(std::string name);
 
  151   void initialize(std::string name);
 
  162   typedef std::function<void(Object *, cereal::BinaryOutputArchive &)> SaveFunc;
 
  163   typedef std::function<Object*(cereal::BinaryInputArchive &)> LoadFunc;
 
  164   struct OutputSerializer {
 
  165     std::string class_name;
 
  169   static std::map<std::string, OutputSerializer> &get_output_serializers();
 
  170   static std::map<std::string, LoadFunc> &get_input_serializers();
 
  217   const std::string& get_name()
 const { 
return name_; }
 
  218   void set_name(std::string name);
 
  219   virtual std::string get_type_name()
 const { 
return "unknown object type"; }
 
  227   void set_was_used(
bool tf) 
const;
 
  233   std::string get_string()
 const {
 
  234     std::ostringstream oss;
 
  240   void ref()
 const { ++count_; }
 
  242   void release() 
const;
 
  243   const char* get_quoted_name_c_string()
 const { 
return quoted_name_.get(); }
 
  246   static bool register_serialize(
const std::type_info &t, std::string name,
 
  247                                  SaveFunc save_func, LoadFunc load_func);
 
  250   void poly_serialize(cereal::BinaryOutputArchive &ar);
 
  253   static Object *poly_unserialize(cereal::BinaryInputArchive &ar);
 
  256   void _on_destruction();
 
  259   bool get_is_valid() 
const;
 
  261   unsigned int get_ref_count()
 const { 
return count_; }
 
  263   static unsigned int get_number_of_live_objects() { 
return live_objects_; }
 
  264   bool get_is_shared()
 const { 
return count_ > 1; }
 
  265 #endif  // IMP_DOXYGEN 
  277 #if !defined(SWIG) && !defined(IMP_DOXYGEN) 
  279   IMP_CHECK_VARIABLE(l);
 
  280 #if IMP_HAS_CHECKS != IMP_NONE 
  286 #if IMP_HAS_LOG == IMP_SILENT 
  293 #if IMP_HAS_CHECKS == IMP_NONE 
  300 inline void Object::set_was_used(
bool tf)
 const {
 
  301   IMP_CHECK_VARIABLE(tf);
 
  302 #if IMP_HAS_CHECKS >= IMP_USAGE 
  307 inline bool Object::get_is_valid()
 const {
 
  308 #if IMP_HAS_CHECKS == IMP_NONE 
  311   return static_cast<int>(check_value_) == 111111111;
 
  316 #if !defined(IMP_DOXYGEN) && !defined(SWIG) 
  322   ShowFull(Object* o) {
 
  323     std::ostringstream oss;
 
  327   const std::string& get_string()
 const { 
return showed_; }
 
  329 inline std::ostream& operator<<(std::ostream& o, 
const ShowFull& sf) {
 
  330   o << sf.get_string();
 
  334 IMPKERNEL_END_NAMESPACE
 
Macros to help with reference counting. 
 
CheckLevel get_check_level()
Get the current audit mode. 
 
Base class for all objects that cannot be copied. 
 
#define IMP_HASHABLE_INLINE(name, hashret)
 
Helper functions for implementing hashes. 
 
LogLevel
The log levels supported by IMP. 
 
#define IMP_SHOWABLE(Name)
 
virtual void clear_caches()
 
Exception definitions and assertions. 
 
LogLevel get_log_level()
Get the currently active global log level. 
 
Base class for all objects that cannot be copied. 
 
virtual void do_destroy()
 
Common base class for heavy weight IMP objects. 
 
Macros to control compiler warnings. 
 
int compare(const VectorD< D > &a, const VectorD< D > &b)
lexicographic comparison of two vectors 
 
Helper macros for implementing hashable classes. 
 
Various general useful macros for IMP. 
 
Version and module information for Objects. 
 
Basic enumeration types used by IMP. 
 
std::ostream & show(Hierarchy h, std::ostream &out=std::cout)
Print the hierarchy using a given decorator to display each node. 
 
void set_log_level(LogLevel l)
Set the current global log level. 
 
CheckLevel
Specify the level of runtime checks performed. 
 
virtual VersionInfo get_version_info() const 
Get information about the module and version of the object. 
 
Version and authorship of IMP objects. 
 
Macros to help with objects that can be printed to a stream. 
 
void set_check_level(CheckLevel tf)
Control runtime checks in the code.