OpenDDS  Snapshot(2023/04/28-20:55)
Public Types | Static Public Member Functions | Static Public Attributes | List of all members
OpenDDS::SafetyProfile::VariEltPolicy< T > Struct Template Reference

#include <SafetyProfileSequence.h>

Public Types

typedef T & Element
 
typedef const T & ConstElement
 
typedef T ConstRawElement
 

Static Public Member Functions

static T & make_element (T &elt, seq_flag_type)
 
static void construct (T *buffer, seq_size_type n, seq_flag_type cookie)
 
static void copy_n (const T *input, seq_size_type n, T *output)
 
static void move_n (T *in, seq_size_type n, T *out)
 
static void reset_n (T *buffer, seq_size_type n)
 
static T * destroy (T *buffer, seq_size_type n)
 

Static Public Attributes

static const seq_size_type extra = 1
 

Detailed Description

template<typename T>
struct OpenDDS::SafetyProfile::VariEltPolicy< T >

Element Policy for sequence elements that are IDL "variable-length" types except for strings and arrays, which are handled separately.

Template Parameters
Telement type of the sequence

Definition at line 110 of file SafetyProfileSequence.h.

Member Typedef Documentation

◆ ConstElement

template<typename T >
typedef const T& OpenDDS::SafetyProfile::VariEltPolicy< T >::ConstElement

Definition at line 112 of file SafetyProfileSequence.h.

◆ ConstRawElement

template<typename T >
typedef T OpenDDS::SafetyProfile::VariEltPolicy< T >::ConstRawElement

Definition at line 113 of file SafetyProfileSequence.h.

◆ Element

template<typename T >
typedef T& OpenDDS::SafetyProfile::VariEltPolicy< T >::Element

Definition at line 111 of file SafetyProfileSequence.h.

Member Function Documentation

◆ construct()

template<typename T >
void OpenDDS::SafetyProfile::VariEltPolicy< T >::construct ( T *  buffer,
seq_size_type  n,
seq_flag_type  cookie 
)
inlinestatic

Definition at line 426 of file SafetyProfileSequence.h.

428  {
429  std::uninitialized_fill_n(buffer + use_cookie, n, T());
430  if (use_cookie) {
431  *reinterpret_cast<seq_size_type*>(buffer) = n;
432  }
433  }

◆ copy_n()

template<typename T >
void OpenDDS::SafetyProfile::VariEltPolicy< T >::copy_n ( const T *  input,
seq_size_type  n,
T *  output 
)
inlinestatic

Definition at line 436 of file SafetyProfileSequence.h.

References OpenDDS::XTypes::copy().

437  {
438  std::copy(in, in + n, out);
439  }
DDS::ReturnCode_t copy(DDS::DynamicData_ptr dest, DDS::DynamicData_ptr src)

◆ destroy()

template<typename T >
T * OpenDDS::SafetyProfile::VariEltPolicy< T >::destroy ( T *  buffer,
seq_size_type  n 
)
inlinestatic

Definition at line 454 of file SafetyProfileSequence.h.

455  {
456  seq_size_type n = n_or_int_max;
457  T* allocated = buffer;
458 
459  if (n_or_int_max == INT_MAX) {
460  allocated = buffer - 1;
461  n = *reinterpret_cast<seq_size_type*>(allocated);
462  }
463 
464  for (seq_size_type i = 0; i < n; ++i) {
465  buffer[i].~T();
466  }
467 
468  return allocated;
469  }

◆ make_element()

template<typename T >
static T& OpenDDS::SafetyProfile::VariEltPolicy< T >::make_element ( T &  elt,
seq_flag_type   
)
inlinestatic

Definition at line 115 of file SafetyProfileSequence.h.

115 { return elt; }

◆ move_n()

template<typename T >
void OpenDDS::SafetyProfile::VariEltPolicy< T >::move_n ( T *  in,
seq_size_type  n,
T *  out 
)
inlinestatic

Definition at line 442 of file SafetyProfileSequence.h.

443  {
444  std::swap_ranges(in, in + n, out);
445  }

◆ reset_n()

template<typename T >
void OpenDDS::SafetyProfile::VariEltPolicy< T >::reset_n ( T *  buffer,
seq_size_type  n 
)
inlinestatic

Definition at line 448 of file SafetyProfileSequence.h.

449  {
450  std::fill_n(buffer, n, T());
451  }

Member Data Documentation

◆ extra

template<typename T >
const seq_size_type OpenDDS::SafetyProfile::VariEltPolicy< T >::extra = 1
static

Definition at line 114 of file SafetyProfileSequence.h.


The documentation for this struct was generated from the following file: