dxd - dynax driver framework 3.0.1d223
cross platform open source driver development framework
Loading...
Searching...
No Matches
dx Namespace Reference

dynax driver framework interface namespace More...

Namespaces

namespace  abstract
namespace  asio
 ASIO namespace.
namespace  color
 the SGR sequences, by their effect; dx::themed picks between two of them
namespace  coreaudio
 CoreAudio, both sides of it: dx::coreaudio is the HAL client - a device the system published, whoever drives it - and dx::coreaudio::server is the plugin that publishes one. Settings are HAL properties here, promoted over dx::coreaudio::promoted::property.
namespace  coremidi
 the MIDI client over CoreMIDI, which speaks Universal MIDI Packets since macOS 11 - so this bus's rings carry UMP, and a MIDITimeStamp is dx::timestamp itself, converted nowhere
namespace  crypto
 cryptographic primitives a signature check takes, kernel and user mode alike: no allocation, no exception, no platform
namespace  daemon
namespace  der
 ASN.1 DER, walked in place: what a certificate's fields and a license's private extensions take.
namespace  dll
 the registry names a COM server is registered under - what the ASIO driver's own registration writes
namespace  erase
namespace  fourchar
 the four character codes of the OS audio APIs: to::string prints the printable bytes and the numeric value of the others, from::string packs four bytes back into the word
namespace  gui
 the control panel's widgets over JUCE: each one takes the value it edits and a listener, writes the device's desc back on a change and follows the desc when something else changes it - so a panel is composed of these, never of event handling of its own
namespace  install
 driver package installation namespace
namespace  ioctl
 IOCTLs namespace.
namespace  licensing
 a license: an X.509 certificate the product's root signed, its attributes private extensions
namespace  map
namespace  midi
namespace  platform
 the machine's identity a license may be bound to (dx_common.cpp)
namespace  power
namespace  process
 process
namespace  proxy
 OS proxy interface class.
namespace  redirect
 redirect std IO: a stream's distributor (dx::redirect::indent::streambuf) hands every write to the sinks joined to it - any std::streambuf: the stream's own, a file's, a line sink's (dx::redirect::line) - which join and leave in any order, each for its object's life (dx::redirect::join)
namespace  service
 a device that is an IOService of the registry, without a driver connection of its own - what a proxy device derives its identity and its properties from
namespace  shared
namespace  smbios
 the SMBIOS tables as the firmware interface hands them out (RawSMBIOSData: GetSystemFirmwareTable 'RSMB', WMI MSSmBios_RawSMBiosTables - one layout), walked in place
namespace  stream
 generic stream interface
namespace  test
 the manual exerciser: one dx::test::driver per client bus, each a dx::parser of its own, handed to dx::select. It prints rather than asserts - the output is the verdict
namespace  thread
 thread
namespace  trace
namespace  usb
 USB user mode interface namespace.
namespace  virtuel
 the in-process bus: devices exist in the preference store alone, no OS registration of any kind. It exercises the shared stream machinery - device, pins, groups, engine - without a plugin, a service or a kernel driver, and its desc types are the generic default other buses fall back to
namespace  wasapi
 WASAPI namespace.
namespace  x509
 the fields of an X.509 certificate a license check reads, off its DER: kernel and user mode alike
namespace  xpc

Classes

struct  __scalar
 an integer of a width the language has none for - dx::int24/dx::uint24, packed into its own bytes because a bit field of a packed struct still costs four bytes here More...
struct  aggregate
 forwards a braced argument list into a type with no matching constructor - the conversion builds it from the stored tuple, so an aggregate can be returned or passed where its own members would not deduce More...
struct  ansi
 an SGR/OSC control sequence, written only where it is read: every sink below drops it unless stderr is a terminal More...
class  apartment
 the COM apartment of one object - a device or a whole driver: its thread creates the object, runs its steps and releases it More...
struct  circular
 kernel/user space shared circular buffer More...
