namespace axl::sys::lnx

namespace lnx {

// typedefs

typedef UdevContextBase<Udev> UdevContext_s;
typedef UdevDeviceBase<Udev> UdevDevice_s;
typedef UdevEnumeratorBase<Udev> UdevEnumerator_s;
typedef UdevListEntryBase<Udev> UdevListEntry_s;
typedef UdevMonitorBase<Udev> UdevMonitor_s;
typedef UdevContextBase<UdevLib> DynamicUdevContext;
typedef UdevDeviceBase<UdevLib> DynamicUdevDevice;
typedef UdevEnumeratorBase<UdevLib> DynamicUdevEnumerator;
typedef UdevListEntryBase<UdevLib> DynamicUdevListEntry;
typedef UdevMonitorBase<UdevLib> DynamicUdevMonitor;

// classes

class Udev;

template <typename T>
class UdevContextBase;

template <typename T>
class UdevDeviceBase;

template <typename T>
class UdevEnumeratorBase;

class UdevLib;

template <typename T>
class UdevListEntryBase;

template <typename T>
class UdevMonitorBase;

template <typename T>
class UnrefUdevContext;

template <typename T>
class UnrefUdevDevice;

template <typename T>
class UnrefUdevEnumerator;

template <typename T>
class UnrefUdevMonitor;

// global functions

template <typename T>
T
completeUdev(
    T result,
    const char* functionName
    );

bool
completeUdevErrno(int result);

} // namespace lnx