HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
Data Structures | Concepts | Typedefs | Enumerations | Functions | Variables
v1 Namespace Reference

DOXYGEN BUG. More...

Data Structures

struct  agrapheme
 
class  alignment
 
class  animator
 A type that gets animated between two values. More...
 
class  atomic_unique_ptr
 
class  audio_block
 A block of audio data. More...
 
class  audio_channel
 
class  audio_device
 A set of audio channels which can be rendered and/or captures at the same time. More...
 
class  audio_device_asio
 
class  audio_device_delegate
 
class  audio_device_win32
 
class  audio_format_range
 
struct  audio_sample_format
 Audio sample format. More...
 
class  audio_sample_packer
 
class  audio_sample_unpacker
 
struct  audio_stream_config
 
struct  audio_stream_format
 The format of a stream of audio. More...
 
class  audio_system
 
class  audio_system_aggregate
 
class  audio_system_asio
 
class  audio_system_win32
 
struct  audio_system_win32_event
 
struct  await_resume_result
 Get the result type of an awaitable. More...
 
struct  awaitable_cast
 A functor for casting a type to an awaitable. More...
 
struct  awaitable_cast< std::chrono::duration< Rep, Period > >
 Cast a object to an directly-awaitable object. More...
 
struct  awaitable_cast< std::chrono::time_point< std::chrono::utc_clock, Duration > >
 Cast a object to an directly-awaitable object. More...
 
struct  awaitable_cast< T >
 Cast a object to an directly-awaitable object. More...
 
class  awaitable_timer
 
class  axis_aligned_rectangle
 Class which represents an axis-aligned rectangle. More...
 
class  base_n
 
struct  bezier_curve
 
struct  bezier_point
 
struct  bigint
 High performance big integer implementation. More...
 
struct  bound_integer
 Bound integer. More...
 
class  byte_char_traits
 
class  circle
 
struct  cmdline_executable
 
struct  cmdline_long_option
 
struct  cmdline_non_option
 
struct  cmdline_short_option
 
class  color
 This is a RGBA floating point color. More...
 
class  command_line
 Command line parser. More...
 
class  command_line_option
 
struct  common_integer
 Get an integer type that will fit all values from all template parameters. More...
 
struct  common_integer< L, M, R... >
 
struct  common_integer< L, R >
 
struct  common_integer< T, T >
 
struct  composed_t
 
class  const_void_span
 
struct  copy_cv
 Type-trait to copy const volitile qualifiers from one type to another. More...
 
struct  copy_cv< To, From >
 
class  corner_radii
 
class  datum
 A dynamic data type. More...
 
class  dead_lock_detector
 Dead lock detector. More...
 
class  decimal
 
class  defer
 Defer execution of a lambda to the end of the scope. More...
 
class  delayed_format
 Delayed formatting. More...
 
class  dither
 An object that create dither values to add to samples before rounding. More...
 
class  draw_context
 Draw context for drawing using the HikoGUI shaders. More...
 
class  enable_group_ptr
 Enable a class to be used in a group_ptr. More...
 
class  enable_group_ptr< T >
 
class  enable_group_ptr< T, void(Args...)>
 
struct  endian_buf_t
 
class  enum_metadata
 A object that holds enum-values and strings. More...
 
struct  enum_metadata_name
 
struct  enum_metadata_name< char * >
 
struct  enum_metadata_name< char const * >
 
struct  enum_metadata_name< char const[N]>
 
struct  enum_metadata_name< char[N]>
 
struct  fixed
 
struct  fixed_string
 A string which may be used as a none-type template parameter. More...
 
class  float16
 
class  font
 
class  font_book
 font_book keeps track of multiple fonts. More...
 
struct  font_grapheme_id
 Combined font_id + grapheme for use as a key in a std::unordered_map. More...
 
struct  font_metrics
 The metrics of a font. More...
 
class  font_variant
 A font variant is one of 16 different fonts that can be part of a family. More...
 
struct  formula_add_node
 
struct  formula_arguments
 A temporary node used during parsing. More...
 
struct  formula_assign_node
 
struct  formula_binary_operator_node
 
struct  formula_bit_and_node
 
struct  formula_bit_or_node
 
struct  formula_bit_xor_node
 
struct  formula_call_node
 
struct  formula_decrement_node
 
struct  formula_div_node
 
struct  formula_eq_node
 
struct  formula_evaluation_context
 
struct  formula_filter_node
 
struct  formula_ge_node
 
struct  formula_gt_node
 
struct  formula_increment_node
 
struct  formula_index_node
 
struct  formula_inplace_add_node
 
struct  formula_inplace_and_node
 
struct  formula_inplace_div_node
 
struct  formula_inplace_mod_node
 
struct  formula_inplace_mul_node
 
struct  formula_inplace_or_node
 
struct  formula_inplace_shl_node
 
struct  formula_inplace_shr_node
 
struct  formula_inplace_sub_node
 
struct  formula_inplace_xor_node
 
struct  formula_invert_node
 
struct  formula_le_node
 
struct  formula_literal_node
 
struct  formula_logical_and_node
 
struct  formula_logical_not_node
 
struct  formula_logical_or_node
 
struct  formula_lt_node
 
struct  formula_map_literal_node
 
struct  formula_member_node
 
struct  formula_minus_node
 
struct  formula_mod_node
 
struct  formula_mul_node
 
struct  formula_name_node
 
struct  formula_ne_node
 
struct  formula_node
 
struct  formula_parse_context
 
struct  formula_plus_node
 
struct  formula_post_process_context
 
struct  formula_pow_node
 
struct  formula_shl_node
 
struct  formula_shr_node
 
struct  formula_sub_node
 
struct  formula_ternary_operator_node
 
struct  formula_unary_operator_node
 
struct  formula_vector_literal_node
 
struct  forward_copy_or_ref
 
struct  forward_value
 Functor for forwarding an forwarding-reference to variable. More...
 
struct  forward_value< char const(&)[N]>
 
class  function
 
class  function< Result(Arguments...)>
 
class  function_fifo
 A fifo (First-in, Firts-out) for asynchronous calls. More...
 
class  function_timer
 A time that calls functions. More...
 
class  gap_buffer
 Gap Buffer This container is similar to a std::vector, optimized for repeated insertions and deletion at the same position. More...
 
class  generator
 A return value for a generator-function. More...
 
class  gfx_device
 
class  gfx_device_vulkan
 
struct  gfx_queue_vulkan
 
class  gfx_surface
 
class  gfx_surface_delegate
 
class  gfx_surface_delegate_vulkan
 
class  gfx_surface_vulkan
 
class  gfx_system
 Graphics system. More...
 
class  gfx_system_vulkan
 Vulkan gfx_device controller. More...
 
class  gfx_system_vulkan_macos
 
class  glyph_atlas_info
 
class  glyph_ids
 A set of glyph-ids of a font which composites into a single glyph. More...
 
struct  glyph_metrics
 
struct  grapheme
 A grapheme-cluster, what a user thinks a character is. More...
 
struct  grapheme_break_state
 
struct  graphic_path
 A path is a vector graphics object. More...
 
class  group_ptr
 A smart pointer which manages ownership as a group. More...
 
class  gui_system
 Graphics system. More...
 
class  gui_system_delegate
 
class  gui_system_win32
 
class  gui_window
 
class  gui_window_vulkan_macos
 
class  gui_window_win32
 
struct  has_add_callback
 
struct  has_floatxx
 Has an float of a specific size. More...
 
struct  has_floatxx< 32 >
 
struct  has_floatxx< 64 >
 
struct  has_intxx
 Has an signed integer of a specific size. More...
 
struct  has_intxx< 128 >
 
struct  has_intxx< 16 >
 
struct  has_intxx< 32 >
 
struct  has_intxx< 64 >
 
struct  has_intxx< 8 >
 
struct  has_uintxx
 Has an unsigned integer of a specific size. More...
 
struct  has_uintxx< 128 >
 
struct  has_uintxx< 16 >
 
struct  has_uintxx< 32 >
 
struct  has_uintxx< 64 >
 
struct  has_uintxx< 8 >
 
struct  has_value_type
 
class  hash_map
 
class  hash_map_entry
 
class  hitbox
 
class  huffman_tree
 
class  icon
 A variant of icon. More...
 
class  identity
 
class  indent
 Indentation for writing out text files. More...
 
class  int_abgr8_pack
 
struct  interval
 Interval arithmetic. More...
 
struct  is_atomic
 
struct  is_atomic< std::atomic< T > >
 
struct  is_character
 
struct  is_character< char >
 
struct  is_character< char16_t >
 
struct  is_character< char32_t >
 
struct  is_character< char8_t >
 
struct  is_character< wchar_t >
 
class  is_datum_type
 
class  is_datum_type< bool >
 
class  is_datum_type< bstring >
 
class  is_datum_type< decimal >
 
class  is_datum_type< double >
 
class  is_datum_type< long long >
 
class  is_datum_type< std::chrono::year_month_day >
 
class  is_datum_type< std::string >
 
struct  is_decayed_base_of
 
struct  is_decayed_derived_from
 
struct  is_derived_from
 
struct  is_forward_of
 Is context a form of the expected type. More...
 
struct  is_forward_of< Context, Expected * >
 
struct  is_forward_of< Context, Expected >
 
struct  is_forward_of< Context, Expected, FirstOtherExpected, OtherExpected... >
 
struct  is_forward_of< Context, group_ptr< Expected > >
 
struct  is_forward_of< Context, observer< Expected > >
 
struct  is_forward_of< Context, Result(Args...)>
 
struct  is_forward_of< Context, std::shared_ptr< Expected > >
 
struct  is_forward_of< Context, std::unique_ptr< Expected > >
 
struct  is_forward_of< Context, std::weak_ptr< Expected > >
 
struct  is_numeric
 Is a numeric. More...
 
struct  is_numeric< double >
 
struct  is_numeric< float >
 
struct  is_numeric< long double >
 
struct  is_numeric< signed char >
 
struct  is_numeric< signed int >
 
struct  is_numeric< signed long >
 
struct  is_numeric< signed long long >
 
struct  is_numeric< signed short >
 
struct  is_numeric< unsigned char >
 
struct  is_numeric< unsigned int >
 
struct  is_numeric< unsigned long >
 
struct  is_numeric< unsigned long long >
 
struct  is_numeric< unsigned short >
 
struct  is_numeric_integral
 Is a numeric integer. More...
 
struct  is_numeric_integral< bigint< T, N, S > >
 
struct  is_numeric_integral< signed char >
 
struct  is_numeric_integral< signed int >
 
struct  is_numeric_integral< signed long >
 
struct  is_numeric_integral< signed long long >
 
struct  is_numeric_integral< signed short >
 
struct  is_numeric_integral< unsigned char >
 
struct  is_numeric_integral< unsigned int >
 
struct  is_numeric_integral< unsigned long >
 
struct  is_numeric_integral< unsigned long long >
 
struct  is_numeric_integral< unsigned short >
 
struct  is_numeric_signed_integral
 Is a numeric signed integer. More...
 
struct  is_numeric_signed_integral< bigint< T, N, true > >
 
struct  is_numeric_signed_integral< signed char >
 
struct  is_numeric_signed_integral< signed int >
 
struct  is_numeric_signed_integral< signed long >
 
struct  is_numeric_signed_integral< signed long long >
 
struct  is_numeric_signed_integral< signed short >
 
struct  is_numeric_unsigned_integral
 Is a numeric unsigned integer. More...
 
struct  is_numeric_unsigned_integral< bigint< T, N, false > >
 
struct  is_numeric_unsigned_integral< unsigned char >
 
struct  is_numeric_unsigned_integral< unsigned int >
 
struct  is_numeric_unsigned_integral< unsigned long >
 
struct  is_numeric_unsigned_integral< unsigned long long >
 
struct  is_numeric_unsigned_integral< unsigned short >
 
class  iso_15924
 ISO-15924 script code. More...
 
class  iso_3166
 ISO-3166 country code. More...
 
class  iso_639
 ISO-639 language code. More...
 
class  jsonpath
 
struct  jsonpath_current
 
struct  jsonpath_descend
 
struct  jsonpath_indices
 
struct  jsonpath_names
 
struct  jsonpath_root
 
struct  jsonpath_slice
 
struct  jsonpath_wildcard
 
class  keyboard_bindings
 
class  keyboard_key
 A key in combination with modifiers. More...
 
class  label
 A label consisting of localizable text and an icon. More...
 
class  language
 
class  language_tag
 The IETF BCP 47 language tag. More...
 
struct  line_metrics
 
class  line_segment
 
class  locked_memory_allocator
 
class  long_tagged_id
 
class  loop
 
struct  make_floatxx
 Make an floating point. More...
 
struct  make_floatxx< 32 >
 
struct  make_floatxx< 64 >
 
struct  make_intmax
 
struct  make_intmax< T >
 
struct  make_intxx
 Make an signed integer. More...
 
struct  make_intxx< 128 >
 
struct  make_intxx< 16 >
 
struct  make_intxx< 32 >
 
struct  make_intxx< 64 >
 
struct  make_intxx< 8 >
 
struct  make_promote
 
struct  make_string
 type-trait to convert a character to a string type. More...
 
struct  make_string< char >
 
struct  make_string< char16_t >
 
struct  make_string< char32_t >
 
struct  make_string< char8_t >
 
struct  make_string< wchar_t >
 
struct  make_string_view
 type-trait to convert a character to a string_view type. More...
 
struct  make_string_view< char >
 
struct  make_string_view< char16_t >
 
struct  make_string_view< char32_t >
 
struct  make_string_view< char8_t >
 
struct  make_string_view< wchar_t >
 
struct  make_uintxx
 Make an unsigned integer. More...
 
struct  make_uintxx< 128 >
 
struct  make_uintxx< 16 >
 
struct  make_uintxx< 32 >
 
struct  make_uintxx< 64 >
 
struct  make_uintxx< 8 >
 
class  margins
 
class  metadata
 Metadata for a library or application. More...
 
struct  mouse_buttons
 
class  network_events
 
class  notifier
 A notifier which can be used to call a set of registered callbacks. More...
 
class  notifier< Result(Args...)>
 
struct  numeric_array
 
class  observable
 An abstract observable object. More...
 
struct  observable_msg
 
class  observable_value
 
class  observer
 A observer pointing to the whole or part of a observable. More...
 
struct  observer_decay
 A type-trait for observer arguments. More...
 
struct  observer_decay< observer< T > & >
 
struct  observer_decay< observer< T > && >
 
struct  observer_decay< observer< T > >
 
struct  observer_decay< observer< T > const & >
 
class  os_settings
 
struct  overloaded
 Helper type to turn a set of lambdas into a single overloaded type to pass to std::visit(). More...
 
class  packet
 A network message or stream buffer. More...
 
class  packet_buffer
 
struct  paged_image
 This is a image that is uploaded into the texture atlas. More...
 
class  parse_location
 
struct  parse_result
 
class  pcm_format
 
struct  pickle
 Encode and decode a type to and from a UTF-8 string. More...
 
struct  pickle< bool >
 
struct  pickle< speaker_mapping >
 
struct  pickle< std::string >
 
struct  pickle< T >
 
class  pipeline
 
class  pipeline_alpha
 
class  pipeline_box
 
class  pipeline_image
 
class  pipeline_SDF
 
class  pipeline_tone_mapper
 
class  pipeline_vulkan
 
class  pixel_map
 A 2D canvas of pixels. More...
 
class  pixel_row
 A row of pixels. More...
 
class  png
 
struct  po_translation
 
struct  po_translations
 
class  polymorphic_optional
 Polymorphic optional. More...
 
class  preferences
 user preferences. More...
 
struct  push_constants
 
class  quad
 
class  quad_color
 
class  range_map
 
class  rcu
 Read-copy-update. More...
 
class  rectangle
 A rectangle / parallelogram in 3D space. More...
 
class  recursive_iterator
 An iterator which recursively iterates through nested containers. More...
 
class  RenderDoc
 
class  results
 
struct  safe_int
 
class  scoped_buffer
 A buffer with an attached memory allocator. More...
 
class  scoped_task
 A scoped_task. More...
 
class  scoped_task< void >
 
struct  sdf_r8
 A pixel of a single channel signed distance field. More...
 
class  secure_memory_allocator
 Memory allocator which will securely clear the memory when deallocated. More...
 
class  secure_vector
 Secure vector. More...
 
class  secure_vector_base
 
class  secure_vector_base< Allocator >
 
struct  seed
 Randomly generate an object. More...
 
struct  selector
 This selector allows access to member variable by name. More...
 
struct  selector< label >
 
class  semantic_version
 
class  sfloat_rg32
 
class  sfloat_rgb32
 
class  sfloat_rgba16
 
class  sfloat_rgba32
 
class  SHA2
 
class  SHA224
 
class  SHA256
 
class  SHA384
 
class  SHA512
 
class  SHA512_224
 
class  SHA512_256
 
class  shared_state
 Shared state of an application. More...
 
class  sip_hash
 
struct  sip_hash24
 
struct  sip_hash24< char * >
 
struct  sip_hash24< std::basic_string< CharT, CharTrait > >
 
struct  sip_hash24< std::basic_string_view< CharT, CharTrait > >
 
struct  sip_hash24< std::span< T > >
 
struct  sip_hash24< wchar_t * >
 
struct  skeleton_block_node
 
struct  skeleton_break_node
 
struct  skeleton_continue_node
 
struct  skeleton_do_node
 
struct  skeleton_expression_node
 
struct  skeleton_for_node
 
struct  skeleton_function_node
 
struct  skeleton_if_node
 
struct  skeleton_node
 
struct  skeleton_parse_context
 
struct  skeleton_placeholder_node
 
struct  skeleton_return_node
 
struct  skeleton_string_node
 
struct  skeleton_top_node
 
struct  skeleton_while_node
 
class  small_map
 
class  small_vector
 
struct  smart_pointer_traits
 Smart pointer traits. More...
 
struct  smart_pointer_traits< std::shared_ptr< T > >
 
struct  smart_pointer_traits< std::unique_ptr< T > >
 
struct  smart_pointer_traits< std::weak_ptr< T > >
 
struct  smart_pointer_traits< T * >
 
struct  snorm_r8
 
class  Socketstream
 
struct  specialization_constants
 
class  srgb_abgr8_pack
 
class  stable_set
 This is a set of object with stable indices. More...
 
class  stack
 A static sized stack. More...
 
struct  swapchain_image_info
 
class  tagged_id
 
class  tagged_map
 
class  task
 Co-routine task. More...
 
struct  task_promise
 
struct  task_promise_base
 
struct  task_promise_base< void >
 
class  text
 A variant of text. More...
 
class  text_cursor
 A cursor-position in text. More...
 
class  text_selection
 
class  text_shaper
 Text shaper. More...
 
class  text_shaper_char
 
class  text_shaper_line
 
class  text_style
 
struct  text_style_impl
 
struct  text_sub_style
 
class  theme
 
class  theme_book
 theme_book keeps track of multiple themes. More...
 
class  time_stamp_count
 Since Window's 10 QueryPerformanceCounter() counts at only 10MHz which is too low to measure performance in many cases. More...
 
struct  time_stamp_utc
 Timestamp. More...
 
struct  token_t
 
class  trace
 
class  trace< Tag, 0 >
 
class  trace_base
 
class  translate
 A localizable message. More...
 
class  tree
 A tree container. More...
 
class  true_type_font
 
struct  type_documentation
 Documentation of a type. More...
 
class  uint_abgr8_pack
 
class  undo_stack
 
class  unfair_mutex_impl
 An unfair mutex This is a fast implementation of a mutex which does not fairly arbitrate between multiple blocking threads. More...
 
class  unfair_recursive_mutex
 An unfair recursive-mutex This is a fast implementation of a recursive-mutex which does not fairly arbitrate between multiple blocking threads. More...
 
class  unfair_rwmutex
 An unfair mutex This is a fast implementation of a mutex which does not fairly arbitrate between multiple blocking threads. More...
 
struct  unicode_bidi_context
 
class  unicode_description
 Description of a unicode code point. More...
 
class  unicode_mask
 A mask of unicode code-points. More...
 
struct  unorm_a2bgr10_pack
 
struct  use_first
 
struct  variant_decay
 Decays types for use as elements in std::variant. More...
 
struct  variant_decay< void >
 
class  vector_span
 
class  vector_span_iterator
 
struct  vertex
 
class  void_span
 
class  wfree_fifo
 A wait-free multiple-producer/single-consumer fifo designed for absolute performance. More...
 
class  wfree_idle_count
 Counts how many times a critical section was idle. More...
 
class  wfree_unordered_map
 
struct  wfree_unordered_map_item
 
class  when_any
 An awaitable that waits for any of the given awaitables to complete. More...
 
class  win32_device_interface
 
class  win32_wave_device
 
class  xorshift128p
 xorshift128+ More...
 

Concepts

concept  awaitable_direct
 Check if type can be directly co_await on.
 
concept  awaitable_member
 Check if type can be indirectly co_await on.
 
concept  awaitable_non_member
 Check if type can be indirectly co_await on.
 
concept  awaitable
 Check if the type can be co_awaited on after conversion with awaitable_cast.
 
concept  numeric_limited
 
concept  numeric
 
concept  numeric_integral
 
concept  numeric_signed_integral
 
concept  numeric_unsigned_integral
 
concept  arithmetic
 
concept  pointer
 
concept  reference
 
concept  lvalue_reference
 
concept  rvalue_reference
 
concept  trivially_copyable
 
concept  different_from
 
concept  base_of
 
concept  decayed_base_of
 
concept  derived_from
 
concept  decayed_derived_from
 
concept  strict_base_of
 
concept  strict_derived_from
 
concept  pre_incrementable
 
concept  pre_decrementable
 
concept  to_stringable
 
concept  from_stringable
 
concept  static_castableable
 
concept  sizeable
 
concept  scalar
 
concept  scoped_enum
 Concept for std::is_scoped_enum_v<T>.
 
concept  forward_of
 True if T is a forwarded type of Forward.
 

Typedefs

using intreg_t = int32_t
 
using uintreg_t = uint32_t
 
using os_handle = void *
 Minimum offset between two objects to avoid false sharing.
 
using file_handle = os_handle
 
template<typename T >
using awaitable_cast_t = hi_typename awaitable_cast<T>::type
 Resolve the type that is directly-awaitable.
 
template<typename T >
using await_resume_result_t = hi_typename await_resume_result<T>::type
 Get the result type of an awaitable.
 
using ubig128 = bigint<uint64_t, 2, false>
 
using big128 = bigint<uint64_t, 2, true>
 
using uuid = bigint<uint64_t, 2, false>
 
using byteptr = std::byte *
 
using cbyteptr = std::byte const *
 
using bstring = std::basic_string<std::byte, byte_char_traits>
 
using bstring_view = std::basic_string_view<std::byte, byte_char_traits>
 
using utc_nanoseconds = std::chrono::utc_time<std::chrono::nanoseconds>
 
using sys_nanoseconds = std::chrono::sys_time<std::chrono::nanoseconds>
 
using base2 = base_n<detail::base2_alphabet, 8, 1>
 
using base8 = base_n<detail::base8_alphabet, 8, 3>
 
using base16 = base_n<detail::base16_alphabet, 2, 1>
 
using base32 = base_n<detail::base32_rfc4648_alphabet, 8, 5>
 
using base32hex = base_n<detail::base32hex_rfc4648_alphabet, 8, 5>
 
using base64 = base_n<detail::base64_rfc4648_alphabet, 4, 3>
 
using base64url = base_n<detail::base64url_rfc4648_alphabet, 4, 3>
 
using base85 = base_n<detail::base85_rfc1924_alphabet, 5, 4>
 
using ascii85 = base_n<detail::base85_btoa_alphabet, 5, 4>
 
using cmdline_option = std::variant<cmline_executable, cmdline_short_option, cmdline_long_option, cmdline_argument>
 
using big_uint64_buf_t = endian_buf_t<uint64_t, std::endian::big, 1>
 
using big_uint32_buf_t = endian_buf_t<uint32_t, std::endian::big, 1>
 
using big_uint16_buf_t = endian_buf_t<uint16_t, std::endian::big, 1>
 
using big_int64_buf_t = endian_buf_t<int64_t, std::endian::big, 1>
 
using big_int32_buf_t = endian_buf_t<int32_t, std::endian::big, 1>
 
using big_int16_buf_t = endian_buf_t<int16_t, std::endian::big, 1>
 
using little_uint64_buf_t = endian_buf_t<uint64_t, std::endian::little, 1>
 
using little_uint32_buf_t = endian_buf_t<uint32_t, std::endian::little, 1>
 
using little_uint16_buf_t = endian_buf_t<uint16_t, std::endian::little, 1>
 
using little_int64_buf_t = endian_buf_t<int64_t, std::endian::little, 1>
 
using little_int32_buf_t = endian_buf_t<int32_t, std::endian::little, 1>
 
using little_int16_buf_t = endian_buf_t<int16_t, std::endian::little, 1>
 
using native_uint64_buf_t = endian_buf_t<uint64_t, std::endian::native, 1>
 
using native_uint32_buf_t = endian_buf_t<uint32_t, std::endian::native, 1>
 
using native_uint16_buf_t = endian_buf_t<uint16_t, std::endian::native, 1>
 
using native_int64_buf_t = endian_buf_t<int64_t, std::endian::native, 1>
 
using native_int32_buf_t = endian_buf_t<int32_t, std::endian::native, 1>
 
using native_int16_buf_t = endian_buf_t<int16_t, std::endian::native, 1>
 
using big_uint64_buf_at = endian_buf_t<uint64_t, std::endian::big>
 
using big_uint32_buf_at = endian_buf_t<uint32_t, std::endian::big>
 
using big_uint16_buf_at = endian_buf_t<uint16_t, std::endian::big>
 
using big_int64_buf_at = endian_buf_t<int64_t, std::endian::big>
 
using big_int32_buf_at = endian_buf_t<int32_t, std::endian::big>
 
using big_int16_buf_at = endian_buf_t<int16_t, std::endian::big>
 
using little_uint64_buf_at = endian_buf_t<uint64_t, std::endian::little>
 
using little_uint32_buf_at = endian_buf_t<uint32_t, std::endian::little>
 
using little_uint16_buf_at = endian_buf_t<uint16_t, std::endian::little>
 
using little_int64_buf_at = endian_buf_t<int64_t, std::endian::little>
 
using little_int32_buf_at = endian_buf_t<int32_t, std::endian::little>
 
using little_int16_buf_at = endian_buf_t<int16_t, std::endian::little>
 
using native_uint64_buf_at = endian_buf_t<uint64_t, std::endian::native>
 
using native_uint32_buf_at = endian_buf_t<uint32_t, std::endian::native>
 
using native_uint16_buf_at = endian_buf_t<uint16_t, std::endian::native>
 
