OSVR-Core  0.6-1962-g59773924
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
osvr::util Namespace Reference

The Util library: Functionality not necessarily coupled to any particular core library, serving more as a common base layer behind all systems. More...

Namespaces

 container_policies
 Flags or arguments to specify what features you want ContainerWrapper to provide publicly. Pass as template args to ContainerWrapper to request a feature.
 
 eigen_interop
 
 filters
 Filters for use with Eigen datatypes.
 
 messagekeys
 Contains methods to retrieve the constant strings identifying message or sender types.
 
 time
 Functionality related to time and the OSVR_TimeValue abstraction.Note that this is for C API-bordering areas. For purely C++ code, please use std::chrono for your time needs.
 
 tree
 Contains a generic tree. This namespace exists to assist in argument-dependent lookup with tree-related nonmembers, the class template TreeNode is imported into the parent namespace.
 
 typesafeid_traits
 Namespace for traits templates associated with ::osvr::util::TypeSafeId.
 
 unique_container_policies
 Policies controlling behavior of UniqueContainer.
 

Classes

class  AlignedAllocDeleter
 Deleter class matching alignedAlloc. More...
 
class  AnyMap
 A data structure storing "any" by name, to reduce coupling. More...
 
class  BasicKeyedOwnershipContainer
 Holds on to smart pointers by value, and lets you free them by providing the corresponding void *. More...
 
class  CallbackWrapper
 A class template turning a callback with some number of arguments, with a userdata pointer last, into a function object. More...
 
class  CellGroupProxy
 
struct  Conditional
 Quick C++11-aligned conditional (if/then/elese) implementation. More...
 
class  CSV
 
class  CSVBase
 
class  DefaultBool
 A class template primarily useful for flags, that has a defined value at default initialization. More...
 
class  Deletable
 Base class for objects that just need to be generically deletable. More...
 
struct  EnableIf
 Quick C++11-aligned enable_if implementation. More...
 
class  FinalTask
 
class  Flag
 A class that lightly wraps a bool, in order to provide easier maintenance of a "dirty" flag, for example, with sensible default initialization and no short-circuiting. More...
 
struct  GenericCaller
 Struct containing a single static function member named "call" that serves as a converter from a function call with an opaque userdata pointer to a functor call using the userdata pointer as "this". More...
 
class  GuardInterface
 An interface to a (deferred) guard class: after instantiation and lock returning true, some resource is locked and available until destruction. More...
 
struct  HashIdAggregate
 
class  IndentingStream
 A boost::iostreams::filtering_ostream with a constructor that automatically sets it up to indent the first character after a newline the given number of spaces and forward the output to a std::ostream. More...
 
class  NumberTypeData
 Runtime data on numeric types. More...
 
class  PointerWrapper
 A wrapper to easily define structures that exist just to hold a pointer. More...
 
class  ResourcePath
 Class representing a host and resource path in the OSVR logical system. More...
 
class  StreamCSV
 
class  StringBufferBuilder
 A utility class to adapt APIs that first provide a length, then place a string in a user-allocated buffer, to nearly transparently handle the buffer and convert into a std::string. More...
 
struct  this_first_t
 Tag type indicating the first parameter of the function contains the "this" pointer. More...
 
struct  this_last_t
 Tag type indicating the last parameter of the function contains the "this" pointer. More...
 
class  TypeSafeIdBase
 A generic typesafe (as long as you use differing tag types) wrapper for identifiers (typically integers). More...
 
class  UniqueContainer
 A "Unique Container" designed for composition, not inheritance. More...
 
class  UniqueContainerBase
 A policy-based generic "Unique Container", that wraps ContainerWrapper (and thus an underlying container) with set-like semantics/invariant: at most one instance of a value is in the container at a time. More...
 
class  ValueOrRange
 Class providing a unified container-like interface to either a single value or a range of integers. More...
 

Typedefs

template<typename System , typename Y = double>
using AngleGeneric = boost::units::quantity< boost::units::unit< boost::units::plane_angle_dimension, System >, Y >
 Convenience template alias for a plane_angle quantity in an arbitrary system with arbitrary scalar.
 
template<typename Y >
using AngleRadians = boost::units::quantity< boost::units::si::plane_angle, Y >
 Alias for an angle in radians with arbitrary scalar type.
 
