Developer Documentation

Classes | Functions | Variables
OpenMesh::IO Namespace Reference

## Classes
class | _IOManager_
class | _OBJReader_
class | _OBJWriter_
class | _OFFReader_
class | _OFFWriter_
class | _OMReader_
class | _OMWriter_
class | _PLYReader_
class | _PLYWriter_
class | _STLReader_
class | _STLWriter_
class | _VTKWriter_
class | BaseExporter
class | BaseImporter
class | BaseReader
class | BaseWriter
struct | binary
struct | binary< BaseSkin::SkinWeights >
struct | binary< MyData >
struct | binary< MyMap >
class | ExporterT
struct | Handle2Prop
struct | Handle2Prop< T, FaceHandle >
struct | Handle2Prop< T, VertexHandle >
class | ImporterT
class | Options
| Set options for reader/writer modules. More...

## Functions
_IOManager_ & | IOManager ()
template<typename T >
size_t | store (std::ostream &_os, const T &_val, OMFormat::Chunk::Integer_Size _b, bool _swap, t_signed)
template<typename T >
size_t | store (std::ostream &_os, const T &_val, OMFormat::Chunk::Integer_Size _b, bool _swap, t_unsigned)
template<typename T >
size_t | restore (std::istream &_is, T &_val, OMFormat::Chunk::Integer_Size _b, bool _swap, t_signed)
template<typename T >
size_t | restore (std::istream &_is, T &_val, OMFormat::Chunk::Integer_Size _b, bool _swap, t_unsigned)
_OBJReader_ & | OBJReader ()
void | trimString (std::string &_string)
void | remove_duplicated_vertices (BaseImporter::VHandles &_indices)
_OFFReader_ & | OFFReader ()
_OMReader_ & | OMReader ()
_PLYReader_ & | PLYReader ()
std::string | get_property_name (std::string _string1, std::string _string2)
_PLYReader_::ValueType | get_property_type (std::string &_string1, std::string &_string2)
_STLReader_ & | STLReader ()
void | trimStdString (std::string &_string)
_OBJWriter_ & | OBJWriter ()
_OFFWriter_ & | OFFWriter ()
_OMWriter_ & | OMWriter ()
_PLYWriter_ & | PLYWriter ()
template<typename T >
const PropertyT< T > * | castProperty (const BaseProperty *_prop)
_STLWriter_ & | STLWriter ()
_VTKWriter_ & | VTKWriter ()
Mesh Reading / Writing
Option for reader and writer modules.
template<class Mesh >
bool | read_mesh (Mesh &_mesh, const std::string &_filename)
| Read a mesh from file _filename. More...
template<class Mesh >
bool | read_mesh (Mesh &_mesh, const std::string &_filename, Options &_opt, bool _clear=true)
| Read a mesh from file _filename. More...
template<class Mesh >
bool | read_mesh (Mesh &_mesh, std::istream &_is, const std::string &_ext, Options &_opt, bool _clear=true)
| Read a mesh from file open std::istream. More...
template<class Mesh >
bool | write_mesh (const Mesh &_mesh, const std::string &_filename, Options _opt=Options::Default, std::streamsize _precision=6)
| Write a mesh to the file _filename. More...
template<class Mesh >
bool | write_mesh (const Mesh &_mesh, std::ostream &_os, const std::string &_ext, Options _opt=Options::Default, std::streamsize _precision=6)
template<class Mesh >
size_t | binary_size (const Mesh &_mesh, const std::string &_ext, Options _opt=Options::Default)
| Get binary size of data. More...