using native_int64_buf_at = endian_buf_t<int64_t, std::endian::native>
 
using native_int32_buf_at = endian_buf_t<int32_t, std::endian::native>
 
using native_int16_buf_at = endian_buf_t<int16_t, std::endian::native>
 
template<typename T >
using enum_metadata_name_t = enum_metadata_name<T>::type
 
using money = fixed<safe_int<int64_t>, 100>
 
template<typename T >
using forward_value_t = typename forward_value<T>::type
 Get the storage type of the forward_value functor.
 
using aarectangle = axis_aligned_rectangle
 
using extent2 = geo::extent<2>
 
using extent3 = geo::extent<3>
 
using matrix2 = geo::matrix<2>
 
using matrix3 = geo::matrix<3>
 
using point2 = geo::point<2>
 
using point3 = geo::point<3>
 
using rotate2 = geo::rotate<2>
 
using rotate3 = geo::rotate<3>
 
using scale2 = geo::scale<2>
 
using scale3 = geo::scale<3>
 
using translate2 = geo::translate<2>
 
using translate3 = geo::translate<3>
 
using vector2 = geo::vector<2>
 
using vector3 = geo::vector<3>
 
using tr = translate
 
using finterval = interval<float>
 
using dinterval = interval<double>
 
using jsonpath_node
 
template<typename T >
using observer_decay_t = observer_decay<T>::type
 
using results1 = hi::results<double, 1>
 
using results2 = hi::results<double, 2>
 
using results3 = hi::results<double, 3>
 
using i8x1 = numeric_array<int8_t, 1>
 
using i8x2 = numeric_array<int8_t, 2>
 
using i8x4 = numeric_array<int8_t, 4>
 
using i8x8 = numeric_array<int8_t, 8>
 
using i8x16 = numeric_array<int8_t, 16>
 
using i8x32 = numeric_array<int8_t, 32>
 
using i8x64 = numeric_array<int8_t, 64>
 
using u8x1 = numeric_array<uint8_t, 1>
 
using u8x2 = numeric_array<uint8_t, 2>
 
using u8x4 = numeric_array<uint8_t, 4>
 
using u8x8 = numeric_array<uint8_t, 8>
 
using u8x16 = numeric_array<uint8_t, 16>
 
using u8x32 = numeric_array<uint8_t, 32>
 
using u8x64 = numeric_array<uint8_t, 64>
 
using i16x1 = numeric_array<int16_t, 1>
 
using i16x2 = numeric_array<int16_t, 2>
 
using i16x4 = numeric_array<int16_t, 4>
 
using i16x8 = numeric_array<int16_t, 8>
 
using i16x16 = numeric_array<int16_t, 16>
 
using i16x32 = numeric_array<int16_t, 32>
 
using u16x1 = numeric_array<uint16_t, 1>
 
using u16x2 = numeric_array<uint16_t, 2>
 
using u16x4 = numeric_array<uint16_t, 4>
 
using u16x8 = numeric_array<uint16_t, 8>
 
using u16x16 = numeric_array<uint16_t, 16>
 
using u16x32 = numeric_array<uint16_t, 32>
 
using f16x4 = numeric_array<float16, 4>
 
using i32x1 = numeric_array<int32_t, 1>
 
using i32x2 = numeric_array<int32_t, 2>
 
using i32x4 = numeric_array<int32_t, 4>
 
using i32x8 = numeric_array<int32_t, 8>
 
using i32x16 = numeric_array<int32_t, 16>
 
using u32x1 = numeric_array<uint32_t, 1>
 
using u32x2 = numeric_array<uint32_t, 2>
 
using u32x4 = numeric_array<uint32_t, 4>
 
using u32x8 = numeric_array<uint32_t, 8>
 
using u32x16 = numeric_array<uint32_t, 16>
 
using f32x1 = numeric_array<float, 1>
 
using f32x2 = numeric_array<float, 2>
 
using f32x4 = numeric_array<float, 4>
 
using f32x8 = numeric_array<float, 8>
 
using f32x16 = numeric_array<float, 16>
 
using i64x1 = numeric_array<int64_t, 1>
 
using i64x2 = numeric_array<int64_t, 2>
 
using i64x4 = numeric_array<int64_t, 4>
 
using i64x8 = numeric_array<int64_t, 8>
 
using u64x1 = numeric_array<uint64_t, 1>
 
using u64x2 = numeric_array<uint64_t, 2>
 
using u64x4 = numeric_array<uint64_t, 4>
 
using u64x8 = numeric_array<uint64_t, 8>
 
using f64x1 = numeric_array<double, 1>
 
using f64x2 = numeric_array<double, 2>
 
using f64x4 = numeric_array<double, 4>
 
using f64x8 = numeric_array<double, 8>
 
using sint64_t = safe_int<int64_t, on_overflow_t::Saturate>
 
using sint32_t = safe_int<int32_t, on_overflow_t::Saturate>
 
using sint16_t = safe_int<int16_t, on_overflow_t::Saturate>
 
using sint8_t = safe_int<int8_t, on_overflow_t::Saturate>
 
using suint64_t = safe_int<uint64_t, on_overflow_t::Saturate>
 
using suint32_t = safe_int<uint32_t, on_overflow_t::Saturate>
 
using suint16_t = safe_int<uint16_t, on_overflow_t::Saturate>
 
using suint8_t = safe_int<uint8_t, on_overflow_t::Saturate>
 
using aint64_t = safe_int<int64_t, on_overflow_t::Assert>
 
using aint32_t = safe_int<int32_t, on_overflow_t::Assert>
 
using aint16_t = safe_int<int16_t, on_overflow_t::Assert>
 
using aint8_t = safe_int<int8_t, on_overflow_t::Assert>
 
using auint64_t = safe_int<uint64_t, on_overflow_t::Assert>
 
using auint32_t = safe_int<uint32_t, on_overflow_t::Assert>
 
using auint16_t = safe_int<uint16_t, on_overflow_t::Assert>
 
using auint8_t = safe_int<uint8_t, on_overflow_t::Assert>
 
using tint64_t = safe_int<int64_t, on_overflow_t::Throw>
 
using tint32_t = safe_int<int32_t, on_overflow_t::Throw>
 
using tint16_t = safe_int<int16_t, on_overflow_t::Throw>
 
using tint8_t = safe_int<int8_t, on_overflow_t::Throw>
 
using tuint64_t = safe_int<uint64_t, on_overflow_t::Throw>
 
using tuint32_t = safe_int<uint32_t, on_overflow_t::Throw>
 
using tuint16_t = safe_int<uint16_t, on_overflow_t::Throw>
 
using tuint8_t = safe_int<uint8_t, on_overflow_t::Throw>
 
using xint64_t = safe_int<int64_t, on_overflow_t::Axiom>
 
using xint32_t = safe_int<int32_t, on_overflow_t::Axiom>
 
using xint16_t = safe_int<int16_t, on_overflow_t::Axiom>
 
using xint8_t = safe_int<int8_t, on_overflow_t::Axiom>
 
using xuint64_t = safe_int<uint64_t, on_overflow_t::Axiom>
 
using xuint32_t = safe_int<uint32_t, on_overflow_t::Axiom>
 
using xuint16_t = safe_int<uint16_t, on_overflow_t::Axiom>
 
using xuint8_t = safe_int<uint8_t, on_overflow_t::Axiom>
 
using _sip_hash24 = sip_hash<2, 4>
 
using int128_t = __int128_t
 
using uint128_t = unsigned __int128_t
 
using longreg_t = int64_t
 
using ulongreg_t = uint64_t
 
using agstring = std::basic_string<agrapheme>
 
using agstring_view = std::basic_string_view<agrapheme>
 
using font_family_id = tagged_id<uint16_t, "font_family_id">
 
using glyph_id = tagged_id<uint16_t, "glyph_id">
 
using thread_id = uint32_t
 
using token_vector = std::vector<hi::token_t>
 
using token_iterator = typename token_vector::iterator
 
template<typename T >
using make_string_t = typename make_string<T>::type
 type-trait to convert a character to a string type.
 
template<typename T >
using make_string_view_t = typename make_string_view<T>::type
 type-trait to convert a character to a string_view type.
 
template<typename T , typename U >
using make_promote_t = typename make_promote<T,U>::type
 
template<typename T >
using make_intmax_t = typename make_intmax<T>::type
 
template<std::size_t N>
using make_intxx_t = typename make_intxx<N>::type
 
template<std::size_t N>
using make_uintxx_t = typename make_uintxx<N>::type
 
template<std::size_t N>
using make_floatxx_t = typename make_floatxx<N>::type
 
template<std::integral L, std::integral... R>
using common_integer_t = common_integer<L, R...>::type
 Get an integer type that will fit all values from all template parameters.
 
template<typename To , typename From >
using copy_cv_t = typename copy_cv<To,From>::type
 Type-trait to copy const volatile qualifiers from one type to another.
 
template<typename First , typename Second >
using use_first_t = use_first<First,Second>
 
template<typename Context >
using forward_copy_or_ref_t = forward_copy_or_ref<Context>::type
 
template<typename T >
using variant_decay_t = variant_decay<T>::type
 
using unfair_mutex = unfair_mutex_impl<true>
 
using gstring = std::basic_string<grapheme>
 
using gstring_view = std::basic_string_view<grapheme>
 
using unicode_break_vector = std::vector<unicode_break_opportunity>
 
using unicode_break_iterator = unicode_break_vector::iterator
 
using unicode_break_const_iterator = unicode_break_vector::const_iterator
 

Enumerations

enum class  vertical_alignment : uint8_t { top = 0 , middle = 1 , bottom = 2 }
 Vertical alignment. More...
 
enum class  horizontal_alignment : uint8_t {
  flush = 0 , left = 1 , center = 2 , justified = 3 ,
  right = 4
}
 
enum class  operating_system {
  windows = HI_OS_WINDOWS , macos = HI_OS_MACOS , mobile = HI_OS_MOBILE , other = HI_OS_OTHER ,
  current = HI_OPERATING_SYSTEM
}
 
enum class  compiler { msvc = HI_CC_MSVC , gcc = HI_CC_GCC , clang = HI_CC_CLANG , current = HI_COMPILER }
 
enum class  processor {
  x86 = HI_CPU_X86 , x64 = HI_CPU_X64 , arm = HI_CPU_ARM , arm64 = HI_CPU_ARM64 ,
  unknown = HI_CPU_UNKNOWN , current = HI_PROCESSOR
}
 
enum class  audio_block_state { normal , silent , corrupt }
 
enum class  audio_device_state {
  uninitialized , active , disabled , not_present ,
  unplugged
}
 
enum class  audio_direction : unsigned char { none = 0b00 , input = 0b01 , output = 0b10 , bidirectional = 0b11 }
 
enum class  speaker_mapping : uint32_t {
  none = 0 , front_left = 0x0'0001 , front_right = 0x0'0002 , front_center = 0x0'0004 ,
  low_frequency = 0x0'0008 , back_left = 0x0'0010 , back_right = 0x0'0020 , front_left_of_center = 0x0'0040 ,
  front_right_of_center = 0x0'0080 , back_center = 0x0'0100 , side_left = 0x0'0200 , side_right = 0x0'0400 ,
  top_center = 0x0'0800 , top_front_left = 0x0'1000 , top_front_center = 0x0'2000 , top_front_right = 0x0'4000 ,
  top_back_left = 0x0'8000 , top_back_center = 0x1'0000 , top_back_right = 0x2'0000 , mono_1_0 = front_center ,
  stereo_2_0 = front_left | front_right , stereo_2_1 = stereo_2_0 | low_frequency , stereo_3_0 = stereo_2_0 | front_center , stereo_3_1 = stereo_3_0 | low_frequency ,
  quad_4_0 = stereo_2_0 | back_left | back_right , quad_side_4_0 = stereo_2_0 | side_left | side_right , hexagonal_6_0 = quad_4_0 | front_center | back_center , hexagonal_6_1 = hexagonal_6_0 | low_frequency ,
  octagonal_8_0 = hexagonal_6_0 | side_left | side_right , surround_3_0 = stereo_2_0 | back_center , surround_4_0 = surround_3_0 | front_center , surround_4_1 = surround_4_0 | low_frequency ,
  surround_5_0 = quad_4_0 | front_center , surround_5_1 = surround_5_0 | low_frequency , surround_7_0 = surround_5_0 | side_left | side_right , surround_7_1 = surround_7_0 | low_frequency ,
  surround_9_0 = surround_7_0 | top_front_left | top_front_right , surround_9_1 = surround_9_0 | low_frequency , surround_11_0 = surround_9_0 | front_left_of_center | front_right_of_center , surround_11_1 = surround_11_0 | low_frequency ,
  surround_side_5_0 = quad_side_4_0 | front_center , surround_side_5_1 = surround_side_5_0 | low_frequency , surround_side_6_0 = surround_side_5_0 | back_center , surround_side_6_1 = surround_side_6_0 | low_frequency ,
  surround_side_7_0 = surround_side_5_0 | front_left_of_center | front_right_of_center , surround_side_7_1 = surround_side_7_0 | low_frequency , surround_wide_6_0 = surround_4_0 | front_left_of_center | front_right_of_center , surround_wide_6_1 = surround_wide_6_0 | low_frequency ,
  surround_wide_7_0 = surround_5_0 | front_left_of_center | front_right_of_center , surround_wide_7_1 = surround_wide_7_0 | low_frequency , surround_atmos_5_1_4 = surround_5_1 | top_front_left | top_front_right | top_back_left | top_back_right , surround_atmos_7_1_4 = surround_7_1 | top_front_left | top_front_right | top_back_left | top_back_right
}
 
enum class  surround_mode : uint64_t {
  none = 0 , mono_1_0 = uint64_t{1} << 0 , stereo_2_0 = uint64_t{1} << 1 , stereo_2_1 = uint64_t{1} << 2 ,
  stereo_3_0 = uint64_t{1} << 3 , stereo_3_1 = uint64_t{1} << 4 , quad_4_0 = uint64_t{1} << 5 , quad_side_4_0 = uint64_t{1} << 6 ,
  hexagonal_6_0 = uint64_t{1} << 7 , hexagonal_6_1 = uint64_t{1} << 8 , octagonal_8_0 = uint64_t{1} << 9 , surround_3_0 = uint64_t{1} << 10 ,
  surround_4_0 = uint64_t{1} << 11 , surround_4_1 = uint64_t{1} << 12 , surround_5_0 = uint64_t{1} << 13 , surround_5_1 = uint64_t{1} << 14 ,
  surround_7_0 = uint64_t{1} << 15 , surround_7_1 = uint64_t{1} << 16 , surround_9_0 = uint64_t{1} << 17 , surround_9_1 = uint64_t{1} << 18 ,
  surround_11_0 = uint64_t{1} << 19 , surround_11_1 = uint64_t{1} << 20 , surround_side_5_0 = uint64_t{1} << 21 , surround_side_5_1 = uint64_t{1} << 22 ,
  surround_side_6_0 = uint64_t{1} << 23 , surround_side_6_1 = uint64_t{1} << 24 , surround_side_7_0 = uint64_t{1} << 25 , surround_side_7_1 = uint64_t{1} << 26 ,
  surround_wide_6_0 = uint64_t{1} << 27 , surround_wide_6_1 = uint64_t{1} << 28 , surround_wide_7_0 = uint64_t{1} << 29 , surround_wide_7_1 = uint64_t{1} << 30 ,
  surround_atmos_5_1_4 = uint64_t{1} << 31 , surround_atmos_7_1_4 = uint64_t{1} << 32
}
 
enum class  callback_flags {
  synchronous = 0x00 , local = 0x01 , main = 0x02 , timer = 0x03 ,
  once = 0x1'00
}
 
enum class  semantic_color : unsigned char {
  blue , green , indigo , orange ,
  pink , purple , red , teal ,
  yellow , gray , gray2 , gray3 ,
  gray4 , gray5 , gray6 , foreground ,
  border , fill , accent , text_select ,
  primary_cursor , secondary_cursor
}
 
enum class  dialog_type { ok , yes_no , yes_no_cancel }
 
enum class  axis : unsigned char {
  none = 0 , x = 1 , y = 2 , z = 4 ,
  both = x | y , all = x | y | z , row = x , column = y ,
  horizontal = x , vertical = y
}
 
enum class  line_end_cap { flat , round }
 The way two lines should be joined. More...
 
enum class  line_join_style { none , bevel , miter , round }
 The way two lines should be joined. More...
 
enum class  border_side { on , inside , outside }
 The side where the border is drawn. More...
 
enum class  gfx_surface_state { no_window , has_window , has_device , has_swapchain }
 
enum class  gfx_surface_loss { none , swapchain_lost , device_lost , window_lost }
 
enum class  subpixel_orientation {
  unknown , horizontal_rgb , horizontal_bgr , vertical_rgb ,
  vertical_bgr
}
 The orientation of the RGB sub-pixels of and LCD/LED panel. More...
 
enum class  global_state_type : uint64_t {
  log_debug = 0x01 , log_info = 0x02 , log_statistics = 0x04 , log_trace = 0x08 ,
  log_audit = 0x10 , log_warning = 0x20 , log_error = 0x40 , log_fatal = 0x80 ,
  log_mask = log_debug | log_info | log_statistics | log_trace | log_audit | log_warning | log_error | log_fatal , log_level_default = log_audit | log_error | log_fatal , log_level_fatal = log_audit | log_fatal , log_level_error = log_trace | log_error | log_level_fatal ,
  log_level_warning = log_warning | log_level_error , log_level_info = log_info | log_statistics | log_level_warning , log_level_debug = log_debug | log_level_info , log_is_running = 0x1'00 ,
  time_stamp_utc_is_running = 0x2'00 , system_is_running = 0x1'000000'00 , system_is_shutting_down = 0x2'000000'00 , system_mask = system_is_running | system_is_shutting_down
}
 
enum class  gui_window_size { normal , minimized , maximized , fullscreen }
 
enum class  keyboard_focus_direction { backward , forward }
 The keyboard focus group used for finding a widget that will accept a particular focus. More...
 
enum class  keyboard_focus_group {
  normal = 1 , menu = 2 , toolbar = 4 , mouse = 8 ,
  all = normal | menu | toolbar | mouse
}
 The keyboard focus group used for finding a widget that will accept a particular focus. More...
 
enum class  keyboard_modifiers : uint8_t {
  none = 0x00 , shift = 0x01 , control = 0x02 , alt = 0x04 ,
  super = 0x08
}
 Key modification keys pressed at the same time as another key. More...
 
enum class  keyboard_state : uint8_t { idle = 0x00 , caps_lock = 0x01 , scroll_lock = 0x02 , num_lock = 0x04 }
 
enum class  keyboard_virtual_key : uint8_t {
  nul = 0 , A = 'a' , B = 'b' , C = 'c' ,
  D = 'd' , E = 'e' , F = 'f' , G = 'g' ,
  H = 'h' , I = 'i' , J = 'j' , K = 'k' ,
  L = 'l' , M = 'm' , N = 'n' , O = 'o' ,
  P = 'p' , Q = 'q' , R = 'r' , S = 's' ,
  T = 't' , U = 'u' , V = 'v' , W = 'w' ,
  X = 'x' , Y = 'y' , Z = 'z' , _0 = '0' ,
  _1 = '1' , _2 = '2' , _3 = '3' , _4 = '4' ,
  _5 = '5' , _6 = '6' , _7 = '7' , _8 = '8' ,
  _9 = '9' , plus = '+' , minus = '-' , star = '*' ,
  slash = '/' , percent = '' , tilde = '~' , ampersant = '&' ,
  pipe = '|' , caret = '^' , less = '<' , equal = '=' ,
  greater = '>' , open_parentheses = '(' , close_parentheses = ')' , open_bracket = '[' ,
  close_bracket = ']' , open_brace = '{' , close_brace = '}' , period = '.' ,
  comma = ',' , colon = ':' , semi_colon = ';' , bang = '!' ,
  question = '?' , space = ' ' , tab = '\t' , enter = '\n' ,
  backtick = '`' , quote = '\'' , double_quote = '"' , at = '@' ,
  hash = '#' , dollar = '$' , underscore = '_' , backslash = '\\' ,
  F1 = 'A' , F2 = 'B' , F3 = 'C' , F4 = 'D' ,
  F5 = 'E' , F6 = 'F' , F7 = 'G' , F8 = 'H' ,
  F9 = 'I' , F10 = 'J' , F11 = 'K' , F12 = 'L' ,
  F13 = 'M' , F14 = 'N' , F15 = 'O' , F16 = 'P' ,
  F17 = 'Q' , F18 = 'R' , F19 = 'S' , F20 = 'T' ,
  F21 = 'U' , F22 = 'V' , F23 = 'W' , F24 = 'X' ,
  home = 0x02 , end = 0x03 , backspace = 0x08 , clear = 0x0c ,
  insert = 0x1a , escape = 0x1b , _delete = 0x7f , left = 0x80 ,
  right , up , down , page_up ,
  page_down , menu , print_screen , pause_break ,
  sysmenu , media_next_track , media_prev_track , media_stop ,
  media_play_pause , volume_mute , volume_up , volume_down ,
  browser_back , browser_forward , browser_home , browser_refresh ,
  browser_stop , browser_search , browser_favorites
}
 
enum class  mouse_cursor { None , Default , TextEdit , Button }
 
enum class  theme_mode { light , dark }
 
enum class  network_event : uint16_t {
  none = 0 , read = 0x0001 , write = 0x0002 , close = 0x0004 ,
  connect = 0x0008 , accept = 0x0010 , out_of_band = 0x0020 , qos = 0x0040 ,
  group_qos = 0x0080 , address_list_change = 0x0100 , routing_interface_changed = 0x0200
}
 
enum class  network_error : uint8_t {
  success = 0 , af_not_supported , connection_refused , network_unreachable ,
  no_buffers , timeout , network_down , connection_reset ,
  connection_aborted
}
 
enum class  graphic_character_t {
  none = 0x00 , exclamation_mark = 0x01 , double_quote = 0x02 , hash = 0x03 ,
  dollar = 0x04 , percent = 0x05 , ampersand = 0x06 , single_quote = 0x07 ,
  open_paren = 0x08 , close_paren = 0x09 , star = 0x0a , plus = 0x0b ,
  comma = 0x0c , minus = 0x0d , dot = 0x0e , slash = 0x0f ,
  colon = 0x10 , semi_colon = 0x11 , less_than = 0x12 , equal = 0x13 ,
  greater_than = 0x14 , question_mark = 0x15 , open_bracket = 0x16 , back_slash = 0x17 ,
  close_bracket = 0x18 , carret = 0x19 , underscore = 0x1a , back_quote = 0x1b ,
  open_brace = 0x1c , pipe = 0x1d , close_brace = 0x1e , tilde = 0x1f
}
 
enum class  on_overflow_t { Throw , Saturate , Assert , Axiom }
 