template<typename Y >
using AngleDegrees = boost::units::quantity< boost::units::degree::plane_angle, Y >
 Alias for an angle in degrees with arbitrary scalar type.
 
typedef AngleRadiansd Angle
 Default angle type.
 
template<typename Container , typename... Args>
using ContainerWrapper = detail::ContainerWrapper_t< Container, Args...>
 Parent class to inherit from to get a container with some functionality exposed. More...
 
template<std::size_t minBytes, bool isSigned = false>
using sized_int_t = typename detail::sized_int< minBytes, isSigned >::type
 
typedef shared_ptr< DeletableDeletablePtr
 Shared-ownership smart pointer to a Deletable.
 
typedef ::std::vector
< DeletablePtr
DeletableList
 Vector of shared-ownership smart pointers.
 

Enumerations

enum  { DefaultOSVRPort = 3883 }
 
enum  { , OmitAppendingPort = -2 }
 

Functions

void * alignedAlloc (size_t bytes, size_t alignment=OSVR_DEFAULT_ALIGN_SIZE)
 Aligned allocation function, gives a pointer to a block of memory aligned to a memory boundary.
 
void alignedFree (void *p)
 Aligned deallocation function, uses the pointer to the original memory block to deallocate it.
 
template<typename System , typename Y >
getRadians (AngleGeneric< System, Y > const angle)
 Get the raw scalar value of your angle in radians.
 
template<typename System , typename Y >
getDegrees (AngleGeneric< System, Y > const angle)
 Get the raw scalar value of your angle in degrees.
 
std::string getBinaryLocation ()
 
template<typename T >
detail::Cell< T > cell (const char *header, T const &data)
 Helper free function to make a CSV cell.
 
template<typename T >
detail::Cell< T > cell (std::string const &header, T const &data)
 Helper free function to make a CSV cell.
 
template<typename RowProxyType , typename GroupTag , typename... CellArgs>
CellGroupProxy< RowProxyType,
GroupTag > & 
operator<< (CellGroupProxy< RowProxyType, GroupTag > &group, detail::Cell< CellArgs...> &&currentCell)
 
template<typename T >
detail::CellGroup< T > cellGroup (const char *groupHeader, T const &data)
 Helper function to create a cell group with a group header prefix.
 
template<typename T >
detail::CellGroup< T, std::string > cellGroup (std::string const &groupHeader, T const &data)
 Helper function to create a cell group with a group header prefix.
 
template<typename Tag , typename T >
detail::CellGroup< T, const
char *, Tag > 
cellGroup (const char *groupHeader, T const &data, Tag *=static_cast< Tag * >(nullptr))
 
template<typename Tag , typename T >
detail::CellGroup< T,
std::string, Tag > 
cellGroup (std::string const &groupHeader, T const &data, Tag *=static_cast< Tag * >(nullptr))
 
template<typename T >
detail::CellGroup< T > cellGroup (T const &data)
 
template<typename Tag , typename T >
detail::CellGroup< T, const
char *, Tag > 
cellGroup (T const &data, Tag *=static_cast< Tag * >(nullptr))
 
template<typename Derived >
detail::SameLayoutVector
< 4, Derived > 
makeHomogeneousPoint (Eigen::MatrixBase< Derived > const &vec)
 Makes a 3D vector into a 4D homogeneous point, with the same options (scalar, row vs col vector) as the input.
 
template<typename Derived >
detail::SameLayoutVector
< 4, Derived > 
makeHomogeneousVector (Eigen::MatrixBase< Derived > const &vec)
 Makes a 3D vector into a 4D homogeneous vector, with the same options (scalar, row vs col vector) as the input.
 
template<typename Derived >
detail::SameLayoutVector
< 3, Derived > 
extractPoint (Eigen::MatrixBase< Derived > const &homogenous)
 Pulls the 3D point or vector from a 4D vec, performing division by w if it is nonzero.
 
template<typename Derived1 , typename Derived2 >
Isometry3< typename
Derived1::Scalar > 
makeIsometry (Eigen::MatrixBase< Derived1 > const &translation, Eigen::RotationBase< Derived2, 3 > const &rotation)
 A simpler, functional-style alternative to .fromPositionOrientationScale when no scaling is performed.
 
Eigen::Map< Eigen::Vector3d > vecMap (OSVR_Vec3 &vec)
 Wrap an OSVR_Vec3 in an Eigen object that allows it to interoperate with Eigen as though it were an Eigen::Vector3d. More...
 
