interface_declare.h File Reference
Description
Mixin class template for deriving new interface declarations.
Code Example
interface_declare.h
/***************************************************************************************************
* Copyright 2024 NVIDIA Corporation. All rights reserved.
**************************************************************************************************/
#ifndef MI_BASE_INTERFACE_DECLARE_H
#define MI_BASE_INTERFACE_DECLARE_H
#include <mi/base/iinterface.h>
#include <mi/base/types.h>
#include <mi/base/uuid.h>
namespace mi {
namespace base {
// Forward declaration
class IInterface;
template <Uint32 id1, Uint16 id2, Uint16 id3
, Uint8 id4, Uint8 id5, Uint8 id6, Uint8 id7
, Uint8 id8, Uint8 id9, Uint8 id10, Uint8 id11
, class I = IInterface>
class Interface_declare : public I
{
public:
typedef Interface_declare< id1, id2, id3, id4, id5, id6, id7, id8, id9, id10, id11, I>
Self;
typedef Uuid_t< id1, id2, id3, id4, id5, id6, id7, id8, id9, id10, id11>
IID;
static bool compare_iid( const Uuid& iid) {
if( iid == IID())
return true;
return I::compare_iid( iid);
}
protected:
// Acquires a const interface.
//
// Static helper function for implementing #get_interface(const Uuid&).
//
// \param iinterface The interface to act on.
// \param interface_id Interface ID of the interface to acquire.
static const IInterface* get_interface_static(
const IInterface* iinterface,
const Uuid& interface_id)
{
if( interface_id == IID()) {
const Self* self = static_cast<const Self *>( iinterface);
self->retain();
return self;
}
return I::get_interface_static( iinterface, interface_id);
}
// Acquires a mutable interface.
//
// Static helper function for implementing #get_interface(const Uuid&).
//
// \param iinterface The interface to act on.
// \param interface_id Interface ID of the interface to acquire.
static IInterface* get_interface_static(
IInterface* iinterface,
const Uuid& interface_id)
{
if( interface_id == IID()) {
Self* self = static_cast<Self*>( iinterface);
self->retain();
return self;
}
return I::get_interface_static( iinterface, interface_id);
}
};
// end group mi_base_iinterface
} // namespace base
} // namespace mi
#endif // MI_BASE_INTERFACE_DECLARE_H
Namespaces
- namespace
- Common namespace for APIs of NVIDIA Advanced Rendering Center GmbH. More...
- namespace
- Namespace for the Base API. More...
Classes
- class
- Mixin class template for deriving new interface declarations. More...