class  clock
 realtime tick mechanism: one thread per clock - run/halt lifecycle and tick dispatch; the source_t base owns objective and wait More...
class  device
 abstract commom base device interface class More...
class  driver
struct  driver_settings
 abstract base driver interface class This is the abstract base interface to a driver. More...
class  event
class  event< kernel >
 kernel triggerable user space event More...
class  event< user >
 the process local event over a condition variable; dx::event<kernel> is the platform's own, waitable together with an OS handle More...
class  exception
 a throw's whole diagnostic: the OS result, where it was raised (frame, file, line), the thread and the moment, a formatted comment and the exception it grew out of. Each frame on the way out wraps the one below into a new exception of its own - dx_catchall and friends do nothing else - so previous is the chain down to the origin, deep copied and owned by the wrapper; dx::trace::unfold prints it. The constructor overloads below are one signature per combination of the optional leading arguments (previous, function, error, what) ahead of the mandatory frame/file/line, with and without the printf-style comment. More...
struct  fence
 the memory ordering plain shared state needs on weakly ordered CPUs, in user mode and the kernel alike More...
class  file
 an open handle to a device interface - what every ioctl of a proxy device goes through More...
class  free_run
 free running timer source: condition variable timer at system timer resolution; duration zero degenerates to the event driven base More...
class  guid
 a ::GUID with the arithmetic Windows leaves out: constructed from its parts or its string, ordered so it can be a map key, printed as its string More...
struct  int24be
 a packed 24 bit integer stored big endian: converts from and to the native int on every access, so the ring converters take it like int24 More...
struct  iobridge
 ioctl bridge for 32/64bit user mode/kernel space big/little endian interface More...
struct  is_dx_iterator
struct  is_dx_iterator< type_t, std::void_t< typename type_t::dx_iterator_tag > >
struct  is_initializer_list
struct  is_initializer_list< std::initializer_list< type_t > >
struct  is_smart_pointer
struct  is_smart_pointer< std::shared_ptr< type_t > >
struct  is_smart_pointer< std::unique_ptr< type_t, deleter_t > >
struct  is_smart_pointer< std::weak_ptr< type_t > >
struct  is_string_container
struct  is_string_container< type_t, false >
class  iterator
 range-for support shared by every dxd type whose elements aren't already kept in an STL container of their own (dx::key_value_tree, cf::data, cf::dictionary, cf::array): a derived_t populates container_t however it needs to - a single existing conversion, or an explicit per-element loop - in its own constructor, then calls seed() once population is complete; operator++()/operator!=() forward to container_t's own iterator from then on. operator*() stays derived_t's own: what it should return (a plain element, const or not) differs per user, from cf::data's read-only bytes to dx::key_value_tree's mutable, further-navigable child node. More...
class  key_value_tree
 hierarchical key/value navigation over a flat persistent store More...
struct  key_value_tree_enabled
struct  key_value_tree_enabled< tree_t, value_t, std::void_t< decltype(tree_t::template enabled< value_t >())> >
class  launch
 RAII object launcher. More...
class  license
 the first certificate of the platform's store naming the product that the root signed, whose constraints this machine and device satisfy and that, unless perpetual, has not expired; kernel and user mode alike over the platform part (dx_platform_license.h: the store's candidates and their DER, the time, the machine's serial number and ethernet addresses, what to keep and the missing/forged hooks) More...
class  listen
 guarded listerners map used from the server side to manage listeners More...
class  listener
 balanced listener client into servers listeners map used from the client side to manage its subscription into the server listeners map More...
class  listeners
 internal helper to map single listener into listerners map More...
union  log
 the whole log setting in one 32 bit word: a dx::log::level per dx::log::scope per dx::log::module, four bits each. The word is what a driver, a kernel and a host exchange and compare; the named members are the same bits, and to/from name them for a preference, a command line or a property. The serialization macros hand the member list to the tree and CF sinks of dx_serialize.h, so the store holds the log resolved rather than the word. More...