## Variables
_OBJReader_ | __OBJReaderInstance
_OFFReader_ | __OFFReaderInstance
| Declare the single entity of the OFF reader.
_OMReader_ | __OMReaderInstance
| Declare the single entity of the OM reader.
_PLYReader_ | __PLYReaderInstance
| Declare the single entity of the PLY reader.
_STLReader_ | __STLReaderInstance
| Declare the single entity of the STL reader.
_OBJWriter_ | __OBJWriterinstance
| Declare the single entity of the OBJ writer.
_OFFWriter_ | __OFFWriterInstance
| Declare the single entity of the OFF writer.
_OMWriter_ | __OMWriterInstance
| Declare the single entity of the OM writer.
_PLYWriter_ | __PLYWriterInstance
| Declare the single entity of the PLY writer.
_STLWriter_ | __STLWriterInstance
_VTKWriter_ | __VTKWriterinstance
| Declare the single entity of the OBJ writer.

## Handling binary input/output.
These functions take care of swapping bytes to get the right Endian.
typedef unsigned char | uchar
typedef unsigned short | ushort
typedef unsigned long | ulong
typedef signed char | int8_t
typedef unsigned char | uint8_t
typedef short | int16_t
typedef unsigned short | uint16_t
typedef int | int32_t
typedef unsigned int | uint32_t
typedef long long | int64_t
typedef unsigned long long | uint64_t
typedef float | float32_t
typedef double | float64_t
typedef uint8_t | rgb_t[3]
typedef uint8_t | rgba_t[4]
short int | read_short (FILE *_in, bool _swap=false)
int | read_int (FILE *_in, bool _swap=false)
float | read_float (FILE *_in, bool _swap=false)
double | read_double (FILE *_in, bool _swap=false)
short int | read_short (std::istream &_in, bool _swap=false)
int | read_int (std::istream &_in, bool _swap=false)
float | read_float (std::istream &_in, bool _swap=false)
double | read_double (std::istream &_in, bool _swap=false)
void | write_short (short int _i, FILE *_out, bool _swap=false)
void | write_int (int _i, FILE *_out, bool _swap=false)
void | write_float (float _f, FILE *_out, bool _swap=false)
void | write_double (double _d, FILE *_out, bool _swap=false)
void | write_short (short int _i, std::ostream &_out, bool _swap=false)
void | write_int (int _i, std::ostream &_out, bool _swap=false)
void | write_float (float _f, std::ostream &_out, bool _swap=false)
void | write_double (double _d, std::ostream &_out, bool _swap=false)
template<size_t N>
void | _reverse_byte_order_N (uint8_t *_val)
template<>
void | _reverse_byte_order_N< 1 > (uint8_t *)
template<>
void | _reverse_byte_order_N< 2 > (uint8_t *_val)
template<>
void | _reverse_byte_order_N< 4 > (uint8_t *_val)
template<>
void | _reverse_byte_order_N< 8 > (uint8_t *_val)
template<>
void | _reverse_byte_order_N< 12 > (uint8_t *_val)
template<>
void | _reverse_byte_order_N< 16 > (uint8_t *_val)
template<typename T >
T * | reverse_byte_order (T *t)
void | compile_time_error__no_fundamental_type ()
template<typename T >
T & | reverse_byte_order (T &_t)
template<>
bool & | reverse_byte_order (bool &_t)
template<>
char & | reverse_byte_order (char &_t)
template<>
uchar & | reverse_byte_order (uchar &_t)
template<typename T >
T | reverse_byte_order (const T &a)
template<typename T >
bool | is_streamable (void)
template<typename T >
bool | is_streamable (const T &)
template<typename T >
size_t | size_of (const T &_v)
template<typename T >
size_t | size_of (void)
template<typename T >
size_t | store (std::ostream &_os, const T &_v, bool _swap=false)
template<typename T >
size_t | restore (std::istream &_is, T &_v, bool _swap=false)

## Detailed Description

This namespace contains functions for reading and writing polygonal meshes and a list of supported file formats.

## Typedef Documentation

## ◆ float32_t

typedef float OpenMesh::IO::float32_t

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 92 of file SR_types.hh.

## ◆ float64_t

typedef double OpenMesh::IO::float64_t

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 93 of file SR_types.hh.

## ◆ int16_t

typedef short OpenMesh::IO::int16_t

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 81 of file SR_types.hh.

## ◆ int32_t

typedef int OpenMesh::IO::int32_t

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 85 of file SR_types.hh.

