mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-27 04:11:05 +00:00
768e812e45
* On windows it's strongly desired to be able to compile straight out of a clean checkout or source download. This means anyone can download the source and investigate something quickly, without having to worry about the hassle of figuring out how the project downloads 3rd party dependencies, fetching them, getting them registered in the right place. * This can't be put in a submodule as git submodules don't get downloaded by default so people new to git will get confusing compilation messages, and someone downloading the source from github directly without cloning via git won't get submodules included. * It does add some extra size to a fresh download/checkout which is unfortunate, but absolutely worth the cost. Shallow checkouts still aren't unfeasibly large, and it's only a one-off cost at clone time.
72 lines
2.6 KiB
OpenEdge ABL
72 lines
2.6 KiB
OpenEdge ABL
// This is a helper file for shared_ptr and should not be included directly.
|
|
|
|
// The main implementation detail in using this smart pointer of a type is to customise the code generated
|
|
// to use a pointer to the smart pointer of the type, rather than the usual pointer to the underlying type.
|
|
// So for some type T, shared_ptr<T> * is used rather than T *.
|
|
|
|
// Another key part of the implementation is the smartptr feature:
|
|
// %feature("smartptr") T { shared_ptr<T> }
|
|
// This feature marks the class T as having a smartptr to it (the shared_ptr<T> type). This is then used to
|
|
// support smart pointers and inheritance. Say class D derives from base B, then shared_ptr<D> is marked
|
|
// with a fake inheritance from shared_ptr<B> in the type system if the "smartptr" feature is used on both
|
|
// B and D. This is to emulate the conversion of shared_ptr<D> to shared_ptr<B> in the target language.
|
|
|
|
// shared_ptr namespaces could be boost or std or std::tr1
|
|
// For example for std::tr1, use:
|
|
// #define SWIG_SHARED_PTR_NAMESPACE std
|
|
// #define SWIG_SHARED_PTR_SUBNAMESPACE tr1
|
|
|
|
#if !defined(SWIG_SHARED_PTR_NAMESPACE)
|
|
# define SWIG_SHARED_PTR_NAMESPACE boost
|
|
#endif
|
|
|
|
#if defined(SWIG_SHARED_PTR_SUBNAMESPACE)
|
|
# define SWIG_SHARED_PTR_QNAMESPACE SWIG_SHARED_PTR_NAMESPACE::SWIG_SHARED_PTR_SUBNAMESPACE
|
|
#else
|
|
# define SWIG_SHARED_PTR_QNAMESPACE SWIG_SHARED_PTR_NAMESPACE
|
|
#endif
|
|
|
|
namespace SWIG_SHARED_PTR_NAMESPACE {
|
|
#if defined(SWIG_SHARED_PTR_SUBNAMESPACE)
|
|
namespace SWIG_SHARED_PTR_SUBNAMESPACE {
|
|
#endif
|
|
template <class T> class shared_ptr {
|
|
};
|
|
#if defined(SWIG_SHARED_PTR_SUBNAMESPACE)
|
|
}
|
|
#endif
|
|
}
|
|
|
|
%fragment("SWIG_null_deleter", "header") {
|
|
struct SWIG_null_deleter {
|
|
void operator() (void const *) const {
|
|
}
|
|
};
|
|
%#define SWIG_NO_NULL_DELETER_0 , SWIG_null_deleter()
|
|
%#define SWIG_NO_NULL_DELETER_1
|
|
%#define SWIG_NO_NULL_DELETER_SWIG_POINTER_NEW
|
|
%#define SWIG_NO_NULL_DELETER_SWIG_POINTER_OWN
|
|
}
|
|
|
|
|
|
// Workaround empty first macro argument bug
|
|
#define SWIGEMPTYHACK
|
|
// Main user macro for defining shared_ptr typemaps for both const and non-const pointer types
|
|
%define %shared_ptr(TYPE...)
|
|
%feature("smartptr", noblock=1) TYPE { SWIG_SHARED_PTR_QNAMESPACE::shared_ptr< TYPE > }
|
|
SWIG_SHARED_PTR_TYPEMAPS(SWIGEMPTYHACK, TYPE)
|
|
SWIG_SHARED_PTR_TYPEMAPS(const, TYPE)
|
|
%enddef
|
|
|
|
// Legacy macros
|
|
%define SWIG_SHARED_PTR(PROXYCLASS, TYPE...)
|
|
#warning "SWIG_SHARED_PTR(PROXYCLASS, TYPE) is deprecated. Please use %shared_ptr(TYPE) instead."
|
|
%shared_ptr(TYPE)
|
|
%enddef
|
|
|
|
%define SWIG_SHARED_PTR_DERIVED(PROXYCLASS, BASECLASSTYPE, TYPE...)
|
|
#warning "SWIG_SHARED_PTR_DERIVED(PROXYCLASS, BASECLASSTYPE, TYPE) is deprecated. Please use %shared_ptr(TYPE) instead."
|
|
%shared_ptr(TYPE)
|
|
%enddef
|
|
|