LLVM  8.0.1
Classes | Namespaces | Typedefs | Enumerations | Functions
Endian.h File Reference
#include "llvm/Support/AlignOf.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Host.h"
#include "llvm/Support/SwapByteOrder.h"
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <type_traits>
Include dependency graph for Endian.h:

Go to the source code of this file.

Classes

struct  llvm::support::detail::PickAlignment< T, alignment >
 ::value is either alignment, or alignof(T) if alignment is 0. More...
 
struct  llvm::support::detail::packed_endian_specific_integral< value_type, endian, alignment >
 
struct  llvm::support::detail::packed_endian_specific_integral< value_type, endian, alignment >::ref
 

Namespaces

 llvm
 This class represents lattice values for constants.
 
 llvm::support
 
 llvm::support::detail
 
 llvm::support::endian
 

Typedefs

template<typename value_type >
using llvm::support::endian::make_unsigned_t = typename std::make_unsigned< value_type >::type
 
using llvm::support::ulittle16_t = detail::packed_endian_specific_integral< uint16_t, little, unaligned >
 
using llvm::support::ulittle32_t = detail::packed_endian_specific_integral< uint32_t, little, unaligned >
 
using llvm::support::ulittle64_t = detail::packed_endian_specific_integral< uint64_t, little, unaligned >
 
using llvm::support::little16_t = detail::packed_endian_specific_integral< int16_t, little, unaligned >
 
using llvm::support::little32_t = detail::packed_endian_specific_integral< int32_t, little, unaligned >
 
using llvm::support::little64_t = detail::packed_endian_specific_integral< int64_t, little, unaligned >
 
using llvm::support::aligned_ulittle16_t = detail::packed_endian_specific_integral< uint16_t, little, aligned >
 
using llvm::support::aligned_ulittle32_t = detail::packed_endian_specific_integral< uint32_t, little, aligned >
 
using llvm::support::aligned_ulittle64_t = detail::packed_endian_specific_integral< uint64_t, little, aligned >
 
using llvm::support::aligned_little16_t = detail::packed_endian_specific_integral< int16_t, little, aligned >
 
using llvm::support::aligned_little32_t = detail::packed_endian_specific_integral< int32_t, little, aligned >
 
using llvm::support::aligned_little64_t = detail::packed_endian_specific_integral< int64_t, little, aligned >
 
using llvm::support::ubig16_t = detail::packed_endian_specific_integral< uint16_t, big, unaligned >
 
using llvm::support::ubig32_t = detail::packed_endian_specific_integral< uint32_t, big, unaligned >
 
using llvm::support::ubig64_t = detail::packed_endian_specific_integral< uint64_t, big, unaligned >
 
using llvm::support::big16_t = detail::packed_endian_specific_integral< int16_t, big, unaligned >
 
using llvm::support::big32_t = detail::packed_endian_specific_integral< int32_t, big, unaligned >
 
using llvm::support::big64_t = detail::packed_endian_specific_integral< int64_t, big, unaligned >
 
using llvm::support::aligned_ubig16_t = detail::packed_endian_specific_integral< uint16_t, big, aligned >
 
using llvm::support::aligned_ubig32_t = detail::packed_endian_specific_integral< uint32_t, big, aligned >
 
using llvm::support::aligned_ubig64_t = detail::packed_endian_specific_integral< uint64_t, big, aligned >
 
using llvm::support::aligned_big16_t = detail::packed_endian_specific_integral< int16_t, big, aligned >
 
using llvm::support::aligned_big32_t = detail::packed_endian_specific_integral< int32_t, big, aligned >
 
using llvm::support::aligned_big64_t = detail::packed_endian_specific_integral< int64_t, big, aligned >
 
using llvm::support::unaligned_uint16_t = detail::packed_endian_specific_integral< uint16_t, native, unaligned >
 
using llvm::support::unaligned_uint32_t = detail::packed_endian_specific_integral< uint32_t, native, unaligned >
 
using llvm::support::unaligned_uint64_t = detail::packed_endian_specific_integral< uint64_t, native, unaligned >
 
using llvm::support::unaligned_int16_t = detail::packed_endian_specific_integral< int16_t, native, unaligned >
 
using llvm::support::unaligned_int32_t = detail::packed_endian_specific_integral< int32_t, native, unaligned >
 