enum class  elusive_icon : char32_t {
  AddressBook = 0xf102 , AddressBookAlt = 0xf101 , Adjust = 0xf104 , AdjustAlt = 0xf103 ,
  Adult = 0xf105 , AlignCenter = 0xf106 , AlignJustify = 0xf107 , AlignLeft = 0xf108 ,
  AlignRight = 0xf109 , ArrowDown = 0xf10a , ArrowLeft = 0xf10b , ArrowRight = 0xf10c ,
  ArrowUp = 0xf10d , Asl = 0xf10e , Asterisk = 0xf10f , Backward = 0xf110 ,
  BanCircle = 0xf111 , Barcode = 0xf112 , Behance = 0xf113 , Bell = 0xf114 ,
  Blind = 0xf115 , Blogger = 0xf116 , Bold = 0xf117 , Book = 0xf118 ,
  Bookmark = 0xf11a , BookmarkEmpty = 0xf119 , Braille = 0xf11b , Briefcase = 0xf11c ,
  Broom = 0xf11d , Brush = 0xf11e , Bulb = 0xf11f , Bullhorn = 0xf120 ,
  Calendar = 0xf122 , CalendarSign = 0xf121 , Camera = 0xf123 , Car = 0xf124 ,
  CaretDown = 0xf125 , CaretLeft = 0xf126 , CaretRight = 0xf127 , CaretUp = 0xf128 ,
  Cc = 0xf129 , Certificate = 0xf12a , Check = 0xf12c , CheckEmpty = 0xf12b ,
  ChevronDown = 0xf12d , ChevronLeft = 0xf12e , ChevronRight = 0xf12f , ChevronUp = 0xf130 ,
  Child = 0xf131 , CircleArrowDown = 0xf132 , CircleArrowLeft = 0xf133 , CircleArrowRight = 0xf134 ,
  CircleArrowUp = 0xf135 , Cloud = 0xf137 , CloudAlt = 0xf136 , Cog = 0xf139 ,
  CogAlt = 0xf138 , Cogs = 0xf13a , Comment = 0xf13c , CommentAlt = 0xf13b ,
  Compass = 0xf13e , CompassAlt = 0xf13d , CreditCard = 0xf13f , Css = 0xf140 ,
  Dashboard = 0xf141 , Delicious = 0xf142 , Deviantart = 0xf143 , Digg = 0xf144 ,
  Download = 0xf146 , DownloadAlt = 0xf145 , Dribbble = 0xf147 , Edit = 0xf148 ,
  Eject = 0xf149 , Envelope = 0xf14b , EnvelopeAlt = 0xf14a , Error = 0xf14d ,
  ErrorAlt = 0xf14c , Eur = 0xf14e , ExclamationSign = 0xf14f , EyeClose = 0xf150 ,
  EyeOpen = 0xf151 , Facebook = 0xf152 , FacetimeVideo = 0xf153 , FastBackward = 0xf154 ,
  FastForward = 0xf155 , Female = 0xf156 , File = 0xf15c , FileAlt = 0xf157 ,
  FileEdit = 0xf159 , FileEditAlt = 0xf158 , FileNew = 0xf15b , FileNewAlt = 0xf15a ,
  Film = 0xf15d , Filter = 0xf15e , Fire = 0xf15f , Flag = 0xf161 ,
  FlagAlt = 0xf160 , Flickr = 0xf162 , Folder = 0xf166 , FolderClose = 0xf163 ,
  FolderOpen = 0xf164 , FolderSign = 0xf165 , font = 0xf167 , fontsize = 0xf168 ,
  Fork = 0xf169 , Forward = 0xf16b , ForwardAlt = 0xf16a , Foursquare = 0xf16c ,
  Friendfeed = 0xf16e , FriendfeedRect = 0xf16d , Fullscreen = 0xf16f , Gbp = 0xf170 ,
  Gift = 0xf171 , Github = 0xf173 , GithubText = 0xf172 , Glass = 0xf174 ,
  Glasses = 0xf175 , Globe = 0xf177 , GlobeAlt = 0xf176 , Googleplus = 0xf178 ,
  Graph = 0xf17a , GraphAlt = 0xf179 , Group = 0xf17c , GroupAlt = 0xf17b ,
  Guidedog = 0xf17d , HandDown = 0xf17e , HandLeft = 0xf17f , HandRight = 0xf180 ,
  HandUp = 0xf181 , Hdd = 0xf182 , Headphones = 0xf183 , HearingImpaired = 0xf184 ,
  Heart = 0xf187 , HeartAlt = 0xf185 , HeartEmpty = 0xf186 , Home = 0xf189 ,
  HomeAlt = 0xf188 , Hourglass = 0xf18a , Idea = 0xf18c , IdeaAlt = 0xf18b ,
  Inbox = 0xf18f , InboxAlt = 0xf18d , InboxBox = 0xf18e , IndentLeft = 0xf190 ,
  IndentRight = 0xf191 , InfoCircle = 0xf192 , Instagram = 0xf193 , IphoneHome = 0xf194 ,
  Italic = 0xf195 , Key = 0xf196 , Laptop = 0xf198 , LaptopAlt = 0xf197 ,
  Lastfm = 0xf199 , Leaf = 0xf19a , Lines = 0xf19b , Link = 0xf19c ,
  Linkedin = 0xf19d , List = 0xf19f , ListAlt = 0xf19e , Livejournal = 0xf1a0 ,
  Lock = 0xf1a2 , LockAlt = 0xf1a1 , Magic = 0xf1a3 , Magnet = 0xf1a4 ,
  Male = 0xf1a5 , MapMarker = 0xf1a7 , MapMarkerAlt = 0xf1a6 , Mic = 0xf1a9 ,
  MicAlt = 0xf1a8 , Minus = 0xf1ab , MinusSign = 0xf1aa , Move = 0xf1ac ,
  Music = 0xf1ad , Myspace = 0xf1ae , Network = 0xf1af , Off = 0xf1b0 ,
  Ok = 0xf1b3 , OkCircle = 0xf1b1 , OkSign = 0xf1b2 , Opensource = 0xf1b4 ,
  PaperClip = 0xf1b6 , PaperClipAlt = 0xf1b5 , Path = 0xf1b7 , Pause = 0xf1b9 ,
  PauseAlt = 0xf1b8 , Pencil = 0xf1bb , PencilAlt = 0xf1ba , Person = 0xf1bc ,
  Phone = 0xf1be , PhoneAlt = 0xf1bd , Photo = 0xf1c0 , PhotoAlt = 0xf1bf ,
  Picasa = 0xf1c1 , Picture = 0xf1c2 , Pinterest = 0xf1c3 , Plane = 0xf1c4 ,
  Play = 0xf1c7 , PlayAlt = 0xf1c5 , PlayCircle = 0xf1c6 , Plurk = 0xf1c9 ,
  PlurkAlt = 0xf1c8 , Plus = 0xf1cb , PlusSign = 0xf1ca , Podcast = 0xf1cc ,
  Print = 0xf1cd , Puzzle = 0xf1ce , Qrcode = 0xf1cf , Question = 0xf1d1 ,
  QuestionSign = 0xf1d0 , QuoteAlt = 0xf1d2 , QuoteRight = 0xf1d4 , QuoteRightAlt = 0xf1d3 ,
  Quotes = 0xf1d5 , Random = 0xf1d6 , Record = 0xf1d7 , Reddit = 0xf1d8 ,
  Redux = 0xf1d9 , Refresh = 0xf1da , Remove = 0xf1dd , RemoveCircle = 0xf1db ,
  RemoveSign = 0xf1dc , Repeat = 0xf1df , RepeatAlt = 0xf1de , ResizeFull = 0xf1e0 ,
  ResizeHorizontal = 0xf1e1 , ResizeSmall = 0xf1e2 , ResizeVertical = 0xf1e3 , ReturnKey = 0xf1e4 ,
  Retweet = 0xf1e5 , ReverseAlt = 0xf1e6 , Road = 0xf1e7 , Rss = 0xf1e8 ,
  Scissors = 0xf1e9 , Screen = 0xf1eb , ScreenAlt = 0xf1ea , Screenshot = 0xf1ec ,
  Search = 0xf1ee , SearchAlt = 0xf1ed , Share = 0xf1f0 , ShareAlt = 0xf1ef ,
  ShoppingCart = 0xf1f2 , ShoppingCartSign = 0xf1f1 , Signal = 0xf1f3 , Skype = 0xf1f4 ,
  Slideshare = 0xf1f5 , Smiley = 0xf1f7 , SmileyAlt = 0xf1f6 , Soundcloud = 0xf1f8 ,
  Speaker = 0xf1f9 , Spotify = 0xf1fa , Stackoverflow = 0xf1fb , Star = 0xf1fe ,
  StarAlt = 0xf1fc , StarEmpty = 0xf1fd , StepBackward = 0xf1ff , StepForward = 0xf200 ,
  Stop = 0xf202 , StopAlt = 0xf201 , Stumbleupon = 0xf203 , Tag = 0xf204 ,
  Tags = 0xf205 , Tasks = 0xf206 , TextHeight = 0xf207 , TextWidth = 0xf208 ,
  Th = 0xf20b , ThLarge = 0xf209 , ThList = 0xf20a , ThumbsDown = 0xf20c ,
  ThumbsUp = 0xf20d , Time = 0xf20f , TimeAlt = 0xf20e , Tint = 0xf210 ,
  Torso = 0xf211 , Trash = 0xf213 , TrashAlt = 0xf212 , Tumblr = 0xf214 ,
  Twitter = 0xf215 , UniversalAccess = 0xf216 , Unlock = 0xf218 , UnlockAlt = 0xf217 ,
  Upload = 0xf219 , Usd = 0xf21a , User = 0xf21b , Viadeo = 0xf21c ,
  Video = 0xf21f , VideoAlt = 0xf21d , VideoChat = 0xf21e , ViewMode = 0xf220 ,
  Vimeo = 0xf221 , Vkontakte = 0xf222 , VolumeDown = 0xf223 , VolumeOff = 0xf224 ,
  VolumeUp = 0xf225 , W3c = 0xf226 , WarningSign = 0xf227 , Website = 0xf229 ,
  WebsiteAlt = 0xf228 , Wheelchair = 0xf22a , Wordpress = 0xf22b , Wrench = 0xf22d ,
  WrenchAlt = 0xf22c , Youtube = 0xf22e , ZoomIn = 0xf22f , ZoomOut = 0xf230
}
 
enum class  font_weight {
  Thin , ExtraLight , Light , Regular ,
  Medium , SemiBold , Bold , ExtraBold ,
  Black , ExtraBlack
}
 
enum class  hikogui_icon : char32_t {
  MinimizeWindow = 0xf301 , MaximizeWindowMS = 0xf302 , RestoreWindowMS = 0xf303 , CloseWindow = 0xf304 ,
  RestoreWindowMacOS = 0xf305 , MaximizeWindowMacOS = 0xf306 , none_0_0 = 0xf3c0 , mono_1_0 = 0xf3c1 ,
  mono_1_1 = 0xf3c2 , stereo_2_0 = 0xf3c3 , stereo_2_1 = 0xf3c4 , stereo_3_0 = 0xf3c5 ,
  stereo_3_1 = 0xf3c6 , surround_3_0 = 0xf3c7 , surround_3_1 = 0xf3c8 , surround_4_0 = 0xf3c9 ,
  surround_4_1 = 0xf3ca , surround_5_0 = 0xf3cb , surround_5_1 = 0xf3cc , surround_7_0 = 0xf3cd ,
  surround_7_1 = 0xf3ce , surround_9_0 = 0xf3cf , surround_9_1 = 0xf3d0 , surround_11_0 = 0xf3d1 ,
  surround_11_1 = 0xf3d2 , surround_side_5_0 = 0xf3d3 , surround_side_5_1 = 0xf3d4 , surround_side_6_0 = 0xf3d5 ,
  surround_side_6_1 = 0xf3d6 , surround_side_7_0 = 0xf3d7 , surround_side_7_1 = 0xf3d8 , surround_wide_6_0 = 0xf3d9 ,
  surround_wide_6_1 = 0xf3da , surround_wide_7_0 = 0xf3db , surround_wide_7_1 = 0xf3dc , quad_4_0 = 0xf3dd ,
  quad_4_1 = 0xf3de , quad_side_4_0 = 0xf3df , quad_side_4_1 = 0xf3e0 , hexagonal_6_0 = 0xf3e1 ,
  hexagonal_6_1 = 0xf3e2 , octagonal_8_0 = 0xf3e3 , octagonal_8_1 = 0xf3e4 , surround_atmos_5_1_4 = 0xf3e5 ,
  surround_atmos_7_1_4 = 0xf3e6
}
 
enum class  semantic_text_style : unsigned char {
  label , small_label , warning , error ,
  help , placeholder , link
}
 
enum class  text_decoration { None , Underline , WavyUnderline , StrikeThrough }
 Describes how a grapheme should be underlined when rendering the text. More...
 
enum class  text_phrasing {
  regular , emphesis , strong , code ,
  abbreviation , bold , italic , citation ,
  keyboard , mark , math , example ,
  unarticulated
}
 
enum class  text_phrasing_mask : uint16_t {
  regular = 1 << to_underlying(text_phrasing::regular) , emphesis = 1 << to_underlying(text_phrasing::emphesis) , strong = 1 << to_underlying(text_phrasing::strong) , code = 1 << to_underlying(text_phrasing::code) ,
  abbreviation = 1 << to_underlying(text_phrasing::abbreviation) , bold = 1 << to_underlying(text_phrasing::bold) , italic = 1 << to_underlying(text_phrasing::italic) , citation = 1 << to_underlying(text_phrasing::citation) ,
  keyboard = 1 << to_underlying(text_phrasing::keyboard) , mark = 1 << to_underlying(text_phrasing::mark) , math = 1 << to_underlying(text_phrasing::math) , example = 1 << to_underlying(text_phrasing::example) ,
  unarticulated = 1 << to_underlying(text_phrasing::unarticulated) , all
}
 
enum class  tokenizer_name_t : uint8_t {
  NotAssigned , ErrorInvalidCharacter , ErrorEOTInBlockComment , ErrorEOTInString ,
  ErrorLFInString , Name , StringLiteral , IntegerLiteral ,
  DateLiteral , TimeLiteral , FloatLiteral , Operator ,
  End
}
 
enum class  unicode_bidi_bracket_type : uint8_t { n , o , c , m }
 
enum class  unicode_bidi_class : uint8_t {
  unknown = 0 , L = 1 , R = 2 , AL = 3 ,
  EN = 4 , ES = 5 , ET = 6 , AN = 7 ,
  CS = 8 , NSM = 9 , BN = 10 , B = 11 ,
  S = 12 , WS = 13 , ON = 14 , LRE ,
  LRO , RLE , RLO , PDF ,
  LRI , RLI , FSI , PDI
}
 Bidirectional class Unicode Standard Annex #9: https://unicode.org/reports/tr9/. More...
 
enum class  unicode_break_opportunity : uint8_t { no , yes , mandatory , unassigned }
 
enum class  unicode_decomposition_type : uint8_t {
  none , canonical , font , noBreak ,
  initial , medial , _final , isolated ,
  circle , super , sub , fraction ,
  vertical , wide , narrow , small ,
  square , compat
}
 
enum class  unicode_east_asian_width {
  A , F , H , N ,
  Na , W
}
 
enum class  unicode_general_category : uint8_t {
  Lu , Ll , Lt , Lm ,
  Lo , Mn , Mc , Me ,
  Nd , Nl , No , Pc ,
  Pd , Ps , Pe , Pi ,
  Pf , Po , Sm , Sc ,
  Sk , So , Zs , Zl ,
  Zp , Cc , Cf , Cs ,
  Co , Cn
}
 
enum class  unicode_grapheme_cluster_break : uint8_t {
  Other , CR , LF , Control ,
  Extend , ZWJ , Regional_Indicator , Prepend ,
  SpacingMark , L , V , T ,
  LV , LVT , Extended_Pictographic
}
 
enum class  unicode_line_break_class : uint8_t {
  BK , CR , LF , CM ,
  NL , SG , WJ , ZW ,
  GL , SP , ZWJ , B2 ,
  BA , BB , HY , CB ,
  CL , CP , EX , IN ,
  NS , OP , QU , IS ,
  NU , PO , PR , SY ,
  AI , AL , CJ , EB ,
  EM , H2 , H3 , HL ,
  ID , JL , L , JV ,
  V , JT , T , RI ,
  SA , XX
}
 Unicode line break class. More...
 
enum class  unicode_normalization_mask {
  decompose_canonical = 1 << to_underlying(unicode_decomposition_type::canonical) , decompose_font = 1 << to_underlying(unicode_decomposition_type::font) , decompose_noBreak = 1 << to_underlying(unicode_decomposition_type::noBreak) , decompose_initial = 1 << to_underlying(unicode_decomposition_type::initial) ,
  decompose_medial = 1 << to_underlying(unicode_decomposition_type::medial) , decompose_final = 1 << to_underlying(unicode_decomposition_type::_final) , decompose_isolated = 1 << to_underlying(unicode_decomposition_type::isolated) , decompose_circle = 1 << to_underlying(unicode_decomposition_type::circle) ,
  decompose_super = 1 << to_underlying(unicode_decomposition_type::super) , decompose_sub = 1 << to_underlying(unicode_decomposition_type::sub) , decompose_fraction = 1 << to_underlying(unicode_decomposition_type::fraction) , decompose_vertical = 1 << to_underlying(unicode_decomposition_type::vertical) ,
  decompose_wide = 1 << to_underlying(unicode_decomposition_type::wide) , decompose_narrow = 1 << to_underlying(unicode_decomposition_type::narrow) , decompose_small = 1 << to_underlying(unicode_decomposition_type::small) , decompose_square = 1 << to_underlying(unicode_decomposition_type::square) ,
  decompose_compat = 1 << to_underlying(unicode_decomposition_type::compat) , decompose_control = 1 << 25 , compose_CRLF = 1 << 26 , decompose_newline_to_PS = 1 << 27 ,
  decompose_newline_to_LF = 1 << 28 , decompose_newline_to_CRLF = 1 << 29 , decompose_newline_to_SP = 1 << 30 , decompose_newline = decompose_newline_to_PS | decompose_newline_to_LF | decompose_newline_to_CRLF | decompose_newline_to_SP ,
  NFD = decompose_canonical , NFKD
}
 
enum class  unicode_script : uint8_t {
  Zzzz , Common , Latin , Greek ,
  Cyrillic , Armenian , Hebrew , Arabic ,
  Syriac , Thaana , Devanagari , Bengali ,
  Gurmukhi , Gujarati , Oriya , Tamil ,
  Telugu , Kannada , Malayalam , Sinhala ,
  Thai , Lao , Tibetan , Myanmar ,
  Georgian , Hangul , Ethiopic , Cherokee ,
  Canadian_Aboriginal , Ogham , Runic , Khmer ,
  Mongolian , Hiragana , Katakana , Bopomofo ,
  Han , Yi , Old_Italic , Gothic ,
  Deseret , Inherited , Tagalog , Hanunoo ,
  Buhid , Tagbanwa , Limbu , Tai_Le ,
  Linear_B , Ugaritic , Shavian , Osmanya ,
  Cypriot , Braille , Buginese , Coptic ,
  New_Tai_Lue , Glagolitic , Tifinagh , Syloti_Nagri ,
  Old_Persian , Kharoshthi , Balinese , Cuneiform ,
  Phoenician , Phags_Pa , Nko , Sundanese ,
  Lepcha , Ol_Chiki , Vai , Saurashtra ,
  Kayah_Li , Rejang , Lycian , Carian ,
  Lydian , Cham , Tai_Tham , Tai_Viet ,
  Avestan , Egyptian_Hieroglyphs , Samaritan , Lisu ,
  Bamum , Javanese , Meetei_Mayek , Imperial_Aramaic ,
  Old_South_Arabian , Inscriptional_Parthian , Inscriptional_Pahlavi , Old_Turkic ,
  Kaithi , Batak , Brahmi , Mandaic ,
  Chakma , Meroitic_Cursive , Meroitic_Hieroglyphs , Miao ,
  Sharada , Sora_Sompeng , Takri , Caucasian_Albanian ,
  Bassa_Vah , Duployan , Elbasan , Grantha ,
  Pahawh_Hmong , Khojki , Linear_A , Mahajani ,
  Manichaean , Mende_Kikakui , Modi , Mro ,
  Old_North_Arabian , Nabataean , Palmyrene , Pau_Cin_Hau ,
  Old_Permic , Psalter_Pahlavi , Siddham , Khudawadi ,
  Tirhuta , Warang_Citi , Ahom , Anatolian_Hieroglyphs ,
  Hatran , Multani , Old_Hungarian , SignWriting ,
  Adlam , Bhaiksuki , Marchen , Newa ,
  Osage , Tangut , Masaram_Gondi , Nushu ,
  Soyombo , Zanabazar_Square , Dogra , Gunjala_Gondi ,
  Makasar , Medefaidrin , Hanifi_Rohingya , Sogdian ,
  Old_Sogdian , Elymaic , Nandinagari , Nyiakeng_Puachue_Hmong ,
  Wancho , Chorasmian , Dives_Akuru , Khitan_Small_Script ,
  Yezidi , Cypro_Minoan , Old_Uyghur , Tangsa ,
  Toto , Vithkuqi , Afaka , Arabic_Nastaliq ,
  Blissymbols , Cirth , Cyrillic_Old_Church_Slavonic , Egyptian_Demotic ,
  Egyptian_Hieratic , Han_Bopomofo , Han_Simplified , Han_Traditional ,
  Indus , Jamo , Japanese , Japanese_Syllabaries ,
  Jurchen , Kawi , Khitan_Large_Script , Khutsuri ,
  Korean , Kpelle , Latin_Fraktur , Latin_Gaelic ,
  Leke , Loma , Mayan_Hieroglyphs , Moon ,
  Nag_Mundari , Naxi_Dongba , Nakhi_Geba , Proto_Cuneiform ,
  Proto_Elamite , Book_Pahlavi , Kligon , Proto_Sinaitic ,
  Private_Use_aa , Private_Use_bx , Ranjana , Rongorongo ,
  Sarati , Shuishu , Sunuwar , Symbols ,
  Symbols_Emoji , Syriac_Estrangelo , Syriac_Western , Syriac_Eastern ,
  Tengwar , Unwritten_Documents , Visible_Speech , Woleai ,
  Mathematical_Notation , Byzantine_Music , Music
}
 
enum class  unicode_sentence_break_property : uint8_t {
  Other , CR , LF , Extend ,
  Sep , Format , Sp , Lower ,
  Upper , OLetter , Numeric , ATerm ,
  SContinue , STerm , Close
}
 
enum class  unicode_word_break_property : uint8_t {
  Other , CR , LF , Newline ,
  Extend , ZWJ , Regional_Indicator , Format ,
  Katakana , Hebrew_Letter , ALetter , Single_Quote ,
  Double_Quote , MidNumLet , MidLetter , MidNum ,
  Numeric , ExtendNumLet , WSegSpace
}
 

Functions

template<typename T , typename U , typename F >
transform (const U &input, F operation)
 Transform an input container to the output container.
 
template<typename T , std::size_t N, typename F >
constexpr std::array< T, N > generate_array (F operation)
 Generate data in an array.
 
template<typename It >
constexpr It unordered_remove (It first, It last, It element)
 Remove element from a container.
 
template<typename It , typename UnaryPredicate >
constexpr It rfind_if (It const first, It const last, UnaryPredicate predicate)
 
template<typename It , typename UnaryPredicate >
constexpr It rfind_if_not (It const first, It const last, UnaryPredicate predicate)
 
template<typename It , typename T >
constexpr It rfind (It const first, It const last, T const &value)
 
template<typename It , typename ItAny >
constexpr It find_any (It data_first, It data_last, ItAny value_first, ItAny value_last) noexcept
 Find the first occurrence of an value in a data.
 
template<typename ConstIt , typename It , typename UnaryPredicate >
constexpr It find_cluster (ConstIt last, It start, UnaryPredicate predicate)
 Find the start of the current cluster.
 
template<typename ConstIt , typename It , typename UnaryPredicate >
constexpr It rfind_cluster (ConstIt first, It start, UnaryPredicate predicate)
 Find the start of the current cluster.
 
template<typename ConstIt , typename It , typename UnaryPredicate >
constexpr std::pair< It, Itbifind_cluster (ConstIt first, ConstIt last, It start, UnaryPredicate predicate)
 Find the begin and end of the current cluster.
 
template<typename It , typename S , typename F >
void for_each_cluster (It first, It last, S IsClusterSeperator, F Function)
 
template<typename InputIt1 , typename InputIt2 , typename BinaryPredicate >
std::pair< InputIt1, InputIt2rmismatch (InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2, BinaryPredicate predicate) noexcept
 
template<typename InputIt1 , typename InputIt2 >
std::pair< InputIt1, InputIt2rmismatch (InputIt1 first1, InputIt1 last1, InputIt2 first2, InputIt2 last2) noexcept
 
template<typename T >
smoothstep (T x) noexcept
 
template<typename T >
inverse_smoothstep (T x)
 
auto shuffle_by_index (auto first, auto last, auto indices_first, auto indices_last, auto index_op) noexcept
 Shuffle a container based on a list of indices.
 
auto shuffle_by_index (auto first, auto last, auto indices_first, auto indices_last) noexcept
 Shuffle a container based on a list of indices.
 
template<typename DataIt , typename ValueIt >
DataIt front_strip (DataIt data_first, DataIt data_last, ValueIt value_first, ValueIt value_last) noexcept
 Strip data from the front side.
 
template<typename DataIt , typename ValueIt >
DataIt back_strip (DataIt data_first, DataIt data_last, ValueIt value_first, ValueIt value_last) noexcept
 Strip data from the back side.
 
constexpr alignment operator| (horizontal_alignment lhs, vertical_alignment rhs) noexcept
 Combine vertical and horizontal alignment.
 
constexpr alignment operator| (vertical_alignment lhs, horizontal_alignment rhs) noexcept
 Combine vertical and horizontal alignment.
 