class  object
 the framework's object lifecycle: launch() once mounted, conclude() before removal, both reached through the try_ pair alone, which elects the single caller that runs them. Neither is a constructor's or destructor's job: an object is constructed long before its resources exist (a device ahead of its bus arrival) and outlives their release. The destructor's try_conclude() is the backstop for an object never concluded by its owner. More...
class  open
 RAII manage balanced object open/(close). More...
struct  os_event
 kernel/user space shared event representation More...
class  overlapped
 an overlapped operation with the event it completes on, and the wait for its result More...
class  parser
 cmd line parser More...
struct  pci
 physical PCI stream descriptor More...
class  pipe
 pipe - Windows named pipes A dx::pipe is a bidirection, multi-client, multi-threaded communication channel between a pipe client and a pipe server. Both pipe sides feature a dedicated read thread to receive data from the opposite side notifiying installable listener std::functions. On the service side, a pipe server is instantiated for each pipe client connection. Until a new client connects, the pipe::server::instance remains waiting in pipe::server::instance::connect within its dedicated pipe read thread. If a client disconnects the pipe::server::instance terminates its read thread and is joined and released by the next pipe::server::run() or pipe::server::stop(). The pipe::server::instance super class can be template-parameterized to allow mimicking user client behaviour. Windows arbitrarily serializes operations on synchronous pipe handles, limiting it's named pipe concurrent synchronous operation capabilities to exactly one synchronous pipe per process (i.e. exactly one per process), effectively forcing both the pipe::server and the pipe client to be implemented using asynchronous OVERLAPPED I/O — introducing a whole host of unnecessary pitfalls and awkward behaviors. However, the MSDN documentation here apparently describes a different piece of software. Though dx::pipes can be used for any communication between user space software its purpose is to allow Windows service communication. A service itself runs with elevated privileges, whereas the clients typically run in the normal user context. Therefore, the pipe servers have defined their default ACLs for non-privileged access. More...
class  process
 a child process with its handles, started and waited for; mmcss inside it is what a streaming thread of this process registers with the multimedia scheduler as More...
class  promoted
 promoted value More...
struct  promoting
 promoted::preference with default and optional alignment function More...
struct  promoting< preference_t, std::void_t< decltype(preference_t::listen)> >
class  reference
 RAII manage balanced object open/(close). More...
class  registry
 flat, non-hierarchical Windows registry access to one real key More...
class  resource
 Windows handle class bill wasn't sure wether an invalid handle is a nullptr or -1. Hence the invalid_t template parameter. (Usually its -1, but i.e. for file mappings its nullptr, etc.). More...
class  security
 Windows security descriptor: allows non-privileged access. More...
class  select
 select from aggregated drivers More...
class  serial
 serial interface More...
class  source
 clock source base: the only thing that may signal a tick - itself the event driven source (hw clock fan-out) More...
struct  spin
class  string
 a fixed size name that crosses a process or kernel boundary by value, where a std::string cannot: the platform's file name length, always terminated, converting to and from std::string More...
struct  themed
class  timebase
class  timer
 high resolution timer source: an OS timer wait toward the objective, optionally handing over to yield/spin polling covering the last lead; self pacing by duration like free_run, or paced by an override's sync() More...
struct  tty
 the terminal behind a file descriptor: its presence, its raw mode and its background colour More...
struct  void_struct
 the empty stand-in where a template needs a type but nothing is carried - it streams nothing More...
class  window
 a message only window on a thread of its own: WM_DEVICECHANGE and WM_POWERBROADCAST are what Windows delivers device arrival, removal and sleep through, and there is no window less way to take them More...
struct  yield
 stateless polling wait strategies: trade a core for the last microseconds toward an objective More...

Concepts

concept  non_pointer

Typedefs

using int24 = __scalar<int32_t, 24>
typedef iobridge< void > os_event
 kernel/user space shared OS event
typedef void * os_handle
typedef ::mach_error_t os_result
typedef ::IOReturn os_result
 defining platform abstract type os_result for IOKit driver