Eigen::Map< const Eigen::Vector3d > vecMap (OSVR_Vec3 const &vec)
 
Eigen::Quaterniond fromQuat (OSVR_Quaternion const &q)
 Convert an OSVR_Quaternion to an Eigen::Quaterniond.
 
void toQuat (Eigen::Quaterniond const &src, OSVR_Quaternion &q)
 Convert an Eigen::Quaterniond to a OSVR_Quaternion.
 
Eigen::Isometry3d fromPose (OSVR_Pose3 const &pose)
 Turn an OSVR_Pose3 into an Eigen::Transform. More...
 
void toPose (Eigen::Isometry3d const &xform, OSVR_Pose3 &pose)
 Turn an Eigen::Isometry3d (transform) into an OSVR_Pose3. More...
 
void toPose (Eigen::Matrix4d const &mat, OSVR_Pose3 &pose)
 Turn an Eigen::Matrix4d (transform) into an OSVR_Pose3. More...
 
template<typename T >
auto extractYaw (T const &quat) -> decltype(std::atan(quat.w()))
 
template<typename F >
FinalTask< F > finally (F &&f)
 
template<typename F >
FinalTask< F > finally (F const &f)
 
template<typename FunctionPtr , typename FunctionObjectType , typename ThisLocation >
FunctionPtr getCaller ()
 Get a generic functor caller: a pointer to a function that will call an object of your specific function object type, expecting the function object address passed as a void * as a parameter. More...
 
template<typename FunctionPtr , typename FunctionObjectType , typename ThisLocation >
FunctionPtr getCaller (ThisLocation const &)
 Get a generic functor caller. Specify the location of "this" through the argument: results in automatic type deduction for ThisLocation. More...
 
template<typename FunctionPtr , typename FunctionObjectType , typename ThisLocation >
FunctionPtr getCaller (FunctionObjectType const *, ThisLocation const &)
 Get a generic functor caller. Pass a pointer to a function object and specify the location of "this" through the argument: results in automatic type deduction for FunctionObjectType and ThisLocation. More...
 
template<typename T >
void generic_deleter (void *obj)
 Generic deleter function, wrapping the stock delete call. More...
 
boost::optional< std::string > getEnvironmentVariable (std::string const &var)
 Gets an environment variable's value. On systems that don't distinguish between having a variable defined and having it non-empty (like Windows), empty will imply not defined and thus an empty boost::optional return value.
 
template<typename Scalar , typename T >
void matrixEigenAssign (T const &src, OSVR_MatrixConventions flags, Scalar *dest)
 Helper function template to assign/convert matrices as required. More...
 
template<typename Functor >
bool opencvTypeDispatch (int openCVType, Functor &f)
 Given an OpenCV type depth and a reference to a functor, calls that functor with a single parameter: the corresponding type wrapped in boost::mpl::identity. More...
 
int cvTypeFromData (bool isSigned, bool isFloat, size_t depth)
 Computes the OpenCV "type" (also known as depth - as in CV_8U) for a given combination of signed, float, and byte depth.
 
int computeOpenCVMatType (OSVR_ImagingMetadata const &metadata)
 Computes the OpenCV matrix type (as in CV_8UC3) from a metadata struct.
 
std::pair< std::string,
std::string > 
convertProgramOptionShowHideIntoTrueFalse (std::string s)
 An "additional parser" for Boost.Program_options that will turn any –hide-xyz into –xyz false and –show-xyz into –xyz true.
 
Eigen::Matrix4d createProjectionMatrix (Rectd const &bounds, double near, double far)
 Takes in points at the near clipping plane, as well as the near and far clipping planes. Result matrix maps [l, r] and [b, t] to [-1, 1], and [n, f] to [-1, 1] (should be configurable) More...
 
template<projection_options::OptionType options = projection_options::ZOutputSigned | projection_options::RightHandedInput>
Eigen::Matrix4d parameterizedCreateProjectionMatrix (Rectd const &bounds, double near, double far)
 Takes in points at the near clipping plane, as well as the near and far clipping planes. Result matrix maps [l, r] and [b, t] to [-1, 1], and [n, f] to [-1, 1] or [0, 1] depending on presence/absence of ZOutputUnsigned flag bit, taking in right- or left-handed input also as configured.
 