## ◆ int64_t

typedef long long OpenMesh::IO::int64_t

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 89 of file SR_types.hh.

## ◆ int8_t

typedef signed char OpenMesh::IO::int8_t

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 80 of file SR_types.hh.

## ◆ rgb_t

typedef uint8_t OpenMesh::IO::rgb_t[3]

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 95 of file SR_types.hh.

## ◆ rgba_t

typedef uint8_t OpenMesh::IO::rgba_t[4]

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 96 of file SR_types.hh.

## ◆ uchar

typedef unsigned char OpenMesh::IO::uchar

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 76 of file SR_types.hh.

## ◆ uint16_t

typedef unsigned short OpenMesh::IO::uint16_t

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 81 of file SR_types.hh.

## ◆ uint32_t

typedef unsigned int OpenMesh::IO::uint32_t

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 85 of file SR_types.hh.

## ◆ uint64_t

typedef unsigned long long OpenMesh::IO::uint64_t

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 89 of file SR_types.hh.

## ◆ uint8_t

typedef unsigned char OpenMesh::IO::uint8_t

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 80 of file SR_types.hh.

## ◆ ulong

typedef unsigned long OpenMesh::IO::ulong

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 78 of file SR_types.hh.

## ◆ ushort

typedef unsigned short OpenMesh::IO::ushort

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 77 of file SR_types.hh.

## Function Documentation

## ◆ _reverse_byte_order_N()

template<size_t N>

void OpenMesh::IO::_reverse_byte_order_N | ( | uint8_t * | _val | ) |
| inline

this does not compile for g++3.4 and higher, hence we comment the function body which will result in a linker error

## ◆ _reverse_byte_order_N< 1 >()

template<>

void OpenMesh::IO::_reverse_byte_order_N< 1 > | ( | uint8_t * |  | ) |
| inline

this does not compile for g++3.4 and higher, hence we comment the function body which will result in a linker error

Definition at line 95 of file SR_rbo.hh.

## ◆ _reverse_byte_order_N< 12 >()

template<>

void OpenMesh::IO::_reverse_byte_order_N< 12 > | ( | uint8_t * | _val | ) |
| inline

this does not compile for g++3.4 and higher, hence we comment the function body which will result in a linker error

Definition at line 124 of file SR_rbo.hh.

## ◆ _reverse_byte_order_N< 16 >()

template<>

void OpenMesh::IO::_reverse_byte_order_N< 16 > | ( | uint8_t * | _val | ) |
| inline

this does not compile for g++3.4 and higher, hence we comment the function body which will result in a linker error

Definition at line 136 of file SR_rbo.hh.

## ◆ _reverse_byte_order_N< 2 >()

template<>

void OpenMesh::IO::_reverse_byte_order_N< 2 > | ( | uint8_t * | _val | ) |
| inline

this does not compile for g++3.4 and higher, hence we comment the function body which will result in a linker error

Definition at line 99 of file SR_rbo.hh.

## ◆ _reverse_byte_order_N< 4 >()

template<>

void OpenMesh::IO::_reverse_byte_order_N< 4 > | ( | uint8_t * | _val | ) |
| inline

this does not compile for g++3.4 and higher, hence we comment the function body which will result in a linker error

Definition at line 106 of file SR_rbo.hh.

## ◆ _reverse_byte_order_N< 8 >()

template<>

void OpenMesh::IO::_reverse_byte_order_N< 8 > | ( | uint8_t * | _val | ) |
| inline

this does not compile for g++3.4 and higher, hence we comment the function body which will result in a linker error

Definition at line 114 of file SR_rbo.hh.

## ◆ binary_size()

template<class Mesh >

size_t OpenMesh::IO::binary_size | ( | const Mesh & | _mesh,
|  | const std::string & | _ext,
|  | Options | _opt = `Options::Default`
| ) |  |

Get binary size of data.

This function calls the corresponding writer which calculates the size of the data that would be written to a binary file

The file format is determined by parameter _ext. _ext has to include ".[format]" in order to work properly (e.g. ".OFF")