typedef ::DWORD pid_t
using preference = key_value_tree<registry>
 hierarchical preference store over the Windows registry see dx::key_value_tree (dx_key_value_tree.h) for usage and dx::registry's design note above for how the hierarchy maps onto real registry keys.
using uint24 = __scalar<uint32_t, 24>

Enumerations

enum  : ::DWORD {
  ok = kIOReturnSuccess , unknown = kIOReturnInvalid , not_implemented = kIOReturnUnsupported , invalid = kIOReturnBadArgument ,
  device_error = kIOReturnDeviceError , no_resources = kIOReturnNoResources , invalid_data = kIOReturnNoSpace , not_initialized = kIOReturnNotReady ,
  no_device = kIOReturnNoDevice , version_mismatch = err_system(0x37)| err_sub(2)| 0x14 , invalid_priority = ERROR_INVALID_PRIORITY , timeout = kIOReturnTimeout ,
  internal_error = kIOReturnInternalError , exclusive = kIOReturnExclusiveAccess , aborted = kIOReturnAborted , busy = kIOReturnBusy ,
  not_permitted = kIOReturnNotPermitted , overflow = kIOReturnOverrun , not_found = ERROR_FILE_NOT_FOUND , driver_not_installed = kIOReturnNotAttached ,
  driver_not_connected = kIOReturnNotOpen , driver_not_running = kIOReturnOffline
}
enum  : ::mach_error_t {
  ok = kIOReturnSuccess , not_initialized = kIOReturnNotReady , not_implemented = kIOReturnUnsupported , invalid = kIOReturnBadArgument ,
  no_device = kIOReturnNoDevice , device_error = kIOReturnDeviceError , no_resources = kIOReturnNoResources , invalid_data = kIOReturnNoSpace ,
  version_mismatch = err_system(0x37)| err_sub(2)| 0x14 , timeout = kIOReturnTimeout , unknown = kIOReturnInvalid , overflow = kIOReturnOverrun ,
  driver_not_installed = kIOReturnNotAttached , driver_not_connected = kIOReturnNotOpen , driver_not_running = kIOReturnOffline , internal_error = kIOReturnInternalError ,
  not_permitted = kIOReturnNotPermitted , exclusive = kIOReturnExclusiveAccess , aborted = kIOReturnAborted , busy = kIOReturnBusy
}
enum  scale : int64_t {
  nsec = 1ll , usec = 1000ll , msec = usec* 1000ll , sec = msec* 1000ll ,
  sec = msec* 1000ll , msec = usec* 1000ll , usec = 1000ll , nsec = 1ll
}
 the factors a dx::timestamp is scaled by - timestamp(value, msec), duration(ticks, usec) More...
enum  scale : int64_t {
  nsec = 1ll , usec = 1000ll , msec = usec* 1000ll , sec = msec* 1000ll ,
  sec = msec* 1000ll , msec = usec* 1000ll , usec = 1000ll , nsec = 1ll
}
 Windows: timestamp to Windows time converter. More...
enum  scope { kernel , user , kernel , user }
 template parameter defining origin of kernel object or destination of mapping More...
enum  scope { kernel , user , kernel , user }
 template parameter defining origin of kernel object or destination of mapping More...

Functions

template<typename type_t, int resolution>
class __attribute__ ((__packed__)) __scalar
 an integer of a width the language has none for - dx::int24/dx::uint24, three bytes in the machine's own order, converting to and from the native type on every access
os_result _assert (os_result error, const char *expression, const char *frame, const char *file, unsigned int line)
 the failing expression, its frame and dx::describe of the result to stderr, then dx::halt; a zero result passes through. Only a debug build calls it: release drops the diagnostics and keeps (dx_assert_along) or drops (dx_assert_discard) the expression itself
template<typename ... arg_t>
os_result _assert (os_result error, const char *expression, const char *frame, const char *file, unsigned int line, arg_t... args)
template<typename... types>
 aggregate (types &&...) -> aggregate< types &&... >