using llvm::support::unaligned_int64_t = detail::packed_endian_specific_integral< int64_t, native, unaligned >
 

Enumerations

enum  llvm::support::endianness { llvm::support::big, llvm::support::little, llvm::support::native }
 
enum  { llvm::support::aligned = 0, llvm::support::unaligned = 1 }
 

Functions

constexpr endianness llvm::support::endian::system_endianness ()
 
template<typename value_type >
value_type llvm::support::endian::byte_swap (value_type value, endianness endian)
 
template<typename value_type , endianness endian>
value_type llvm::support::endian::byte_swap (value_type value)
 Swap the bytes of value to match the given endianness. More...
 
template<typename value_type , std::size_t alignment>
value_type llvm::support::endian::read (const void *memory, endianness endian)
 Read a value of a particular endianness from memory. More...
 
template<typename value_type , endianness endian, std::size_t alignment>
value_type llvm::support::endian::read (const void *memory)
 
template<typename value_type , std::size_t alignment, typename CharT >
value_type llvm::support::endian::readNext (const CharT *&memory, endianness endian)
 Read a value of a particular endianness from a buffer, and increment the buffer past that value. More...
 
template<typename value_type , endianness endian, std::size_t alignment, typename CharT >
value_type llvm::support::endian::readNext (const CharT *&memory)
 
template<typename value_type , std::size_t alignment>
void llvm::support::endian::write (void *memory, value_type value, endianness endian)
 Write a value to memory with a particular endianness. More...
 
template<typename value_type , endianness endian, std::size_t alignment>
void llvm::support::endian::write (void *memory, value_type value)
 
template<typename value_type , endianness endian, std::size_t alignment>
value_type llvm::support::endian::readAtBitAlignment (const void *memory, uint64_t startBit)
 Read a value of a particular endianness from memory, for a location that starts at the given bit offset within the first byte. More...
 
template<typename value_type , endianness endian, std::size_t alignment>
void llvm::support::endian::writeAtBitAlignment (void *memory, value_type value, uint64_t startBit)
 Write a value to memory with a particular endianness, for a location that starts at the given bit offset within the first byte. More...
 
template<typename T >
T llvm::support::endian::read (const void *P, endianness E)
 
template<typename T , endianness E>
T llvm::support::endian::read (const void *P)
 
uint16_t llvm::support::endian::read16 (const void *P, endianness E)
 
uint32_t llvm::support::endian::read32 (const void *P, endianness E)
 
uint64_t llvm::support::endian::read64 (const void *P, endianness E)
 
template<endianness E>
uint16_t llvm::support::endian::read16 (const void *P)
 
template<endianness E>
uint32_t llvm::support::endian::read32 (const void *P)
 
template<endianness E>
uint64_t llvm::support::endian::read64 (const void *P)
 
uint16_t llvm::support::endian::read16le (const void *P)
 
uint32_t llvm::support::endian::read32le (const void *P)
 
uint64_t llvm::support::endian::read64le (const void *P)
 
uint16_t llvm::support::endian::read16be (const void *P)
 
uint32_t llvm::support::endian::read32be (const void *P)
 
uint64_t llvm::support::endian::read64be (const void *P)
 
template<typename T >
void llvm::support::endian::write (void *P, T V, endianness E)
 
template<typename T , endianness E>
void llvm::support::endian::write (void *P, T V)
 
void llvm::support::endian::write16 (void *P, uint16_t V, endianness E)
 
void llvm::support::endian::write32 (void *P, uint32_t V, endianness E)
 
void llvm::support::endian::write64 (void *P, uint64_t V, endianness E)
 
template<endianness E>
void llvm::support::endian::write16 (void *P, uint16_t V)
 
template<endianness E>
void llvm::support::endian::write32 (void *P, uint32_t V)
 
template<endianness E>
void llvm::support::endian::write64 (void *P, uint64_t V)
 
void llvm::support::endian::write16le (void *P, uint16_t V)
 
void llvm::support::endian::write32le (void *P, uint32_t V)
 
void llvm::support::endian::write64le (void *P, uint64_t V)
 
void llvm::support::endian::write16be (void *P, uint16_t V)
 
void llvm::support::endian::write32be (void *P, uint32_t V)
 
void llvm::support::endian::write64be (void *P, uint64_t V)