Parameters

  _mesh | Mesh to write
  _ext | extension of the file (used to determine the writing module)
  _opt | Writer options (e.g. writing of normals ... depends on the writer capabilities)

Returns
  Binary size in bytes used when writing the data

Definition at line 268 of file MeshIO.hh.

## ◆ compile_time_error__no_fundamental_type()

void OpenMesh::IO::compile_time_error__no_fundamental_type | ( |  | ) |
| inline

this does not compile for g++3.4 and higher, hence we comment the function body which will result in a linker error

Definition at line 156 of file SR_rbo.hh.

## ◆ IOManager()

OPENMESHDLLEXPORT _IOManager_ & OpenMesh::IO::IOManager | ( |  | ) |

Declare the singleton getter function as friend to access the private constructor and destructor

Definition at line 72 of file IOManager.cc.

## ◆ is_streamable() [1/2]

template<typename T >

bool OpenMesh::IO::is_streamable | ( | void |  | ) |
| inline

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 81 of file StoreRestore.hh.

## ◆ is_streamable() [2/2]

template<typename T >

bool OpenMesh::IO::is_streamable | ( | const T & |  | ) |
| inline

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 85 of file StoreRestore.hh.

## ◆ read_double() [1/2]

double OpenMesh::IO::read_double | ( | FILE * | _in,
|  | bool | _swap = `false`
| ) |  |

Binary read a `double` from `_is` and perform byte swapping if `_swap` is true

## ◆ read_double() [2/2]

double OpenMesh::IO::read_double | ( | std::istream & | _in,
|  | bool | _swap = `false`
| ) |  |

Binary read a `double` from `_is` and perform byte swapping if `_swap` is true

## ◆ read_float() [1/2]

float OpenMesh::IO::read_float | ( | FILE * | _in,
|  | bool | _swap = `false`
| ) |  |

Binary read a `float` from `_is` and perform byte swapping if `_swap` is true

## ◆ read_float() [2/2]

float OpenMesh::IO::read_float | ( | std::istream & | _in,
|  | bool | _swap = `false`
| ) |  |

Binary read a `float` from `_is` and perform byte swapping if `_swap` is true

## ◆ read_int() [1/2]

int OpenMesh::IO::read_int | ( | FILE * | _in,
|  | bool | _swap = `false`
| ) |  |

Binary read an `int` from `_is` and perform byte swapping if `_swap` is true

## ◆ read_int() [2/2]

int OpenMesh::IO::read_int | ( | std::istream & | _in,
|  | bool | _swap = `false`
| ) |  |

Binary read an `int` from `_is` and perform byte swapping if `_swap` is true

## ◆ read_mesh() [1/3]

template<class Mesh >

bool OpenMesh::IO::read_mesh | ( | Mesh & | _mesh,
|  | const std::string & | _filename
| ) |  |

Read a mesh from file _filename.

The file format is determined by the file extension.

Note
  If you link statically against OpenMesh, you have to add the define OM_STATIC_BUILD to your application. This will ensure that readers and writers get initialized correctly.

Parameters

  _mesh | The target mesh that will be filled with the read data
  _filename | fill to load

Returns
  Successful?

Definition at line 112 of file MeshIO.hh.

## ◆ read_mesh() [2/3]

template<class Mesh >

bool OpenMesh::IO::read_mesh | ( | Mesh & | _mesh,
|  | const std::string & | _filename,
|  | Options & | _opt,
|  | bool | _clear = `true`
| ) |  |

Read a mesh from file _filename.

The file format is determined by the file extension.

Note
  If you link statically against OpenMesh, you have to add the define OM_STATIC_BUILD to your application. This will ensure that readers and writers get initialized correctly.

Parameters

  _mesh | The target mesh that will be filled with the read data
  _filename | fill to load
  _opt | Reader options (e.g. skip loading of normals ... depends on the reader capabilities). Note that simply passing an Options::Flag enum is not sufficient.
  _clear | Clear the target data before filling it (allows to load multiple files into one Mesh). If you only want to read a mesh without clearing set _clear to false. Providing a default Options object is sufficient in this case.