std::string canonical (const std::string &name, size_t length=DX_FILENAME_LENGTH)
 remove invalid characters from file name or return a hex hash if name is too long
std::string describe (os_result result) noexcept
int64_t duration (int64_t timestamp, scale scale)
 macOS: timestamp duration (clock ticks) to time converter
void halt ()
 the breakpoint a dx_pass/dx_assert failure runs into - a debugger's stop is one uncommented line away
template<typename ... next_t>
os_result map_os_result (os_result result, os_result desired, next_t... next)
 map list of os_results to a desired value This helper allows to ignore a list of os_results and if matched return the desired result instead.
std::ostream & operator<< (std::ostream &os, const exception &exception) noexcept
std::ostream & operator<< (std::ostream &os, const log &log)
std::ostream & operator<< (std::ostream &os, const log::level &level)
std::ostream & operator<< (std::ostream &os, const log::scope &scope)
std::ostream & operator<< (std::ostream &os, const void_struct &)
bool os_error (os_result result) noexcept
inline ::CFStringRef os_string (const char *string) noexcept
uint32_t priority ()
inline ::LARGE_INTEGER qpc (int64_t timestamp)
 Windows: timestamp to performance counter reading converter.
void report_uncaught ()
 prints an uncaught exception's actual diagnostic to stderr before the runtime terminates the process. Call once at startup - std::terminate() (an uncaught throw reaching main(), or escaping any std::thread's entry function) otherwise calls abort() with no diagnostic output at all.
template<typename type_t, typename... types_t>
type_t & static_try (const types_t &... args)
 a function local static whose constructor may throw: the throw is reported and a default constructed object takes its place, so the caller always gets one and the construction is attempted once
template<typename type_t, typename... types_t>
type_t & static_try (types_t &... args)
int64_t time (int64_t timestamp, scale scale=nsec)
 macOS: timestamp (clock ticks) to time converter
int64_t timestamp ()
 macOS: high precision timestamp (clock ticks) Returns current value of a clock that increments monotonically in tick units (starting at an arbitrary point), this clock does not increment while the system is asleep.
int64_t timestamp (const ::LARGE_INTEGER &qpc)
 Windows: performance counter reading to timestamp converter.
int64_t timestamp (int64_t time, scale scale=nsec)
 macOS: time to timestamp (clock ticks) converter
int64_t timestamp_offset (int64_t time, scale scale=nsec)
 macOS: duration to timestamp (clock ticks) converter
const std::string & to_string (const std::string &string)
std::string version (const std::string &package)
 installation package version
std::string version (uint32_t v32)
 a DX_VERSION32 word as it is read: major.minor.sub with the deployment letter and the build number behind it

Variables

std::recursive_mutex io_mutex
 the one lock every diagnostic sink takes, so a chain unfolded from one thread stays unbroken
template<typename type_t>
constexpr bool is_dx_iterator_v = is_dx_iterator<type_t>::value
template<typename>
constexpr bool is_floating_point = false
template<>
constexpr bool is_floating_point< double > = true
template<>
constexpr bool is_floating_point< float > = true
template<>
constexpr bool is_floating_point< long double > = true
template<typename type_t>
constexpr bool is_initializer_list_v = is_initializer_list<type_t>::value
template<typename>
constexpr bool is_integral = false
template<>
constexpr bool is_integral< int16_t > = true
template<>
constexpr bool is_integral< int32_t > = true
template<>
constexpr bool is_integral< int64_t > = true
template<>
constexpr bool is_integral< int8_t > = true
template<typename>
constexpr bool is_pointer = false
template<typename type_t>
constexpr bool is_pointer< type_t * > = true
template<typename type_t>
constexpr bool is_smart_pointer_v = is_smart_pointer<type_t>::value
template<typename type_t>
constexpr bool is_string_container_v = is_string_container<type_t>::value

Detailed Description

dynax driver framework interface namespace

intended use

dx - dynax driver framework user mode interface namespace