template<typename System >
Rectd computeSymmetricFOVRect (AngleGeneric< System > hFov, AngleGeneric< System > vFov)
 Compute a rectangle at unit distance for the given fov values.
 
template<typename System >
Rectd computeSymmetricFOVRect (AngleGeneric< System > hFov, AngleGeneric< System > vFov, double near)
 Compute a rectangle at the near clipping plane for the given fov values.
 
template<typename System >
Eigen::Matrix4d createSymmetricProjectionMatrix (AngleGeneric< System > hFov, AngleGeneric< System > vFov, double near, double far)
 
template<typename RangeType >
void resetPointerRange (RangeType range)
 Reset every smart pointer in a container one by one.
 
template<size_t N>
std::string makeString (const char(&arrayLiteral)[N])
 Safely and easily convert a literal array of characters (like from osvr_json_to_c) into a std::string.
 

Detailed Description

The Util library: Functionality not necessarily coupled to any particular core library, serving more as a common base layer behind all systems.

Typedef Documentation

template<typename Container , typename... Args>
using osvr::util::ContainerWrapper = typedef detail::ContainerWrapper_t<Container, Args...>

Parent class to inherit from to get a container with some functionality exposed.

Template Parameters
Containerthe underlying container you want, reference accessible via Base::container()
Args0 or more tag types from osvr::util::container_policies indicating the features you want publicly exposed

Definition at line 232 of file ContainerWrapper.h.

template<std::size_t minBytes, bool isSigned = false>
using osvr::util::sized_int_t = typedef typename detail::sized_int<minBytes, isSigned>::type

Alias providing an integer type (signed or unsigned, your choice) containing at least as many bytes as you requested.

Definition at line 80 of file SizedInt.h.

Enumeration Type Documentation

anonymous enum
Enumerator
DefaultOSVRPort 

Definition at line 42 of file DefaultPort.h.

anonymous enum
Enumerator
OmitAppendingPort 

For use when there may not actually be a port in use: some single process situations, etc.

Definition at line 43 of file PortFlags.h.

Function Documentation

std::string osvr::util::getBinaryLocation ( )

Get this binary's location, often as a step in finding the "root" and search paths.

template<typename RowProxyType , typename GroupTag , typename... CellArgs>
CellGroupProxy<RowProxyType, GroupTag>& osvr::util::operator<< ( CellGroupProxy< RowProxyType, GroupTag > &  group,
detail::Cell< CellArgs...> &&  currentCell 
)
inline

Handles user results from overloading operator<<(CellGroupProxy<RowProxyType, GroupTag> &group, TheirThing) and sending in cell calls within it.

Definition at line 73 of file CSVCellGroup.h.

template<typename Tag , typename T >
detail::CellGroup<T, const char *, Tag> osvr::util::cellGroup ( const char *  groupHeader,
T const &  data,
Tag *  = static_cast<Tag *>(nullptr) 
)
inline

Helper function to create a cell group with a group header prefix and explicit (non-default) tag.

Definition at line 175 of file CSVCellGroup.h.

template<typename Tag , typename T >
detail::CellGroup<T, std::string, Tag> osvr::util::cellGroup ( std::string const &  groupHeader,
T const &  data,
Tag *  = static_cast<Tag *>(nullptr) 
)
inline

Helper function to create a cell group with a group header prefix and explicit (non-default) tag.

Definition at line 184 of file CSVCellGroup.h.

template<typename T >
detail::CellGroup<T> osvr::util::cellGroup ( T const &  data)
inline

Helper function to create a cell group with no group header prefix - warning: column headers must be unique!

Definition at line 190 of file CSVCellGroup.h.

template<typename Tag , typename T >
detail::CellGroup<T, const char *, Tag> osvr::util::cellGroup ( T const &  data,
Tag *  = static_cast<Tag *>(nullptr) 
)
inline

Helper function to create a cell group with no group header prefix and explicit (non-default) tag - warning: column headers must be unique!

Definition at line 198 of file CSVCellGroup.h.

template<typename T >
auto osvr::util::extractYaw ( T const &  quat) -> decltype(std::atan(quat.w()))
inline

A utility function to extract "yaw" out of a quaternion, of any representation as long as it responds to .w(), .x(), .y(), and .z(). Uses atan2() internally, and the return type is automatically deduced based on the scalar type in use in your quaternion class.