Returns
  Successful?

Definition at line 142 of file MeshIO.hh.

## ◆ read_mesh() [3/3]

template<class Mesh >

bool OpenMesh::IO::read_mesh | ( | Mesh & | _mesh,
|  | std::istream & | _is,
|  | const std::string & | _ext,
|  | Options & | _opt,
|  | bool | _clear = `true`
| ) |  |

Read a mesh from file open std::istream.

The file format is determined by parameter _ext. _ext has to include ".[format]" in order to work properly (e.g. ".OFF")

Note
  If you link statically against OpenMesh, you have to add the define OM_STATIC_BUILD to your application. This will ensure that readers and writers get initialized correctly.

Parameters

  _mesh | The target mesh that will be filled with the read data
  _is | stream to load the data from
  _ext | The file format that is written to the stream
  _opt | Reader options (e.g. skip loading of normals ... depends on the reader capabilities)
  _clear | Clear the target data before filling it (allows to load multiple files into one Mesh)

Returns
  Successful?

Definition at line 174 of file MeshIO.hh.

## ◆ read_short() [1/2]

short int OpenMesh::IO::read_short | ( | FILE * | _in,
|  | bool | _swap = `false`
| ) |  |

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

## ◆ read_short() [2/2]

short int OpenMesh::IO::read_short | ( | std::istream & | _in,
|  | bool | _swap = `false`
| ) |  |

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

## ◆ restore()

template<typename T >

size_t OpenMesh::IO::restore | ( | std::istream & | _is,
|  | T & | _v,
|  | bool | _swap = `false`
| ) |  |
| inline

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 101 of file StoreRestore.hh.

## ◆ reverse_byte_order() [1/6]

template<typename T >

T* OpenMesh::IO::reverse_byte_order | ( | T * | t | ) |
| inline

this does not compile for g++3.4 and higher, hence we comment the function body which will result in a linker error

## ◆ reverse_byte_order() [2/6]

template<typename T >

T& OpenMesh::IO::reverse_byte_order | ( | T & | _t | ) |

this does not compile for g++3.4 and higher, hence we comment the function body which will result in a linker error

Definition at line 164 of file SR_rbo.hh.

## ◆ reverse_byte_order() [3/6]

template<>

bool& OpenMesh::IO::reverse_byte_order | ( | bool & | _t | ) |
| inline

this does not compile for g++3.4 and higher, hence we comment the function body which will result in a linker error

Definition at line 171 of file SR_rbo.hh.

## ◆ reverse_byte_order() [4/6]

template<>

char& OpenMesh::IO::reverse_byte_order | ( | char & | _t | ) |
| inline

this does not compile for g++3.4 and higher, hence we comment the function body which will result in a linker error

Definition at line 172 of file SR_rbo.hh.

## ◆ reverse_byte_order() [5/6]

template<>

uchar& OpenMesh::IO::reverse_byte_order | ( | uchar & | _t | ) |
| inline

this does not compile for g++3.4 and higher, hence we comment the function body which will result in a linker error

Definition at line 176 of file SR_rbo.hh.

## ◆ reverse_byte_order() [6/6]

template<typename T >

T OpenMesh::IO::reverse_byte_order | ( | const T & | a | ) |
| inline

this does not compile for g++3.4 and higher, hence we comment the function body which will result in a linker error

Definition at line 235 of file SR_rbo.hh.

## ◆ size_of() [1/2]

template<typename T >

size_t OpenMesh::IO::size_of | ( | const T & | _v | ) |
| inline

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 89 of file StoreRestore.hh.

## ◆ size_of() [2/2]

template<typename T >

size_t OpenMesh::IO::size_of | ( | void |  | ) |
| inline

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 93 of file StoreRestore.hh.

## ◆ store()

template<typename T >

size_t OpenMesh::IO::store | ( | std::ostream & | _os,
|  | const T & | _v,
|  | bool | _swap = `false`
| ) |  |
| inline