dx - dynax driver framework interface namespace

dynax driver framework user mode interface namespace

the interface headers shared with user mode spell the status as dx:: does

Typedef Documentation

◆ int24

typedef __scalar< int32_t, 24 > dx::int24 = __scalar<int32_t, 24>

◆ os_event

typedef iobridge<void> dx::os_event

kernel/user space shared OS event

◆ os_handle

typedef::HANDLE dx::os_handle

◆ os_result [1/2]

typedef::DWORD dx::os_result

◆ os_result [2/2]

typedef::NTSTATUS dxd::os_result

defining platform abstract type os_result for IOKit driver

platform abstract type os_result for WDK driver

◆ pid_t

typedef ::DWORD dx::pid_t

◆ preference

hierarchical preference store over the Windows registry see dx::key_value_tree (dx_key_value_tree.h) for usage and dx::registry's design note above for how the hierarchy maps onto real registry keys.

◆ uint24

typedef __scalar< uint32_t, 24 > dx::uint24 = __scalar<uint32_t, 24>

Enumeration Type Documentation

◆ anonymous enum

anonymous enum : ::DWORD
Enumerator
ok 
unknown 
not_implemented 
invalid 
device_error 
no_resources 
invalid_data 
not_initialized 
no_device 
version_mismatch 
invalid_priority 
timeout 
internal_error 
exclusive 
aborted 
busy 
not_permitted 
overflow 
not_found 
driver_not_installed 
driver_not_connected 
driver_not_running 

◆ anonymous enum

anonymous enum : ::mach_error_t
Enumerator
ok 
not_initialized 
not_implemented 
invalid 
no_device 
device_error 
no_resources 
invalid_data 
version_mismatch 
timeout 
unknown 
overflow 
driver_not_installed 
driver_not_connected 
driver_not_running 
internal_error 
not_permitted 
exclusive 
aborted 
busy 

◆ scale [1/2]

the factors a dx::timestamp is scaled by - timestamp(value, msec), duration(ticks, usec)

Enumerator
nsec 
usec 
msec 
sec 
sec 
msec 
usec 
nsec 

◆ scale [2/2]

Windows: timestamp to Windows time converter.

Enumerator
nsec 
usec 
msec 
sec 
sec 
msec 
usec 
nsec 

◆ scope [1/2]

enum dx::scope

template parameter defining origin of kernel object or destination of mapping

  • underlaying virtual memory origin for memory object creation
  • underlaying event origin for user/kernel mode notification
  • destination for usage of mapping object
Enumerator
kernel 

virtual memory originated in kernel, event originated in kernel or mapping to be created for use in kernel

user 

virtual memory originated in user space: use with care! (memory is only valid in correct application context), event originated in user space or mapping to be created for use in user space

kernel 

virtual memory originated in kernel, event originated in kernel or mapping to be created for use in kernel

user 

virtual memory originated in user space: use with care! (memory is only valid in correct application context), event originated in user space or mapping to be created for use in user space

◆ scope [2/2]

enum dx::scope

template parameter defining origin of kernel object or destination of mapping

  • underlaying virtual memory origin for memory object creation
  • underlaying event origin for user/kernel mode notification
  • destination for usage of mapping object
Enumerator
kernel 

virtual memory originated in kernel, event originated in kernel or mapping to be created for use in kernel

user 

virtual memory originated in user space: use with care! (memory is only valid in correct application context), event originated in user space or mapping to be created for use in user space

kernel 

virtual memory originated in kernel, event originated in kernel or mapping to be created for use in kernel

user 

virtual memory originated in user space: use with care! (memory is only valid in correct application context), event originated in user space or mapping to be created for use in user space

Function Documentation

◆ __attribute__()

template<typename type_t, int resolution>
class dx::__attribute__ ( (__packed__) )

an integer of a width the language has none for - dx::int24/dx::uint24, three bytes in the machine's own order, converting to and from the native type on every access

◆ _assert() [1/2]

