/
writer_macros.h
52 lines (47 loc) · 2.29 KB
/
writer_macros.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/**
* \file IMP/display/writer_macros.h
* \brief macros for display classes
*
* Copyright 2007-2022 IMP Inventors. All rights reserved.
*/
#ifndef IMPDISPLAY_WRITER_MACROS_H
#define IMPDISPLAY_WRITER_MACROS_H
#include "Writer.h"
#include <memory>
//! Define information for an TextWriter object
/** This macro declares the methods do_open, do_close, add_geometry
and show, and defines the destructor and get_version_info.
*/
#define IMP_TEXT_WRITER(Name) \
Name(TextOutput of) : TextWriter(of) { do_open(); } \
Name(std::string name) : TextWriter(name) { \
if (name.find("%1%") == std::string::npos) { \
TextWriter::open(); \
} \
} \
Name(const char* name) : TextWriter(std::string(name)) { \
if (std::string(name).find("%1%") == std::string::npos) { \
TextWriter::open(); \
} \
} \
IMP_OBJECT_METHODS(Name); \
\
protected: \
virtual void do_destroy() override { do_close(); } \
virtual void do_open() override; \
virtual void do_close() override
#define IMP_WRITER(Name) \
IMP_OBJECT_METHODS(Name); \
\
protected: \
virtual void do_destroy() override { do_close(); } \
virtual void do_open(); \
virtual void do_close()
#if !defined(IMP_DOXYGEN) && !defined(SWIG)
#define IMP_REGISTER_WRITER(Name, suffix) \
namespace { \
internal::WriterFactoryRegistrar Name##registrar( \
suffix, std::make_shared<internal::WriterFactoryHelper<Name> >()); \
}
#endif
#endif /* IMPDISPLAY_WRITER_MACROS_H */