Binary read a `short` from `_is` and perform byte swapping if `_swap` is true

Definition at line 97 of file StoreRestore.hh.

## ◆ write_double() [1/2]

void OpenMesh::IO::write_double | ( | double | _d,
|  | FILE * | _out,
|  | bool | _swap = `false`
| ) |  |

Binary write a `double` to `_os` and perform byte swapping if `_swap` is true

## ◆ write_double() [2/2]

void OpenMesh::IO::write_double | ( | double | _d,
|  | std::ostream & | _out,
|  | bool | _swap = `false`
| ) |  |

Binary write a `double` to `_os` and perform byte swapping if `_swap` is true

## ◆ write_float() [1/2]

void OpenMesh::IO::write_float | ( | float | _f,
|  | FILE * | _out,
|  | bool | _swap = `false`
| ) |  |

Binary write a `float` to `_os` and perform byte swapping if `_swap` is true

## ◆ write_float() [2/2]

void OpenMesh::IO::write_float | ( | float | _f,
|  | std::ostream & | _out,
|  | bool | _swap = `false`
| ) |  |

Binary write a `float` to `_os` and perform byte swapping if `_swap` is true

## ◆ write_int() [1/2]

void OpenMesh::IO::write_int | ( | int | _i,
|  | FILE * | _out,
|  | bool | _swap = `false`
| ) |  |

Binary write an `int` to `_os` and perform byte swapping if `_swap` is true

## ◆ write_int() [2/2]

void OpenMesh::IO::write_int | ( | int | _i,
|  | std::ostream & | _out,
|  | bool | _swap = `false`
| ) |  |

Binary write an `int` to `_os` and perform byte swapping if `_swap` is true

## ◆ write_mesh() [1/2]

template<class Mesh >

bool OpenMesh::IO::write_mesh | ( | const Mesh & | _mesh,
|  | const std::string & | _filename,
|  | Options | _opt = `Options::Default`,
|  | std::streamsize | _precision = `6`
| ) |  |

Write a mesh to the file _filename.

The file format is determined by _filename's extension.

Note
  If you link statically against OpenMesh, you have to add the define OM_STATIC_BUILD to your application. This will ensure that readers and writers get initialized correctly.

Parameters

  _mesh | The mesh that will be written to file
  _filename | output filename
  _opt | Writer options (e.g. writing of normals ... depends on the writer capabilities)
  _precision | specifies stream precision for ascii files

Returns
  Successful?

Definition at line 207 of file MeshIO.hh.

## ◆ write_mesh() [2/2]

template<class Mesh >

bool OpenMesh::IO::write_mesh | ( | const Mesh & | _mesh,
|  | std::ostream & | _os,
|  | const std::string & | _ext,
|  | Options | _opt = `Options::Default`,
|  | std::streamsize | _precision = `6`
| ) |  |

Write a mesh to an open std::ostream.

The file format is determined by parameter _ext. _ext has to include ".[format]" in order to work properly (e.g. ".OFF")

Note
  If you link statically against OpenMesh, you have to add the define OM_STATIC_BUILD to your application. This will ensure that readers and writers get initialized correctly.

Parameters

  _mesh | The mesh that will be written to file
  _os | output stream to write into
  _ext | extension defining the type of output
  _opt | Writer options (e.g. writing of normals ... depends on the writer capabilities)
  _precision | specifies stream precision for ascii files

Returns
  Successful?

Definition at line 239 of file MeshIO.hh.

## ◆ write_short() [1/2]

void OpenMesh::IO::write_short | ( | short int | _i,
|  | FILE * | _out,
|  | bool | _swap = `false`
| ) |  |

Binary write a `short` to `_os` and perform byte swapping if `_swap` is true

## ◆ write_short() [2/2]

void OpenMesh::IO::write_short | ( | short int | _i,
|  | std::ostream & | _out,
|  | bool | _swap = `false`
| ) |  |

Binary write a `short` to `_os` and perform byte swapping if `_swap` is true