os_result dx::_assert ( os_result error,
const char * expression,
const char * frame,
const char * file,
unsigned int line )
inline

the failing expression, its frame and dx::describe of the result to stderr, then dx::halt; a zero result passes through. Only a debug build calls it: release drops the diagnostics and keeps (dx_assert_along) or drops (dx_assert_discard) the expression itself

Here is the call graph for this function:
Here is the caller graph for this function:

◆ _assert() [2/2]

template<typename ... arg_t>
os_result dx::_assert ( os_result error,
const char * expression,
const char * frame,
const char * file,
unsigned int line,
arg_t... args )
Here is the call graph for this function:

◆ aggregate()

template<typename... types>
dx::aggregate ( types && ...) -> aggregate< types &&... >

◆ canonical()

std::string dx::canonical ( const std::string & name,
size_t length = DX_FILENAME_LENGTH )
inline

remove invalid characters from file name or return a hex hash if name is too long

Todo
should move into platform as requirements are too different between macOS and Windows
Here is the call graph for this function:
Here is the caller graph for this function:

◆ describe()

std::string dx::describe ( os_result result)
inlinenoexcept
Here is the call graph for this function:
Here is the caller graph for this function:

◆ duration()

int64_t dx::duration ( int64_t timestamp,
scale scale = nsec )
inlinenoexcept

macOS: timestamp duration (clock ticks) to time converter

Here is the call graph for this function:
Here is the caller graph for this function:

◆ halt()

void dx::halt ( )
inline

the breakpoint a dx_pass/dx_assert failure runs into - a debugger's stop is one uncommented line away

Here is the caller graph for this function:

◆ map_os_result()

template<typename ... next_t>
os_result dx::map_os_result ( os_result result,
os_result desired,
next_t... next )

map list of os_results to a desired value This helper allows to ignore a list of os_results and if matched return the desired result instead.

Here is the caller graph for this function:

◆ operator<<() [1/5]

std::ostream & dx::operator<< ( std::ostream & os,
const exception & exception )
inlinenoexcept
Here is the call graph for this function:

◆ operator<<() [2/5]

std::ostream & dx::operator<< ( std::ostream & os,
const log & log )
inline

◆ operator<<() [3/5]

std::ostream & dx::operator<< ( std::ostream & os,
const log::level & level )
inline
Here is the call graph for this function:
Here is the caller graph for this function:

◆ operator<<() [4/5]

std::ostream & dx::operator<< ( std::ostream & os,
const log::scope & scope )
inline

◆ operator<<() [5/5]

std::ostream & dx::operator<< ( std::ostream & os,
const void_struct &  )
inline

◆ os_error()

bool dx::os_error ( os_result result)
inlinenoexcept

◆ os_string()

const char * dx::os_string ( const char * string)
noexcept

◆ priority()

uint32_t dx::priority ( )
inlinenoexcept
Here is the caller graph for this function:

◆ qpc()

inline ::LARGE_INTEGER dx::qpc ( int64_t timestamp)

Windows: timestamp to performance counter reading converter.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ report_uncaught()

void dx::report_uncaught ( )
inline

prints an uncaught exception's actual diagnostic to stderr before the runtime terminates the process. Call once at startup - std::terminate() (an uncaught throw reaching main(), or escaping any std::thread's entry function) otherwise calls abort() with no diagnostic output at all.

Here is the caller graph for this function:

◆ static_try() [1/2]

template<typename type_t, typename... types_t>
type_t & dx::static_try ( const types_t &... args)

a function local static whose constructor may throw: the throw is reported and a default constructed object takes its place, so the caller always gets one and the construction is attempted once

Here is the caller graph for this function:

◆ static_try() [2/2]

template<typename type_t, typename... types_t>
type_t & dx::static_try ( types_t &... args)
Here is the call graph for this function:

◆ time()

int64_t dx::time ( int64_t timestamp,
scale scale = nsec )
inline

macOS: timestamp (clock ticks) to time converter