template<std::size_t I, typename FirstArg , typename... Args>
constexpr decltype(autoget_argument_impl (FirstArg &&first_arg, Args &&...args) noexcept
 
template<std::size_t I, typename... Args>
constexpr decltype(autoget_argument (Args &&...args) noexcept
 
template<typename... Args>
constexpr decltype(autoget_last_argument (Args &&...args) noexcept
 
bool bound_check (std::unsigned_integral auto index, std::unsigned_integral auto upper) noexcept
 
bool bound_check (std::integral auto index, std::integral auto lower, std::integral auto upper) noexcept
 
template<typename T >
fetch_max (std::atomic< T > &lhs, T rhs, std::memory_order order) noexcept
 Lock-free fetch-then-max operation on an atomic.
 
template<typename T >
fetch_min (std::atomic< T > &lhs, T rhs, std::memory_order order) noexcept
 Lock-free fetch-then-min operation on an atomic.
 
constexpr std::string_view to_string (audio_device_state const &rhs) noexcept
 
constexpr audio_direction operator& (audio_direction const &lhs, audio_direction const &rhs) noexcept
 
constexpr audio_direction operator| (audio_direction const &lhs, audio_direction const &rhs) noexcept
 
constexpr bool any (audio_direction const &rhs) noexcept
 
bool win32_use_extensible (audio_stream_format x) noexcept
 
WAVEFORMATEXTENSIBLE audio_stream_format_to_win32 (audio_stream_format stream_format, bool extensible) noexcept
 
audio_stream_format audio_stream_format_from_win32 (WAVEFORMATEXTENSIBLE const &wave_format)
 
audio_stream_format audio_stream_format_from_win32 (WAVEFORMATEX const &wave_format)
 
constexpr bool any (speaker_mapping const &rhs) noexcept
 
constexpr unsigned int popcount (speaker_mapping const &rhs) noexcept
 
constexpr speaker_mapping operator| (speaker_mapping const &lhs, speaker_mapping const &rhs) noexcept
 
constexpr speaker_mapping operator& (speaker_mapping const &lhs, speaker_mapping const &rhs) noexcept
 
constexpr speaker_mapping & operator|= (speaker_mapping &lhs, speaker_mapping const &rhs) noexcept
 
constexpr speaker_mapping & operator&= (speaker_mapping &lhs, speaker_mapping const &rhs) noexcept
 
std::string to_string (speaker_mapping rhs) noexcept
 
speaker_mapping speaker_mapping_from_win32 (DWORD from)
 
DWORD speaker_mapping_to_win32 (speaker_mapping from) noexcept
 
constexpr surround_mode operator& (surround_mode const &lhs, surround_mode const &rhs) noexcept
 
constexpr surround_mode operator| (surround_mode const &lhs, surround_mode const &rhs) noexcept
 
constexpr surround_mode & operator|= (surround_mode &lhs, surround_mode const &rhs) noexcept
 
constexpr bool any (surround_mode const &rhs) noexcept
 
constexpr speaker_mapping to_speaker_mapping (surround_mode const &rhs) noexcept
 
generator< surround_mode > enumerate_surround_modes () noexcept
 
constexpr std::string_view to_string_view_one (surround_mode const &mode) noexcept
 
constexpr std::string to_string (surround_mode const &mask) noexcept
 
template<typename T >
constexpr std::array< T, 2 > bezierToPolynomial (T P1, T P2) noexcept
 
template<typename T >
constexpr std::array< T, 3 > bezierToPolynomial (T P1, T C, T P2) noexcept
 
template<typename T >
constexpr std::array< T, 4 > bezierToPolynomial (T P1, T C1, T C2, T P2) noexcept
 
template<int D>
constexpr geo::point< D > bezierPointAt (geo::point< D > P1, geo::point< D > P2, float t) noexcept
 
template<int D>
constexpr geo::point< D > bezierPointAt (geo::point< D > P1, geo::point< D > C, geo::point< D > P2, float t) noexcept
 
template<int D>
constexpr geo::point< D > bezierPointAt (geo::point< D > P1, geo::point< D > C1, geo::point< D > C2, geo::point< D > P2, float t) noexcept
 
template<int D>
constexpr geo::vector< D > bezierTangentAt (geo::point< D > P1, geo::point< D > P2, float t) noexcept
 
template<int D>
constexpr geo::vector< D > bezierTangentAt (geo::point< D > P1, geo::point< D > C, geo::point< D > P2, float t) noexcept
 
template<int D>
constexpr geo::vector< D > bezierTangentAt (geo::point< D > P1, geo::point< D > C1, geo::point< D > C2, geo::point< D > P2, float t) noexcept
 
constexpr results< float, 1 > bezierFindT (float P1, float P2, float x) noexcept
 
constexpr results< float, 2 > bezierFindT (float P1, float C, float P2, float x) noexcept
 
hi_force_inline constexpr results< float, 3 > bezierFindT (float P1, float C1, float C2, float P2, float x) noexcept
 
hi_force_inline constexpr results< float, 1 > bezierFindTForNormalsIntersectingPoint (point2 P1, point2 P2, point2 P) noexcept
 Find t on the line P1->P2 which is closest to P.
 
hi_force_inline constexpr results< float, 3 > bezierFindTForNormalsIntersectingPoint (point2 P1, point2 C, point2 P2, point2 P) noexcept
 Find t on the curve P1->C->P2 which is closest to P.
 
constexpr results< float, 1 > bezierFindX (point2 P1, point2 P2, float y) noexcept
 
constexpr results< float, 2 > bezierFindX (point2 P1, point2 C, point2 P2, float y) noexcept
 
constexpr results< float, 3 > bezierFindX (point2 P1, point2 C1, point2 C2, point2 P2, float y) noexcept
 
float bezierFlatness (point2 P1, point2 P2) noexcept
 
float bezierFlatness (point2 P1, point2 C, point2 P2) noexcept
 
float bezierFlatness (point2 P1, point2 C1, point2 C2, point2 P2) noexcept
 
std::pair< point2, point2parallelLine (point2 P1, point2 P2, float distance) noexcept
 
std::optional< point2getIntersectionPoint (point2 A1, point2 A2, point2 B1, point2 B2) noexcept
 
std::optional< point2getExtrapolatedIntersectionPoint (point2 A1, point2 A2, point2 B1, point2 B2) noexcept
 
std::vector< bezier_curvemakeContourFromPoints (std::vector< bezier_point >::const_iterator first, std::vector< bezier_point >::const_iterator last) noexcept
 
std::vector< bezier_curvemakeInverseContour (std::vector< bezier_curve > const &contour) noexcept
 
std::vector< bezier_curvemakeParallelContour (std::vector< bezier_curve > const &contour, float offset, hi::line_join_style line_join_style, float tolerance) noexcept
 
void fill (pixel_map< uint8_t > &image, std::vector< bezier_curve > const &curves) noexcept
 Fill a linear gray scale image by filling a curve with anti-aliasing.
 
void fill (pixel_map< sdf_r8 > &image, std::vector< bezier_curve > const &curves) noexcept
 Fill a signed distance field image from the given contour.
 
bool get_bit (std::span< std::byte const > buffer, std::size_t &index) noexcept
 Read a single bit from span of bytes Bits are ordered LSB first.
 
std::size_t get_bits (std::span< std::byte const > buffer, std::size_t &index, std::size_t length) noexcept
 Read a bits from of span of bytes Bits are ordered LSB first.
 
bstring to_bstring (std::string_view src) noexcept
 
bstring to_bstring (std::integral auto... args) noexcept
 
constexpr callback_flags operator| (callback_flags const &lhs, callback_flags const &rhs) noexcept
 
constexpr bool is_once (callback_flags const &rhs) noexcept
 
constexpr bool is_synchronous (callback_flags const &rhs) noexcept
 
constexpr bool is_local (callback_flags const &rhs) noexcept
 
constexpr bool is_main (callback_flags const &rhs) noexcept
 
constexpr bool is_timer (callback_flags const &rhs) noexcept
 
template<typename T >
constexprcopy (T value) noexcept
 
template<typename Out , std::derived_from< std::remove_pointer_t< Out > > In>
requires std::is_pointer_v<Out> and (std::is_const_v<std::remove_pointer_t<Out>> == std::is_const_v<In> or std::is_const_v<std::remove_pointer_t<Out>>)
constexpr Out up_cast (In *rhs) noexcept
 Cast a pointer to a class to its base class or itself.
 
template<typename Out >
requires std::is_pointer_v<Out>
constexpr Out up_cast (nullptr_t) noexcept
 Cast a reference to a class to its base class or itself.
 
template<typename Out , std::derived_from< std::remove_reference_t< Out > > In>
requires std::is_reference_v<Out> and (std::is_const_v<std::remove_reference_t<Out>> == std::is_const_v<In> or std::is_const_v<std::remove_reference_t<Out>>)
constexpr Out up_cast (In &rhs) noexcept
 Cast a reference to a class to its base class or itself.
 
template<typename Out , base_of< std::remove_pointer_t< Out > > In>
requires std::is_pointer_v<Out> and (std::is_const_v<std::remove_pointer_t<Out>> == std::is_const_v<In> or std::is_const_v<std::remove_pointer_t<Out>>)
constexpr Out down_cast (In *rhs) noexcept
 Cast a pointer to a class to its derived class or itself.
 
template<typename Out >
requires std::is_pointer_v<Out>
constexpr Out down_cast (nullptr_t) noexcept
 Cast a pointer to a class to its derived class or itself.
 
template<typename Out , base_of< std::remove_reference_t< Out > > In>
requires std::is_reference_v<Out> and ( std::is_const_v<std::remove_reference_t<Out>> == std::is_const_v<In> or std::is_const_v<std::remove_reference_t<Out>>)
constexpr Out down_cast (In &rhs) noexcept
 Cast a reference to a class to its derived class or itself.
 
template<arithmetic Out, arithmetic In>
requires (type_in_range_v<Out, In>)
constexpr Out wide_cast (In rhs) noexcept
 Cast a number to a type that will be able to represent all values without loss of precision.
 
template<arithmetic Out>
constexpr Out wide_cast (bool rhs) noexcept
 Cast a number to a type that will be able to represent all values without loss of precision.
 
template<arithmetic Out, arithmetic In>
constexpr Out narrow (In rhs) noexcept(type_in_range_v< Out, In >)
 Cast numeric values without loss of precision.
 
template<std::unsigned_integral Out, std::unsigned_integral In>
constexpr Out saturate_cast (In rhs) noexcept
 Cast an unsigned number and saturate on overflow.
 
template<arithmetic Out, arithmetic In>
constexpr Out narrow_cast (In rhs) noexcept
 Cast numeric values without loss of precision.
 
template<std::integral Out, arithmetic In>
constexpr Out truncate (In rhs) noexcept
 
template<std::integral Out, std::integral In>
constexpr Out char_cast (In rhs) noexcept
 Cast a character.
 
template<std::integral Out>
constexpr Out char_cast (std::byte rhs) noexcept
 
template<std::unsigned_integral OutType, std::unsigned_integral InType>
constexpr OutType low_bit_cast (InType value) noexcept
 Return the low half of the input value.
 
template<std::unsigned_integral OutType, std::unsigned_integral InType>
constexpr OutType high_bit_cast (InType value) noexcept
 Return the upper half of the input value.
 
template<std::unsigned_integral OutType, std::unsigned_integral InType>
constexpr OutType merge_bit_cast (InType hi, InType lo) noexcept
 Return the upper half of the input value.
 
constexpr auto to_underlying (scoped_enum auto rhs) noexcept
 
template<typename T >
requires (requires(T&& x) { static_cast<bool>(std::forward<T>(x)); })
constexpr bool to_bool (T &&rhs) noexcept
 
datum decode_BON8 (std::span< const std::byte > buffer)
 Decode BON8 message from buffer.
 
datum decode_BON8 (bstring const &buffer)
 Decode BON8 message from buffer.
 
datum decode_BON8 (bstring_view buffer)
 Decode BON8 message from buffer.
 
bstring encode_BON8 (datum const &value)
 Encode a value to a BON8 message.
 
bstring gzip_decompress (std::span< std::byte const > bytes, std::size_t max_size=0x01000000)
 
bstring gzip_decompress (std::filesystem::path const &path, std::size_t max_size=0x01000000)
 
bstring inflate (std::span< std::byte const > bytes, std::size_t &offset, std::size_t max_size=0x0100 '0000)
 Inflate compressed data using the deflate algorithm bytes should include at least 32 bit of trailer, for the overflow check which will slightly overrun the actual compressed data for performance reasons.
 
datum parse_JSON (std::string_view text)
 Parse a JSON string.
 
datum parse_JSON (std::string const &text)
 
datum parse_JSON (char const *text)
 
datum parse_JSON (std::filesystem::path const &path)
 Parse a JSON string.
 
std::string format_JSON (datum const &root)
 Dump an datum object into a JSON string.
 
bstring zlib_decompress (std::span< std::byte const > bytes, std::size_t max_size=0x01000000)
 
bstring zlib_decompress (std::filesystem::path const &path, std::size_t max_size=0x01000000)
 
constexpr matrix3 color_primaries_to_RGBtoXYZ (float wx, float wy, float rx, float ry, float gx, float gy, float bx, float by) noexcept
 
float Rec2100_linear_to_gamma (float L) noexcept
 
float Rec2100_gamma_to_linear (float N) noexcept
 
std::string_view to_string (semantic_color rhs) noexcept
 
semantic_color semantic_color_from_string (std::string_view str)
 
float sRGB_linear_to_gamma (float u) noexcept
 
float sRGB_gamma_to_linear (float u) noexcept
 
auto sRGB_linear16_to_gamma8_table_generator () noexcept
 
uint8_t sRGB_linear16_to_gamma8 (float16 u) noexcept
 
auto sRGB_gamma8_to_linear16_table_generator () noexcept
 
float16 sRGB_gamma8_to_linear16 (uint8_t u) noexcept
 
color color_from_sRGB (float r, float g, float b, float a) noexcept
 
color color_from_sRGB (uint8_t r, uint8_t g, uint8_t b, uint8_t a) noexcept
 
color color_from_sRGB (std::string_view str)
 
template<typename It >
generator< cmdln_optioncommand_line_parser (It first, It last, std::string_view options_with_arguments)
 A POSIX command line parser.
 
void console_start () noexcept
 Initialize the console.
 
void console_output (std::string_view text, std::ostream &output=std::cout) noexcept
 Output text to the console.
 
detail::counterget_global_counter_if (std::string const &name)
 
constexpr char32_t CP1252_to_UTF32 (char inputCharacter) noexcept
 
std::array< uint32_t, 4 > cpu_id_x64_result cpu_id_x64 (uint32_t cpu_id_leaf)
 
template<int Bit>
bool cpu_id_leaf1_ecx ()
 
template<int Bit>
bool cpu_id_leaf1_edx ()
 
template<int Bit>
bool cpu_id_leaf7_ebx ()
 
template<int Bit>
bool cpu_id_leaf7_ecx ()
 
template<int Bit>
bool cpu_id_leaf7_edx ()
 
bool cpu_has_fpu ()
 
bool cpu_has_vme ()
 
bool cpu_has_de ()
 
bool cpu_has_pse ()
 
bool cpu_has_tsc ()
 
bool cpu_has_msr ()
 
bool cpu_has_pae ()
 
bool cpu_has_mce ()
 
bool cpu_has_cx8 ()
 
bool cpu_has_apic ()
 
bool cpu_has_sep ()
 
bool cpu_has_mtrr ()
 
bool cpu_has_pge ()
 
bool cpu_has_mca ()
 
bool cpu_has_cmov ()
 
bool cpu_has_pat ()
 
bool cpu_has_pse_36 ()
 
bool cpu_has_psn ()
 
bool cpu_has_clfsh ()
 
bool cpu_has_ds ()
 
bool cpu_has_acpi ()
 
bool cpu_has_mmx ()
 
bool cpu_has_fxsr ()
 
bool cpu_has_sse ()
 
bool cpu_has_sse2 ()
 
bool cpu_has_ss ()
 
bool cpu_has_htt ()
 
bool cpu_has_tm ()
 
bool cpu_has_ia64 ()
 
bool cpu_has_pbe ()
 
bool cpu_has_sse3 ()
 
bool cpu_has_pclmulqdq ()
 
bool cpu_has_dtes64 ()
 
bool cpu_has_monitor ()
 
bool cpu_has_ds_cpl ()
 
bool cpu_has_vmx ()
 
bool cpu_has_smx ()
 
bool cpu_has_est ()
 
bool cpu_has_tm2 ()
 
bool cpu_has_ssse3 ()
 
bool cpu_has_cnxt_id ()
 
bool cpu_has_sdbg ()
 
bool cpu_has_fma ()
 
bool cpu_has_cx16 ()
 
bool cpu_has_xtpr ()
 
bool cpu_has_pdcm ()
 
bool cpu_has_pcid ()
 
bool cpu_has_dca ()
 
bool cpu_has_sse4_1 ()
 
bool cpu_has_sse4_2 ()
 
bool cpu_has_x2apic ()
 
bool cpu_has_movbe ()
 
bool cpu_has_popcnt ()
 
bool cpu_has_tsc_deadline ()
 
bool cpu_has_aes ()
 
bool cpu_has_xsave ()
 
bool cpu_has_osxsave ()
 
bool cpu_has_avx ()
 
bool cpu_has_f16c ()
 
bool cpu_has_rdrnd ()
 
bool cpu_has_hypervisor ()
 
bool cpu_stepping ()
 
bool cpu_model_id ()
 
bool cpu_family_id ()
 
bool cpu_has_fsgsbase ()
 
bool cpu_has_tsc_adjust ()
 
bool cpu_has_sgx ()
 
bool cpu_has_bmi1 ()
 
bool cpu_has_hle ()
 
bool cpu_has_avx2 ()
 
bool cpu_has_smep ()
 
bool cpu_has_bmi2 ()
 
bool cpu_has_erms ()
 
bool cpu_has_invpcid ()
 
bool cpu_has_rtm ()
 
bool cpu_has_pqm ()
 
bool cpu_has_deprecated_fpu_cs_ds ()
 
bool cpu_has_mpx ()
 
bool cpu_has_pqe ()
 
bool cpu_has_avx512_f ()
 
bool cpu_has_avx512_dq ()
 
bool cpu_has_rdseed ()
 
bool cpu_has_adx ()
 
bool cpu_has_smap ()
 
bool cpu_has_avx512_ifma ()
 
bool cpu_has_pcommit ()
 
bool cpu_has_clflushopt ()
 
bool cpu_has_clwb ()
 
bool cpu_has_intelpt ()
 
bool cpu_has_avx512_pf ()
 
bool cpu_has_avx512_er ()
 
bool cpu_has_avx512_cd ()
 
bool cpu_has_sha ()
 
bool cpu_has_avx512_bw ()
 
bool cpu_has_avx512_vl ()
 
bool cpu_has_prefetchwt1 ()
 
bool cpu_has_avx512_vbmi ()
 
bool cpu_has_umip ()
 
bool cpu_has_pku ()
 
bool cpu_has_ospke ()
 
bool cpu_has_waitpkg ()
 
bool cpu_has_avx512_vmbi2 ()
 
bool cpu_has_shstk ()
 
bool cpu_has_gfni ()
 
bool cpu_has_vaes ()
 
bool cpu_has_vpclmulqdq ()
 
bool cpu_has_avx512_vnni ()
 
bool cpu_has_avx512_bitalg ()
 
bool cpu_has_avx512_vpopcntdq ()
 
bool cpu_has_5level_paging ()
 
int cpu_has_mawau ()
 
bool cpu_has_rdpid ()
 
bool cpu_has_cldemote ()
 
bool cpu_has_movdir ()
 
bool cpu_has_movdir64b ()
 
bool cpu_has_sgx_lc ()
 
bool cpu_has_avx512_4vnniw ()
 
bool cpu_has_avx512_4fmaps ()
 
bool cpu_has_fsrm ()
 
bool cpu_has_pconfig ()
 
bool cpu_has_ibt ()
 
bool cpu_has_spec_ctrl ()
 
bool cpu_has_stibp ()
 
bool cpu_has_capabilities ()
 
bool cpu_has_ssbd ()
 
std::pair< int, char ** > crt_start (int argc, char **argv, void *instance, int show_cmd)
 Start the hikogui system.
 
std::pair< int, char ** > crt_start (void *instance, int show_cmd)
 Start the hikogui system.
 
std::pair< int, char ** > crt_start (int argc, char **argv)
 Start the hikogui system.
 
int crt_finish (int argc, char **argv, int exit_code)
 Finish the hikogui system.
 
void prepare_debug_break () noexcept
 
template<std::invocable<> Func>
 defer (Func &&) -> defer< std::remove_cvref_t< Func > >
 
bool dialog (dialog_type type, std::string_view title, std::string_view text)
 Display a modal dialog.
 
void dialog_ok (std::string_view title, std::string_view message) noexcept
 
bool dialog_yes_no (std::string_view title, std::string_view message) noexcept
 
bool dialog_yes_no_cancel (std::string_view title, std::string_view message)
 
template<std::unsigned_integral T>
byte_swap (T x) noexcept
 
template<std::integral T>
little_to_native (T x)
 
template<std::integral T>
big_to_native (T x)
 
template<std::integral T>
native_to_little (T x)
 
template<std::integral T>
native_to_big (T x)
 
template<numeric T>
hi_force_inline T load (void const *src) noexcept
 Load an integer from unaligned memory in native byte-order.
 
template<numeric T>
hi_force_inline T load_le (void const *src) noexcept
 Load an integer from unaligned memory in little-endian byte-order.
 
template<numeric T>
hi_force_inline T load_be (void const *src) noexcept
 Load an integer from unaligned memory in big-endian byte-order.
 
template<std::unsigned_integral T>
hi_force_inline void unaligned_load_le (T &r, void const *src) noexcept
 Load data from memory.
 
template<std::unsigned_integral T>
hi_force_inline void unaligned_load_le (T &r, void const *src, size_t size, size_t offset=0) noexcept
 Load data from memory.
 
template<typename ValueType , typename NameType , typename... Rest>
 enum_metadata (ValueType const &, NameType const &, Rest const &...) -> enum_metadata< ValueType, enum_metadata_name_t< NameType >,(sizeof...(Rest)+2)/2 >
 
template<std::size_t N>
 fixed_string (char const (&str)[N]) -> fixed_string< N - 1 >
 
constexpr float cvtsh_ss (uint16_t value) noexcept
 
constexpr uint16_t cvtss_sh (float value) noexcept
 
constexpr int format_count (std::string_view fmt) noexcept
 Count arguments of a std::format format string.
 
std::unique_ptr< formula_nodeparse_formula (formula_parse_context &context)
 Parse an formula.
 
std::unique_ptr< formula_nodeparse_formula (std::string_view::const_iterator first, std::string_view::const_iterator last)
 Parse an formula.
 
std::unique_ptr< formula_nodeparse_formula (std::string_view text)
 Parse an formula.
 
std::string_view::const_iterator find_end_of_formula (std::string_view::const_iterator first, std::string_view::const_iterator last, std::string_view terminating_string)
 Find the end of an formula.
 
template<typename Proto , typename Func >
auto make_function (Func &&func)
 
template<typename Proto , typename Func >
auto make_async_function (Func &&func)
 
constexpr axis operator& (axis const &lhs, axis const &rhs) noexcept
 
constexpr axis operator| (axis const &lhs, axis const &rhs) noexcept
 
constexpr bool any (axis const &rhs) noexcept
 
std::tuple< bool, std::size_t, bool, std::size_t_parse_spreadsheet_address (std::string_view &address)
 
std::pair< std::size_t, std::size_tparse_spreadsheet_address (std::string_view address, std::size_t start_column_nr=0, std::size_t start_row_nr=0)
 Parse a spreadsheet address.
 
std::tuple< std::size_t, std::size_t, std::size_t, std::size_tparse_spreadsheet_range (std::string_view address, std::size_t start_column_nr=0, std::size_t start_row_nr=0)
 
constexpr translate3 translate_z (float z) noexcept
 
constexpr extent2 sub_pixel_size (subpixel_orientation orientation) noexcept
 Get the size of a sub-pixel based on the sub-pixel orientation.
 
constexpr global_state_type operator| (global_state_type lhs, global_state_type rhs) noexcept
 
constexpr global_state_type operator& (global_state_type lhs, global_state_type rhs) noexcept
 
constexpr global_state_type operator~ (global_state_type rhs) noexcept
 
constexpr bool to_bool (global_state_type rhs) noexcept
 
constexpr bool is_system_running (global_state_type rhs) noexcept
 
constexpr bool is_system_shutting_down (global_state_type rhs) noexcept
 
bool is_system_running () noexcept
 
bool is_system_shutting_down () noexcept
 
void set_log_level (global_state_type log_level) noexcept
 
bool global_state_disable (global_state_type subsystem, std::memory_order order=std::memory_order::seq_cst) noexcept
 Disable a subsystem.
 
bool global_state_enable (global_state_type subsystem, std::memory_order order=std::memory_order::seq_cst) noexcept
 Enable a subsystem.
 
void composit (pixel_map< sfloat_rgba16 > &dst, hi::color color, graphic_path const &mask) noexcept
 Composit color onto the destination image where the mask is solid.
 
void composit (pixel_map< sfloat_rgba16 > &dst, graphic_path const &mask) noexcept
 Composit color onto the destination image where the mask is solid.
 
void fill (pixel_map< sdf_r8 > &dst, graphic_path const &path) noexcept
 Fill a signed distance field image from the given path.
 
constexpr keyboard_focus_group operator& (keyboard_focus_group const &lhs, keyboard_focus_group const &rhs) noexcept
 
constexpr keyboard_focus_group operator| (keyboard_focus_group const &lhs, keyboard_focus_group const &rhs) noexcept
 
constexpr bool any (keyboard_focus_group group) noexcept
 
constexpr keyboard_modifiers operator| (keyboard_modifiers const &lhs, keyboard_modifiers const &rhs) noexcept
 
constexpr keyboard_modifiers operator& (keyboard_modifiers const &lhs, keyboard_modifiers const &rhs) noexcept
 
constexpr keyboard_modifiersoperator|= (keyboard_modifiers &lhs, keyboard_modifiers const &rhs) noexcept
 
constexpr bool any (keyboard_modifiers const &rhs) noexcept
 
bool operator>= (keyboard_modifiers const &lhs, keyboard_modifiers const &rhs)=delete
 
keyboard_modifiers to_keyboard_modifiers (std::string_view s)
 Parse a key-binding modifier name.
 
std::string to_string (keyboard_modifiers modifiers)
 
std::ostreamoperator<< (std::ostream &lhs, keyboard_modifiers const &rhs)
 
constexpr keyboard_state operator| (keyboard_state const &lhs, keyboard_state const &rhs) noexcept
 
constexpr keyboard_state operator& (keyboard_state const &lhs, keyboard_state const &rhs) noexcept
 
constexpr keyboard_state & operator|= (keyboard_state &lhs, keyboard_state const &rhs) noexcept
 
bool operator>= (keyboard_state const &lhs, keyboard_state const &rhs)=delete
 
constexpr bool any (keyboard_state const &rhs) noexcept
 
constexpr keyboard_virtual_key to_keyboard_virtual_key (std::string_view s)
 
keyboard_virtual_key to_keyboard_virtual_key (int key_code, bool extended, keyboard_modifiers modifiers)
 
constexpr std::string_view to_string_view (keyboard_virtual_key key) noexcept
 
std::string to_string (keyboard_virtual_key key) noexcept
 
std::ostreamoperator<< (std::ostream &lhs, keyboard_virtual_key const &rhs)
 
std::string_view to_string (theme_mode rhs) noexcept
 
std::ostreamoperator<< (std::ostream &lhs, theme_mode rhs)
 
constexpr std::size_t hash_mix_two (std::size_t hash1, std::size_t hash2) noexcept
 
template<typename First , typename Second , typename... Args>
constexpr std::size_t hash_mix (First &&first, Second &&second, Args &&...args) noexcept
 
std::vector< language_tagvariants (std::vector< language_tag > languages)
 Add variants to the list of languages.
 
po_translations parse_po (std::filesystem::path const &path)
 
std::string_view get_translation (std::string_view msgid, long long n=0, std::vector< language * > const &languages=os_settings::languages()) noexcept
 
void add_translation (std::string_view msgid, language const &language, std::vector< std::string > const &plural_forms) noexcept
 
void add_translation (std::string_view msgid, std::string const &language_tag, std::vector< std::string > const &plural_forms) noexcept
 
void add_translation (po_translations const &translations, language const &language) noexcept
 
template<typename T , typename U >
bool convert_overflow (T x, U *r)
 
template<typename T >
bool add_overflow (T lhs, T rhs, T *r)
 
template<typename T >
bool sub_overflow (T lhs, T rhs, T *r)
 
template<typename T >
bool mul_overflow (T lhs, T rhs, T *r) noexcept
 Multiply with overflow detection.
 
jsonpath_node parse_jsonpath_slicing_operator (auto &it, auto it_end, ssize_t first)
 
jsonpath_node parse_jsonpath_integer_indexing_operator (auto &it, auto it_end, ssize_t first)
 
jsonpath_node parse_jsonpath_name_indexing_operator (auto &it, auto it_end, std::string first)
 
jsonpath_node parse_jsonpath_indexing_operator (auto &it, auto it_end)
 
jsonpath_node parse_jsonpath_child_operator (auto &it, auto it_end)
 
std::byte * locked_memory_allocator_allocate (std::size_t n) noexcept
 
void locked_memory_allocator_deallocate (std::byte *p, std::size_t n) noexcept
 
constexpr long long pow10ll (int x) noexcept
 
template<typename Iterator >
auto mean (Iterator first, Iterator last)
 
template<typename Iterator , typename T >
auto stddev (Iterator first, Iterator last, T mean)
 
template<typename T >
constexpr void inplace_max (T &a, T const &b) noexcept
 
template<typename T >
constexpr void inplace_min (T &a, T const &b) noexcept
 
template<typename T >
constexpr void inplace_clamp (T &a, T const &lo, T const &hi) noexcept
 
template<typename T >
constexprabs (T a) noexcept
 
template<std::floating_point T>
constexpr bool almost_equal (T a, T b) noexcept
 
bool equal_ptr (auto *p1, auto *p2) noexcept
 
template<typename T , typename U >
void memswap (T &dst, U &src)
 
template<typename InputIt , typename T >
T * placement_copy (InputIt src, T *dst)
 Copy an object to another memory locations.
 
template<typename InputIt , typename T >
void placement_copy (InputIt src_first, InputIt src_last, T *dst_first)
 Copy objects into a memory location.
 
template<typename T >
T * placement_move (T *src, T *dst)
 Move an object between two memory locations.
 
template<typename T >
void placement_move_within_array (T *src_first, T *src_last, T *dst_first)
 Move an objects between two memory locations.
 
template<typename T >
void placement_move (T *src, T *src_last, T *dst)
 Move an objects between two memory locations.
 
template<typename It , typename... Args>
void construct (It first, It last, Args const &...args)
 Construct a set of objects.
 
template<typename T >
constexpr bool is_aligned (T *p)
 Check if a pointer is properly aligned for the object it is pointing at.
 
template<std::unsigned_integral T>
constexprfloor (T value, T alignment) noexcept
 The greatest multiple of alignment less than or equal to value.
 
template<std::unsigned_integral T>
constexprceil (T value, T alignment) noexcept
 The smallest multiple of alignment greater than or equal to value.
 
template<typename T >
constexpr T * ceil (T *ptr, std::size_t alignment) noexcept
 
template<typename T >
constexpr T * floor (T *ptr, std::size_t alignment) noexcept
 
voidadvance_bytes (void *ptr, std::ptrdiff_t distance) noexcept
 Advance a pointer by a number of bytes.
 
void constadvance_bytes (void const *ptr, std::ptrdiff_t distance) noexcept
 Advance a pointer by a number of bytes.
 
template<typename T >
void cleanupWeakPointers (std::vector< std::weak_ptr< T > > &v) noexcept
 
template<typename K , typename T >
void cleanupWeakPointers (std::unordered_map< K, std::weak_ptr< T > > &v) noexcept
 
template<typename K , typename T >
void cleanupWeakPointers (std::unordered_map< K, std::vector< std::weak_ptr< T > > > &v) noexcept
 
template<typename Value , typename Map , typename Key , typename... Args>
std::shared_ptr< Valuetry_make_shared (Map &map, Key key, Args... args)
 
constexpr network_event operator| (network_event const &lhs, network_event const &rhs) noexcept
 
constexpr network_event operator& (network_event const &lhs, network_event const &rhs) noexcept
 
constexpr network_event & operator|= (network_event &lhs, network_event const &rhs) noexcept
 
constexpr bool any (network_event const &rhs) noexcept
 
constexpr size_t bit (network_event const &rhs) noexcept
 Get the bit index of the single bit of the network_event mask.
 
constexpr network_event network_event_from_win32 (long rhs) noexcept
 
constexpr network_error network_error_from_win32 (int rhs) noexcept
 
constexpr network_events network_events_from_win32 (WSANETWORKEVENTS const &rhs) noexcept
 
template<std::floating_point T>
constexprpoints_to_dp (T x) noexcept
 Convert points to device independent pixels.
 
constexpr graphic_character_t char_to_graphic_character (char x) noexcept
 
constexpr uint64_t operator_to_int (char const *s) noexcept
 
std::pair< uint8_t, boolbinary_operator_precedence (char const *str) noexcept
 Binary Operator Precedence according to C++.
 
std::pair< uint8_t, booloperator_precedence (char const *str, bool binary) noexcept
 Operator Precedence according to C++.
 
template<typename T >
void copy (pixel_map< T > const &src, pixel_map< T > &dst) noexcept
 
template<int KERNEL_SIZE, typename KERNEL >
void horizontalFilterRow (pixel_row< uint8_t > row, KERNEL kernel) noexcept
 
template<int KERNEL_SIZE, typename T , typename KERNEL >
void horizontalFilter (pixel_map< T > &pixels, KERNEL kernel) noexcept
 
template<typename T >
void fill (pixel_map< T > &dst) noexcept
 
template<typename T >
void fill (pixel_map< T > &dst, T color) noexcept
 
template<typename T >
void rotate90 (pixel_map< T > &dst, pixel_map< T > const &src) noexcept
 
template<typename T >
void rotate270 (pixel_map< T > &dst, pixel_map< T > const &src) noexcept
 
void mergeMaximum (pixel_map< uint8_t > &dst, pixel_map< uint8_t > const &src) noexcept
 
template<typename T >
void makeTransparentBorder (pixel_map< T > &pixel_map) noexcept
 Make a 1 pixel border on the edge of the pixel_map transparent By copying the pixel value from just beyond the edge and setting the alpha channel to zero.
 
template<typename T , std::size_t N>
std::ostreamoperator<< (std::ostream &os, results< T, N > const &r)
 
template<typename T >
hi_force_inline constexpr results< T, 1 > solvePolynomial (T const &a, T const &b) noexcept
 
template<typename T >
hi_force_inline constexpr results< T, 2 > solvePolynomial (T const &a, T const &b, T const &c) noexcept
 
template<typename T >
hi_force_inline results< T, 3 > solveDepressedCubicTrig (T const &p, T const &q) noexcept
 
template<typename T >
hi_force_inline results< T, 3 > solveDepressedCubicCardano (T const &p, T const &q, T const &D) noexcept
 
template<typename T >
hi_force_inline results< T, 3 > solveDepressedCubic (T const &p, T const &q) noexcept
 
template<typename T >
hi_force_inline constexpr results< T, 3 > solvePolynomial (T const &a, T const &b, T const &c, T const &d) noexcept
 
void generate_seed (void *ptr, size_t size)
 Load a random seed.
 
template<typename Value , typename Range >
constexpr Value get_first (Range &&range)
 
template<typename Range >
constexpr Range::value_type get_first (Range &&range)
 
template<typename Value , typename Range >
constexpr std::vector< Valuemake_vector (Range &&range)
 Make a vector from a view.
 
template<typename Range >
constexpr std::vector< typename Range::value_type > make_vector (Range &&range)
 
__m128 _mm_cvtph_ps_sse2 (__m128i value) noexcept
 
__m128i _mm_cvtps_ph_sse4_1 (__m128 value) noexcept
 
void fill (pixel_map< sfloat_rgba16 > &image, f32x4 color) noexcept
 
void composit (pixel_map< sfloat_rgba16 > &under, pixel_map< sfloat_rgba16 > const &over) noexcept
 
void composit (pixel_map< sfloat_rgba16 > &under, color over, pixel_map< uint8_t > const &mask) noexcept
 
constexpr int8_t make_snorm_r8_value (float rhs) noexcept
 
void fill (pixel_map< srgb_abgr8_pack > &dst, pixel_map< sfloat_rgba16 > const &src) noexcept
 
constexpr uint32_t make_unorm_a2bgr10_pack_value (f32x4 const &rhs) noexcept
 
template<typename Container >
auto recursive_iterator_begin (Container &rhs) noexcept
 Get a recursive iterator from the begin of a recursive container.
 
template<typename Container >
auto recursive_iterator_end (Container &rhs) noexcept
 Get a recursive iterator from one beyond the end of a recursive container.
 
template<typename Container >
auto recursive_iterator_begin (Container const &rhs) noexcept
 Get a recursive iterator from the begin of a recursive container.
 
template<typename Container >
auto recursive_iterator_end (Container const &rhs) noexcept
 Get a recursive iterator from one beyond the end of a recursive container.
 
uint32_t registry_read_current_user_dword (std::string_view path, std::string_view name)
 Read a DWORD registry value from the HKEY_CURRENT_USER.
 
std::vector< std::stringregistry_read_current_user_multi_string (std::string_view path, std::string_view name)
 Read a list of strings from the registry value from the HKEY_CURRENT_USER.
 
constexpr on_overflow_t operator| (on_overflow_t lhs, on_overflow_t rhs) noexcept
 
template<typename T , on_overflow_t OnOverflow>
safe_handle_overflow (T value, bool overflow, bool is_positive) noexcept(OnOverflow !=on_overflow_t::Throw)
 
template<typename T , on_overflow_t OnOverflow, typename U >
safe_convert (U const &rhs) noexcept(OnOverflow !=on_overflow_t::Throw)
 
template<on_overflow_t OnOverflow, typename T , typename U >
make_promote_t< T, U > safe_add (T const &lhs, U const &rhs) noexcept(OnOverflow !=on_overflow_t::Throw)
 
template<on_overflow_t OnOverflow, typename T , typename U >
make_promote_t< T, U > safe_sub (T const &lhs, U const &rhs) noexcept(OnOverflow !=on_overflow_t::Throw)
 
template<on_overflow_t OnOverflow, typename T , typename U >
make_promote_t< T, U > safe_mul (T const &lhs, U const &rhs) noexcept(OnOverflow !=on_overflow_t::Throw)
 
void secure_clear (void *ptr, size_t size) noexcept
 Securely clear memory.
 
void secure_clear (trivially_copyable auto &object) noexcept
 Securely clear an object.
 
template<typename It >
void secure_clear (It first, It last) noexcept
 Securely clear a set of objects.
 
void secure_destroy_at (auto *p)
 
template<typename It >
void secure_destroy (It first, It last)
 Securely destroy objects.
 
template<typename It , typename OutIt >
void secure_uninitialized_move (It first, It last, OutIt d_first)
 Securely move objects.
 
std::unique_ptr< skeleton_nodeparse_skeleton (skeleton_parse_context &context)
 
std::unique_ptr< skeleton_nodeparse_skeleton (std::filesystem::path path, std::string_view::const_iterator first, std::string_view::const_iterator last)
 
std::unique_ptr< skeleton_nodeparse_skeleton (std::filesystem::path path, std::string_view text)
 
std::unique_ptr< skeleton_nodeparse_skeleton (std::filesystem::path path)
 
constexpr bool is_upper (char c) noexcept
 
constexpr bool is_lower (char c) noexcept
 
constexpr bool is_alpha (char c) noexcept
 
constexpr bool is_digit (char c) noexcept
 
constexpr bool is_alpha_num (char c) noexcept
 
constexpr bool is_line_feed (char c) noexcept
 
constexpr bool is_white_space (char c) noexcept
 
constexpr bool is_number_first (char c) noexcept
 
constexpr bool is_name_first (char c) noexcept
 
constexpr bool is_name_next (char c) noexcept
 
constexpr bool is_quote (char c) noexcept
 
constexpr bool is_open_bracket (char c) noexcept
 
constexpr bool is_close_bracket (char c) noexcept
 
constexpr bool is_operator (char c) noexcept
 
constexpr bool is_digit (std::string_view str) noexcept
 
constexpr bool is_alpha (std::string_view str) noexcept
 
constexpr char to_lower (char c) noexcept
 
constexpr char to_upper (char c) noexcept
 
std::string to_lower (std::string_view str) noexcept
 
std::string to_upper (std::string_view str) noexcept
 
constexpr std::string to_title (std::string_view rhs) noexcept
 Convert the current string to using title case.
 
template<size_t N>
constexpr fixed_string< N > to_title (fixed_string< N > const &rhs) noexcept
 Convert the current string to using title case.
 
std::string normalize_lf (std::string_view str) noexcept
 Normalize string to use only line-feeds.
 
std::string make_identifier (std::string_view str) noexcept
 Encode a string to be usable as an id.
 
std::string make_slug (std::string_view str) noexcept
 Create a slug from a string.
 
std::string make_title (std::string_view str) noexcept
 Create a title from a string.
 
template<typename T , size_t N>
requires (sizeof(T) == 1 and (N == 4 or N == 5))
constexpr uint32_t fourcc (T const (&txt)[N]) noexcept
 
template<typename T >
requires (sizeof(T) == 1)
constexpr uint32_t fourcc_from_cstr (T const *txt) noexcept
 
std::string fourcc_to_string (uint32_t x) noexcept
 
constexpr std::size_t string_size (sizeable auto str) noexcept
 
constexpr std::size_t string_size (auto str) noexcept
 
template<typename FirstNeedle , typename... Needles>
std::pair< std::size_t, std::size_tstring_find_any (std::string_view haystack, std::size_t pos, FirstNeedle const &first_needle, Needles const &...needles) noexcept
 
template<typename StringType , typename... Needles>
std::vector< StringType_split (std::string_view haystack, Needles const &...needles) noexcept
 
template<typename... Needles>
std::vector< std::stringsplit (std::string_view haystack, Needles const &...needles) noexcept
 
std::vector< std::stringsplit (std::string_view haystack) noexcept
 
template<typename... Needles>
std::vector< std::string_view > split_view (std::string_view haystack, Needles const &...needles) noexcept
 
std::vector< std::string_view > split_view (std::string_view haystack) noexcept
 
template<typename CharT >
std::basic_string< CharTjoin (std::vector< std::basic_string< CharT > > const &list, std::basic_string_view< CharT > const joiner={}) noexcept
 
template<typename CharT >
std::basic_string< CharTjoin (std::vector< std::basic_string< CharT > > const &list, std::basic_string< CharT > const &joiner) noexcept
 
template<typename CharT >
std::basic_string< CharTjoin (std::vector< std::basic_string< CharT > > const &list, CharT const *joiner) noexcept
 
std::string join (std::vector< std::string_view > const &list, std::string_view const joiner={}) noexcept
 
template<typename It >
std::pair< int, intcount_line_and_columns (It begin, It const end)
 
template<typename T , std::size_t N>
constexpr auto to_array_without_last (T(&rhs)[N]) noexcept
 Create an std::array from a one dimensional array, without the last element.
 
template<typename T , std::size_t N>
constexpr auto to_array_without_last (T(&&rhs)[N]) noexcept
 Create an std::array from a one dimensional array, without the last element.
 
std::string lstrip (std::string_view haystack, std::string needle=" \t\r\n\f") noexcept
 
std::string rstrip (std::string_view haystack, std::string needle=" \t\r\n\f") noexcept
 
std::string strip (std::string_view haystack, std::string needle=" \t\r\n\f") noexcept
 
std::vector< std::stringZZWSTR_to_string (wchar_t *first, wchar_t *last, ssize_t nr_strings=-1)
 Convert a win32 zero terminated list of zero terminated strings.
 
charmake_cstr (char const *c_str, std::size_t size=-1) noexcept
 Copy a std::string to new memory.
 
charmake_cstr (std::string const &s) noexcept
 Copy a std::string to new memory.
 
template<typename T >
requires (is_atomic_v<T>)
T::value_type start_subsystem (T &check_variable, typename T::value_type off_value, typename T::value_type(*init_function)(), void(*deinit_function)())
 Start a sub-system.
 
bool start_subsystem (global_state_type state_bit, bool(*init_function)(), void(*deinit_function)())
 Start a sub-system.
 
template<typename T >
requires (is_atomic_v<T>)
T::value_type start_subsystem_or_terminate (T &check_variable, typename T::value_type off_value, typename T::value_type(*init_function)(), void(*deinit_function)())
 Start a sub-system.
 
void stop_subsystem (void(*deinit_function)())
 Stop a sub-system.
 
void start_system () noexcept
 Start the system.
 
void shutdown_system () noexcept
 Shutdown the system.
 
template<fixed_string Head, fixed_string... Tail>
std::string tag_at_index_impl (std::size_t index) noexcept
 
template<fixed_string... Tags>
std::string tag_at_index (std::size_t index) noexcept
 
template<fixed_string Head, fixed_string... Tail>
std::size_t index_of_tag_impl (std::string tag, std::size_t index) noexcept
 
template<fixed_string... Tags>
std::size_t index_of_tag (std::string tag) noexcept
 
template<fixed_string Needle, fixed_string Head, fixed_string... Tail>
constexpr std::size_t index_of_tag_impl (std::size_t index) noexcept
 
template<fixed_string Needle, fixed_string... Haystack>
constexpr std::size_t index_of_tag () noexcept
 
template<fixed_string Needle, fixed_string... Haystack>
constexpr bool has_tag () noexcept
 
template<fixed_string... Haystack>
bool has_tag (std::string needle) noexcept
 
constexpr font_weight font_weight_from_int (numeric_integral auto rhs)
 Convert a font weight value between 50 and 1000 to a font weight.
 
font_weight font_weight_from_string (std::string_view rhs)
 
constexpr char constto_const_string (font_weight const &x) noexcept
 
std::string to_string (font_weight const &x) noexcept
 
char to_char (font_weight const &x) noexcept
 
constexpr int to_int (font_weight const &x) noexcept
 
std::ostreamoperator<< (std::ostream &lhs, font_weight const &rhs)
 
bool almost_equal (font_weight const &lhs, font_weight const &rhs) noexcept
 
constexpr auto font_weight_alternative_table_generator () noexcept
 
constexpr font_weight font_weight_alterative (font_weight weight, int i) noexcept
 
template<typename It , typename ItEnd >
aarectangle line_metrics_bounding_rectangle (It first, ItEnd last)
 Calculate the bounding box around line metrics.
 
template<typename It , typename ItEnd >
void update_line_metrics_offset (It first, ItEnd last) noexcept
 
template<typename It , typename ItEnd >
void update_line_metrics_vertical_alignment (It first, ItEnd last, vertical_alignment alignment)
 Vertically align the given line metrics.
 
template<typename It , typename ItEnd , typename CharInfoFunc >
void replace_line_metrics (It first, ItEnd last, CharInfoFunc const &char_info_func, float max_line_width, float line_spacing, float paragraph_spacing, vertical_alignment alignment, std::vector< line_metrics > &lines) noexcept
 
std::string_view to_string (text_decoration const &rhs) noexcept
 
std::ostreamoperator<< (std::ostream &lhs, text_decoration const &rhs)
 
constexpr text_phrasing_mask to_text_phrasing_mask (text_phrasing const &rhs) noexcept
 
constexpr text_phrasing_mask operator& (text_phrasing_mask const &lhs, text_phrasing_mask const &rhs) noexcept
 
constexpr text_phrasing_mask operator| (text_phrasing_mask const &lhs, text_phrasing_mask const &rhs) noexcept
 
constexpr bool all (text_phrasing_mask const &rhs) noexcept
 
constexpr bool to_bool (text_phrasing_mask const &rhs) noexcept
 
thread_id current_thread_id () noexcept
 Get the current thread id.
 
void set_thread_name (std::string_view name) noexcept
 Set the name of the current thread.
 
std::string get_thread_name (thread_id id) noexcept
 Get the thread name of a thread id.
 
std::vector< boolprocess_affinity_mask () noexcept
 Get the current process CPU affinity mask.
 
std::vector< boolset_thread_affinity_mask (std::vector< bool > const &mask)
 Set the current thread CPU affinity mask.
 
std::vector< boolset_thread_affinity (std::size_t cpu_id)
 Set the current thread CPU affinity to a single CPU.
 
std::size_t advance_thread_affinity (std::size_t &cpu) noexcept
 Advance thread affinity to the next CPU.
 
std::size_t current_cpu_id () noexcept
 Get the current CPU id.
 
std::string format_engineering (std::chrono::nanoseconds duration)
 
constexpr char constto_const_string (tokenizer_name_t name) noexcept
 
std::ostreamoperator<< (std::ostream &lhs, tokenizer_name_t rhs)
 
std::vector< token_tparseTokens (std::string_view text) noexcept
 
std::vector< token_tparseTokens (std::string_view::const_iterator first, std::string_view::const_iterator last) noexcept
 
gstring to_gstring (std::u32string_view rhs, char32_t new_line_char=U'\u2029') noexcept
 Convert a UTF-32 string to a grapheme-string.
 
gstring to_gstring (std::string_view rhs, char32_t new_line_char=U'\u2029') noexcept
 Convert a UTF-8 string to a grapheme-string.
 
gstring to_gstring (std::string const &rhs, char32_t new_line_char=U'\u2029') noexcept
 Convert a UTF-8 string to a grapheme-string.
 
std::string to_string (gstring_view rhs) noexcept
 
std::string to_string (gstring const &rhs) noexcept
 
template<typename It , typename GetDescription , typename SetCodePoint , typename SetTextDirection >
std::pair< It, std::vector< unicode_bidi_class > > unicode_bidi (It first, It last, GetDescription get_description, SetCodePoint set_code_point, SetTextDirection set_text_direction, unicode_bidi_context const &context={})
 Reorder a given range of characters based on the unicode_bidi algorithm.
 
template<typename It , typename EndIt , typename DescriptionFunc >
It unicode_bidi_control_filter (It first, EndIt last, DescriptionFunc const &description_func)
 Removes control characters which will not survive the bidi-algorithm.
 
constexpr bool is_isolate_starter (unicode_bidi_class const &rhs) noexcept
 
constexpr bool is_isolate_formatter (unicode_bidi_class const &rhs) noexcept
 
constexpr bool is_NI (unicode_bidi_class const &rhs) noexcept
 
constexpr bool is_control (unicode_bidi_class const &rhs) noexcept
 
constexpr unicode_bidi_class unicode_bidi_class_from_string (std::string_view str) noexcept
 
std::ostreamoperator<< (std::ostream &lhs, unicode_break_opportunity const &rhs)
 
constexpr bool is_LC (unicode_general_category const &rhs) noexcept
 
constexpr bool is_L (unicode_general_category const &rhs) noexcept
 
constexpr bool is_M (unicode_general_category const &rhs) noexcept
 
constexpr bool is_Mn_or_Mc (unicode_general_category const &rhs) noexcept
 
constexpr bool is_N (unicode_general_category const &rhs) noexcept
 
constexpr bool is_P (unicode_general_category const &rhs) noexcept
 
constexpr bool is_S (unicode_general_category const &rhs) noexcept
 
constexpr bool is_Z (unicode_general_category const &rhs) noexcept
 
constexpr bool is_Zp_or_Zl (unicode_general_category const &rhs) noexcept
 
constexpr bool is_C (unicode_general_category const &rhs) noexcept
 
constexpr bool is_visible (unicode_general_category const &rhs) noexcept
 
constexpr bool is_noncharacter (char32_t rhs) noexcept
 
constexpr float unicode_line_break_width (std::vector< float >::const_iterator first, std::vector< float >::const_iterator last) noexcept
 Calculate the width of a line.
 
template<typename It , typename ItEnd , typename DescriptionFunc >
unicode_break_vector unicode_line_break (It first, ItEnd last, DescriptionFunc const &description_func)
 The unicode line break algorithm UAX #14.
 
constexpr std::vector< size_t > unicode_line_break (unicode_break_vector const &opportunities, std::vector< float > const &widths, float maximum_line_width)
 Unicode break lines.
 
constexpr unicode_normalization_mask decompose_newline_to (char32_t new_line_char) noexcept
 
constexpr bool any (unicode_normalization_mask const &rhs) noexcept
 
constexpr unicode_normalization_mask operator| (unicode_normalization_mask const &lhs, unicode_normalization_mask const &rhs) noexcept
 
constexpr unicode_normalization_mask operator& (unicode_normalization_mask const &lhs, unicode_normalization_mask const &rhs) noexcept
 
constexpr unicode_normalization_mask operator& (unicode_normalization_mask const &lhs, unicode_decomposition_type const &rhs) noexcept
 
std::u32string unicode_NFD (std::u32string_view text, unicode_normalization_mask normalization_mask=unicode_normalization_mask::NFD) noexcept
 Convert text to Unicode-NFD normal form.
 
std::u32string unicode_NFC (std::u32string_view text, unicode_normalization_mask normalization_mask=unicode_normalization_mask::NFD) noexcept
 Convert text to Unicode-NFC normal form.
 
std::u32string unicode_NFKD (std::u32string_view text, unicode_normalization_mask normalization_mask=unicode_normalization_mask::NFKD) noexcept
 Convert text to Unicode-NFKD normal form.
 
std::u32string unicode_NFKC (std::u32string_view text, unicode_normalization_mask normalization_mask=unicode_normalization_mask::NFKD) noexcept
 Convert text to Unicode-NFKC normal form.
 
template<typename It , typename ItEnd , typename DescriptionFunc >
unicode_break_vector unicode_sentence_break (It first, ItEnd last, DescriptionFunc const &description_func)
 The unicode word break algorithm UAX#29.
 
bool breaks_grapheme (char32_t code_point, grapheme_break_state &state) noexcept
 Check if for a grapheme break before the given code-point.
 
void wrap_lines (auto first, auto last, float max_width, auto get_width, auto get_code_point, auto set_code_point) noexcept
 Wrap lines in text that are too wide.
 
template<typename It , typename ItEnd , typename DescriptionFunc >
unicode_break_vector unicode_word_break (It first, ItEnd last, DescriptionFunc const &description_func)
 The unicode word break algorithm UAX#29.
 
template<typename T , typename U >
bool compare_store (T &lhs, U &&rhs) noexcept
 Compare then store if there was a change.
 
template<typename T , typename U >
bool compare_store (std::atomic< T > &lhs, U &&rhs) noexcept
 Compare then store if there was a change.
 
template<awaitable... Others>
 when_any (Others &&...) -> when_any< awaitable_cast_t< std::decay_t< Others > >... >
 

Variables

constexpr std::size_t hardware_destructive_interference_size = 128
 
constexpr std::size_t hardware_constructive_interference_size = 64
 
constexpr auto audio_device_state_metadata
 
constexpr auto audio_direction_metadata
 
constexpr auto surround_mode_icons
 
constexpr auto surround_mode_names
 
constexpr auto surround_mode_short_names
 
constexpr auto surround_mode_speaker_mappings
 
constexpr auto bounds_test = interval<longreg_t>{1, 5}
 
constexpr matrix3 Rec2020_to_XYZ = color_primaries_to_RGBtoXYZ(0.3127f, 0.3290f, 0.708f, 0.292f, 0.170f, 0.797f, 0.131f, 0.046f)
 
constexpr matrix3 XYZ_to_Rec2020 = ~Rec2020_to_XYZ
 
constexpr matrix3 Rec2100_to_XYZ = Rec2020_to_XYZ
 
constexpr matrix3 XYZ_to_Rec2100 = XYZ_to_Rec2020
 
constexpr auto semantic_color_metadata
 
constexpr matrix3 sRGB_to_XYZ
 
constexpr matrix3 XYZ_to_sRGB
 
auto sRGB_linear16_to_gamma8_table = sRGB_linear16_to_gamma8_table_generator()
 
auto sRGB_gamma8_to_linear16_table = sRGB_gamma8_to_linear16_table_generator()
 
template<fixed_string Tag>
detail::tagged_counter< Tag > global_counter
 
std::array< uint32_t, 4 > cpu_id_leaf1 = cpu_id_x64(1)
 
std::array< uint32_t, 4 > cpu_id_leaf7 = cpu_id_x64(7)
 
template<typename T >
constexpr bool is_datum_type_v = is_datum_type<T>::value
 
constexpr uint32_t float16_bias = 15
 
constexpr uint32_t float32_bias = 127
 
constexpr uint32_t f32_to_f16_adjustment_exponent = float32_bias - float16_bias
 
constexpr uint32_t f32_to_f16_lowest_normal_exponent = 0x01 + f32_to_f16_adjustment_exponent
 
constexpr uint32_t f32_to_f16_infinite_exponent = 0x1f + f32_to_f16_adjustment_exponent
 
constexpr uint32_t f32_to_f16_adjustment = f32_to_f16_adjustment_exponent << 23
 
constexpr uint32_t f32_to_f16_lowest_normal = f32_to_f16_lowest_normal_exponent << 23
 
constexpr uint32_t f32_to_f16_infinite = f32_to_f16_infinite_exponent << 23
 
unfair_recursive_mutex gfx_system_mutex
 Global mutex for GUI elements, like gfx_system, gfx_device, Windows and Widgets.
 
constexpr auto subpixel_orientation_metadata
 
std::atomic< global_state_type > global_state = global_state_type::log_level_default
 The global state of the hikogui framework.
 
constexpr auto keyboard_virtual_key_metadata
 
constexpr auto theme_mode_metadata = enum_metadata{theme_mode::light, "light", theme_mode::dark, "dark"}
 
constexpr long long pow10_table [20]
 
template<std::floating_point T>
constexpr auto points_per_inch_v = T{72.0}
 The number of points (typography) per inch.
 
template<std::floating_point T>
constexpr auto dp_per_inch_v = T{80.0}
 The number of device independent pixels per inch.
 
template<std::floating_point T>
constexpr auto points_to_dp_scale_v = dp_per_inch_v<T> / points_per_inch_v<T>
 
constexpr double points_per_inch = points_per_inch_v<double>
 
constexpr double dp_per_inch = dp_per_inch_v<double>
 
hilet font_weight_from_string_table
 
constexpr auto font_weight_alternative_table = font_weight_alternative_table_generator()
 
constexpr auto semantic_text_style_metadata
 
constexpr auto text_decoration_metadata
 
constexpr auto text_phrasing_metadata
 
constexpr std::size_t maximum_num_cpus = 64
 
template<typename T >
constexpr bool is_numeric_signed_integral_v = is_numeric_signed_integral<T>::value
 
template<typename T >
constexpr bool is_numeric_unsigned_integral_v = is_numeric_unsigned_integral<T>::value
 
template<typename T >
constexpr bool is_numeric_integral_v = is_numeric_integral<T>::value
 
template<typename T >
constexpr bool is_numeric_v = is_numeric<T>::value
 
template<typename T >
constexpr bool is_character_v = is_character<T>::value
 
template<std::size_t N>
constexpr bool has_intxx_v = has_intxx<N>::value
 
template<std::size_t N>
constexpr bool has_uintxx_v = has_uintxx<N>::value
 
template<std::size_t N>
constexpr bool has_floatxx_v = has_floatxx<N>::value
 
template<typename T >
constexpr bool has_value_type_v = has_value_type<T>::value
 
template<typename T >
constexpr bool has_add_callback_v = has_add_callback<T>::value
 
template<typename BaseType , typename DerivedType >
constexpr bool is_decayed_base_of_v = is_decayed_base_of<BaseType,DerivedType>::value
 
template<typename DerivedType , typename BaseType >
constexpr bool is_derived_from_v = is_derived_from<DerivedType,BaseType>::value
 
template<typename DerivedType , typename BaseType >
constexpr bool is_decayed_derived_from_v = is_decayed_derived_from<DerivedType,BaseType>::value
 
template<typename Context , typename Expected >
constexpr bool is_different_v = not std::is_same_v<std::decay_t<Context>,std::decay_t<Expected>>
 If the types are different.
 
template<typename T >
constexpr bool is_atomic_v = is_atomic<T>::value
 
template<typename Out , typename In >
constexpr bool type_in_range_v
 All values of numeric type In can be represented without loss of precision by numeric type Out.
 
template<typename Context , typename Expected , typename... OtherExpected>
constexpr bool is_forward_of_v = is_forward_of<Context, Expected, OtherExpected...>::value
 
constexpr auto ucd_compositions
 
constexpr auto ucd_decompositions
 
constexpr auto ucd_descriptions
 
constexpr auto ucd_index
 
constexpr char32_t unicode_replacement_character = U'\ufffd'
 
constexpr char32_t unicode_LS = U'\u2028'
 
constexpr char32_t unicode_PS = U'\u2029'
 

Detailed Description

DOXYGEN BUG.

Doxygen can't handle namespace hi::inline v1 {} syntax. All files should be changed to use old-style inline namespace syntax.

Typedef Documentation

◆ await_resume_result_t

template<typename T >
using v1::await_resume_result_t = hi_typename await_resume_result<T>::type

Get the result type of an awaitable.

This is type return type of the await_resume() member function.

◆ awaitable_cast_t

template<typename T >
using v1::awaitable_cast_t = hi_typename awaitable_cast<T>::type

Resolve the type that is directly-awaitable.

This function may use operator co_await() to retrieve the actual awaitable type.

◆ common_integer_t

template<std::integral L, std::integral... R>
using v1::common_integer_t = common_integer<L, R...>::type

Get an integer type that will fit all values from all template parameters.

If there is a mix of signed and unsigned integer types, then:

  1. all unsigned integers are upgraded to a larger signed integer, then
  2. the largest signed integer is returned.

If all integers are unsigned or all integers are signed, then:

  1. the largest integer is returned.
Template Parameters
LAn integer type.
ROther integer types.

◆ copy_cv_t

Type-trait to copy const volatile qualifiers from one type to another.

◆ forward_value_t

Get the storage type of the forward_value functor.

Use this type for the variables that are assigned with the return value of the forward_value functor.

◆ jsonpath_node

using v1::jsonpath_node
Initial value:
std::variant<
jsonpath_root, jsonpath_current, jsonpath_wildcard, jsonpath_descend, jsonpath_names, jsonpath_indices, jsonpath_slice>

◆ make_string_t

type-trait to convert a character to a string type.

◆ make_string_view_t

type-trait to convert a character to a string_view type.

◆ os_handle

Minimum offset between two objects to avoid false sharing.

Guaranteed to be at least alignof(std::max_align_t) Part of c++17 but never implemented by clang or gcc. Maximum size of contiguous memory to promote true sharing. Guaranteed to be at least alignof(std::max_align_t) Part of c++17 but never implemented by clang or gcc.

◆ variant_decay_t

See also
variant_decay

Enumeration Type Documentation

◆ border_side

The side where the border is drawn.

Enumerator
on 

The border is drawn on the edge of a quad.

inside 

The border is drawn inside the edge of a quad.

outside 

The border is drawn outside the edge of a quad.

◆ callback_flags

Enumerator
synchronous 

Call the function synchronously.

local 

Call the function asynchronously from the current thread's loop.

main 

Call the function asynchronously from the main thread's loop.

timer 

Call the function asynchronously from the timer thread's loop.

once 

Call the function once, then automatically unsubscribe.

◆ font_weight

Enumerator
Thin 

100: Thin / Hairline

ExtraLight 

200: Ultra-light / Extra-light

Light 

300: Light

Regular 

400: Normal / Regular

Medium 

500: Medium

SemiBold 

600: Semi-bold / Demi-bold

Bold 

700: Bold

ExtraBold 

800: Extra-bold / Ultra-bold

Black 

900: Heavy / Black

ExtraBlack 

950: Extra-black / Ultra-black

◆ gfx_surface_loss

Enumerator
none 

Everything is running normally.

swapchain_lost 

The window was resized, the swapchain needs to be rebuild and can not be rendered on.

device_lost 

The device was lost, but the window could move to a new device, or the device can be recreated.

window_lost 

The surface or window was destroyed, need to cleanup.

◆ gfx_surface_state

Enumerator
no_window 

The window was destroyed, the device will drop the window on the next render cycle.

has_window 

The initial state: The surface is associated with a window.

has_device 

The surface has been associated with a device to use for rendering.

has_swapchain 

Images to render on to display on the surface are created.

◆ horizontal_alignment

Enumerator
flush 

Align the text naturally based on the writing direction of each paragraph.

This will act as flush_left if the paragraph is in left-to-right direction, and as flush_right if the paragraph is in right-to-left direction.

left 

Align the text to the left side.

The text will be flush-left independent of the writing direction.

center 

Align the text in the center.

Since the text is centered, the writing direction is unimportant.

justified 

Stretch the text to be flush to both sides.

Since the text is flush on both sides, the writing direction is unimportant.

right 

Align the text to the right side.

The text will be flush-left independent of the writing direction.

◆ keyboard_focus_direction

The keyboard focus group used for finding a widget that will accept a particular focus.

Enumerator
backward 

Search backward in the keyboard focus chain.

forward 

Search forward in the keyboard focus chain.

◆ keyboard_focus_group

The keyboard focus group used for finding a widget that will accept a particular focus.

Enumerator
normal 

A normal widget.

Normal widgets accept keyboard focus using tab/shift-tab keys.

menu 

A menu item in a popup overlay Menu item widget accepts keyboard focus from the up/down cursor keys.

toolbar 

A menu item in the toolbar of the window.

Menu item widget in the toolbar accepts keyboard focus from the left/right cursor keys and from the main-menu-select key.

mouse 

A widget that only accepts keyboard focus from mouse clicks.

all 

Used for selecting any widget that can accept keyboard focus.

This is used for selecting a widget of group normal, menu or toolbar using the mouse.

◆ keyboard_modifiers

enum class v1::keyboard_modifiers : uint8_t
strong

Key modification keys pressed at the same time as another key.

The Fn key is not always available on larger keyboards and is often under full control of the keyboard, therefor it is not in the list of keyboard modifiers here.

Enumerator
shift 

The shift key is being held.

control 

The control key is being held.

alt 

The alt-key, option-key or meta-key is being held.

super 

The windows-key, key-key or super-key is being held.

◆ line_end_cap

The way two lines should be joined.

Enumerator
flat 

The end cap of the line is flat.

round 

The end cap of the line is round.

◆ line_join_style

The way two lines should be joined.

Enumerator
none 

Both lines have flat caps and are not joined.

bevel 

The outer vertices of both lines are connected and filled in to make a blunt corner.

miter 

The outer edge of both lines are extended until they meet to form a sharp corner.

round 

Both lines have round caps and with a shared mid-point making a round corner.

◆ on_overflow_t

Enumerator
Throw 

On overflow throw an exception.

Saturate 

On overflow saturate the result in the appropiate direction.

Assert 

On overflow assert and terminate.

Axiom 

On overflow assert and teminate in debug, assume in release.

◆ subpixel_orientation

The orientation of the RGB sub-pixels of and LCD/LED panel.

◆ text_decoration

Describes how a grapheme should be underlined when rendering the text.

It is carried with the grapheme and glyphs, so that the text render engine can draw the decoration after the text is shaped and in rendering-order (left to right) and, this makes it easier to correctly render the decoration of multiple glyphs in a single stroke.

◆ text_phrasing

Enumerator
keyboard 

Used in help messages to show which key to press.

mark 

Yellow highlight.

example 

Used for displaying console output.

unarticulated 

underlined

◆ unicode_bidi_bracket_type

Enumerator

Not mirrored.

Open bracket.

Close bracket.

Mirror but not bracket.

◆ unicode_bidi_class

enum class v1::unicode_bidi_class : uint8_t
strong

Bidirectional class Unicode Standard Annex #9: https://unicode.org/reports/tr9/.

Enumerator

Left-to-Right.

Right-to-Left.

AL 

Right-to-Left Arabic.

EN 

European Number.

ES 

European Number Separator.

ET 

European Number Terminator.

AN 

Arabic Number.

CS 

Common Number Separator.

NSM 

Nonspacing Mark.

BN 

Boundary Neutral.

Paragraph Separator.

Segment Separator.

WS 

Whitespace.

ON 

Other Neutrals.

LRE 

Left-to-Right Embedding.

LRO 

Left-to-Right Override.

RLE 

Right-to-Left Embedding.

RLO 

Right-to-left Override.

PDF 

Pop Directional Format.

LRI 

Left-to-Right Isolate.

RLI 

Right-to-Left Isolate.

FSI 

First Strong Isolate.

PDI 

Pop Directional Isolate.

◆ unicode_decomposition_type

Enumerator
canonical 

Canonical decomposition.

font 

<font> Font variant (for example, a blackletter form).

noBreak 

<noBreak> No - break version of a space or hyphen.

initial 

<initial> Arabic presentation forms.

medial 

<medial> Arabic presentation forms.

_final 

<final> Arabic presentation forms.

isolated 

<isolated> Arabic presentation forms.

circle 

<circle> Encircled form.

super 

<super> Super-, sub-script and Vulgar-fraction forms

sub 

<sub> Super-, sub-script and Vulgar-fraction forms

fraction 

<fraction> Super-, sub-script and Vulgar-fraction forms

vertical 

<vertical> asian compatibility forms.

wide 

<wide> asian compatibility forms.

narrow 

<narrow> asian compatibility forms.

small 

<small>asian compatibility forms.

square 

<square> asian compatibility forms.

compat 

<compat> Otherwise unspecified compatibility character

◆ unicode_line_break_class

Unicode line break class.

See "AUX14: Unicode line break algorithm" http://unicode.org/reports/tr14/

◆ unicode_normalization_mask

Enumerator
decompose_control 

During decomposition remove control characters.

This will also eliminate newline characters like CR, LF, CR+LF, NEL, VTAB & FF; these may be retained by using decompose_PS, decompose_LF or decompose_CRLF.

compose_CRLF 

Compose CR+LF into a single LF.

decompose_newline_to_PS 

Decompose any newline character into PS (Paragraph Separator).

Note
Mutually exclusive with decompose_LF, decompose_CRLF and decompoase_newline_to_SP.
decompose_newline_to_LF 

Decompose any newline character into LF (Line Feed).

Note
Mutually exclusive with decompose_PS, decompose_CRLF and decompoase_newline_to_SP.
decompose_newline_to_CRLF 

Decompose any newline character into CR+LF (Carriage Return + Line Feed).

Note
Mutually exclusive with decompose_PS, decompose_LF and decompoase_newline_to_SP.
decompose_newline_to_SP 

Decompose any newline character into SP (Space).

Note
Mutually exclusive with decompose_PS, decompose_newline_to_CRLF and decompose_LF.
decompose_newline 

Mask for one of decompose_PS, decompose_LF or decompose_CRLF.

Note
Only one of decompose_PS, decompose_LF, decompose_CRLF can be used.
NFD 

Canonical decomposition and composition.

NFKD 

Compatible decomposition and composition.

◆ vertical_alignment

enum class v1::vertical_alignment : uint8_t
strong

Vertical alignment.

Enumerator
top 

Align to the top.

middle 

Align to the vertical-middle.

bottom 

Align to the bottom.

Function Documentation

◆ advance_bytes() [1/2]

void * v1::advance_bytes ( void * ptr,
std::ptrdiff_t distance )
inlinenoexcept

Advance a pointer by a number of bytes.

Note
It is undefined behavior for ptr to be nullptr
Parameters
ptrThe pointer to advance.
distanceThe number of bytes to advance the pointer, may be negative.

◆ advance_bytes() [2/2]

void const * v1::advance_bytes ( void const * ptr,
std::ptrdiff_t distance )
inlinenoexcept

Advance a pointer by a number of bytes.

Note
It is undefined behavior for ptr to be nullptr
Parameters
ptrThe pointer to advance.
distanceThe number of bytes to advance the pointer, may be negative.

◆ advance_thread_affinity()

std::size_t v1::advance_thread_affinity ( std::size_t & cpu)
noexcept

Advance thread affinity to the next CPU.

It is possible to detect when advance_thread_affinity() is at the last cpu; in that case the cpu parameter is less than or equal to the return value.

Parameters
[in,out]cpuOn input The cpu to start a search in the available-cpu list. On output the cpu next on the available-cpu list.
Returns
The cpu that was selected to run on.

◆ back_strip()

DataIt v1::back_strip ( DataIt data_first,
DataIt data_last,
ValueIt value_first,
ValueIt value_last )
noexcept

Strip data from the back side.

Parameters
data_firstThe iterator pointing to the first element of data.
data_lastThe iterator pointing one beyond the last element of data.
value_firstThe iterator pointing to the first value to be removed from data.
value_lastThe iterator pointing one beyond the last value to be removed from data.
Returns
An iterator pointing one beyond the first data element not belonging to the values to be stripped. or data_first when all data elements have been stripped.

◆ bezierFindTForNormalsIntersectingPoint() [1/2]

hi_force_inline constexpr results< float, 3 > v1::bezierFindTForNormalsIntersectingPoint ( point2 P1,
point2 C,
point2 P2,
point2 P )
constexprnoexcept

Find t on the curve P1->C->P2 which is closest to P.

Used for finding the shortest distance from a point to a curve. The shortest vector from a curve to a point is a normal.

◆ bezierFindTForNormalsIntersectingPoint() [2/2]

hi_force_inline constexpr results< float, 1 > v1::bezierFindTForNormalsIntersectingPoint ( point2 P1,
point2 P2,
point2 P )
constexprnoexcept

Find t on the line P1->P2 which is closest to P.

Used for finding the shortest distance from a point to a curve. The shortest vector from a curve to a point is a normal.

◆ bezierFindX() [1/3]

constexpr results< float, 2 > v1::bezierFindX ( point2 P1,
point2 C,
point2 P2,
float y )
constexprnoexcept

Find x for y on a bezier curve. In a contour, multiple bezier curves are attached to each other on the anchor point. We don't want duplicate results when passing y that is at the same height as an anchor point. So we compare with less than to the end-anchor point to remove it from the result.

◆ bezierFindX() [2/3]

constexpr results< float, 3 > v1::bezierFindX ( point2 P1,
point2 C1,
point2 C2,
point2 P2,
float y )
constexprnoexcept

Find x for y on a bezier curve. In a contour, multiple bezier curves are attached to each other on the anchor point. We don't want duplicate results when passing y that is at the same height as an anchor point. So we compare with less than to the end-anchor point to remove it from the result.

◆ bezierFindX() [3/3]

constexpr results< float, 1 > v1::bezierFindX ( point2 P1,
point2 P2,
float y )
constexprnoexcept

Find x for y on a bezier curve. In a contour, multiple bezier curves are attached to each other on the anchor point. We don't want duplicate results when passing y that is at the same height as an anchor point. So we compare with less than to the end-anchor point to remove it from the result.

◆ bezierFlatness() [1/3]

float v1::bezierFlatness ( point2 P1,
point2 C,
point2 P2 )
inlinenoexcept

Return the flatness of a curve.

Returns
1.0 when completely flat, < 1.0 when curved.

◆ bezierFlatness() [2/3]

float v1::bezierFlatness ( point2 P1,
point2 C1,
point2 C2,
point2 P2 )
inlinenoexcept

Return the flatness of a curve.

Returns
1.0 when completely flat, < 1.0 when curved.

◆ bezierFlatness() [3/3]

float v1::bezierFlatness ( point2 P1,
point2 P2 )
inlinenoexcept

Return the flatness of a curve.

Returns
1.0 when completely flat, < 1.0 when curved.

◆ bifind_cluster()

constexpr std::pair< It, It > v1::bifind_cluster ( ConstIt first,
ConstIt last,
It start,
UnaryPredicate predicate )
constexpr

Find the begin and end of the current cluster.

Parameters
firstThe first iterator, where this function will stop iterating.
lastThe last iterator, where this function will stop iterating.
startWhere to start the search
predicateA function returning the identifier of the cluster.
Returns
The first and one beyond last iterator where the cluster is the same as start.

◆ binary_operator_precedence()

std::pair< uint8_t, bool > v1::binary_operator_precedence ( char const * str)
noexcept

Binary Operator Precedence according to C++.

Returns
Precedence, left-to-right-associativity

◆ bit()

constexpr size_t v1::bit ( network_event const & rhs)
constexprnoexcept

Get the bit index of the single bit of the network_event mask.

◆ breaks_grapheme()

bool v1::breaks_grapheme ( char32_t code_point,
grapheme_break_state & state )
noexcept

Check if for a grapheme break before the given code-point.

Code points must be tested in order, starting at the beginning of the text.

Parameters
code_pointCurrent code point to test.
stateCurrent state of the grapheme-break algorithm.
Returns
true when a grapheme break exists before the current code-point.

◆ ceil()

template<std::unsigned_integral T>
constexpr T v1::ceil ( T value,
T alignment )
constexprnoexcept

The smallest multiple of alignment greater than or equal to value.

Parameters
valueThe unsigned value to round.
alignmentThe alignment.
Returns
The smallest multiple of alignment greater than or equal to value.

◆ char_cast()

template<std::integral Out, std::integral In>
constexpr Out v1::char_cast ( In rhs)
constexprnoexcept

Cast a character.

Both the input and output types are interpreted as unsigned values, even if they are signed values. For example char may be either signed or unsigned, but you have to treat those as unsigned values.

Note
rhs value after casting, must fit in the output type.
Parameters
rhsThe value of the character.
Returns
The casted value.

◆ command_line_parser()

template<typename It >
generator< cmdln_option > v1::command_line_parser ( It first,
It last,
std::string_view options_with_arguments )

A POSIX command line parser.

The command line tokens passed to this function are the strings passed in via main, or pre-processed by the windows command line pre-processor.

Posix commad line argument syntax:

  • Single character short-options begin with a '-' or '+'. '-' options often enable, '+' options disable.
  • Multiple short-options may follow a hyphen inside the same token.
  • Certain short-options require an argument.
  • An short-option and its argument may or may not appear as separate tokens. For example the '-o' short-option and it argument: -ofoo or -o foo. Any character may be used in the argument, including a single hyphen, which by convention is either the stdin or stdout stream.
  • A long-options starts with a '–' and are followed by a string of characters. Optionally an long-option is followed by a '=' character and an argument in the same token.
  • A token with just a double hyphen '–' terminates option parsing. All tokens after the double hyphen are treated as non-option arguments.
  • Everything else is a non-option argument.

This function will properly handle UTF-8 encoded strings. Including single character options where the character is represented with multiple UTF-8 code units.

Template Parameters
ItA forward iterator
Parameters
firstIterator to the first command line token
lastIterator one beyond the last command line token
options_with_argumentsA list of single character options that accept an argument.

◆ compare_store() [1/2]

template<typename T , typename U >
bool v1::compare_store ( std::atomic< T > & lhs,
U && rhs )
noexcept

Compare then store if there was a change.

Note
This atomic version does an lhs.exchange(rhs, std::memory_order_relaxed)
Returns
true if a store was executed.

◆ compare_store() [2/2]

template<typename T , typename U >
bool v1::compare_store ( T & lhs,
U && rhs )
noexcept

Compare then store if there was a change.

Returns
true if a store was executed.

◆ composit() [1/2]

void v1::composit ( pixel_map< sfloat_rgba16 > & dst,
graphic_path const & mask )
noexcept

Composit color onto the destination image where the mask is solid.

Parameters
dstdestination image.
maskmask where the color will be composited on the destination.

◆ composit() [2/2]

void v1::composit ( pixel_map< sfloat_rgba16 > & dst,
hi::color color,
graphic_path const & mask )
noexcept

Composit color onto the destination image where the mask is solid.

Parameters
dstdestination image.
colorcolor to composit.
maskmask where the color will be composited on the destination.

◆ console_output()

void v1::console_output ( std::string_view text,
std::ostream & output = std::cout )
noexcept

Output text to the console.

This will output the text to the console. During debugging the console will be the debugger's output panel/window.

Parameters
textThe text to display on the console.
outputEither std::cout or std::cerr. (No other stream is allowed here).

◆ console_start()

void v1::console_start ( )
noexcept

Initialize the console.

◆ construct()

template<typename It , typename... Args>
void v1::construct ( It first,
It last,
Args const &... args )

Construct a set of objects.

◆ count_line_and_columns()

template<typename It >
std::pair< int, int > v1::count_line_and_columns ( It begin,
It const end )
inline

Return line and column count at the end iterator.

◆ crt_finish()

int v1::crt_finish ( int argc,
char ** argv,
int exit_code )

Finish the hikogui system.

This function will cleanly shutdown the hikogui system.

Parameters
argcThe normalized number of arguments received from crt_start().
argvThe normalized arguments received from crt_start().
exit_codeThe exit code of the application
Returns
The exit code of the application to return from main().

◆ crt_start() [1/3]

std::pair< int, char ** > v1::crt_start ( int argc,
char ** argv )
inline

Start the hikogui system.

This function will do a minimum amount of setup for the hikogui system.

Parameters
argcNumber of arguments received from main().
argvThe argument received from main().
Returns
argc, argv Normalized command line arguments in UTF-8 format. These need to be passed to crt_finish() to free the memory.

◆ crt_start() [2/3]

std::pair< int, char ** > v1::crt_start ( int argc,
char ** argv,
void * instance,
int show_cmd )

Start the hikogui system.

This function will do a minimum amount of setup for the hikogui system.

Parameters
argcNumber of arguments received from main().
argvThe argument received from main().
instanceA handle to the GUI instance of the operating system
show_cmdInformation on how to open the first window.
Returns
argc, argv Normalized command line arguments in UTF-8 format. These need to be passed to crt_finish() to free the memory.

◆ crt_start() [3/3]

std::pair< int, char ** > v1::crt_start ( void * instance,
int show_cmd )
inline

Start the hikogui system.

This function will do a minimum amount of setup for the hikogui system.

Parameters
instanceA handle to the GUI instance of the operating system
show_cmdInformation on how to open the first window.
Returns
argc, argv Normalized command line arguments in UTF-8 format. These need to be passed to crt_finish() to free the memory.

◆ current_cpu_id()

std::size_t v1::current_cpu_id ( )
noexcept

Get the current CPU id.

Returns
The current CPU id.

◆ current_thread_id()

thread_id v1::current_thread_id ( )
inlinenoexcept

Get the current thread id.

Get the current thread id quickly.

◆ decode_BON8() [1/3]

datum v1::decode_BON8 ( bstring const & buffer)

Decode BON8 message from buffer.

Parameters
bufferA buffer to a BON8 encoded message.
Returns
The decoded message.

◆ decode_BON8() [2/3]

datum v1::decode_BON8 ( bstring_view buffer)

Decode BON8 message from buffer.

Parameters
bufferA buffer to a BON8 encoded message.
Returns
The decoded message.

◆ decode_BON8() [3/3]

datum v1::decode_BON8 ( std::span< const std::byte > buffer)

Decode BON8 message from buffer.

Parameters
bufferA buffer to a BON8 encoded message.
Returns
The decoded message.

◆ dialog()

bool v1::dialog ( dialog_type type,
std::string_view title,
std::string_view text )

Display a modal dialog.

You should never display a modal dialog unless it is absolutely necessary for the user to respond right now, or on a catastrophic failure.

Exceptions
cancel_errorWhen the user presses "cancel".
Returns
True when the user presses "ok" or "yes"

◆ down_cast() [1/3]

template<typename Out , base_of< std::remove_reference_t< Out > > In>
requires std::is_reference_v<Out> and ( std::is_const_v<std::remove_reference_t<Out>> == std::is_const_v<In> or std::is_const_v<std::remove_reference_t<Out>>)
constexpr Out v1::down_cast ( In & rhs)
constexprnoexcept

Cast a reference to a class to its derived class or itself.

Note
It is undefined behavior if the argument is not of type Out.
Parameters
rhsA reference to an object that is of type Out.
Returns
A reference to the same object with a new type.

◆ down_cast() [2/3]

template<typename Out , base_of< std::remove_pointer_t< Out > > In>
requires std::is_pointer_v<Out> and (std::is_const_v<std::remove_pointer_t<Out>> == std::is_const_v<In> or std::is_const_v<std::remove_pointer_t<Out>>)
constexpr Out v1::down_cast ( In * rhs)
constexprnoexcept

Cast a pointer to a class to its derived class or itself.

Note
It is undefined behavior if the argument is not of type Out.
Parameters
rhsA pointer to an object that is of type Out. Or a nullptr which will be passed through.
Returns
A pointer to the same object with a new type.

◆ down_cast() [3/3]

template<typename Out >
requires std::is_pointer_v<Out>
constexpr Out v1::down_cast ( nullptr_t )
constexprnoexcept

Cast a pointer to a class to its derived class or itself.

Returns
A pointer to the same object with a new type.

◆ encode_BON8()

bstring v1::encode_BON8 ( datum const & value)

Encode a value to a BON8 message.

Parameters
valueThe data to encode
Returns
The encoded message as a byte_string.

◆ fetch_max()

template<typename T >
T v1::fetch_max ( std::atomic< T > & lhs,
T rhs,
std::memory_order order )
noexcept

Lock-free fetch-then-max operation on an atomic.

◆ fetch_min()

template<typename T >
T v1::fetch_min ( std::atomic< T > & lhs,
T rhs,
std::memory_order order )
noexcept

Lock-free fetch-then-min operation on an atomic.

◆ fill() [1/5]

void v1::fill ( pixel_map< sdf_r8 > & dst,
graphic_path const & path )
noexcept

Fill a signed distance field image from the given path.

Parameters
dstAn signed-distance-field which show distance toward the closest curve
pathA path.

◆ fill() [2/5]

void v1::fill ( pixel_map< sdf_r8 > & image,
std::vector< bezier_curve > const & curves )
noexcept

Fill a signed distance field image from the given contour.

Parameters
imageAn signed-distance-field which show distance toward the closest curve
curvesAll curves of path, in no particular order.

◆ fill() [3/5]

template<typename T >
void v1::fill ( pixel_map< T > & dst)
noexcept

Clear the pixels of this (sub)image.

◆ fill() [4/5]

template<typename T >
void v1::fill ( pixel_map< T > & dst,
T color )
noexcept

Fill with color.

◆ fill() [5/5]

void v1::fill ( pixel_map< uint8_t > & image,
std::vector< bezier_curve > const & curves )
noexcept

Fill a linear gray scale image by filling a curve with anti-aliasing.

Parameters
imageAn alpha-channel image to make opaque where pixel is inside the contours
curvesAll curves of path, in no particular order.

◆ find_any()

template<typename It , typename ItAny >
constexpr It v1::find_any ( It data_first,
It data_last,
ItAny value_first,
ItAny value_last )
constexprnoexcept

Find the first occurrence of an value in a data.

Parameters
data_firstAn iterator pointing to the first item of data.
data_lastAn iterator pointing one beyond the last item of data.
value_firstAn iterator pointing to a value to find in data.
value_lastAn iterator pointing on beyond the last value to find in data.
Returns
An iterator within data for the first matching value, or data_last if not found.

◆ find_cluster()

constexpr It v1::find_cluster ( ConstIt last,
It start,
UnaryPredicate predicate )
constexpr

Find the start of the current cluster.

Parameters
lastThe last iterator, where this function will stop iterating.
startWhere to start the search
predicateA function returning the identifier of the cluster.
Returns
One beyond the last iterator where the cluster is the same as start.

◆ find_end_of_formula()

std::string_view::const_iterator v1::find_end_of_formula ( std::string_view::const_iterator first,
std::string_view::const_iterator last,
std::string_view terminating_string )

Find the end of an formula.

This function will track nested brackets and strings, until the terminating_character is found.

Parameters
firstIterator to the first character of the formula.
lastIterator to beyond the last character of the text.
terminating_stringThe string to find, which is not part of the formula.
Returns
Iterator to the terminating character if found, or last.

◆ floor()

template<std::unsigned_integral T>
constexpr T v1::floor ( T value,
T alignment )
constexprnoexcept

The greatest multiple of alignment less than or equal to value.

Parameters
valueThe unsigned value to round.
alignmentThe alignment.
Returns
The greatest multiple of alignment less than or equal to value.

◆ font_weight_from_int()

constexpr font_weight v1::font_weight_from_int ( numeric_integral auto rhs)
constexpr

Convert a font weight value between 50 and 1000 to a font weight.

◆ for_each_cluster()

template<typename It , typename S , typename F >
void v1::for_each_cluster ( It first,
It last,
S IsClusterSeperator,
F Function )
inline

For each cluster. func() is executed for each cluster that is found between first-last. A cluster is found between two separators, a separator is detected with IsClusterSeperator(). A cluster does not include the separator itself.

◆ format_count()

constexpr int v1::format_count ( std::string_view fmt)
constexprnoexcept

Count arguments of a std::format format string.

Parameters
fmtThe format string.
Returns
The number of arguments required for formatting.
Return values
-1Invalid open-brace inside format argument.
-2Invalid close-brace outside format argument.
-3Missing close-brace at end-of-string.

◆ format_JSON()

std::string v1::format_JSON ( datum const & root)

Dump an datum object into a JSON string.

Parameters
rootdatum-object to serialize
Returns
The JSON serialized object as a string

◆ front_strip()

DataIt v1::front_strip ( DataIt data_first,
DataIt data_last,
ValueIt value_first,
ValueIt value_last )
noexcept

Strip data from the front side.

Parameters
data_firstThe iterator pointing to the first element of data.
data_lastThe iterator pointing one beyond the last element of data.
value_firstThe iterator pointing to the first value to be removed from data.
value_lastThe iterator pointing one beyond the last value to be removed from data.
Returns
An iterator pointing to the first data element not belonging to the values to be stripped. or data_last when all data elements have been stripped.

◆ generate_array()

template<typename T , std::size_t N, typename F >
constexpr std::array< T, N > v1::generate_array ( F operation)
constexpr

Generate data in an array.

Parameters
operationA function to execute for each element in the array. The function accepts a single index argument.
Returns
An array filled with elements generated by operation.

◆ generate_seed()

void v1::generate_seed ( void * ptr,
size_t size )

Load a random seed.

Parameters
[out]ptrThe pointer to the buffer bytes where to generate the seed.
sizeThe number of bytes to generate.
Exceptions
os_erroron failure.

◆ get_bit()

bool v1::get_bit ( std::span< std::byte const > buffer,
std::size_t & index )
inlinenoexcept

Read a single bit from span of bytes Bits are ordered LSB first.

Parameters
bufferThe buffer of bytes to extract the bit from.
indexThe index of the bit in the byte span.

◆ get_bits()

std::size_t v1::get_bits ( std::span< std::byte const > buffer,
std::size_t & index,
std::size_t length )
inlinenoexcept

Read a bits from of span of bytes Bits are ordered LSB first.

Bits are copied as if the byte array is layed out from right to left, example:

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | byte 1 | byte 0 | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ : : index=6 +-+-+-+-+-+ length=5 | Return | +-+-+-+-+-+ 4 3 2 1 0

Parameters
bufferThe buffer of bytes to extract bits from.
indexThe index of the bit in the byte span.
lengththe number of bits to return.

◆ get_first()

template<typename Range >
constexpr Range::value_type v1::get_first ( Range && range)
constexpr
See also
make_vector

◆ get_thread_name()

std::string v1::get_thread_name ( thread_id id)
noexcept

Get the thread name of a thread id.

This function is designed to be reasonably fast, so that it can be used in the logger thread.

Note
Can only read names that where set using set_thread_name().
Parameters
idThe thread id.
Returns
Name of the thread set with set_hread_name(). Or the numeric thread-id as string.

◆ getExtrapolatedIntersectionPoint()

std::optional< point2 > v1::getExtrapolatedIntersectionPoint ( point2 A1,
point2 A2,
point2 B1,
point2 B2 )
inlinenoexcept

Find the intersect points between two line segments.

◆ getIntersectionPoint()

std::optional< point2 > v1::getIntersectionPoint ( point2 A1,
point2 A2,
point2 B1,
point2 B2 )
inlinenoexcept

Find the intersect points between two line segments.

◆ global_state_disable()

bool v1::global_state_disable ( global_state_type subsystem,
std::memory_order order = std::memory_order::seq_cst )
inlinenoexcept

Disable a subsystem.

Parameters
subsystemThe subsystem to disable.
orderMemory order to use on the global_state variable.
Returns
True if the subsystem was enabled.

◆ global_state_enable()

bool v1::global_state_enable ( global_state_type subsystem,
std::memory_order order = std::memory_order::seq_cst )
inlinenoexcept

Enable a subsystem.

Parameters
subsystemThe subsystem to disable.
orderMemory order to use on the global_state variable.
Returns
True if the subsystem was enabled.

◆ high_bit_cast()

template<std::unsigned_integral OutType, std::unsigned_integral InType>
constexpr OutType v1::high_bit_cast ( InType value)
constexprnoexcept

Return the upper half of the input value.

◆ index_of_tag() [1/2]

template<fixed_string Needle, fixed_string... Haystack>
constexpr std::size_t v1::index_of_tag ( )
constexprnoexcept

Return the index of the tag in the template arguments. If the tag is not found it returns the index 1 beyond the template arguments.

◆ index_of_tag() [2/2]

template<fixed_string... Tags>
std::size_t v1::index_of_tag ( std::string tag)
noexcept

Return the index of the tag in the template arguments. If the tag is not found it returns the index 1 beyond the template arguments.

◆ inflate()

bstring v1::inflate ( std::span< std::byte const > bytes,
std::size_t & offset,
std::size_t max_size = 0x0100 '0000 )

Inflate compressed data using the deflate algorithm bytes should include at least 32 bit of trailer, for the overflow check which will slightly overrun the actual compressed data for performance reasons.

  • gzip has a CRC32+ISIZE trailer. Since gzip has no end-of-segment indicator, we need to include the trailer in the byte array passed to inflate anyway.
  • zlib has a 32 bit check value. Since zlib has no end-of-segment indicator, we need to include the trailer in the byte array passed to inflate anyway.
  • png IDAT chunks include the full zlib-format, including the 32 bit check value.

◆ is_aligned()

template<typename T >
constexpr bool v1::is_aligned ( T * p)
constexpr

Check if a pointer is properly aligned for the object it is pointing at.

◆ line_metrics_bounding_rectangle()

template<typename It , typename ItEnd >
aarectangle v1::line_metrics_bounding_rectangle ( It first,
ItEnd last )
inline

Calculate the bounding box around line metrics.

Parameters
firstA iterator to the first line metrics element.
lastA iterator one beyond the last line metrics element

◆ load()

template<numeric T>
hi_force_inline T v1::load ( void const * src)
noexcept

Load an integer from unaligned memory in native byte-order.

◆ load_be()

template<numeric T>
hi_force_inline T v1::load_be ( void const * src)
noexcept

Load an integer from unaligned memory in big-endian byte-order.

◆ load_le()

template<numeric T>
hi_force_inline T v1::load_le ( void const * src)
noexcept

Load an integer from unaligned memory in little-endian byte-order.

◆ low_bit_cast()

template<std::unsigned_integral OutType, std::unsigned_integral InType>
constexpr OutType v1::low_bit_cast ( InType value)
constexprnoexcept

Return the low half of the input value.

◆ make_cstr() [1/2]

char * v1::make_cstr ( char const * c_str,
std::size_t size = -1 )
inlinenoexcept

Copy a std::string to new memory.

The caller will have to delete [] return value.

◆ make_cstr() [2/2]

char * v1::make_cstr ( std::string const & s)
inlinenoexcept

Copy a std::string to new memory.

The caller will have to delete [] return value.

◆ make_identifier()

std::string v1::make_identifier ( std::string_view str)
inlinenoexcept

Encode a string to be usable as an id.

An id has the following format: [_a-zA-Z][_a-zA-Z0-9]*

◆ make_slug()

std::string v1::make_slug ( std::string_view str)
inlinenoexcept

Create a slug from a string.

A slug contains only lower case letters, digits and dashes. Duplicated dashes are eliminated.

◆ make_title()

std::string v1::make_title ( std::string_view str)
inlinenoexcept

Create a title from a string.

A title contains words separated by a single space, where each word starts with a capital letter followed by lower case letters. Digits may be part of a word or form a separate word, digits are not counted as the start of a word for capitalization.

◆ make_vector() [1/2]

template<typename Value , typename Range >
constexpr std::vector< Value > v1::make_vector ( Range && range)
constexpr

Make a vector from a view.

This function will make a vector with a copy of the elements of a view.

◆ make_vector() [2/2]

template<typename Range >
constexpr std::vector< typename Range::value_type > v1::make_vector ( Range && range)
constexpr
See also
make_vector

◆ makeContourFromPoints()

std::vector< bezier_curve > v1::makeContourFromPoints ( std::vector< bezier_point >::const_iterator first,
std::vector< bezier_point >::const_iterator last )
noexcept

Make a contour of Bezier curves from a list of points. The contour is also colorized to be used for creating multichannel-signed-distance-fields.

Parameters
firstIterator to the first point in a list
lastIterator one beyond the last point in a list

◆ makeInverseContour()

std::vector< bezier_curve > v1::makeInverseContour ( std::vector< bezier_curve > const & contour)
noexcept

Inverse a contour. Reverse the direction of the whole contour, turning it inside out. This is useful for creating a stroke, by inverting the inner offset contour.

Parameters
contourcontour to reverse.
Returns
the reversed contour.

◆ makeParallelContour()

std::vector< bezier_curve > v1::makeParallelContour ( std::vector< bezier_curve > const & contour,
float offset,
hi::line_join_style line_join_style,
float tolerance )
noexcept

Make a contour of Bezier curves from another contour of Bezier curves at a offset. Make a new contour made out of line-segments offset from the original curve. After offsetting the line segment the line segments are properly cut or extended to cover all intersections and gaps.

Parameters
contoura list of bezier curve segments forming a closed contour.
offsetpositive means the parallel contour will be on the starboard side of the given contour.
line_join_stylehow the gaps between line segments are joined together.
toleranceto how curved the new contour should look.

◆ makeTransparentBorder()

template<typename T >
void v1::makeTransparentBorder ( pixel_map< T > & pixel_map)
inlinenoexcept

Make a 1 pixel border on the edge of the pixel_map transparent By copying the pixel value from just beyond the edge and setting the alpha channel to zero.

This allows bi-linear interpolation to interpolate color correctly while anti-aliasing the edge.

◆ merge_bit_cast()

template<std::unsigned_integral OutType, std::unsigned_integral InType>
constexpr OutType v1::merge_bit_cast ( InType hi,
InType lo )
constexprnoexcept

Return the upper half of the input value.

◆ mergeMaximum()

void v1::mergeMaximum ( pixel_map< uint8_t > & dst,
pixel_map< uint8_t > const & src )
noexcept

Merge two image by applying std::max on each pixel.

◆ mul_overflow()

template<typename T >
bool v1::mul_overflow ( T lhs,
T rhs,
T * r )
inlinenoexcept

Multiply with overflow detection.

Returns
true when the multiplication overflowed.

◆ narrow()

template<arithmetic Out, arithmetic In>
constexpr Out v1::narrow ( In rhs)
constexprnoexcept

Cast numeric values without loss of precision.

Template Parameters
OutThe numeric type to cast to
InThe numeric type to cast from
Parameters
rhsThe value to cast.
Returns
The value casted to a different type without loss of precision.
Exceptions
std::bad_castwhen the value could not be casted without loss of precision.

◆ narrow_cast()

template<arithmetic Out, arithmetic In>
constexpr Out v1::narrow_cast ( In rhs)
constexprnoexcept

Cast numeric values without loss of precision.

Note
It is undefined behavior to cast a value which will cause a loss of precision.
Template Parameters
OutThe numeric type to cast to
InThe numeric type to cast from
Parameters
rhsThe value to cast.
Returns
The value casted to a different type without loss of precision.

◆ normalize_lf()

std::string v1::normalize_lf ( std::string_view str)
inlinenoexcept

Normalize string to use only line-feeds.

◆ operator_precedence()

std::pair< uint8_t, bool > v1::operator_precedence ( char const * str,
bool binary )
noexcept

Operator Precedence according to C++.

Returns
Precedence, left-to-right-associativity

◆ operator|() [1/3]

Combine vertical and horizontal alignment.

Parameters
lhsA text alignment.
rhsA vertical alignment.
Returns
A combined vertical and horizontal alignment.

◆ operator|() [2/3]

Merge on_overflow_t. Get the on_overflow of two arguments with highest safety.

◆ operator|() [3/3]

Combine vertical and horizontal alignment.

Parameters
lhsA text alignment.
rhsA vertical alignment.
Returns
A combined vertical and horizontal alignment.

◆ parse_formula() [1/3]

std::unique_ptr< formula_node > v1::parse_formula ( formula_parse_context & context)

Parse an formula.

Parses an formula until EOF, ')', ',', '}'

◆ parse_formula() [2/3]

std::unique_ptr< formula_node > v1::parse_formula ( std::string_view text)
inline

Parse an formula.

Parses an formula until EOF, ')', ',', '}'

◆ parse_formula() [3/3]

std::unique_ptr< formula_node > v1::parse_formula ( std::string_view::const_iterator first,
std::string_view::const_iterator last )
inline

Parse an formula.

Parses an formula until EOF, ')', ',', '}'

◆ parse_JSON() [1/2]

datum v1::parse_JSON ( std::filesystem::path const & path)
inline

Parse a JSON string.

Parameters
pathA path pointing to the file to parse.
Returns
A datum representing the parsed object.

◆ parse_JSON() [2/2]

datum v1::parse_JSON ( std::string_view text)

Parse a JSON string.

Parameters
textThe text to parse.
Returns
A datum representing the parsed object.

◆ parse_spreadsheet_address()

std::pair< std::size_t, std::size_t > v1::parse_spreadsheet_address ( std::string_view address,
std::size_t start_column_nr = 0,
std::size_t start_row_nr = 0 )
inline

Parse a spreadsheet address.

Parameters
addressThe address to parse.
start_column_nrA relative column in the address is added to the start-column.
start_row_nrA relative row in the address is added to the start-row.
Returns
The zero-based column and row index.

◆ parseTokens()

std::vector< token_t > v1::parseTokens ( std::string_view text)
noexcept

parse tokens from a text. This parsing tokens from most programming languages. It will recognize:

  • integers literal
  • date literal
  • time literal
  • floating point literal
  • string literal
  • boolean literal
  • null
  • names
  • operators
  • comments (skip)
  • white space (skip)

Errors will be returned as tokens which will point back into the text.

◆ placement_copy() [1/2]

template<typename InputIt , typename T >
T * v1::placement_copy ( InputIt src,
T * dst )

Copy an object to another memory locations.

This function will copy an object located in one memory location to another through the use of placement-new.

If you want to access the object in dst, you should use the return value.

Parameters
srcAn interator to an object.
dstA pointer to allocated memory.
Returns
The dst pointer with the new object who's lifetime was started.

◆ placement_copy() [2/2]

template<typename InputIt , typename T >
void v1::placement_copy ( InputIt src_first,
InputIt src_last,
T * dst_first )

Copy objects into a memory location.

This function will placement_copy an array of objects to a memory location.

◆ placement_move() [1/2]

template<typename T >
T * v1::placement_move ( T * src,
T * dst )

Move an object between two memory locations.

This function will move an object from one memory location to another through the use of placement-new. The object in the source memory location is destroyed.

If you want to access the object in dst, you should use the return value. It is undefined behavior when src and dst point to the same object. It is undefined behavior if either or both src and dst are nullptr.

Parameters
srcA pointer to an object.
dstA pointer to allocated memory.
Returns
The dst pointer with the new object who's lifetime was started.

◆ placement_move() [2/2]

template<typename T >
void v1::placement_move ( T * src,
T * src_last,
T * dst )

Move an objects between two memory locations.

This function will placement_move an array of objects between two memory locations.

WARNING: if moving objects within an array use placement_move_within_array to handle overlapping regions.

◆ placement_move_within_array()

template<typename T >
void v1::placement_move_within_array ( T * src_first,
T * src_last,
T * dst_first )

Move an objects between two memory locations.

This function will placement_move an array of objects between two memory locations.

It is undefined behavior when src_first and dst_first are not part of the same array.

The objects may overlap: copying takes place as if the objects were copied to a temporary object array and then the objects were copied from the array to dst.

◆ points_to_dp()

template<std::floating_point T>
constexpr T v1::points_to_dp ( T x)
constexprnoexcept

Convert points to device independent pixels.

◆ process_affinity_mask()

std::vector< bool > v1::process_affinity_mask ( )
noexcept

Get the current process CPU affinity mask.

Returns
A bit mask on which CPUs the process is allowed to run on. Or zero on failure.

◆ recursive_iterator_begin() [1/2]

template<typename Container >
auto v1::recursive_iterator_begin ( Container & rhs)
noexcept

Get a recursive iterator from the begin of a recursive container.

◆ recursive_iterator_begin() [2/2]

template<typename Container >
auto v1::recursive_iterator_begin ( Container const & rhs)
noexcept

Get a recursive iterator from the begin of a recursive container.

◆ recursive_iterator_end() [1/2]

template<typename Container >
auto v1::recursive_iterator_end ( Container & rhs)
noexcept

Get a recursive iterator from one beyond the end of a recursive container.

◆ recursive_iterator_end() [2/2]

template<typename Container >
auto v1::recursive_iterator_end ( Container const & rhs)
noexcept

Get a recursive iterator from one beyond the end of a recursive container.

◆ registry_read_current_user_dword()

uint32_t v1::registry_read_current_user_dword ( std::string_view path,
std::string_view name )

Read a DWORD registry value from the HKEY_CURRENT_USER.

Exceptions
hi::os_errorwhen the path/name is not found in the registry.

◆ registry_read_current_user_multi_string()

std::vector< std::string > v1::registry_read_current_user_multi_string ( std::string_view path,
std::string_view name )

Read a list of strings from the registry value from the HKEY_CURRENT_USER.

Exceptions
hi::os_errorwhen the path/name is not found in the registry.

◆ rfind_cluster()

constexpr It v1::rfind_cluster ( ConstIt first,
It start,
UnaryPredicate predicate )
constexpr

Find the start of the current cluster.

Parameters
firstThe first iterator, where this function will stop iterating.
startWhere to start the search
predicateA function returning the identifier of the cluster.
Returns
The first iterator where the cluster is the same as start.

◆ rotate270()

template<typename T >
void v1::rotate270 ( pixel_map< T > & dst,
pixel_map< T > const & src )
noexcept

Rotate an image 270 degrees counter-clockwise.

◆ rotate90()

template<typename T >
void v1::rotate90 ( pixel_map< T > & dst,
pixel_map< T > const & src )
noexcept

Rotate an image 90 degrees counter-clockwise.

◆ safe_handle_overflow()

template<typename T , on_overflow_t OnOverflow>
T v1::safe_handle_overflow ( T value,
bool overflow,
bool is_positive )
noexcept

Handle a potential overflow.

Parameters
valuereturned by operation; potentially invalid.
overflowtrue when the operation overflowed.
is_positivetrue when saturation is at the positive limit.

◆ saturate_cast()

template<std::unsigned_integral Out, std::unsigned_integral In>
constexpr Out v1::saturate_cast ( In rhs)
constexprnoexcept

Cast an unsigned number and saturate on overflow.

◆ secure_clear() [1/3]

template<typename It >
void v1::secure_clear ( It first,
It last )
noexcept

Securely clear a set of objects.

This function uses an operating system service for erasing memory securely.

Parameters
firstAn iterator pointing to the first object to clear.
lastAn iterator pointing to one beyond to clear.

◆ secure_clear() [2/3]

void v1::secure_clear ( trivially_copyable auto & object)
noexcept

Securely clear an object.

This function uses an operating system service for erasing memory securely.

Parameters
objectThe object to securely clear to zeroes.

◆ secure_clear() [3/3]

void v1::secure_clear ( void * ptr,
size_t size )
noexcept

Securely clear memory.

This function uses an operating system service for erasing memory securely.

Parameters
ptrThe pointer to the memory to clear.
sizeThe number of bytes to clear.

◆ secure_destroy()

template<typename It >
void v1::secure_destroy ( It first,
It last )

Securely destroy objects.

Destroy objects and overwrite its memory with all '1' followed by all '0'.

Note
Internal allocations of objects will not be securily destroyed.
Parameters
firstAn iterator to the first object.
lastAn iterator to beyond the last object.

◆ secure_uninitialized_move()

template<typename It , typename OutIt >
void v1::secure_uninitialized_move ( It first,
It last,
OutIt d_first )

Securely move objects.

First calls std::uinitialized_move() then overwrites memory with all '1' followed by all '0'.

Parameters
firstAn iterator to the first object to move
lastAn iterator to beyond the last object to move
d_firstAn destination iterator to uninitialized memory.

◆ set_thread_affinity()

std::vector< bool > v1::set_thread_affinity ( std::size_t cpu_id)

Set the current thread CPU affinity to a single CPU.

The given processor index must be a part of the mask returned from process_affinity_mask().

Parameters
cpu_idThe index of the CPU the thread should run on.
Returns
The previous bit mask. Or zero on failure.
Exceptions
std::os_errorWhen unable to set the thread affinity to the given index

◆ set_thread_affinity_mask()

std::vector< bool > v1::set_thread_affinity_mask ( std::vector< bool > const & mask)

Set the current thread CPU affinity mask.

The given mask must be a strict subset of the mask returned from process_affinity_mask().

Parameters
maskA bit mask on which CPUs the thread should run on.
Exceptions
std::os_errorWhen unable to set the thread affinity to the given index
Returns
The previous bit mask. Or zero on failure.

◆ set_thread_name()

void v1::set_thread_name ( std::string_view name)
noexcept

Set the name of the current thread.

This function will set the name of the thread so that it is available by the operating system and debugger.

Every thread should call this function exactly once.

◆ shuffle_by_index() [1/2]

auto v1::shuffle_by_index ( auto first,
auto last,
auto indices_first,
auto indices_last )
noexcept

Shuffle a container based on a list of indices.

It is undefined behavior for an index to point beyond last. It is undefined behavior for an index to repeat.

Complexity is O(n) swaps, where n is the number of indices.

Parameters
firstAn iterator pointing to the first item in a container to be shuffled (index = 0)
lastAn iterator pointing beyond the last item in a container to be shuffled.
indices_firstAn iterator pointing to the first index.
indices_lastAn iterator pointing beyond the last index.
Returns
An iterator pointing beyond the last element that was added by the indices. first + std::distance(indices_first, indices_last)

◆ shuffle_by_index() [2/2]

auto v1::shuffle_by_index ( auto first,
auto last,
auto indices_first,
auto indices_last,
auto index_op )
noexcept

Shuffle a container based on a list of indices.

It is undefined behavior for an index to point beyond last. It is undefined behavior for an index to repeat.

Complexity is O(n) swaps, where n is the number of indices.

Parameters
firstAn iterator pointing to the first item in a container to be shuffled (index = 0)
lastAn iterator pointing beyond the last item in a container to be shuffled.
indices_firstAn iterator pointing to the first index.
indices_lastAn iterator pointing beyond the last index.
index_opA function returning the size index from indices. The default returns the index item it self.
Returns
An iterator pointing beyond the last element that was added by the indices. first + std::distance(indices_first, indices_last)

◆ shutdown_system()

void v1::shutdown_system ( )
inlinenoexcept

Shutdown the system.

This will shutdown all the registered deinit functions.

Any attempts at registering deinit functions after this call will fail and the deinit function will be called directly.

◆ solveDepressedCubic()

template<typename T >
hi_force_inline results< T, 3 > v1::solveDepressedCubic ( T const & p,
T const & q )
noexcept

Solve cubic function in the form.

\[t^{3}+pt+q=0\]

\[D=\frac{1}{4}q^{2}+\frac{1}{27}p^{3}\]

\[U=\frac{1}{3}\arccos(\frac{3q}{2p})\sqrt{-\frac{3}{p}}\]

\[V=2\sqrt{-\frac{1}{3}p}\]

\[
 x=
  \begin{cases}
   0 & \text{if } p=0 \text{ and }q=0\\
   \frac{3q}{p}, -\frac{3q}{2p} & \text{if } D=0\\
   \sqrt[3]{-\frac{1}{2}+\sqrt{D}} + \sqrt[3]{-\frac{1}{2}-\sqrt{D}} & \text{if } D>0\\
   V\cdot \cos(U), V\cdot\cos(U-\frac{2}{3}\pi),V\cdot\cos(U-\frac{4}{3}\pi) & \text{if } D<0
  \end{cases}
\]

◆ solveDepressedCubicTrig()

template<typename T >
hi_force_inline results< T, 3 > v1::solveDepressedCubicTrig ( T const & p,
T const & q )
noexcept

Trigonometric solution for three real roots

◆ solvePolynomial() [1/3]

template<typename T >
hi_force_inline constexpr results< T, 1 > v1::solvePolynomial ( T const & a,
T const & b )
constexprnoexcept

Solve line function. ax+b=0

\[
 x=
 \begin{cases}
  \frac{-b}{a}, & \text{if } a\ne0\\
  \in\mathbb{R}, & \text{if } a=0,b=0\\
  \o & \text{if } a=0,b\ne0
 \end{cases}
\]

◆ solvePolynomial() [2/3]

template<typename T >
hi_force_inline constexpr results< T, 2 > v1::solvePolynomial ( T const & a,
T const & b,
T const & c )
constexprnoexcept

Solve quadratic function.

\[ax^{2}+bx+c=0\]

\[D=b^{2}-4ac\]

\[
 x=
  \begin{cases}
   \frac{-b}{2a}, & \text{if } D=0\\
   \frac{-b -\sqrt{D}}{2a}, \frac{-b +\sqrt{D}}{2a} & \text{if } D>0\\
   \o & \text{if } D<0
  \end{cases}
\]

◆ solvePolynomial() [3/3]

template<typename T >
hi_force_inline constexpr results< T, 3 > v1::solvePolynomial ( T const & a,
T const & b,
T const & c,
T const & d )
constexprnoexcept

Solve cubic function.

\[ax^{3}+bx^{2}+cx+d=0\]

\[p=\frac{3ac-b^{2}}{3a^{2}}\]

,

\[q=\frac{2b^{3}-9abc+27a^{2}d}{27a^{3}}\]

\[x=\text{solveDepressedCube}(p,q)-\frac{b}{3a}\]

◆ start_subsystem() [1/2]

bool v1::start_subsystem ( global_state_type state_bit,
bool(*)() init_function,
void(*)() deinit_function )
inline

Start a sub-system.

Initialize a subsystem. The subsystem is not started if the following conditions are true:

  • System shutdown is in progress.
  • The subsystem is already initialized.

This will also register the deinit function to be called on system shutdown.

Parameters
state_bitThe global state bit to check if the subsystem is already initialized.
init_functionThe init function to call to initialize the subsystem
deinit_functionthe deinit function to call when shutting down the system.
Returns
return value from the init_function; off_value if the system is shutting down.

◆ start_subsystem() [2/2]

template<typename T >
requires (is_atomic_v<T>)
T::value_type v1::start_subsystem ( T & check_variable,
typename T::value_type off_value,
typename T::value_type(*)() init_function,
void(*)() deinit_function )

Start a sub-system.

Initialize a subsystem. The subsystem is not started if the following conditions are true:

  • System shutdown is in progress.
  • The subsystem is already initialized.

This will also register the deinit function to be called on system shutdown.

Parameters
check_variableThe variable to check before initializing.
off_valueThe value of the check_variable when the subsystem is off.
init_functionThe init function to call to initialize the subsystem
deinit_functionthe deinit function to call when shutting down the system.
Returns
return value from the init_function; off_value if the system is shutting down.

◆ start_subsystem_or_terminate()

template<typename T >
requires (is_atomic_v<T>)
T::value_type v1::start_subsystem_or_terminate ( T & check_variable,
typename T::value_type off_value,
typename T::value_type(*)() init_function,
void(*)() deinit_function )

Start a sub-system.

Initialize a subsystem. The subsystem is not started if the following conditions are true:

  • System shutdown is in progress.
  • The subsystem is already initialized.

If the subsystem was unable to be started because of the previous conditions then this function will std::terminate() the program.

This will also register the deinit function to be called on system shutdown.

Parameters
check_variableThe variable to check before initializing.
off_valueThe value of the check_variable when the subsystem is off.
init_functionThe init function to call to initialize the subsystem
deinit_functionthe deinit function to call when shutting down the system.
Returns
return value from the init_function; off_value if the system is shutting down.

◆ start_system()

void v1::start_system ( )
inlinenoexcept

Start the system.

Subsystems will only initialize once the system is started.

◆ stop_subsystem()

void v1::stop_subsystem ( void(*)() deinit_function)
inline

Stop a sub-system.

De-initialize a subsystem.

This will unregister and call the deinit function.

Parameters
deinit_functionthe deinit function to call.

◆ sub_pixel_size()

constexpr extent2 v1::sub_pixel_size ( subpixel_orientation orientation)
constexprnoexcept

Get the size of a sub-pixel based on the sub-pixel orientation.

◆ tag_at_index()

template<fixed_string... Tags>
std::string v1::tag_at_index ( std::size_t index)
noexcept

Return the tag in the template arguments at the index. If the index points beyond the template arguments it will return the 0-tag.

◆ to_array_without_last() [1/2]

template<typename T , std::size_t N>
constexpr auto v1::to_array_without_last ( T(&&) rhs[N])
constexprnoexcept

Create an std::array from a one dimensional array, without the last element.

Useful for copying a string literal without the nul-termination

◆ to_array_without_last() [2/2]

template<typename T , std::size_t N>
constexpr auto v1::to_array_without_last ( T(&) rhs[N])
constexprnoexcept

Create an std::array from a one dimensional array, without the last element.

Useful for copying a string literal without the nul-termination

◆ to_gstring() [1/3]

gstring v1::to_gstring ( std::string const & rhs,
char32_t new_line_char = U'\u2029' )
inlinenoexcept

Convert a UTF-8 string to a grapheme-string.

Parameters
rhsThe UTF-8 string to convert.
new_line_charThe new_line_character to use.
Returns
A grapheme-string.

◆ to_gstring() [2/3]

gstring v1::to_gstring ( std::string_view rhs,
char32_t new_line_char = U'\u2029' )
inlinenoexcept

Convert a UTF-8 string to a grapheme-string.

Parameters
rhsThe UTF-8 string to convert.
new_line_charThe new_line_character to use.
Returns
A grapheme-string.

◆ to_gstring() [3/3]

gstring v1::to_gstring ( std::u32string_view rhs,
char32_t new_line_char = U'\u2029' )
noexcept

Convert a UTF-32 string to a grapheme-string.

Parameters
rhsThe UTF-32 string to convert.
new_line_charThe new_line_character to use.
Returns
A grapheme-string.

◆ to_keyboard_modifiers()

keyboard_modifiers v1::to_keyboard_modifiers ( std::string_view s)
inline

Parse a key-binding modifier name.

Parameters
sThe modifier name, with or without the canonical trailing '+'

◆ to_title() [1/2]

template<size_t N>
constexpr fixed_string< N > v1::to_title ( fixed_string< N > const & rhs)
constexprnoexcept

Convert the current string to using title case.

This function does not do full unicode case conversion; only ASCII letters [a-zA-Z] will be modified.

◆ to_title() [2/2]

constexpr std::string v1::to_title ( std::string_view rhs)
constexprnoexcept

Convert the current string to using title case.

This function does not do full unicode case conversion; only ASCII letters [a-zA-Z] will be modified.

◆ transform()

template<typename T , typename U , typename F >
T v1::transform ( const U & input,
F operation )
inline

Transform an input container to the output container.

Parameters
inputInput container.
operationA function to execute on each element in the input
Returns
Output container containing the transformed elements.

◆ unaligned_load_le() [1/2]

template<std::unsigned_integral T>
hi_force_inline void v1::unaligned_load_le ( T & r,
void const * src )
noexcept

Load data from memory.

Parameters
[out]rThe return value, overwrites all bits in the value at offset.
srcThe memory location to read the data from.

◆ unaligned_load_le() [2/2]

template<std::unsigned_integral T>
hi_force_inline void v1::unaligned_load_le ( T & r,
void const * src,
size_t size,
size_t offset = 0 )
noexcept

Load data from memory.

Parameters
[in,out]rThe return value, overwrites the bits in the value at offset.
srcThe memory location to read the data from.
sizeThe number of bytes to load.
offsetByte offset in r where the bits are overwritten
Note
It is undefined behavior to load bytes beyond the boundary of r.

◆ unicode_bidi()

std::pair< It, std::vector< unicode_bidi_class > > v1::unicode_bidi ( It first,
It last,
GetDescription get_description,
SetCodePoint set_code_point,
SetTextDirection set_text_direction,
unicode_bidi_context const & context = {} )

Reorder a given range of characters based on the unicode_bidi algorithm.

This algorithm will:

  • Reorder the list of items
  • Change code points to a mirrored version.
  • Remove code points which controls the bidirectional algorithm

It is likely that an application has the characters grouped as graphemes and is accompanied with the original index and possible other information. The get_char function returns the first code-point of a grapheme. The set_char function is used when the code-point needs to be replaced with a mirrored version.

The bidirectional algorithm will work correctly with either a list of code points or a list of first-code-point-of-graphemes.

Parameters
firstThe first iterator
lastThe last iterator
get_descriptionA function to get the unicode description of an item.
set_code_pointA function to set the character in an item.
set_text_directionA function to set the text direction in an item.
contextThe context/configuration to use for the bidi-algorithm.
Returns
Iterator pointing one beyond the last element, the writing direction for each paragraph.

◆ unicode_bidi_control_filter()

It v1::unicode_bidi_control_filter ( It first,
EndIt last,
DescriptionFunc const & description_func )

Removes control characters which will not survive the bidi-algorithm.

All RLE, LRE, RLO, LRO, PDF, and BN characters are removed.

Postcondition
Control characters between the first and last iterators are moved to the end.
Parameters
firstThe first character.
lastOne beyond the last character.
description_funcA function returning a unicode_description const& of the character.
Returns
The iterator one beyond the last character that is valid.

◆ unicode_line_break() [1/2]

unicode_break_vector v1::unicode_line_break ( It first,
ItEnd last,
DescriptionFunc const & description_func )
inline

The unicode line break algorithm UAX #14.

Parameters
firstAn iterator to the first character.
lastAn iterator to the last character.
description_funcA function to get a reference to unicode_description from a character.
Returns
A list of unicode_break_opportunity.

◆ unicode_line_break() [2/2]

constexpr std::vector< size_t > v1::unicode_line_break ( unicode_break_vector const & opportunities,
std::vector< float > const & widths,
float maximum_line_width )
constexpr

Unicode break lines.

Parameters
opportunitiesThe list of break opportunities.
widthsThe list of character widths
maximum_line_widthThe maximum line width.
Returns
A list of line lengths.

◆ unicode_line_break_width()

constexpr float v1::unicode_line_break_width ( std::vector< float >::const_iterator first,
std::vector< float >::const_iterator last )
constexprnoexcept

Calculate the width of a line.

Parameters
firstIterator to the first character widths.
lastIterator to one beyond the last character width.
Returns
The length of the line.

◆ unicode_NFC()

std::u32string v1::unicode_NFC ( std::u32string_view text,
unicode_normalization_mask normalization_mask = unicode_normalization_mask::NFD )
noexcept

Convert text to Unicode-NFC normal form.

Code point 0x00'ffff is used internally, do not pass in text.

Parameters
textto normalize, in-place.
normalization_maskExtra features for normalization.

◆ unicode_NFD()

std::u32string v1::unicode_NFD ( std::u32string_view text,
unicode_normalization_mask normalization_mask = unicode_normalization_mask::NFD )
noexcept

Convert text to Unicode-NFD normal form.

Code point 0x00'ffff is used internally, do not pass in text.

Parameters
textto normalize, in-place.
normalization_maskExtra features for normalization.

◆ unicode_NFKC()

std::u32string v1::unicode_NFKC ( std::u32string_view text,
unicode_normalization_mask normalization_mask = unicode_normalization_mask::NFKD )
noexcept

Convert text to Unicode-NFKC normal form.

Code point 0x00'ffff is used internally, do not pass in text.

Parameters
textto normalize, in-place.
normalization_maskExtra features for normalization.

◆ unicode_NFKD()

std::u32string v1::unicode_NFKD ( std::u32string_view text,
unicode_normalization_mask normalization_mask = unicode_normalization_mask::NFKD )
noexcept

Convert text to Unicode-NFKD normal form.

Code point 0x00'ffff is used internally, do not pass in text.

Parameters
textto normalize, in-place.
normalization_maskExtra features for normalization.

◆ unicode_sentence_break()

unicode_break_vector v1::unicode_sentence_break ( It first,
ItEnd last,
DescriptionFunc const & description_func )
inline

The unicode word break algorithm UAX#29.

Parameters
firstAn iterator to the first character.
lastAn iterator to the last character.
description_funcA function to get a reference to unicode_description from a character.
Returns
A list of unicode_break_opportunity before each character.

◆ unicode_word_break()

unicode_break_vector v1::unicode_word_break ( It first,
ItEnd last,
DescriptionFunc const & description_func )
inline

The unicode word break algorithm UAX#29.

Parameters
firstAn iterator to the first character.
lastAn iterator to the last character.
description_funcA function to get a reference to unicode_description from a character.
Returns
A list of unicode_break_opportunity.

◆ unordered_remove()

template<typename It >
constexpr It v1::unordered_remove ( It first,
It last,
It element )
constexpr

Remove element from a container.

Note
The elements before element remain in order.
The elements after element are not in the original order.
Parameters
firstThe iterator pointing to the first element of the container
lastThe iterator pointing one beyond the last element of the container.
elementThe iterator that points to the element to be removed.
Returns
The iterator one past the last element.

◆ up_cast() [1/3]

template<typename Out , std::derived_from< std::remove_reference_t< Out > > In>
requires std::is_reference_v<Out> and (std::is_const_v<std::remove_reference_t<Out>> == std::is_const_v<In> or std::is_const_v<std::remove_reference_t<Out>>)
constexpr Out v1::up_cast ( In & rhs)
constexprnoexcept

Cast a reference to a class to its base class or itself.

◆ up_cast() [2/3]

template<typename Out , std::derived_from< std::remove_pointer_t< Out > > In>
requires std::is_pointer_v<Out> and (std::is_const_v<std::remove_pointer_t<Out>> == std::is_const_v<In> or std::is_const_v<std::remove_pointer_t<Out>>)
constexpr Out v1::up_cast ( In * rhs)
constexprnoexcept

Cast a pointer to a class to its base class or itself.

◆ up_cast() [3/3]

template<typename Out >
requires std::is_pointer_v<Out>
constexpr Out v1::up_cast ( nullptr_t )
constexprnoexcept

Cast a reference to a class to its base class or itself.

◆ update_line_metrics_vertical_alignment()

template<typename It , typename ItEnd >
void v1::update_line_metrics_vertical_alignment ( It first,
ItEnd last,
vertical_alignment alignment )
inline

Vertically align the given line metrics.

Parameters
firstA iterator to the first line metrics element.
lastA iterator one beyond the last line metrics element
alignmentHow to vertically align the lines.

◆ variants()

std::vector< language_tag > v1::variants ( std::vector< language_tag > languages)

Add variants to the list of languages.

This function is mostly used to add languages to a list of preferred languages to search for translations in the translation catalog.

Parameters
languagesA list of languages ordered by preference.
Returns
A new list of languages which includes variants and ordered by the given list of languages.

◆ wide_cast() [1/2]

template<arithmetic Out>
constexpr Out v1::wide_cast ( bool rhs)
constexprnoexcept

Cast a number to a type that will be able to represent all values without loss of precision.

◆ wide_cast() [2/2]

template<arithmetic Out, arithmetic In>
requires (type_in_range_v<Out, In>)
constexpr Out v1::wide_cast ( In rhs)
constexprnoexcept

Cast a number to a type that will be able to represent all values without loss of precision.

◆ wrap_lines()

void v1::wrap_lines ( auto first,
auto last,
float max_width,
auto get_width,
auto get_code_point,
auto set_code_point )
noexcept

Wrap lines in text that are too wide.

This algorithm may modify white-space in text and change them into line seperators. Lines are separated using the U+2028 code-point, and paragraphs are separated by the U+2029 code-point.

Parameters
firstThe first iterator of a text to wrap
lastThe one beyond the last iterator of a text to wrap
max_widthThe maximum width of a line.
get_widthA function returning the width of an item pointed by the iterator. float get_width(auto const &item)
get_code_pointA function returning the code-point of an item pointed by the iterator. char32_t get_code_point(auto const &item)
set_code_pointA function changing the code-point of an item pointed by the iterator. void set_code_point(auto &item, char32_t code_point)

◆ ZZWSTR_to_string()

std::vector< std::string > v1::ZZWSTR_to_string ( wchar_t * first,
wchar_t * last,
ssize_t nr_strings = -1 )
inline

Convert a win32 zero terminated list of zero terminated strings.

Parameters
firstA pointer to a buffer of a zero terminated list of zero terminated string.
lastA pointer one beyond the buffer.
nr_stringsThe number of string in the buffer.
Returns
A vector of UTF-8 encoded strings.
Exceptions
parse_errorwhen the list does not terminate with a zero.

Variable Documentation

◆ audio_device_state_metadata

constexpr auto v1::audio_device_state_metadata
constexpr
Initial value:
= enum_metadata{
audio_device_state::uninitialized, "uninitialized",
audio_device_state::active, "active",
audio_device_state::disabled, "disabled",
audio_device_state::not_present, "not_present",
audio_device_state::unplugged, "unplugged",
}

◆ audio_direction_metadata

constexpr auto v1::audio_direction_metadata
constexpr
Initial value:
= enum_metadata{
audio_direction::none, "none",
audio_direction::input, "input",
audio_direction::output, "output",
audio_direction::bidirectional, "bidirectional"
}

◆ dp_per_inch

constexpr double v1::dp_per_inch = dp_per_inch_v<double>
constexpr
See also
dp_per_inch_v

◆ dp_per_inch_v

template<std::floating_point T>
constexpr auto v1::dp_per_inch_v = T{80.0}
constexpr

The number of device independent pixels per inch.

device independent pixels per platform:

  • win32: 96 dp/inch
  • MacOS: 72 dp/inch
  • Android: 160 dp/inch (80 double dp/inch)

The Android dp size is almost halfway between win32 and MacOS, which we will use for hikogui.

◆ font_weight_from_string_table

hilet v1::font_weight_from_string_table
inline
Initial value:
{"thin", font_weight::Thin},
{"hairline", font_weight::Thin},
{"ultra-light", font_weight::ExtraLight},
{"ultra light", font_weight::ExtraLight},
{"extra-light", font_weight::ExtraLight},
{"extra light", font_weight::ExtraLight},
{"light", font_weight::Light},
{"normal", font_weight::Regular},
{"regular", font_weight::Regular},
{"medium", font_weight::Medium},
{"semi-bold", font_weight::SemiBold},
{"semi bold", font_weight::SemiBold},
{"demi-bold", font_weight::SemiBold},
{"demi bold", font_weight::SemiBold},
{"bold", font_weight::Bold},
{"extra-bold", font_weight::ExtraBold},
{"extra bold", font_weight::ExtraBold},
{"ultra-bold", font_weight::ExtraBold},
{"ultra bold", font_weight::ExtraBold},
{"heavy", font_weight::Black},
{"black", font_weight::Black},
{"extra-black", font_weight::ExtraBlack},
{"ultra-black", font_weight::ExtraBlack},
}

◆ gfx_system_mutex

unfair_recursive_mutex v1::gfx_system_mutex
inline

Global mutex for GUI elements, like gfx_system, gfx_device, Windows and Widgets.

◆ global_state

std::atomic<global_state_type> v1::global_state = global_state_type::log_level_default
inline

The global state of the hikogui framework.

This variable contains state in use by multiple systems inside hikogui. This is done so that this variable is likely to be in a cache line and may stay in a register.

In many cases using std::memory_order::relaxed loads are enough of a guarantee to read this variable.

◆ is_character_v

template<typename T >
constexpr bool v1::is_character_v = is_character<T>::value
inlineconstexpr

True is the supplied type is a character integer. This distinguishes between integer characters and integer numbers.

◆ is_different_v

constexpr bool v1::is_different_v = not std::is_same_v<std::decay_t<Context>,std::decay_t<Expected>>
constexpr

If the types are different.

The two types are checked after removing const, volatile and reference qualifiers.

◆ is_numeric_integral_v

template<typename T >
constexpr bool v1::is_numeric_integral_v = is_numeric_integral<T>::value
inlineconstexpr

◆ is_numeric_signed_integral_v

template<typename T >
constexpr bool v1::is_numeric_signed_integral_v = is_numeric_signed_integral<T>::value
inlineconstexpr

◆ is_numeric_unsigned_integral_v

template<typename T >
constexpr bool v1::is_numeric_unsigned_integral_v = is_numeric_unsigned_integral<T>::value
inlineconstexpr

◆ is_numeric_v

template<typename T >
constexpr bool v1::is_numeric_v = is_numeric<T>::value
inlineconstexpr
See also
is_numeric

◆ points_per_inch

constexpr double v1::points_per_inch = points_per_inch_v<double>
constexpr

◆ points_per_inch_v

template<std::floating_point T>
constexpr auto v1::points_per_inch_v = T{72.0}
constexpr

The number of points (typography) per inch.

◆ pow10_table

constexpr long long v1::pow10_table[20]
constexpr
Initial value:
{
1LL,
10LL,
100LL,
1'000LL,
10'000LL,
100'000LL,
1'000'000LL,
10'000'000LL,
100'000'000LL,
1'000'000'000LL,
10'000'000'000LL,
100'000'000'000LL,
1'000'000'000'000LL,
10'000'000'000'000LL,
100'000'000'000'000LL,
1'000'000'000'000'000LL,
10'000'000'000'000'000LL,
100'000'000'000'000'000LL,
1'000'000'000'000'000'000LL,
}

◆ semantic_color_metadata

constexpr auto v1::semantic_color_metadata
constexpr
Initial value:
= enum_metadata{
semantic_color::blue, "blue",
semantic_color::green, "green",
semantic_color::indigo, "indigo",
semantic_color::orange, "orange",
semantic_color::pink, "pink",
semantic_color::purple, "purple",
semantic_color::red, "red",
semantic_color::teal, "teal",
semantic_color::yellow, "yellow",
semantic_color::gray, "gray",
semantic_color::gray2, "gray2",
semantic_color::gray3, "gray3",
semantic_color::gray4, "gray4",
semantic_color::gray5, "gray5",
semantic_color::gray6, "gray6",
semantic_color::foreground, "foreground",
semantic_color::border, "border",
semantic_color::fill, "fill",
semantic_color::accent, "accent",
semantic_color::text_select, "text-select",
semantic_color::primary_cursor, "primary-cursor",
semantic_color::secondary_cursor, "secondary-cursor",
}

◆ semantic_text_style_metadata

constexpr auto v1::semantic_text_style_metadata
constexpr
Initial value:
= enum_metadata{
semantic_text_style::label, "label",
semantic_text_style::small_label, "small-label",
semantic_text_style::warning, "warning",
semantic_text_style::error, "error",
semantic_text_style::help, "help",
semantic_text_style::placeholder, "placeholder",
semantic_text_style::link, "link",
}

◆ sRGB_to_XYZ

constexpr matrix3 v1::sRGB_to_XYZ
constexpr
Initial value:
=
matrix3{0.41239080f, 0.35758434f, 0.18048079f, 0.21263901f, 0.71516868f, 0.07219232f, 0.01933082f, 0.11919478f, 0.95053215f}

◆ subpixel_orientation_metadata

constexpr auto v1::subpixel_orientation_metadata
constexpr
Initial value:
= enum_metadata{
subpixel_orientation::unknown, "unknown",
subpixel_orientation::horizontal_rgb, "horizontal RGB",
subpixel_orientation::horizontal_bgr, "horizontal BGR",
subpixel_orientation::vertical_rgb, "vertical RGB",
subpixel_orientation::vertical_bgr, "vertical BGR",
}

◆ text_decoration_metadata

constexpr auto v1::text_decoration_metadata
constexpr
Initial value:
= enum_metadata{
text_decoration::None, "none",
text_decoration::Underline, "underline",
text_decoration::WavyUnderline, "wavy-underline",
text_decoration::StrikeThrough, "strike-through"
}

◆ text_phrasing_metadata

constexpr auto v1::text_phrasing_metadata
constexpr
Initial value:
= enum_metadata{
text_phrasing::regular, "regular",
text_phrasing::emphesis, "emphesis",
text_phrasing::strong, "strong",
text_phrasing::code, "code",
text_phrasing::abbreviation, "abbreviation",
text_phrasing::bold, "bold",
text_phrasing::italic, "italic",
text_phrasing::citation, "citation",
text_phrasing::keyboard, "keyboard",
text_phrasing::mark, "mark",
text_phrasing::math, "math",
text_phrasing::example, "example",
text_phrasing::unarticulated, "unarticulated",
}

◆ type_in_range_v

template<typename Out , typename In >
constexpr bool v1::type_in_range_v
constexpr
Initial value:

All values of numeric type In can be represented without loss of precision by numeric type Out.

◆ XYZ_to_sRGB

constexpr matrix3 v1::XYZ_to_sRGB
constexpr
Initial value:
= matrix3{
3.24096994f,
-1.53738318f,
-0.49861076f,
-0.96924364f,
1.87596750f,
0.04155506f,
0.05563008f,
-0.20397696f,
1.05697151f}