Reference: http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/

Definition at line 47 of file ExtractYaw.h.

template<typename F >
FinalTask<F> osvr::util::finally ( F &&  f)
inline

Creation free function for final tasks to run on scope exit. Works great when paired with lambdas (particularly with [&] reference capture). Use like: auto f = finally([&]{ dothis(); }); to have dothis() called when f goes out of scope, no matter how.

Perfect forwarding version.

Definition at line 87 of file Finally.h.

template<typename F >
FinalTask<F> osvr::util::finally ( F const &  f)
inline

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 93 of file Finally.h.

template<typename FunctionPtr , typename FunctionObjectType , typename ThisLocation >
FunctionPtr osvr::util::getCaller ( )
inline

Get a generic functor caller: a pointer to a function that will call an object of your specific function object type, expecting the function object address passed as a void * as a parameter.

Template Parameters
FunctionPtrDesired function pointer type
FunctionObjectTypeType of your function object
ThisLocationone of this_first_t or this_last_t indicating which parameter is the "userdata" this pointer.

Function wrapper around GenericCaller.

Definition at line 259 of file GenericCaller.h.

template<typename FunctionPtr , typename FunctionObjectType , typename ThisLocation >
FunctionPtr osvr::util::getCaller ( ThisLocation const &  )
inline

Get a generic functor caller. Specify the location of "this" through the argument: results in automatic type deduction for ThisLocation.

Template Parameters
FunctionPtrDesired function pointer type
FunctionObjectTypeType of your function object

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 275 of file GenericCaller.h.

template<typename FunctionPtr , typename FunctionObjectType , typename ThisLocation >
FunctionPtr osvr::util::getCaller ( FunctionObjectType const *  ,
ThisLocation const &   
)
inline

Get a generic functor caller. Pass a pointer to a function object and specify the location of "this" through the argument: results in automatic type deduction for FunctionObjectType and ThisLocation.

Note that nothing is actually done with your function object pointer: you still need to pass it along with this function pointer as userdata.

Template Parameters
FunctionPtrDesired function pointer type

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 294 of file GenericCaller.h.

template<typename T >
void osvr::util::generic_deleter ( void *  obj)
inline

Generic deleter function, wrapping the stock delete call.

Used in header-only C++ wrappers over C APIs.

Definition at line 33 of file GenericDeleter.h.

template<typename Scalar , typename T >
void osvr::util::matrixEigenAssign ( T const &  src,
OSVR_MatrixConventions  flags,
Scalar *  dest 
)
inline

Helper function template to assign/convert matrices as required.

Handles memory ordering (transpose) and scalar type conversion automatically/based on the flags passed in.

Parameters
srcAn Eigen 4x4 fixed-size matrix or matrix expression (source)
flagsSome matrix convention flags - only the first two (the ones that affect if a transpose is needed) are observed.
destA pointer to a contiguous 16-element array (destination for the copy)

Definition at line 51 of file MatrixEigenAssign.h.

template<typename Functor >
bool osvr::util::opencvTypeDispatch ( int  openCVType,
Functor &  f 
)
inline

Given an OpenCV type depth and a reference to a functor, calls that functor with a single parameter: the corresponding type wrapped in boost::mpl::identity.

Returns
false if we couldn't recognize the OpenCV type and thus didn't call your functor.

Definition at line 54 of file OpenCVTypeDispatch.h.

Eigen::Matrix4d osvr::util::createProjectionMatrix ( Rectd const &  bounds,
double  near,
double  far 
)
inline

Takes in points at the near clipping plane, as well as the near and far clipping planes. Result matrix maps [l, r] and [b, t] to [-1, 1], and [n, f] to [-1, 1] (should be configurable)

Resulting matrix operates on Eigen::Vector4d, which are row-matrices - transpose if you want it to work on column matrices.

Definition at line 48 of file ProjectionMatrix.h.

template<typename System >
Eigen::Matrix4d osvr::util::createSymmetricProjectionMatrix ( AngleGeneric< System >  hFov,
AngleGeneric< System >  vFov,
double  near,
double  far 
)
inline

Note that because we delegate to the fully-generic projection matrix code, we'll end up computing two entries in the third column that will always be zero (and other computations may include an unnecessary addition/subtraction). But, only one place to introduce bugs.

Definition at line 81 of file ProjectionMatrixFromFOV.h.