Windows: timestamp (clock ticks) to time converter.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ timestamp() [1/3]

int64_t dx::timestamp ( )
inline

macOS: high precision timestamp (clock ticks) Returns current value of a clock that increments monotonically in tick units (starting at an arbitrary point), this clock does not increment while the system is asleep.

Windows: high precision timestamp.

Here is the caller graph for this function:

◆ timestamp() [2/3]

int64_t dx::timestamp ( const ::LARGE_INTEGER & qpc)
inline

Windows: performance counter reading to timestamp converter.

Here is the call graph for this function:

◆ timestamp() [3/3]

int64_t dx::timestamp ( int64_t time,
scale scale = nsec )
inlinenoexcept

macOS: time to timestamp (clock ticks) converter

Windows: time to timestamp (clock ticks) converter.

Here is the call graph for this function:

◆ timestamp_offset()

int64_t dx::timestamp_offset ( int64_t time,
scale scale = nsec )
inlinenoexcept

macOS: duration to timestamp (clock ticks) converter

Here is the call graph for this function:
Here is the caller graph for this function:

◆ to_string()

const std::string & dx::to_string ( const std::string & string)
inline
Here is the caller graph for this function:

◆ version() [1/2]

std::string dx::version ( const std::string & package)
inline

installation package version

Todo
find approprate place

◆ version() [2/2]

std::string dx::version ( uint32_t v32)
inline

a DX_VERSION32 word as it is read: major.minor.sub with the deployment letter and the build number behind it

A final build carries neither - it is read by the release it is, down to major.minor (3.0.0f001 is 3.0, 3.2.1f004 is 3.2.1), which is what its tag, its package and its published directory are named by (etc/tools.sh's short()). Every other build is one of many and keeps both. The exact word stays reachable where it decides something - a version mismatch is diagnosed with DX_VERSION_FORMAT, never with this.

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ io_mutex

std::recursive_mutex dx::io_mutex
inline

the one lock every diagnostic sink takes, so a chain unfolded from one thread stays unbroken

◆ is_dx_iterator_v

template<typename type_t>
bool dx::is_dx_iterator_v = is_dx_iterator<type_t>::value
inlineconstexpr

◆ is_floating_point

template<typename>
bool dx::is_floating_point = false
constexpr

◆ is_floating_point< double >

template<>
bool dx::is_floating_point< double > = true
inlineconstexpr

◆ is_floating_point< float >

template<>
bool dx::is_floating_point< float > = true
inlineconstexpr

◆ is_floating_point< long double >

template<>
bool dx::is_floating_point< long double > = true
inlineconstexpr

◆ is_initializer_list_v

template<typename type_t>
bool dx::is_initializer_list_v = is_initializer_list<type_t>::value
inlineconstexpr

◆ is_integral

template<typename>
bool dx::is_integral = false
constexpr

◆ is_integral< int16_t >

template<>
bool dx::is_integral< int16_t > = true
inlineconstexpr

◆ is_integral< int32_t >

template<>
bool dx::is_integral< int32_t > = true
inlineconstexpr

◆ is_integral< int64_t >

template<>
bool dx::is_integral< int64_t > = true
inlineconstexpr

◆ is_integral< int8_t >

template<>
bool dx::is_integral< int8_t > = true
inlineconstexpr

◆ is_pointer

template<typename>
bool dx::is_pointer = false
constexpr

◆ is_pointer< type_t * >

template<typename type_t>
bool dx::is_pointer< type_t * > = true
constexpr

◆ is_smart_pointer_v

template<typename type_t>
bool dx::is_smart_pointer_v = is_smart_pointer<type_t>::value
inlineconstexpr

◆ is_string_container_v

template<typename type_t>
bool dx::is_string_container_v = is_string_container<type_t>::value
inlineconstexpr

(c) copyright 2009 dynamic acoustics e.U. generated on

a closed source license may be obtained by requesting a written permission from dynamic acoustics e.U.
however - governmental use generally and military use especially is strictly prohibited though.