2
0
mirror of https://github.com/tribufu/sdk-cpp synced 2025-06-18 13:34:19 +00:00

Add boost and cpprestsdk

This commit is contained in:
2025-05-28 13:59:55 -03:00
parent d3fb88a65d
commit 7079ba75f2
14583 changed files with 3063824 additions and 1 deletions
.gitignore
vendor
boost
LICENSE_1_0.txt
include
boost
accumulators
accumulators.hppaccumulators_fwd.hpp
framework
numeric
statistics.hpp
statistics
statistics_fwd.hpp
algorithm
align.hpp
align
aligned_storage.hppany.hpp
any
archive
archive_exception.hppbasic_archive.hppbasic_binary_iarchive.hppbasic_binary_iprimitive.hppbasic_binary_oarchive.hppbasic_binary_oprimitive.hppbasic_streambuf_locale_saver.hppbasic_text_iarchive.hppbasic_text_iprimitive.hppbasic_text_oarchive.hppbasic_text_oprimitive.hppbasic_xml_archive.hppbasic_xml_iarchive.hppbasic_xml_oarchive.hppbinary_iarchive.hppbinary_iarchive_impl.hppbinary_oarchive.hppbinary_oarchive_impl.hppbinary_wiarchive.hppbinary_woarchive.hppcodecvt_null.hpp
detail
dinkumware.hpp
impl
iterators
polymorphic_binary_iarchive.hpppolymorphic_binary_oarchive.hpppolymorphic_iarchive.hpppolymorphic_oarchive.hpppolymorphic_text_iarchive.hpppolymorphic_text_oarchive.hpppolymorphic_text_wiarchive.hpppolymorphic_text_woarchive.hpppolymorphic_xml_iarchive.hpppolymorphic_xml_oarchive.hpppolymorphic_xml_wiarchive.hpppolymorphic_xml_woarchive.hpptext_iarchive.hpptext_oarchive.hpptext_wiarchive.hpptext_woarchive.hpptmpdir.hppwcslen.hppxml_archive_exception.hppxml_iarchive.hppxml_oarchive.hppxml_wiarchive.hppxml_woarchive.hpp
array.hppasio.hpp
asio
any_completion_executor.hppany_completion_handler.hppany_io_executor.hppappend.hppas_tuple.hppassociated_allocator.hppassociated_cancellation_slot.hppassociated_executor.hppassociated_immediate_executor.hppassociator.hppasync_result.hppawaitable.hppbasic_datagram_socket.hppbasic_deadline_timer.hppbasic_file.hppbasic_io_object.hppbasic_random_access_file.hppbasic_raw_socket.hppbasic_readable_pipe.hppbasic_seq_packet_socket.hppbasic_serial_port.hppbasic_signal_set.hppbasic_socket.hppbasic_socket_acceptor.hppbasic_socket_iostream.hppbasic_socket_streambuf.hppbasic_stream_file.hppbasic_stream_socket.hppbasic_streambuf.hppbasic_streambuf_fwd.hppbasic_waitable_timer.hppbasic_writable_pipe.hppbind_allocator.hppbind_cancellation_slot.hppbind_executor.hppbind_immediate_executor.hppbuffer.hppbuffer_registration.hppbuffered_read_stream.hppbuffered_read_stream_fwd.hppbuffered_stream.hppbuffered_stream_fwd.hppbuffered_write_stream.hppbuffered_write_stream_fwd.hppbuffers_iterator.hppcancel_after.hppcancel_at.hppcancellation_signal.hppcancellation_state.hppcancellation_type.hppco_composed.hppco_spawn.hppcompletion_condition.hppcompose.hppcomposed.hppconfig.hppconnect.hppconnect_pipe.hppconsign.hppcoroutine.hppdeadline_timer.hppdefault_completion_token.hppdefer.hppdeferred.hppdetached.hpp
detail
array.hpparray_fwd.hppassert.hppatomic_count.hppbase_from_cancellation_state.hppbase_from_completion_cond.hppbind_handler.hppblocking_executor_op.hppbuffer_resize_guard.hppbuffer_sequence_adapter.hppbuffered_stream_storage.hppcall_stack.hppchrono.hppchrono_time_traits.hppcompletion_handler.hppcompletion_message.hppcompletion_payload.hppcompletion_payload_handler.hppcomposed_work.hppconcurrency_hint.hppconditionally_enabled_event.hppconditionally_enabled_mutex.hppconfig.hppconsuming_buffers.hppcstddef.hppcstdint.hppdate_time_fwd.hppdeadline_timer_service.hppdependent_type.hppdescriptor_ops.hppdescriptor_read_op.hppdescriptor_write_op.hppdev_poll_reactor.hppepoll_reactor.hppevent.hppeventfd_select_interrupter.hppexception.hppexecutor_function.hppexecutor_op.hppfd_set_adapter.hppfenced_block.hppfunctional.hppfuture.hppglobal.hpphandler_alloc_helpers.hpphandler_cont_helpers.hpphandler_tracking.hpphandler_type_requirements.hpphandler_work.hpphash_map.hpp
impl
initiate_defer.hppinitiate_dispatch.hppinitiate_post.hppinitiation_base.hppio_control.hppio_object_impl.hppio_uring_descriptor_read_at_op.hppio_uring_descriptor_read_op.hppio_uring_descriptor_service.hppio_uring_descriptor_write_at_op.hppio_uring_descriptor_write_op.hppio_uring_file_service.hppio_uring_null_buffers_op.hppio_uring_operation.hppio_uring_service.hppio_uring_socket_accept_op.hppio_uring_socket_connect_op.hppio_uring_socket_recv_op.hppio_uring_socket_recvfrom_op.hppio_uring_socket_recvmsg_op.hppio_uring_socket_send_op.hppio_uring_socket_sendto_op.hppio_uring_socket_service.hppio_uring_socket_service_base.hppio_uring_wait_op.hppis_buffer_sequence.hppis_executor.hppkeyword_tss_ptr.hppkqueue_reactor.hpplimits.hpplocal_free_on_block_exit.hppmemory.hppmutex.hppnon_const_lvalue.hppnoncopyable.hppnull_event.hppnull_fenced_block.hppnull_global.hppnull_mutex.hppnull_reactor.hppnull_signal_blocker.hppnull_socket_service.hppnull_static_mutex.hppnull_thread.hppnull_tss_ptr.hppobject_pool.hppold_win_sdk_compat.hppop_queue.hppoperation.hpppipe_select_interrupter.hpppop_options.hppposix_event.hppposix_fd_set_adapter.hppposix_global.hppposix_mutex.hppposix_serial_port_service.hppposix_signal_blocker.hppposix_static_mutex.hppposix_thread.hppposix_tss_ptr.hpppush_options.hppreactive_descriptor_service.hppreactive_null_buffers_op.hppreactive_socket_accept_op.hppreactive_socket_connect_op.hppreactive_socket_recv_op.hppreactive_socket_recvfrom_op.hppreactive_socket_recvmsg_op.hppreactive_socket_send_op.hppreactive_socket_sendto_op.hppreactive_socket_service.hppreactive_socket_service_base.hppreactive_wait_op.hppreactor.hppreactor_op.hppreactor_op_queue.hpprecycling_allocator.hppregex_fwd.hppresolve_endpoint_op.hppresolve_op.hppresolve_query_op.hppresolver_service.hppresolver_service_base.hppscheduler.hppscheduler_operation.hppscheduler_task.hppscheduler_thread_info.hppscoped_lock.hppscoped_ptr.hppselect_interrupter.hppselect_reactor.hppservice_registry.hppsignal_blocker.hppsignal_handler.hppsignal_init.hppsignal_op.hppsignal_set_service.hppsocket_holder.hppsocket_ops.hppsocket_option.hppsocket_select_interrupter.hppsocket_types.hppsource_location.hppstatic_mutex.hppstd_event.hppstd_fenced_block.hppstd_global.hppstd_mutex.hppstd_static_mutex.hppstd_thread.hppstrand_executor_service.hppstrand_service.hppstring_view.hppthread.hppthread_context.hppthread_group.hppthread_info_base.hppthrow_error.hppthrow_exception.hpptimed_cancel_op.hpptimer_queue.hpptimer_queue_base.hpptimer_queue_ptime.hpptimer_queue_set.hpptimer_scheduler.hpptimer_scheduler_fwd.hpptss_ptr.hpptype_traits.hpputility.hppwait_handler.hppwait_op.hppwin_event.hppwin_fd_set_adapter.hppwin_global.hppwin_iocp_file_service.hppwin_iocp_handle_read_op.hppwin_iocp_handle_service.hppwin_iocp_handle_write_op.hppwin_iocp_io_context.hppwin_iocp_null_buffers_op.hppwin_iocp_operation.hppwin_iocp_overlapped_op.hppwin_iocp_overlapped_ptr.hppwin_iocp_serial_port_service.hppwin_iocp_socket_accept_op.hppwin_iocp_socket_connect_op.hppwin_iocp_socket_recv_op.hppwin_iocp_socket_recvfrom_op.hppwin_iocp_socket_recvmsg_op.hppwin_iocp_socket_send_op.hppwin_iocp_socket_service.hppwin_iocp_socket_service_base.hppwin_iocp_thread_info.hppwin_iocp_wait_op.hppwin_mutex.hppwin_object_handle_service.hppwin_static_mutex.hppwin_thread.hppwin_tss_ptr.hppwinapp_thread.hppwince_thread.hppwinrt_async_manager.hppwinrt_async_op.hppwinrt_resolve_op.hppwinrt_resolver_service.hppwinrt_socket_connect_op.hppwinrt_socket_recv_op.hppwinrt_socket_send_op.hppwinrt_ssocket_service.hppwinrt_ssocket_service_base.hppwinrt_timer_scheduler.hppwinrt_utils.hppwinsock_init.hppwork_dispatcher.hppwrapped_handler.hpp
dispatch.hppdisposition.hpperror.hppexecution.hpp
execution
execution_context.hppexecutor.hppexecutor_work_guard.hpp
experimental
file_base.hpp
generic
handler_continuation_hook.hpphigh_resolution_timer.hppimmediate.hpp
impl
io_context.hppio_context_strand.hpp
ip
is_applicable_property.hppis_contiguous_iterator.hppis_executor.hppis_read_buffered.hppis_write_buffered.hpp
local
multiple_exceptions.hpppackaged_task.hppplaceholders.hpp
posix
post.hppprefer.hppprepend.hppquery.hpprandom_access_file.hppread.hppread_at.hppread_until.hppreadable_pipe.hpprecycling_allocator.hppredirect_error.hppregistered_buffer.hpprequire.hpprequire_concept.hppserial_port.hppserial_port_base.hppsignal_set.hppsignal_set_base.hppsocket_base.hppspawn.hppssl.hpp
ssl
static_thread_pool.hppsteady_timer.hppstrand.hppstream_file.hppstreambuf.hppsystem_context.hppsystem_executor.hppsystem_timer.hppthis_coro.hppthread_pool.hpptime_traits.hpp
traits
ts
unyield.hppuse_awaitable.hppuse_future.hppuses_executor.hppversion.hppwait_traits.hpp
windows
writable_pipe.hppwrite.hppwrite_at.hppyield.hpp
assert.hpp
assert
assign.hpp
assign
atomic.hpp
atomic
atomic.hppatomic_flag.hppatomic_ref.hppcapabilities.hpp
detail
addressof.hppaligned_variable.hppatomic_flag_impl.hppatomic_impl.hppatomic_ref_impl.hppbitwise_cast.hppbitwise_fp_cast.hppcapabilities.hppcaps_arch_gcc_aarch32.hppcaps_arch_gcc_aarch64.hppcaps_arch_gcc_alpha.hppcaps_arch_gcc_arm.hppcaps_arch_gcc_ppc.hppcaps_arch_gcc_sparc.hppcaps_arch_gcc_x86.hppcaps_arch_msvc_arm.hppcaps_arch_msvc_x86.hppcaps_gcc_atomic.hppcaps_gcc_sync.hppcaps_linux_arm.hppcaps_windows.hppcas_based_exchange.hppclassify.hppconfig.hppcore_arch_operations.hppcore_arch_operations_fwd.hppcore_arch_ops_gcc_aarch32.hppcore_arch_ops_gcc_aarch64.hppcore_arch_ops_gcc_alpha.hppcore_arch_ops_gcc_arm.hppcore_arch_ops_gcc_ppc.hppcore_arch_ops_gcc_sparc.hppcore_arch_ops_gcc_x86.hppcore_arch_ops_msvc_arm.hppcore_arch_ops_msvc_x86.hppcore_operations.hppcore_operations_emulated.hppcore_operations_emulated_fwd.hppcore_operations_fwd.hppcore_ops_cas_based.hppcore_ops_gcc_atomic.hppcore_ops_gcc_sync.hppcore_ops_linux_arm.hppcore_ops_windows.hppextending_cas_based_arithmetic.hppextra_fp_operations.hppextra_fp_operations_fwd.hppextra_fp_ops_emulated.hppextra_fp_ops_generic.hppextra_operations.hppextra_operations_fwd.hppextra_ops_emulated.hppextra_ops_gcc_aarch32.hppextra_ops_gcc_aarch64.hppextra_ops_gcc_arm.hppextra_ops_gcc_ppc.hppextra_ops_gcc_x86.hppextra_ops_generic.hppextra_ops_msvc_arm.hppextra_ops_msvc_x86.hppfence_arch_operations.hppfence_arch_ops_gcc_aarch32.hppfence_arch_ops_gcc_aarch64.hppfence_arch_ops_gcc_alpha.hppfence_arch_ops_gcc_arm.hppfence_arch_ops_gcc_ppc.hppfence_arch_ops_gcc_sparc.hppfence_arch_ops_gcc_x86.hppfence_arch_ops_msvc_arm.hppfence_arch_ops_msvc_x86.hppfence_operations.hppfence_operations_emulated.hppfence_ops_gcc_atomic.hppfence_ops_gcc_sync.hppfence_ops_linux_arm.hppfence_ops_windows.hppfloat_sizes.hppfooter.hppfp_operations.hppfp_operations_fwd.hppfp_ops_emulated.hppfp_ops_generic.hppfutex.hppgcc_arm_asm_common.hppgcc_atomic_memory_order_utils.hppgcc_ppc_asm_common.hppheader.hppint_sizes.hppintegral_conversions.hppinterlocked.hppintptr.hpplink.hpplock_pool.hppmemory_order_utils.hpponce_flag.hppops_gcc_aarch32_common.hppops_gcc_aarch64_common.hppops_gcc_arm_common.hppops_gcc_ppc_common.hppops_msvc_common.hpppause.hppplatform.hppstorage_traits.hppstring_ops.hpp
type_traits
wait_capabilities.hppwait_caps_darwin_ulock.hppwait_caps_dragonfly_umtx.hppwait_caps_freebsd_umtx.hppwait_caps_futex.hppwait_caps_windows.hppwait_on_address.hppwait_operations.hppwait_operations_fwd.hppwait_ops_darwin_ulock.hppwait_ops_dragonfly_umtx.hppwait_ops_emulated.hppwait_ops_freebsd_umtx.hppwait_ops_futex.hppwait_ops_generic.hppwait_ops_windows.hpp
fences.hppipc_atomic.hppipc_atomic_flag.hppipc_atomic_ref.hpp
beast.hpp
beast
_experimental
core.hpp
core
async_base.hppbasic_stream.hppbind_handler.hppbuffer_ref.hppbuffer_traits.hppbuffered_read_stream.hppbuffers_adaptor.hppbuffers_cat.hppbuffers_generator.hppbuffers_prefix.hppbuffers_range.hppbuffers_suffix.hppbuffers_to_string.hpp
detail
detect_ssl.hpperror.hppfile.hppfile_base.hppfile_posix.hppfile_stdio.hppfile_win32.hppflat_buffer.hppflat_static_buffer.hppflat_stream.hpp
impl
make_printable.hppmulti_buffer.hppostream.hpprate_policy.hppread_size.hpprole.hppsaved_handler.hppspan.hppstatic_buffer.hppstatic_string.hppstream_traits.hppstring.hppstring_param.hppstring_type.hpptcp_stream.hpp
http.hpp
http
src.hppssl.hpp
ssl
version.hppwebsocket.hpp
websocket
zlib.hpp
zlib
bimap.hpp
bimap
bimap.hpp
container_adaptor
detail
list_of.hppmultiset_of.hpp
property_map
relation
set_of.hpp
support
tags
unconstrained_set_of.hppunordered_multiset_of.hppunordered_set_of.hppvector_of.hpp
views
bind.hpp
bind
blank.hppblank_fwd.hppcall_traits.hppcallable_traits.hpp
callable_traits
cast.hppcerrno.hppcharconv.hpp
charconv
checked_delete.hppchrono.hpp
chrono
circular_buffer.hpp
circular_buffer
circular_buffer_fwd.hppcobalt.hpp
cobalt
compat
compressed_pair.hppcompute.hpp
compute
algorithm.hpp
algorithm
accumulate.hppadjacent_difference.hppadjacent_find.hppall_of.hppany_of.hppbinary_search.hppcopy.hppcopy_if.hppcopy_n.hppcount.hppcount_if.hpp
detail
equal.hppequal_range.hppexclusive_scan.hppfill.hppfill_n.hppfind.hppfind_end.hppfind_if.hppfind_if_not.hppfor_each.hppfor_each_n.hppgather.hppgenerate.hppgenerate_n.hppincludes.hppinclusive_scan.hppinner_product.hppinplace_merge.hppiota.hppis_partitioned.hppis_permutation.hppis_sorted.hpplexicographical_compare.hpplower_bound.hppmax_element.hppmerge.hppmin_element.hppminmax_element.hppmismatch.hppnext_permutation.hppnone_of.hppnth_element.hpppartial_sum.hpppartition.hpppartition_copy.hpppartition_point.hppprev_permutation.hpprandom_shuffle.hppreduce.hppreduce_by_key.hppremove.hppremove_if.hppreplace.hppreplace_copy.hppreverse.hppreverse_copy.hpprotate.hpprotate_copy.hppscatter.hppscatter_if.hppsearch.hppsearch_n.hppset_difference.hppset_intersection.hppset_symmetric_difference.hppset_union.hppsort.hppsort_by_key.hppstable_partition.hppstable_sort.hppstable_sort_by_key.hppswap_ranges.hpptransform.hpptransform_if.hpptransform_reduce.hppunique.hppunique_copy.hppupper_bound.hpp
allocator.hpp
allocator
async.hpp
async
buffer.hppcl.hppcl_ext.hppclosure.hppcommand_queue.hppconfig.hppcontainer.hpp
container
context.hppcore.hpp
detail
device.hppevent.hppexception.hpp
exception
experimental
function.hppfunctional.hpp
functional
image.hpp
image
image2d.hppimage3d.hppimage_format.hppimage_sampler.hpp
interop
iterator.hpp
iterator
kernel.hpplambda.hpp
lambda
memory.hpp
memory
memory_object.hpppipe.hppplatform.hppprogram.hpprandom.hpp
random
source.hppsvm.hppsystem.hpptype_traits.hpp
type_traits
types.hpp
types
user_event.hpputility.hpp
utility
version.hppwait_list.hpp
concept
concept_archetype.hppconcept_check.hpp
concept_check
config.hpp
config
container
adaptive_pool.hppallocator.hppallocator_traits.hppcontainer_fwd.hppdeque.hpp
detail
devector.hppflat_map.hppflat_set.hpplist.hppmap.hppnew_allocator.hppnode_allocator.hppnode_handle.hppoptions.hpp
pmr
scoped_allocator.hppscoped_allocator_fwd.hppset.hppslist.hppsmall_vector.hppstable_vector.hppstatic_vector.hppstring.hppthrow_exception.hppuses_allocator.hppuses_allocator_fwd.hppvector.hpp
container_hash
context
contract.hpp
contract
contract_macro.hppconvert.hpp
convert
core
coroutine
coroutine2
crc.hppcregex.hppcstdfloat.hppcstdint.hppcstdlib.hppcurrent_function.hppcxx11_char_types.hppdate_time.hpp
date_time
adjust_functors.hppc_local_time_adjustor.hppc_time.hppcompiler_config.hppconstrained_value.hppdate.hppdate_clock_device.hppdate_defs.hppdate_duration.hppdate_duration_types.hppdate_facet.hppdate_format_simple.hppdate_formatting.hppdate_formatting_limited.hppdate_formatting_locales.hppdate_generator_formatter.hppdate_generator_parser.hppdate_generators.hppdate_iterator.hppdate_names_put.hppdate_parsing.hppdst_rules.hppdst_transition_generators.hppfiletime_functions.hppfind_match.hppformat_date_parser.hpp
gregorian
gregorian_calendar.hppgregorian_calendar.ippint_adapter.hppiso_format.hpp
local_time
local_time_adjustor.hpplocal_timezone_defs.hpplocale_config.hppmicrosec_time_clock.hppparse_format_base.hppperiod.hppperiod_formatter.hppperiod_parser.hpp
posix_time
special_defs.hppspecial_values_formatter.hppspecial_values_parser.hppstring_convert.hppstring_parse_tree.hppstrings_from_facet.hpptime.hpptime_clock.hpptime_defs.hpptime_duration.hpptime_facet.hpptime_formatting_streams.hpptime_iterator.hpptime_parsing.hpptime_resolution_traits.hpptime_system_counted.hpptime_system_split.hpptime_zone_base.hpptime_zone_names.hpptz_db_base.hppwrapping_int.hppyear_month_day.hpp
describe.hpp
describe
detail
algorithm.hppallocator_utilities.hppatomic_count.hppbasic_pointerbuf.hppbinary_search.hppbitmask.hppcall_traits.hppcatch_exceptions.hppcompressed_pair.hppcontainer_fwd.hppfenv.hpphas_default_constructor.hppidentifier.hppindirect_traits.hppinterlocked.hppis_incrementable.hppis_sorted.hppis_xxx.hppiterator.hpplcast_precision.hpplightweight_main.hpplightweight_mutex.hpplightweight_test.hpplightweight_test_report.hpplightweight_thread.hppnamed_template_params.hppno_exceptions_support.hppnumeric_traits.hppob_compressed_pair.hppquick_allocator.hppreference_content.hppscoped_enum_emulation.hppselect_type.hppsp_typeinfo.hpptemplated_streams.hpputf8_codecvt_facet.hpputf8_codecvt_facet.ipp
winapi
workaround.hpp
dll.hpp
dll
dynamic_bitset.hpp
dynamic_bitset
dynamic_bitset_fwd.hppenable_shared_from_this.hppendian.hpp
endian
exception
exception_ptr.hpp
fiber
filesystem.hpp
filesystem
flyweight.hpp
flyweight
foreach.hppforeach_fwd.hppformat.hpp
format
function.hpp
function
function_equal.hppfunction_output_iterator.hpp
function_types
functional.hpp
functional
fusion
adapted.hpp
adapted
adt.hpp
adt
array.hpp
array
boost_array.hpp
boost_array
boost_tuple.hpp
boost_tuple
mpl.hpp
mpl
std_array.hpp
std_array
std_pair.hppstd_tuple.hpp
std_tuple
struct.hpp
struct
algorithm.hpp
algorithm
container.hpp
container
deque.hpp
deque
generation.hpp
generation
list.hpp
list
map.hpp
map
set.hpp
set
vector.hpp
vector
functional.hpp
functional
include
accumulate.hppadapt_adt.hppadapt_adt_named.hppadapt_assoc_adt.hppadapt_assoc_adt_named.hppadapt_assoc_struct.hppadapt_assoc_struct_named.hppadapt_struct.hppadapt_struct_named.hppadapted.hppadapter.hppadvance.hppalgorithm.hppall.hppany.hpparray.hppas_deque.hppas_list.hppas_map.hppas_set.hppas_vector.hppat.hppat_c.hppat_key.hppauxiliary.hppback.hppbegin.hppboost_array.hppboost_tuple.hppcategory_of.hppclear.hppcomparison.hppcons.hppcons_tie.hppcontainer.hppconvert.hppcopy.hppcount.hppcount_if.hppdeduce.hppdeduce_sequence.hppdefine_assoc_struct.hppdefine_struct.hppdefine_struct_inline.hppdeque.hppdeque_fwd.hppdeque_tie.hppderef.hppderef_data.hppdistance.hppempty.hppend.hppequal_to.hpperase.hpperase_key.hppfilter.hppfilter_if.hppfilter_view.hppfind.hppfind_if.hppflatten.hppflatten_view.hppfold.hppfor_each.hppfront.hppfunctional.hppfused.hppfused_function_object.hppfused_procedure.hppgeneration.hppgreater.hppgreater_equal.hpphas_key.hpphash.hppidentity_view.hppignore.hppin.hppinsert.hppinsert_range.hppintrinsic.hppinvocation.hppinvoke.hppinvoke_function_object.hppinvoke_procedure.hppio.hppis_iterator.hppis_segmented.hppis_sequence.hppis_view.hppiter_fold.hppiteration.hppiterator.hppiterator_adapter.hppiterator_base.hppiterator_facade.hppiterator_range.hppjoin.hppjoint_view.hppkey_of.hppless.hppless_equal.hpplist.hpplist_fwd.hpplist_tie.hppmake_cons.hppmake_deque.hppmake_fused.hppmake_fused_function_object.hppmake_fused_procedure.hppmake_list.hppmake_map.hppmake_set.hppmake_tuple.hppmake_unfused.hppmake_vector.hppmap.hppmap_fwd.hppmap_tie.hppmove.hppmpl.hppnext.hppnil.hppnone.hppnot_equal_to.hppnview.hppout.hpppair.hpppair_tie.hpppop_back.hpppop_front.hppprior.hppproxy_type.hpppush_back.hpppush_front.hppquery.hppremove.hppremove_if.hpprepetitive_view.hppreplace.hppreplace_if.hppreverse.hppreverse_fold.hppreverse_iter_fold.hppreverse_view.hppsegmented_fold_until.hppsegmented_iterator.hppsegments.hppsequence.hppsequence_base.hppsequence_facade.hppset.hppset_fwd.hppsingle_view.hppsize.hppstd_array.hppstd_pair.hppstd_tuple.hppstruct.hppsupport.hppswap.hpptag_of.hpptag_of_fwd.hpptransform.hpptransform_view.hpptransformation.hpptuple.hpptuple_fwd.hpptuple_tie.hppunfused.hppunfused_typed.hppunused.hppvalue_at.hppvalue_at_key.hppvalue_of.hppvalue_of_data.hppvector.hppvector10.hppvector20.hppvector30.hppvector40.hppvector50.hppvector_fwd.hppvector_tie.hppview.hppvoid.hppzip.hppzip_view.hpp
iterator.hpp
iterator
mpl.hpp
mpl
sequence.hpp
sequence
support.hpp
support
tuple.hpp
tuple
view.hpp
view
detail
filter_view.hpp
filter_view
flatten_view.hpp
flatten_view
identity_view.hpp
identity_view
iterator_range.hpp
iterator_range
joint_view.hpp
joint_view
nview.hpp
nview
repetitive_view.hpp
repetitive_view
reverse_view.hpp
reverse_view
single_view.hpp
single_view
transform_view.hpp
transform_view
zip_view.hpp
zip_view
generator_iterator.hppgeometry.hpp
geometry
algorithms
append.hpparea.hpparea_result.hppassign.hppazimuth.hppbuffer.hppcentroid.hppclear.hppclosest_points.hppcomparable_distance.hppconvert.hppconvex_hull.hppcorrect.hppcorrect_closure.hppcovered_by.hppcrosses.hppdefault_area_result.hppdensify.hpp
detail
assign_box_corners.hppassign_indexed_point.hppassign_values.hpp
buffer
calculate_null.hppcalculate_point_order.hppcalculate_sum.hpp
centroid
closest_feature
closest_points
comparable_distance
convert_indexed_to_indexed.hppconvert_point_to_point.hpp
convex_hull
counting.hpp
covered_by
direction_code.hpp
disjoint
distance
dummy_geometries.hpp
envelope
equals
expand
expand_by_epsilon.hppextreme_points.hppfor_each_range.hppgc_group_elements.hppgc_make_rtree.hppgc_topological_dimension.hppget_max_size.hpphas_self_intersections.hppinterior_iterator.hpp
intersection
intersects
is_simple
is_valid
make
max_interval_gap.hppmulti_modify.hppmulti_modify_with_predicate.hppmulti_sum.hppnormalize.hppnot.hppnum_distinct_consecutive_points.hpp
overlaps
overlay
partition.hpppoint_is_spike_or_equal.hpppoint_on_border.hpp
relate
relation
ring_identifier.hpp
sections
select_geometry_type.hppsigned_size_type.hppsingle_geometry.hppsub_range.hppsweep.hppthrow_on_empty_input.hpp
touches
tupled_output.hpp
turns
visit.hpp
within
difference.hppdiscrete_frechet_distance.hppdiscrete_hausdorff_distance.hppdisjoint.hpp
dispatch
distance.hppenvelope.hppequals.hppexpand.hppfor_each.hppintersection.hppintersects.hppis_convex.hppis_empty.hppis_simple.hppis_valid.hpplength.hppline_interpolate.hppmake.hppmerge_elements.hppnot_implemented.hppnum_geometries.hppnum_interior_rings.hppnum_points.hppnum_segments.hppoverlaps.hppperimeter.hpppoint_on_surface.hpprelate.hpprelation.hppremove_spikes.hppreverse.hppsimplify.hppsym_difference.hpptouches.hpptransform.hppunion.hppunique.hppvalidity_failure_type.hppwithin.hpp
arithmetic
core
formulas
geometries
geometry.hpp
index
io
iterators
multi
policies
srs
epsg.hppesri.hppiau2000.hppprojection.hpp
projections
code.hppconstants.hppdpar.hppepsg.hppepsg_params.hppepsg_traits.hppesri.hppesri_params.hppesri_traits.hppexception.hppfactory.hppgrids.hppiau2000.hppiau2000_params.hppiau2000_traits.hpp
impl
invalid_point.hpppar_data.hpp
proj
proj4.hppspar.hppsrid_traits.hppstr_cast.hpp
shared_grids.hppshared_grids_boost.hppshared_grids_std.hppsphere.hppspheroid.hppsrs.hpptransformation.hpp
strategies
agnostic
area.hpp
area
area_result.hppazimuth.hpp
azimuth
buffer.hpp
buffer
cartesian.hpp
cartesian
centroid.hpp
centroid
closest_points
comparable_distance_result.hppcompare.hpp
concepts
convex_hull.hpp
convex_hull
covered_by.hppdefault_area_result.hppdefault_comparable_distance_result.hppdefault_distance_result.hppdefault_length_result.hppdefault_strategy.hppdensify.hpp
densify
detail.hpp
discrete_distance
disjoint.hppdistance.hpp
distance
distance_result.hppenvelope.hpp
envelope
expand.hpp
expand
geographic.hpp
geographic
index
intersection.hppintersection_result.hppintersection_strategies.hpp
io
is_convex
length
line_interpolate.hpp
line_interpolate
normalize.hpppoint_order.hpprelate.hpp
relate
side.hppside_info.hpp
simplify
spherical.hpp
spherical
strategies.hppstrategy_transform.hpptags.hpptransform.hpp
transform
within.hpp
strategy
util
views
get_pointer.hppgil.hpp
gil
algorithm.hppbit_aligned_pixel_iterator.hppbit_aligned_pixel_reference.hppchannel.hppchannel_algorithm.hppchannel_numeric_operations.hppcmyk.hppcolor_base.hppcolor_base_algorithm.hppcolor_convert.hppconcepts.hpp
concepts
detail
device_n.hppdynamic_step.hpp
extension
dynamic_image
histogram
image_processing
io
numeric
rasterization
toolbox
gray.hpphistogram.hppimage.hpp
image_processing
image_view.hppimage_view_factory.hpp
io
iterator_from_2d.hpplocator.hppmetafunctions.hpppacked_pixel.hpppixel.hpppixel_iterator.hpppixel_iterator_adaptor.hpppixel_numeric_operations.hppplanar_pixel_iterator.hppplanar_pixel_reference.hpppoint.hppposition_iterator.hpppremultiply.hpppromote_integral.hpprgb.hpprgba.hppstep_iterator.hpptypedefs.hpputilities.hppvirtual_locator.hpp
graph
adj_list_serialize.hppadjacency_iterator.hppadjacency_list.hppadjacency_list_io.hppadjacency_matrix.hppastar_search.hppbandwidth.hppbc_clustering.hppbellman_ford_shortest_paths.hppbetweenness_centrality.hppbiconnected_components.hppbipartite.hppboyer_myrvold_planar_test.hppboykov_kolmogorov_max_flow.hppbreadth_first_search.hppbron_kerbosch_all_cliques.hppbuffer_concepts.hppchrobak_payne_drawing.hppcircle_layout.hppcloseness_centrality.hppclustering_coefficient.hppcompressed_sparse_row_graph.hppconnected_components.hppcopy.hppcore_numbers.hppcreate_condensation_graph.hppcuthill_mckee_ordering.hppcycle_canceling.hppdag_shortest_paths.hppdegree_centrality.hppdepth_first_search.hpp
detail
dijkstra_shortest_paths.hppdijkstra_shortest_paths_no_color_map.hppdimacs.hppdirected_graph.hppdll_import_export.hppdominator_tree.hppeccentricity.hppedge_coloring.hppedge_connectivity.hppedge_list.hppedmonds_karp_max_flow.hppedmunds_karp_max_flow.hpperdos_renyi_generator.hppexception.hppexterior_property.hppfiltered_graph.hppfind_flow_cost.hppfloyd_warshall_shortest.hppfruchterman_reingold.hppgeodesic_distance.hppgraph_archetypes.hppgraph_as_tree.hppgraph_concepts.hppgraph_mutability_traits.hppgraph_selectors.hppgraph_stats.hppgraph_traits.hppgraph_utility.hppgraphml.hppgraphviz.hppgrid_graph.hppgursoy_atun_layout.hpphawick_circuits.hpphoward_cycle_ratio.hppincremental_components.hppis_kuratowski_subgraph.hppis_straight_line_drawing.hppisomorphism.hppiteration_macros.hppiteration_macros_undef.hppjohnson_all_pairs_shortest.hppkamada_kawai_spring_layout.hppking_ordering.hppkruskal_min_spanning_tree.hpplabeled_graph.hppleda_graph.hpplookup_edge.hpploop_erased_random_walk.hppmake_biconnected_planar.hppmake_connected.hppmake_maximal_planar.hppmatrix_as_graph.hppmax_cardinality_matching.hppmaximum_adjacency_search.hppmaximum_weighted_matching.hppmcgregor_common_subgraphs.hppmesh_graph_generator.hppmetis.hppmetric_tsp_approx.hppminimum_degree_ordering.hppnamed_function_params.hppnamed_graph.hppneighbor_bfs.hppnumeric_values.hppone_bit_color_map.hppoverloading.hpppage_rank.hppplanar_canonical_ordering.hpp
planar_detail
planar_face_traversal.hppplod_generator.hpppoint_traits.hppprim_minimum_spanning_tree.hppprofile.hppproperties.hppproperty_iter_range.hpp
property_maps
push_relabel_max_flow.hppr_c_shortest_paths.hpprandom.hpprandom_layout.hpprandom_spanning_tree.hppread_dimacs.hpprelax.hppreverse_graph.hpprmat_graph_generator.hppsequential_vertex_coloring.hppsimple_point.hppsloan_ordering.hppsmall_world_generator.hppsmallest_last_ordering.hppssca_graph_generator.hppst_connected.hppstanford_graph.hppstoer_wagner_min_cut.hppstrong_components.hppsubgraph.hppsuccessive_shortest_path_nonnegative_weights.hpptiernan_all_cycles.hpptopological_sort.hpptopology.hpptransitive_closure.hpptransitive_reduction.hpptranspose_graph.hpptree_traits.hpptwo_bit_color_map.hpptwo_graphs_common_spanning_trees.hppundirected_dfs.hppundirected_graph.hppuse_mpi.hppvector_as_graph.hppvertex_and_edge_range.hppvf2_sub_graph_iso.hppvisitors.hppwavefront.hppwrite_dimacs.hpp
hana.hpp
hana
accessors.hppadapt_adt.hppadapt_struct.hppadjust.hppadjust_if.hppall.hppall_of.hppand.hppany.hppany_of.hppap.hppappend.hppassert.hppat.hppat_key.hppback.hppbasic_tuple.hppbool.hppcartesian_product.hppchain.hppcomparing.hppconcat.hppconcept.hpp
concept
config.hppcontains.hppcore.hpp
core
count.hppcount_if.hppcycle.hppdefine_struct.hpp
detail
difference.hppdiv.hppdrop_back.hppdrop_front.hppdrop_front_exactly.hppdrop_while.hppduplicate.hppempty.hppequal.hpperase_key.hppeval.hppeval_if.hpp
experimental
ext
extend.hppextract.hppfill.hppfilter.hppfind.hppfind_if.hppfirst.hppflatten.hppfold.hppfold_left.hppfold_right.hppfor_each.hppfront.hppfunctional.hpp
functional
fuse.hpp
fwd
accessors.hppadapt_adt.hppadapt_struct.hppadjust.hppadjust_if.hppall.hppall_of.hppand.hppany.hppany_of.hppap.hppappend.hppat.hppat_key.hppback.hppbasic_tuple.hppbool.hppcartesian_product.hppchain.hppcomparing.hppconcat.hpp
concept
contains.hppcore.hpp
core
count.hppcount_if.hppcycle.hppdefine_struct.hppdifference.hppdiv.hppdrop_back.hppdrop_front.hppdrop_front_exactly.hppdrop_while.hppduplicate.hppempty.hppequal.hpperase_key.hppeval.hppeval_if.hppextend.hppextract.hppfill.hppfilter.hppfind.hppfind_if.hppfirst.hppflatten.hppfold.hppfold_left.hppfold_right.hppfor_each.hppfront.hppfuse.hppgreater.hppgreater_equal.hppgroup.hpphash.hppif.hppindex_if.hppinsert.hppinsert_range.hppintegral_constant.hppintersection.hppintersperse.hppis_disjoint.hppis_empty.hppis_subset.hppkeys.hpplazy.hpplength.hppless.hppless_equal.hpplexicographical_compare.hpplift.hppmap.hppmax.hppmaximum.hppmembers.hppmin.hppminimum.hppminus.hppmod.hppmonadic_compose.hppmonadic_fold_left.hppmonadic_fold_right.hppmult.hppnegate.hppnone.hppnone_of.hppnot.hppnot_equal.hppone.hppoptional.hppor.hppordering.hpppair.hpppartition.hpppermutations.hppplus.hpppower.hppprefix.hppprepend.hppproduct.hpprange.hppremove.hppremove_at.hppremove_if.hppremove_range.hpprepeat.hppreplace.hppreplace_if.hppreplicate.hppreverse.hppreverse_fold.hppscan_left.hppscan_right.hppsecond.hppset.hppsize.hppslice.hppsort.hppspan.hppstring.hppsuffix.hppsum.hppsymmetric_difference.hpptake_back.hpptake_front.hpptake_while.hpptap.hppthen.hpptransform.hpptuple.hpptype.hppunfold_left.hppunfold_right.hppunion.hppunique.hppunpack.hppvalue.hppwhile.hppzero.hppzip.hppzip_shortest.hppzip_shortest_with.hppzip_with.hpp
greater.hppgreater_equal.hppgroup.hpphash.hppif.hppindex_if.hppinsert.hppinsert_range.hppintegral_constant.hppintersection.hppintersperse.hppis_disjoint.hppis_empty.hppis_subset.hppkeys.hpplazy.hpplength.hppless.hppless_equal.hpplexicographical_compare.hpplift.hppmap.hppmax.hppmaximum.hppmembers.hppmin.hppminimum.hppminus.hppmod.hppmonadic_compose.hppmonadic_fold_left.hppmonadic_fold_right.hppmult.hppnegate.hppnone.hppnone_of.hppnot.hppnot_equal.hppone.hppoptional.hppor.hppordering.hpppair.hpppartition.hpppermutations.hppplus.hpppower.hppprefix.hppprepend.hppproduct.hpprange.hppremove.hppremove_at.hppremove_if.hppremove_range.hpprepeat.hppreplace.hppreplace_if.hppreplicate.hppreverse.hppreverse_fold.hppscan_left.hppscan_right.hppsecond.hppset.hppsize.hppslice.hppsort.hppspan.hppstring.hppsuffix.hppsum.hppsymmetric_difference.hpptake_back.hpptake_front.hpptake_while.hpptap.hppthen.hpptraits.hpptransform.hpptuple.hpptype.hppunfold_left.hppunfold_right.hppunion.hppunique.hppunpack.hppvalue.hppversion.hppwhile.hppzero.hppzip.hppzip_shortest.hppzip_shortest_with.hppzip_with.hpp
hash2
headers
heap
histogram.hpp
histogram
hof.hpp
hof
icl
associative_element_container.hppassociative_interval_container.hppclosed_interval.hpp
concept
continuous_interval.hpp
detail
discrete_interval.hppdynamic_interval_traits.hppfunctors.hppgregorian.hppimpl_config.hppinterval.hppinterval_base_map.hppinterval_base_set.hppinterval_bounds.hppinterval_combining_style.hppinterval_map.hppinterval_set.hppinterval_traits.hppiterator.hppleft_open_interval.hppmap.hppopen_interval.hpp
predicates
ptime.hpprational.hppright_open_interval.hppseparate_interval_set.hppset.hppsplit_interval_map.hppsplit_interval_set.hpp
type_traits
implicit_cast.hppindirect_reference.hppinteger.hpp
integer
integer_fwd.hppinteger_traits.hpp
interprocess
allocators
anonymous_shared_memory.hpp
containers
creation_tags.hpp
detail
errors.hppexceptions.hppfile_mapping.hpp
indexes
interprocess_fwd.hppinterprocess_printers.hpp
ipc
managed_external_buffer.hppmanaged_heap_memory.hppmanaged_mapped_file.hppmanaged_shared_memory.hppmanaged_windows_shared_memory.hppmanaged_xsi_shared_memory.hppmapped_region.hpp
mem_algo
offset_ptr.hpppermissions.hppsegment_manager.hppshared_memory_object.hpp
smart_ptr
streams
sync
timed_utils.hppwindows_shared_memory.hppxsi_key.hppxsi_shared_memory.hpp
intrusive
any_hook.hppavl_set.hppavl_set_hook.hppavltree.hppavltree_algorithms.hppbs_set.hppbs_set_hook.hppbstree.hppbstree_algorithms.hppcircular_list_algorithms.hppcircular_slist_algorithms.hppderivation_value_traits.hpp
detail
hashtable.hppintrusive_fwd.hpplinear_slist_algorithms.hpplink_mode.hpplist.hpplist_hook.hppmember_value_traits.hppoptions.hpppack_options.hppparent_from_member.hpppointer_plus_bits.hpppointer_rebind.hpppointer_traits.hpppriority_compare.hpprbtree.hpprbtree_algorithms.hppset.hppset_hook.hppsg_set.hppsgtree.hppsgtree_algorithms.hppslist.hppslist_hook.hppsplay_set.hppsplaytree.hppsplaytree_algorithms.hpptreap.hpptreap_algorithms.hpptreap_set.hpptrivial_value_traits.hppunordered_set.hppunordered_set_hook.hpp
intrusive_ptr.hpp
io
io_fwd.hpp
iostreams
categories.hppchain.hppchar_traits.hppchecked_operations.hppclose.hppcode_converter.hppcombine.hppcompose.hppconcepts.hppconstants.hppcopy.hpp
detail
device
filter
filtering_stream.hppfiltering_streambuf.hppflush.hppget.hppimbue.hppinput_sequence.hppinvert.hppoperations.hppoperations_fwd.hppoptimal_buffer_size.hppoutput_sequence.hpppipeline.hpppositioning.hppput.hppputback.hppread.hpprestrict.hppseek.hppskip.hppslice.hppstream.hppstream_buffer.hpptee.hpptraits.hpptraits_fwd.hppwrite.hpp
is_placeholder.hppiterator.hpp
iterator
iterator_adaptors.hppjson.hpp
json
array.hppbasic_parser.hppbasic_parser_impl.hppconversion.hppdebug_printers.hpp
detail
error.hppfwd.hpp
impl
is_deallocate_trivial.hppjson.natviskind.hppmonotonic_resource.hppnull_resource.hppobject.hppparse.hppparse_into.hppparse_options.hppparser.hpppilfer.hppresult_for.hppserialize.hppserialize_options.hppserializer.hppset_pointer_options.hppsrc.hppstatic_resource.hppstorage_ptr.hppstream_parser.hppstring.hppstring_view.hppvalue.hppvalue_from.hppvalue_ref.hppvalue_stack.hppvalue_to.hppvisit.hpp
lambda
lambda2.hpp
lambda2
leaf.hpp
leaf
lexical_cast.hpp
lexical_cast
limits.hpplocal_function.hpp
local_function
locale.hpp
locale
lockfree
log
attributes.hpp
attributes
common.hppcore.hpp
core
detail
exceptions.hppexpressions.hpp
expressions
keywords
sinks.hpp
sinks
sources
support
trivial.hpp
utility
logic
make_default.hppmake_shared.hppmake_unique.hpp
math
bindings
ccmath
common_factor.hppcommon_factor_ct.hppcommon_factor_rt.hppcomplex.hpp
complex
concepts
constants
cstdfloat
differentiation
distributions.hpp
distributions
filters
interpolators
octonion.hpp
optimization
policies
quadrature
quaternion.hppspecial_functions.hpp
special_functions
acosh.hppairy.hppasinh.hppatanh.hppbernoulli.hppbessel.hppbessel_iterators.hppbessel_prime.hppbeta.hppbinomial.hppcardinal_b_spline.hppcbrt.hppchebyshev.hppchebyshev_transform.hppcos_pi.hppdaubechies_scaling.hppdaubechies_wavelet.hpp
detail
digamma.hppellint_1.hppellint_2.hppellint_3.hppellint_d.hppellint_rc.hppellint_rd.hppellint_rf.hppellint_rg.hppellint_rj.hpperf.hppexpint.hppexpm1.hppfactorials.hppfibonacci.hppfourier_transform_daubechies.hppfpclassify.hppgamma.hppgegenbauer.hpphankel.hpphermite.hppheuman_lambda.hpphypergeometric_0F1.hpphypergeometric_1F0.hpphypergeometric_1F1.hpphypergeometric_2F0.hpphypergeometric_pFq.hpphypot.hppjacobi.hppjacobi_elliptic.hppjacobi_theta.hppjacobi_zeta.hpplaguerre.hpplambert_w.hpplanczos.hpplegendre.hpplegendre_stieltjes.hpplog1p.hpplogaddexp.hpplogsumexp.hppmath_fwd.hppmodf.hppnext.hppnonfinite_num_facets.hppowens_t.hpppolygamma.hpppow.hpppowm1.hppprime.hpprelative_difference.hppround.hpprsqrt.hppsign.hppsin_pi.hppsinc.hppsinhc.hppspherical_harmonic.hppsqrt1pm1.hpptrigamma.hpptrunc.hppulp.hppzeta.hpp
statistics
tools
agm.hpparray.hppassert.hppatomic.hppbig_constant.hppbivariate_statistics.hppcentered_continued_fraction.hppcohen_acceleration.hppcolor_maps.hppcomplex.hppconcepts.hppcondition_numbers.hppconfig.hppconvert_from_string.hppcstdint.hppcubic_roots.hppcxx03_warn.hpp
detail
is_const_iterable.hpppolynomial_horner1_10.hpppolynomial_horner1_11.hpppolynomial_horner1_12.hpppolynomial_horner1_13.hpppolynomial_horner1_14.hpppolynomial_horner1_15.hpppolynomial_horner1_16.hpppolynomial_horner1_17.hpppolynomial_horner1_18.hpppolynomial_horner1_19.hpppolynomial_horner1_2.hpppolynomial_horner1_20.hpppolynomial_horner1_3.hpppolynomial_horner1_4.hpppolynomial_horner1_5.hpppolynomial_horner1_6.hpppolynomial_horner1_7.hpppolynomial_horner1_8.hpppolynomial_horner1_9.hpppolynomial_horner2_10.hpppolynomial_horner2_11.hpppolynomial_horner2_12.hpppolynomial_horner2_13.hpppolynomial_horner2_14.hpppolynomial_horner2_15.hpppolynomial_horner2_16.hpppolynomial_horner2_17.hpppolynomial_horner2_18.hpppolynomial_horner2_19.hpppolynomial_horner2_2.hpppolynomial_horner2_20.hpppolynomial_horner2_3.hpppolynomial_horner2_4.hpppolynomial_horner2_5.hpppolynomial_horner2_6.hpppolynomial_horner2_7.hpppolynomial_horner2_8.hpppolynomial_horner2_9.hpppolynomial_horner3_10.hpppolynomial_horner3_11.hpppolynomial_horner3_12.hpppolynomial_horner3_13.hpppolynomial_horner3_14.hpppolynomial_horner3_15.hpppolynomial_horner3_16.hpppolynomial_horner3_17.hpppolynomial_horner3_18.hpppolynomial_horner3_19.hpppolynomial_horner3_2.hpppolynomial_horner3_20.hpppolynomial_horner3_3.hpppolynomial_horner3_4.hpppolynomial_horner3_5.hpppolynomial_horner3_6.hpppolynomial_horner3_7.hpppolynomial_horner3_8.hpppolynomial_horner3_9.hpprational_horner1_10.hpprational_horner1_11.hpprational_horner1_12.hpprational_horner1_13.hpprational_horner1_14.hpprational_horner1_15.hpprational_horner1_16.hpprational_horner1_17.hpprational_horner1_18.hpprational_horner1_19.hpprational_horner1_2.hpprational_horner1_20.hpprational_horner1_3.hpprational_horner1_4.hpprational_horner1_5.hpprational_horner1_6.hpprational_horner1_7.hpprational_horner1_8.hpprational_horner1_9.hpprational_horner2_10.hpprational_horner2_11.hpprational_horner2_12.hpprational_horner2_13.hpprational_horner2_14.hpprational_horner2_15.hpprational_horner2_16.hpprational_horner2_17.hpprational_horner2_18.hpprational_horner2_19.hpprational_horner2_2.hpprational_horner2_20.hpprational_horner2_3.hpprational_horner2_4.hpprational_horner2_5.hpprational_horner2_6.hpprational_horner2_7.hpprational_horner2_8.hpprational_horner2_9.hpprational_horner3_10.hpprational_horner3_11.hpprational_horner3_12.hpprational_horner3_13.hpprational_horner3_14.hpprational_horner3_15.hpprational_horner3_16.hpprational_horner3_17.hpprational_horner3_18.hpprational_horner3_19.hpprational_horner3_2.hpprational_horner3_20.hpprational_horner3_3.hpprational_horner3_4.hpprational_horner3_5.hpprational_horner3_6.hpprational_horner3_7.hpprational_horner3_8.hpprational_horner3_9.hpp
engel_expansion.hppestrin.hppfraction.hppheader_deprecated.hppis_constant_evaluated.hppis_detected.hppis_standalone.hppluroth_expansion.hppminima.hppmp.hppnorms.hppnothrow.hppnumeric_limits.hppnumerical_differentiation.hpppolynomial.hpppolynomial_gcd.hppprecision.hpppromotion.hppquartic_roots.hpprandom_vector.hpprational.hppreal_cast.hpprecurrence.hpproots.hppseries.hppsignal_statistics.hppsimple_continued_fraction.hppstats.hpptest_value.hppthrow_exception.hpptoms748_solve.hpptraits.hpptuple.hpptype_traits.hppulps_plot.hppunivariate_statistics.hppuser.hpputility.hppworkaround.hpp
tr1.hpptr1_c_macros.ipp
math_fwd.hppmem_fn.hppmemory_order.hppmetaparse.hpp
metaparse
accept.hppaccept_tag.hppaccept_when.hppalphanum.hppalways.hppalways_c.hppbuild_parser.hppchange_error_message.hppconfig.hppdebug_parsing_error.hppdefine_error.hppdigit.hppdigit_val.hppempty.hppentire_input.hpp
error
except.hppfail.hppfail_at_first_char_expected.hppfail_tag.hppfirst_of.hppfoldl.hppfoldl1.hppfoldl_reject_incomplete.hppfoldl_reject_incomplete1.hppfoldl_reject_incomplete_start_with_parser.hppfoldl_start_with_parser.hppfoldr.hppfoldr1.hppfoldr_reject_incomplete.hppfoldr_reject_incomplete1.hppfoldr_start_with_parser.hppget_col.hppget_line.hppget_message.hppget_position.hppget_prev_char.hppget_remaining.hppget_result.hppgrammar.hppif_.hppint_.hppis_error.hppiterate.hppiterate_c.hppkeyword.hpplast_of.hppletter.hpplimit_one_char_except_size.hpplimit_one_of_size.hpplimit_sequence_size.hpplimit_string_size.hpplit.hpplit_c.hpplook_ahead.hppmiddle_of.hppnext_char.hppnext_line.hppnth_of.hppnth_of_c.hppone_char.hppone_char_except.hppone_char_except_c.hppone_of.hppone_of_c.hppoptional.hpprange.hpprange_c.hppreject.hpprepeated.hpprepeated1.hpprepeated_one_of.hpprepeated_one_of1.hpprepeated_reject_incomplete.hpprepeated_reject_incomplete1.hppreturn_.hppsequence.hppsequence_apply.hppsource_position.hppsource_position_tag.hppspace.hppspaces.hppstart.hppstring.hppstring_tag.hppstring_value.hpptoken.hpptransform.hpptransform_error.hpptransform_error_message.hppunless_error.hpp
util
v1
accept.hppaccept_tag.hppaccept_when.hppalphanum.hppalways.hppalways_c.hppbuild_parser.hppchange_error_message.hpp
cpp11
cpp14
cpp98
debug_parsing_error.hppdefine_error.hppdigit.hppdigit_val.hppempty.hppentire_input.hpp
error
except.hppfail.hppfail_at_first_char_expected.hppfail_tag.hppfirst_of.hppfoldl.hppfoldl1.hppfoldl_reject_incomplete.hppfoldl_reject_incomplete1.hppfoldl_reject_incomplete_start_with_parser.hppfoldl_start_with_parser.hppfoldr.hppfoldr1.hppfoldr_reject_incomplete.hppfoldr_reject_incomplete1.hppfoldr_start_with_parser.hpp
fwd
get_col.hppget_line.hppget_message.hppget_position.hppget_prev_char.hppget_remaining.hppget_result.hppgrammar.hppif_.hpp
impl
int_.hppis_error.hppiterate.hppiterate_c.hppkeyword.hpplast_of.hppletter.hpplit.hpplit_c.hpplook_ahead.hppmiddle_of.hppnext_char.hppnext_line.hppnth_of.hppnth_of_c.hppone_char.hppone_char_except.hppone_char_except_c.hppone_of.hppone_of_c.hppoptional.hpprange.hpprange_c.hppreject.hpprepeated.hpprepeated1.hpprepeated_one_of.hpprepeated_one_of1.hpprepeated_reject_incomplete.hpprepeated_reject_incomplete1.hppreturn_.hppsequence.hppsequence_apply.hppsource_position.hppsource_position_tag.hppspace.hppspaces.hppstart.hppstring.hppstring_tag.hppstring_value.hppswap.hpptoken.hpptransform.hpptransform_error.hpptransform_error_message.hppunless_error.hpp
util
version.hpp
move
mp11.hpp
mp11
mpl
O1_size.hppO1_size_fwd.hppaccumulate.hppadvance.hppadvance_fwd.hppalias.hppalways.hppand.hppapply.hppapply_fwd.hppapply_wrap.hpparg.hpparg_fwd.hpparithmetic.hppas_sequence.hppassert.hppat.hppat_fwd.hpp
aux_
O1_size_impl.hppadl_barrier.hppadvance_backward.hppadvance_forward.hppapply_1st.hpparg_typedef.hpparithmetic_op.hpparity.hpparity_spec.hppat_impl.hppback_impl.hppbasic_bind.hppbegin_end_impl.hppclear_impl.hppcommon_name_wknd.hppcomparison_op.hpp
config
contains_impl.hppcount_args.hppcount_impl.hppempty_impl.hpperase_impl.hpperase_key_impl.hppfilter_iter.hppfind_if_pred.hppfold_impl.hppfold_impl_body.hppfold_op.hppfold_pred.hppfront_impl.hppfull_lambda.hpphas_apply.hpphas_begin.hpphas_key_impl.hpphas_rebind.hpphas_size.hpphas_tag.hpphas_type.hppinclude_preprocessed.hppinsert_impl.hppinsert_range_impl.hppinserter_algorithm.hppintegral_wrapper.hppis_msvc_eti_arg.hppiter_apply.hppiter_fold_if_impl.hppiter_fold_impl.hppiter_push_front.hppjoint_iter.hpplambda_arity_param.hpplambda_no_ctps.hpplambda_spec.hpplambda_support.hpplargest_int.hpplogical_op.hppmsvc_dtw.hppmsvc_eti_base.hppmsvc_is_class.hppmsvc_never_true.hppmsvc_type.hppna.hppna_assert.hppna_fwd.hppna_spec.hppnested_type_wknd.hppnttp_decl.hppnumeric_cast_utils.hppnumeric_op.hpporder_impl.hppoverload_names.hpppartition_op.hpppop_back_impl.hpppop_front_impl.hpp
preprocessed
bcc
bcc551
bcc_pre590
dmc
gcc
msvc60
msvc70
mwcw
no_ctps
no_ttp
plain
preprocessor
ptr_to_ref.hpppush_back_impl.hpppush_front_impl.hpp
range_c
reverse_fold_impl.hppreverse_fold_impl_body.hppreverse_iter_fold_impl.hppsequence_wrapper.hppshift_op.hppsingle_element_iter.hppsize_impl.hppsort_impl.hppstatic_cast.hpptemplate_arity.hpptemplate_arity_fwd.hpptest.hpp
test
traits_lambda_spec.hpptransform_iter.hpptype_wrapper.hppunwrap.hppvalue_wknd.hppyes_no.hpp
back.hppback_fwd.hppback_inserter.hppbase.hppbegin.hppbegin_end.hppbegin_end_fwd.hppbind.hppbind_fwd.hppbitand.hppbitor.hppbitwise.hppbitxor.hppbool.hppbool_fwd.hppchar.hppchar_fwd.hppclear.hppclear_fwd.hppcomparison.hppcontains.hppcontains_fwd.hppcopy.hppcopy_if.hppcount.hppcount_fwd.hppcount_if.hppdeque.hppderef.hppdistance.hppdistance_fwd.hppdivides.hppempty.hppempty_base.hppempty_fwd.hppempty_sequence.hppend.hppequal.hppequal_to.hpperase.hpperase_fwd.hpperase_key.hpperase_key_fwd.hppeval_if.hppfilter_view.hppfind.hppfind_if.hppfold.hppfor_each.hppfront.hppfront_fwd.hppfront_inserter.hppget_tag.hppgreater.hppgreater_equal.hpphas_key.hpphas_key_fwd.hpphas_xxx.hppidentity.hppif.hppindex_if.hppindex_of.hppinherit.hppinherit_linearly.hppinsert.hppinsert_fwd.hppinsert_range.hppinsert_range_fwd.hppinserter.hppint.hppint_fwd.hppintegral_c.hppintegral_c_fwd.hppintegral_c_tag.hppis_placeholder.hppis_sequence.hppiter_fold.hppiter_fold_if.hppiterator_category.hppiterator_range.hppiterator_tags.hppjoint_view.hppkey_type.hppkey_type_fwd.hpplambda.hpplambda_fwd.hppless.hppless_equal.hpp
limits
list.hpp
list
list_c.hpplogical.hpplong.hpplong_fwd.hpplower_bound.hppmap.hpp
map
math
max.hppmax_element.hppmin.hppmin_element.hppmin_max.hppminus.hppmodulus.hppmultiplies.hpp
multiset
negate.hppnext.hppnext_prior.hppnot.hppnot_equal_to.hppnumeric_cast.hppor.hpporder.hpporder_fwd.hpppair.hpppair_view.hpppartition.hppplaceholders.hppplus.hpppop_back.hpppop_back_fwd.hpppop_front.hpppop_front_fwd.hppprint.hppprior.hppprotect.hpppush_back.hpppush_back_fwd.hpppush_front.hpppush_front_fwd.hppquote.hpprange_c.hppremove.hppremove_if.hppreplace.hppreplace_if.hppreverse.hppreverse_fold.hppreverse_iter_fold.hppsame_as.hppsequence_tag.hppsequence_tag_fwd.hppset.hpp
set
set_c.hppshift_left.hppshift_right.hppsingle_view.hppsize.hppsize_fwd.hppsize_t.hppsize_t_fwd.hppsizeof.hppsort.hppstable_partition.hppstring.hppswitch.hpptag.hpptimes.hpptransform.hpptransform_view.hppunique.hppunpack_args.hppupper_bound.hppvalue_type.hppvalue_type_fwd.hppvector.hpp
vector
vector_c.hppvoid.hppvoid_fwd.hppzip_view.hpp
mqtt5.hpp
mqtt5
msm
multi_array.hpp
multi_array
multi_index
composite_key.hpp
detail
global_fun.hpphashed_index.hpphashed_index_fwd.hppidentity.hppidentity_fwd.hppindexed_by.hppkey.hppkey_extractors.hppmem_fun.hppmember.hppordered_index.hppordered_index_fwd.hpprandom_access_index.hpprandom_access_index_fwd.hppranked_index.hppranked_index_fwd.hppsafe_mode_errors.hppsequenced_index.hppsequenced_index_fwd.hpptag.hpp
multi_index_container.hppmulti_index_container_fwd.hpp
multiprecision
mysql.hpp
mysql
any_address.hppany_connection.hppbad_field_access.hppblob.hppblob_view.hppbuffer_params.hppcharacter_set.hppclient_errc.hppcolumn_type.hppcommon_server_errc.hppconnect_params.hppconnection.hppconnection_pool.hppconstant_string_view.hppdate.hppdatetime.hppdays.hppdefaults.hpp
detail
diagnostics.hpperror_categories.hpperror_code.hpperror_with_diagnostics.hppescape_string.hppexecution_state.hppfield.hppfield_kind.hppfield_view.hppformat_sql.hpphandshake_params.hpp
impl
is_fatal_error.hppmariadb_collations.hppmariadb_server_errc.hppmetadata.hppmetadata_collection_view.hppmetadata_mode.hppmysql_collations.hppmysql_server_errc.hpppfr.hpppipeline.hpppool_params.hppresults.hppresultset.hppresultset_view.hpprow.hpprow_view.hpprows.hpprows_view.hppsequence.hppsrc.hppssl_mode.hppstatement.hppstatic_execution_state.hppstatic_results.hppstring_view.hpptcp.hpptcp_ssl.hppthrow_on_error.hpptime.hppunderlying_row.hppunix.hppunix_ssl.hppwith_diagnostics.hppwith_params.hpp
next_prior.hppnon_type.hppnoncopyable.hppnondet_random.hppnone.hppnone_t.hpp
nowide
numeric
conversion
interval.hpp
interval
odeint.hpp
odeint
algebra
config.hpp
external
integrate
iterator
stepper
adams_bashforth.hppadams_bashforth_moulton.hppadams_moulton.hppadaptive_adams_bashforth_moulton.hpp
base
bulirsch_stoer.hppbulirsch_stoer_dense_out.hppcontrolled_adams_bashforth_moulton.hppcontrolled_runge_kutta.hppcontrolled_step_result.hppdense_output_runge_kutta.hpp
detail
euler.hppexplicit_error_generic_rk.hppexplicit_generic_rk.hppextrapolation_stepper.hppgeneration.hpp
generation
implicit_euler.hppmodified_midpoint.hpprosenbrock4.hpprosenbrock4_controller.hpprosenbrock4_dense_output.hpprunge_kutta4.hpprunge_kutta4_classic.hpprunge_kutta_cash_karp54.hpprunge_kutta_cash_karp54_classic.hpprunge_kutta_dopri5.hpprunge_kutta_fehlberg78.hppstepper_categories.hppsymplectic_euler.hppsymplectic_rkn_sb3a_m4_mclachlan.hppsymplectic_rkn_sb3a_mclachlan.hppvelocity_verlet.hpp
tools
util
version.hpp
ublas
operators.hppoperators_v1.hppoptional.hpp
optional
outcome.hpp
outcome
parameter.hpp
parameter
are_tagged_arguments.hpp
aux_
binding.hppcompose.hppconfig.hppdeduced.hppis_argument_pack.hppkeyword.hppkeyword_fwd.hppmacros.hppmatch.hppname.hppnested_keyword.hppoptional.hppparameters.hpppreprocessor.hpppreprocessor_no_spec.hpprequired.hpptemplate_keyword.hppvalue_type.hpp
pending
phoenix.hpp
phoenix
bind.hpp
bind
config.hppcore.hpp
core
debug.hppfunction.hpp
function
fusion.hpp
fusion
object.hpp
object
operator.hpp
operator
phoenix.hppscope.hpp
scope
statement.hpp
statement
stl.hpp
stl
support
version.hpp
pointee.hpppointer_cast.hpppointer_to_other.hpp
polygon
polymorphic_cast.hpppolymorphic_pointer_cast.hpp
pool
predef.h
predef
preprocessor.hpp
preprocessor
arithmetic.hpp
arithmetic
array.hpp
array
assert_msg.hppcat.hppcomma.hppcomma_if.hppcomparison.hpp
comparison
config
control.hpp
control
debug.hpp
debug
dec.hpp
detail
empty.hppenum.hppenum_params.hppenum_params_with_a_default.hppenum_params_with_defaults.hppenum_shifted.hppenum_shifted_params.hppexpand.hppexpr_if.hppfacilities.hpp
facilities
for.hppidentity.hppif.hppinc.hppiterate.hppiteration.hpp
iteration
library.hpplimits.hpplist.hpp
list
logical.hpp
logical
max.hppmin.hpppunctuation.hpp
punctuation
repeat.hpprepeat_2nd.hpprepeat_3rd.hpprepeat_from_to.hpprepeat_from_to_2nd.hpprepeat_from_to_3rd.hpprepetition.hpp
repetition
selection.hpp
selection
seq.hpp
seq
slot.hpp
slot
stringize.hpptuple.hpp
tuple
variadic.hpp
variadic
while.hppwstringize.hpp
program_options.hpp
program_options
property_map
property_tree
proto
args.hppcontext.hpp
context
core.hppdebug.hppdeep_copy.hpp
detail
domain.hppeval.hppexpr.hppextends.hppfunctional.hpp
functional
fusion.hppgenerate.hppliteral.hppmake_expr.hppmatches.hppoperators.hppproto.hppproto_fwd.hppproto_typeof.hpprepeat.hpptags.hpptraits.hpptransform.hpp
transform
ptr_container
qvm.hpp
qvm
qvm_lite.hpprandom.hpp
random
additive_combine.hppbernoulli_distribution.hppbeta_distribution.hppbinomial_distribution.hppcauchy_distribution.hppchi_squared_distribution.hpp
detail
discard_block.hppdiscrete_distribution.hppexponential_distribution.hppextreme_value_distribution.hppfaure.hppfisher_f_distribution.hppgamma_distribution.hppgeneralized_inverse_gaussian_distribution.hppgenerate_canonical.hppgeometric_distribution.hpphyperexponential_distribution.hppindependent_bits.hppinverse_gaussian_distribution.hppinversive_congruential.hpplagged_fibonacci.hpplaplace_distribution.hpplinear_congruential.hpplinear_feedback_shift.hpplognormal_distribution.hppmersenne_twister.hppmixmax.hppnegative_binomial_distribution.hppniederreiter_base2.hppnon_central_chi_squared_distribution.hppnormal_distribution.hpppiecewise_constant_distribution.hpppiecewise_linear_distribution.hpppoisson_distribution.hpprandom_device.hpprandom_number_generator.hppranlux.hppseed_seq.hppshuffle_order.hppshuffle_output.hppsobol.hppsplitmix64.hppstudent_t_distribution.hppsubtract_with_carry.hpptaus88.hpptraits.hpptriangle_distribution.hppuniform_01.hppuniform_int.hppuniform_int_distribution.hppuniform_on_sphere.hppuniform_real.hppuniform_real_distribution.hppuniform_smallint.hppvariate_generator.hppweibull_distribution.hppxor_combine.hppxoshiro.hpp
range.hpp
range
adaptor
adaptors.hppalgorithm.hpp
algorithm
algorithm_ext.hpp
algorithm_ext
any_range.hppas_array.hppas_literal.hppatl.hppbegin.hppcategory.hppcombine.hppconcepts.hppconfig.hppconst_iterator.hppconst_reverse_iterator.hppcounting_range.hpp
detail
difference_type.hppdistance.hppempty.hppend.hppfunctions.hpphas_range_iterator.hppirange.hppistream_range.hppiterator.hppiterator_range.hppiterator_range_core.hppiterator_range_hash.hppiterator_range_io.hppjoin.hppmetafunctions.hppmfc.hppmfc_map.hppmutable_iterator.hppnumeric.hpppointer.hpprange_fwd.hpprbegin.hppreference.hpprend.hppresult_iterator.hppreverse_iterator.hppreverse_result_iterator.hppsize.hppsize_type.hppsub_range.hpptraversal.hppvalue_type.hpp
ratio.hpp
ratio
rational.hppref.hppregex.hregex.hpp
regex
concepts.hppconfig.hpp
config
icu.hppmfc.hpppattern_except.hpp
pending
regex_traits.hppuser.hpp
v4
v5
regex_fwd.hpp
scope
scope_exit.hppscoped_array.hppscoped_ptr.hpp
serialization
shared_array.hppshared_container_iterator.hppshared_ptr.hppsmart_ptr.hpp
smart_ptr
allocate_local_shared_array.hppallocate_shared_array.hppallocate_unique.hppatomic_shared_ptr.hppbad_weak_ptr.hpp
detail
enable_shared_from.hppenable_shared_from_raw.hppenable_shared_from_this.hppintrusive_ptr.hppintrusive_ref_counter.hpplocal_shared_ptr.hppmake_local_shared.hppmake_local_shared_array.hppmake_local_shared_object.hppmake_shared.hppmake_shared_array.hppmake_shared_object.hppmake_unique.hppowner_equal_to.hppowner_hash.hppowner_less.hppscoped_array.hppscoped_ptr.hppshared_array.hppshared_ptr.hppweak_ptr.hpp
spirit.hpp
spirit
home
classic.hpp
classic
actor.hpp
actor
attribute.hpp
attribute
core.hpp
core
debug.hpp
debug
dynamic.hpp
dynamic
error_handling.hpp
error_handling
iterator.hpp
iterator
meta.hpp
meta
namespace.hppphoenix.hpp
phoenix
symbols.hpp
symbols
tree
utility.hpp
utility
version.hpp
karma.hpp
karma
action.hpp
action
auto.hpp
auto
auxiliary.hpp
auxiliary
binary.hpp
binary
char.hpp
char
delimit_flag.hppdelimit_out.hpp
detail
directive.hpp
directive
domain.hppformat.hppformat_auto.hppgenerate.hppgenerate_attr.hppgenerator.hppmeta_compiler.hppnonterminal.hpp
nonterminal
numeric.hpp
numeric
operator.hpp
operator
phoenix_attributes.hppreference.hppstream.hpp
stream
string.hpp
string
what.hpp
lex.hpp
lex
qi.hpp
qi
support.hpp
support
action_dispatch.hppadapt_adt_attributes.hpp
algorithm
argument.hppargument_expression.hppassert_msg.hppattributes.hppattributes_fwd.hppauto.hpp
auto
auxiliary
char_class.hpp
char_encoding
char_set
common_terminals.hppcontainer.hppcontext.hpp
detail
extended_variant.hpphandles_container.hpphas_semantic_action.hppinfo.hpp
iterators
lazy.hpplimits.hppmake_component.hppmeta_compiler.hppmodify.hppmulti_pass.hppmulti_pass_wrapper.hpp
nonterminal
numeric_traits.hppsequence_base_id.hppstring_traits.hppterminal.hppterminal_expression.hppunused.hpputf8.hpputree.hpp
utree
x3.hpp
x3
auxiliary.hpp
auxiliary
binary.hpp
binary
char.hpp
char
core.hpp
core
directive.hpp
directive
nonterminal.hpp
nonterminal
numeric.hpp
numeric
operator.hpp
operator
string.hpp
string
support
version.hpp
include
classic.hppclassic_actions.hppclassic_actor.hppclassic_alternative.hppclassic_as_parser.hppclassic_assert.hppclassic_assign_actor.hppclassic_assign_key_actor.hppclassic_ast.hppclassic_ast_fwd.hppclassic_attribute.hppclassic_basic_chset.hppclassic_chset.hppclassic_chset_operators.hppclassic_clear_actor.hppclassic_closure.hppclassic_closure_context.hppclassic_closure_fwd.hppclassic_common.hppclassic_common_fwd.hppclassic_composite.hppclassic_config.hppclassic_confix.hppclassic_confix_fwd.hppclassic_core.hppclassic_debug.hppclassic_debug_node.hppclassic_decrement_actor.hppclassic_difference.hppclassic_directives.hppclassic_distinct.hppclassic_distinct_fwd.hppclassic_dynamic.hppclassic_epsilon.hppclassic_erase_actor.hppclassic_error_handling.hppclassic_escape_char.hppclassic_escape_char_fwd.hppclassic_exceptions.hppclassic_exceptions_fwd.hppclassic_exclusive_or.hppclassic_file_iterator.hppclassic_file_iterator_fwd.hppclassic_fixed_size_queue.hppclassic_flush_multi_pass.hppclassic_for.hppclassic_functor_parser.hppclassic_fundamental.hppclassic_grammar.hppclassic_grammar_def.hppclassic_grammar_def_fwd.hppclassic_if.hppclassic_increment_actor.hppclassic_insert_at_actor.hppclassic_insert_key_actor.hppclassic_intersection.hppclassic_iterator.hppclassic_kleene_star.hppclassic_lazy.hppclassic_list.hppclassic_lists.hppclassic_lists_fwd.hppclassic_loops.hppclassic_match.hppclassic_meta.hppclassic_minimal.hppclassic_multi_pass.hppclassic_multi_pass_fwd.hppclassic_nil.hppclassic_no_actions.hppclassic_numerics.hppclassic_numerics_fwd.hppclassic_operators.hppclassic_optional.hppclassic_parametric.hppclassic_parse_tree.hppclassic_parse_tree_fwd.hppclassic_parse_tree_utils.hppclassic_parser.hppclassic_parser_context.hppclassic_parser_id.hppclassic_parser_names.hppclassic_parser_traits.hppclassic_position_iterator.hppclassic_position_iterator_fwd.hppclassic_positive.hppclassic_primitives.hppclassic_push_back_actor.hppclassic_push_front_actor.hppclassic_range_run.hppclassic_ref_actor.hppclassic_ref_const_ref_actor.hppclassic_ref_const_ref_const_ref_a.hppclassic_ref_const_ref_value_actor.hppclassic_ref_value_actor.hppclassic_refactoring.hppclassic_regex.hppclassic_rule.hppclassic_rule_alias.hppclassic_rule_parser.hppclassic_safe_bool.hppclassic_scanner.hppclassic_scanner_fwd.hppclassic_scoped_lock.hppclassic_select.hppclassic_sequence.hppclassic_sequential_and.hppclassic_sequential_or.hppclassic_skipper.hppclassic_skipper_fwd.hppclassic_spirit.hppclassic_static.hppclassic_stored_rule.hppclassic_stored_rule_fwd.hppclassic_subrule.hppclassic_subrule_fwd.hppclassic_swap_actor.hppclassic_switch.hppclassic_symbols.hppclassic_symbols_fwd.hppclassic_traverse.hppclassic_tree_to_xml.hppclassic_typeof.hppclassic_utility.hppclassic_version.hppclassic_while.hppkarma.hppkarma_action.hppkarma_alternative.hppkarma_and_predicate.hppkarma_as.hppkarma_attr_cast.hppkarma_auto.hppkarma_auxiliary.hppkarma_binary.hppkarma_bool.hppkarma_buffer.hppkarma_center_alignment.hppkarma_char.hppkarma_char_.hppkarma_char_class.hppkarma_columns.hppkarma_delimit.hppkarma_directive.hppkarma_domain.hppkarma_duplicate.hppkarma_eol.hppkarma_eps.hppkarma_format.hppkarma_format_attr.hppkarma_format_auto.hppkarma_generate.hppkarma_generate_attr.hppkarma_generate_auto.hppkarma_grammar.hppkarma_int.hppkarma_kleene.hppkarma_lazy.hppkarma_left_alignment.hppkarma_list.hppkarma_maxwidth.hppkarma_no_delimit.hppkarma_nonterminal.hppkarma_not_predicate.hppkarma_numeric.hppkarma_omit.hppkarma_operator.hppkarma_optional.hppkarma_phoenix_attributes.hppkarma_plus.hppkarma_real.hppkarma_repeat.hppkarma_right_alignment.hppkarma_rule.hppkarma_sequence.hppkarma_stream.hppkarma_strict_relaxed.hppkarma_string.hppkarma_symbols.hppkarma_uint.hppkarma_upper_lower_case.hppkarma_verbatim.hppkarma_what.hpplex.hpplex_char_token_def.hpplex_domain.hpplex_generate_static_lexertl.hpplex_lexer.hpplex_lexertl.hpplex_lexertl_position_token.hpplex_lexertl_token.hpplex_plain_token.hpplex_primitives.hpplex_static_lexertl.hpplex_tokenize_and_parse.hpplex_tokenize_and_parse_attr.hppphoenix.hppphoenix1.hppphoenix1_actor.hppphoenix1_binders.hppphoenix1_casts.hppphoenix1_closures.hppphoenix1_composite.hppphoenix1_functions.hppphoenix1_new.hppphoenix1_operators.hppphoenix1_primitives.hppphoenix1_special_ops.hppphoenix1_statements.hppphoenix1_tuple_helpers.hppphoenix1_tuples.hppphoenix_algorithm.hppphoenix_bind.hppphoenix_container.hppphoenix_core.hppphoenix_function.hppphoenix_fusion.hppphoenix_limits.hppphoenix_object.hppphoenix_operator.hppphoenix_scope.hppphoenix_statement.hppphoenix_stl.hppphoenix_version.hppqi.hppqi_action.hppqi_alternative.hppqi_and_predicate.hppqi_as.hppqi_as_string.hppqi_attr.hppqi_attr_cast.hppqi_auto.hppqi_auxiliary.hppqi_binary.hppqi_bool.hppqi_char.hppqi_char_.hppqi_char_class.hppqi_copy.hppqi_core.hppqi_difference.hppqi_directive.hppqi_domain.hppqi_eoi.hppqi_eol.hppqi_eps.hppqi_expect.hppqi_grammar.hppqi_hold.hppqi_int.hppqi_kleene.hppqi_lazy.hppqi_lexeme.hppqi_list.hppqi_lit.hppqi_match.hppqi_match_attr.hppqi_match_auto.hppqi_matches.hppqi_no_case.hppqi_no_skip.hppqi_nonterminal.hppqi_not_predicate.hppqi_numeric.hppqi_omit.hppqi_operator.hppqi_optional.hppqi_parse.hppqi_parse_attr.hppqi_parse_auto.hppqi_permutation.hppqi_plus.hppqi_raw.hppqi_real.hppqi_repeat.hppqi_rule.hppqi_sequence.hppqi_sequential_or.hppqi_skip.hppqi_stream.hppqi_string.hppqi_symbols.hppqi_uint.hppqi_what.hppsupport.hppsupport_adapt_adt_attributes.hppsupport_any.hppsupport_any_if.hppsupport_any_if_ns.hppsupport_any_if_ns_so.hppsupport_any_ns.hppsupport_any_ns_so.hppsupport_argument.hppsupport_ascii.hppsupport_attributes.hppsupport_attributes_fwd.hppsupport_auto.hppsupport_char_class.hppsupport_container.hppsupport_extended_variant.hppsupport_info.hppsupport_iso8859_1.hppsupport_istream_iterator.hppsupport_line_pos_iterator.hppsupport_locals.hppsupport_look_ahead.hppsupport_modify.hppsupport_multi_pass.hppsupport_multi_pass_fwd.hppsupport_ostream_iterator.hppsupport_standard.hppsupport_standard_wide.hppsupport_string_traits.hppsupport_unused.hppsupport_utree.hppversion.hpp
repository
version.hpp
static_assert.hppstatic_string.hpp
static_string
swap.hppsystem.hpp
system
thread.hpp
thread
barrier.hppcaller_context.hppcompletion_latch.hpp
concurrent_queues
condition.hppcondition_variable.hpp
csbl
cv_status.hpp
detail
exceptional_ptr.hppexceptions.hppexecutor.hpp
executors
experimental
externally_locked.hppexternally_locked_stream.hppfuture.hpp
futures
interruption.hppis_locked_by_this_thread.hpplatch.hpplock_algorithms.hpplock_concepts.hpplock_factories.hpplock_guard.hpplock_options.hpplock_traits.hpplock_types.hpplockable_adapter.hpplockable_concepts.hpplockable_traits.hpplocks.hppmutex.hppnull_mutex.hpponce.hppostream_buffer.hpppoly_lockable.hpppoly_lockable_adapter.hpppoly_shared_lockable.hpppoly_shared_lockable_adapter.hpp
pthread
recursive_mutex.hppreverse_lock.hppscoped_thread.hppshared_lock_guard.hppshared_mutex.hppstrict_lock.hppsync_bounded_queue.hppsync_queue.hppsynchronized_value.hpptestable_mutex.hppthread.hppthread_functors.hppthread_guard.hppthread_only.hppthread_pool.hppthread_time.hpptss.hppuser_scheduler.hpp
v2
win32
with_lock_guard.hppxtime.hpp
throw_exception.hpptoken_functions.hpptoken_iterator.hpptokenizer.hpp
tti
tuple
type.hpptype_index.hpp
type_index
type_traits.hpp
type_traits
add_const.hppadd_cv.hppadd_lvalue_reference.hppadd_pointer.hppadd_reference.hppadd_rvalue_reference.hppadd_volatile.hppaligned_storage.hppalignment_of.hppalignment_traits.hpparithmetic_traits.hpparray_traits.hppbroken_compiler_spec.hppcommon_type.hppcomposite_traits.hppconditional.hppconfig.hppconjunction.hppconversion_traits.hppcopy_cv.hppcopy_cv_ref.hppcopy_reference.hppcv_traits.hppdecay.hppdeclval.hpp
detail
detected.hppdetected_or.hppdisjunction.hppenable_if.hppextent.hppfloating_point_promotion.hppfunction_traits.hpphas_bit_and.hpphas_bit_and_assign.hpphas_bit_or.hpphas_bit_or_assign.hpphas_bit_xor.hpphas_bit_xor_assign.hpphas_complement.hpphas_dereference.hpphas_divides.hpphas_divides_assign.hpphas_equal_to.hpphas_greater.hpphas_greater_equal.hpphas_left_shift.hpphas_left_shift_assign.hpphas_less.hpphas_less_equal.hpphas_logical_and.hpphas_logical_not.hpphas_logical_or.hpphas_minus.hpphas_minus_assign.hpphas_modulus.hpphas_modulus_assign.hpphas_multiplies.hpphas_multiplies_assign.hpphas_negate.hpphas_new_operator.hpphas_not_equal_to.hpphas_nothrow_assign.hpphas_nothrow_constructor.hpphas_nothrow_copy.hpphas_nothrow_destructor.hpphas_operator.hpphas_plus.hpphas_plus_assign.hpphas_post_decrement.hpphas_post_increment.hpphas_pre_decrement.hpphas_pre_increment.hpphas_right_shift.hpphas_right_shift_assign.hpphas_trivial_assign.hpphas_trivial_constructor.hpphas_trivial_copy.hpphas_trivial_destructor.hpphas_trivial_move_assign.hpphas_trivial_move_constructor.hpphas_unary_minus.hpphas_unary_plus.hpphas_virtual_destructor.hppice.hppintegral_constant.hppintegral_promotion.hppintrinsics.hppis_abstract.hppis_arithmetic.hppis_array.hppis_assignable.hppis_base_and_derived.hppis_base_of.hppis_base_of_tr1.hppis_bounded_array.hppis_class.hppis_complete.hppis_complex.hppis_compound.hppis_const.hppis_constructible.hppis_convertible.hppis_copy_assignable.hppis_copy_constructible.hppis_default_constructible.hppis_destructible.hppis_detected.hppis_detected_convertible.hppis_detected_exact.hppis_empty.hppis_enum.hppis_final.hppis_float.hppis_floating_point.hppis_function.hppis_fundamental.hppis_integral.hppis_list_constructible.hppis_lvalue_reference.hppis_member_function_pointer.hppis_member_object_pointer.hppis_member_pointer.hppis_noncopyable.hppis_nothrow_move_assignable.hppis_nothrow_move_constructible.hppis_nothrow_swappable.hppis_object.hppis_pod.hppis_pointer.hppis_polymorphic.hppis_reference.hppis_rvalue_reference.hppis_same.hppis_scalar.hppis_scoped_enum.hppis_signed.hppis_stateless.hppis_swappable.hppis_trivially_copyable.hppis_unbounded_array.hppis_union.hppis_unscoped_enum.hppis_unsigned.hppis_virtual_base_of.hppis_void.hppis_volatile.hppmake_signed.hppmake_unsigned.hppmake_void.hppnegation.hppnonesuch.hppobject_traits.hpppromote.hpprank.hppreference_traits.hppremove_all_extents.hppremove_bounds.hppremove_const.hppremove_cv.hppremove_cv_ref.hppremove_extent.hppremove_pointer.hppremove_reference.hppremove_volatile.hppsame_traits.hpptransform_traits.hpptype_identity.hpptype_with_alignment.hpp
typeof
units
absolute.hppbase_dimension.hppbase_unit.hpp
base_units
cmath.hppconfig.hppconversion.hppderived_dimension.hpp
detail
dim.hppdimension.hppdimensionless_quantity.hppdimensionless_type.hppdimensionless_unit.hppget_dimension.hppget_system.hppheterogeneous_system.hpphomogeneous_system.hppio.hppis_dim.hppis_dimension_list.hppis_dimensionless.hppis_dimensionless_quantity.hppis_dimensionless_unit.hppis_quantity.hppis_quantity_of_dimension.hppis_quantity_of_system.hppis_unit.hppis_unit_of_dimension.hppis_unit_of_system.hpplambda.hpplimits.hppmake_scaled_unit.hppmake_system.hppoperators.hppphysical_dimensions.hpp
physical_dimensions
pow.hppquantity.hppreduce_unit.hppscale.hppscaled_base_unit.hppstatic_constant.hppstatic_rational.hpp
systems
abstract.hpp
angle
cgs.hpp
cgs
detail
information.hpp
information
si.hpp
si
temperature
unit.hppunits_fwd.hpp
unordered
unordered_map.hppunordered_set.hpputility.hpp
utility
uuid.hpp
uuid
variant.hpp
variant
variant2.hpp
variant2
version.hppvisit_each.hppweak_ptr.hpp
winapi
xpressive
basic_regex.hpp
detail
core
detail_fwd.hpp
dynamic
static
utility
match_results.hppregex_actions.hppregex_algorithms.hppregex_compiler.hppregex_constants.hppregex_error.hppregex_iterator.hppregex_primitives.hppregex_token_iterator.hppregex_traits.hppsub_match.hpp
traits
xpressive.hppxpressive_dynamic.hppxpressive_fwd.hppxpressive_static.hppxpressive_typeof.hpp
cpprestsdk

@ -0,0 +1,610 @@
/***
* Copyright (C) Microsoft. All rights reserved.
* Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
*
* =+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
*
* Websocket client side implementation
*
* =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
****/
#pragma once
#ifndef CASA_WS_CLIENT_H
#define CASA_WS_CLIENT_H
#include "cpprest/details/basic_types.h"
#if !defined(CPPREST_EXCLUDE_WEBSOCKETS)
#include "cpprest/asyncrt_utils.h"
#include "cpprest/details/web_utilities.h"
#include "cpprest/http_headers.h"
#include "cpprest/uri.h"
#include "cpprest/ws_msg.h"
#include "pplx/pplxtasks.h"
#include <condition_variable>
#include <limits>
#include <memory>
#include <mutex>
#if !defined(_WIN32) || !defined(__cplusplus_winrt)
#if defined(__clang__)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wconversion"
#endif
#include "boost/asio/ssl.hpp"
#if defined(__clang__)
#pragma clang diagnostic pop
#endif
#endif
namespace web
{
// For backwards compatibility for when in the experimental namespace.
// At next major release this should be deleted.
namespace experimental = web;
// In the past namespace was accidentally called 'web_sockets'. To avoid breaking code
// alias it. At our next major release this should be deleted.
namespace web_sockets = websockets;
namespace websockets
{
/// WebSocket client side library.
namespace client
{
/// Websocket close status values.
enum class websocket_close_status
{
normal = 1000,
going_away = 1001,
protocol_error = 1002,
unsupported = 1003, // or data_mismatch
abnormal_close = 1006,
inconsistent_datatype = 1007,
policy_violation = 1008,
too_large = 1009,
negotiate_error = 1010,
server_terminate = 1011,
};
/// <summary>
/// Websocket client configuration class, used to set the possible configuration options
/// used to create an websocket_client instance.
/// </summary>
class websocket_client_config
{
public:
/// <summary>
/// Creates a websocket client configuration with default settings.
/// </summary>
websocket_client_config() : m_sni_enabled(true), m_validate_certificates(true) {}
/// <summary>
/// Get the web proxy object
/// </summary>
/// <returns>A reference to the web proxy object.</returns>
const web_proxy& proxy() const { return m_proxy; }
/// <summary>
/// Set the web proxy object
/// </summary>
/// <param name="proxy">The web proxy object.</param>
void set_proxy(const web_proxy& proxy) { m_proxy = proxy; }
/// <summary>
/// Get the client credentials
/// </summary>
/// <returns>A reference to the client credentials.</returns>
const web::credentials& credentials() const { return m_credentials; }
/// <summary>
/// Set the client credentials
/// </summary>
/// <param name="cred">The client credentials.</param>
void set_credentials(const web::credentials& cred) { m_credentials = cred; }
/// <summary>
/// Disables Server Name Indication (SNI). Default is on.
/// </summary>
void disable_sni() { m_sni_enabled = false; }
/// <summary>
/// Determines if Server Name Indication (SNI) is enabled.
/// </summary>
/// <returns>True if enabled, false otherwise.</returns>
bool is_sni_enabled() const { return m_sni_enabled; }
/// <summary>
/// Sets the server host name to use for TLS Server Name Indication (SNI).
/// </summary>
/// <remarks>By default the host name is set to the websocket URI host.</remarks>
/// <param name="name">The host name to use, as a string.</param>
void set_server_name(const utf8string& name) { m_sni_hostname = name; }
/// <summary>
/// Gets the server host name to use for TLS Server Name Indication (SNI).
/// </summary>
/// <returns>Host name as a string.</returns>
const utf8string& server_name() const { return m_sni_hostname; }
/// <summary>
/// Sets the User Agent to be used for the connection
/// </summary>
/// <param name="name">The User Agent to use, as a string.</param>
_ASYNCRTIMP void set_user_agent(const utf8string& user_agent);
/// <summary>
/// Gets the headers of the HTTP request message used in the WebSocket protocol handshake.
/// </summary>
/// <returns>HTTP headers for the WebSocket protocol handshake.</returns>
/// <remarks>
/// Use the <seealso cref="http_headers::add Method"/> to fill in desired headers.
/// </remarks>
web::http::http_headers& headers() { return m_headers; }
/// <summary>
/// Gets a const reference to the headers of the WebSocket protocol handshake HTTP message.
/// </summary>
/// <returns>HTTP headers.</returns>
const web::http::http_headers& headers() const { return m_headers; }
/// <summary>
/// Adds a subprotocol to the request headers.
/// </summary>
/// <param name="name">The name of the subprotocol.</param>
/// <remarks>If additional subprotocols have already been specified, the new one will just be added.</remarks>
_ASYNCRTIMP void add_subprotocol(const ::utility::string_t& name);
/// <summary>
/// Gets list of the specified subprotocols.
/// </summary>
/// <returns>Vector of all the subprotocols </returns>
/// <remarks>If you want all the subprotocols in a comma separated string
/// they can be directly looked up in the headers using 'Sec-WebSocket-Protocol'.</remarks>
_ASYNCRTIMP std::vector<::utility::string_t> subprotocols() const;
/// <summary>
/// Gets the server certificate validation property.
/// </summary>
/// <returns>True if certificates are to be verified, false otherwise.</returns>
bool validate_certificates() const { return m_validate_certificates; }
/// <summary>
/// Sets the server certificate validation property.
/// </summary>
/// <param name="validate_certs">False to turn ignore all server certificate validation errors, true
/// otherwise.</param> <remarks>Note ignoring certificate errors can be dangerous and should be done with
/// caution.</remarks>
void set_validate_certificates(bool validate_certs) { m_validate_certificates = validate_certs; }
#if !defined(_WIN32) || !defined(__cplusplus_winrt)
/// <summary>
/// Sets a callback to enable custom setting of the ssl context, at construction time.
/// </summary>
/// <param name="callback">A user callback allowing for customization of the ssl context at construction
/// time.</param>
void set_ssl_context_callback(const std::function<void(boost::asio::ssl::context&)>& callback)
{
m_ssl_context_callback = callback;
}
/// <summary>
/// Gets the user's callback to allow for customization of the ssl context.
/// </summary>
const std::function<void(boost::asio::ssl::context&)>& get_ssl_context_callback() const
{
return m_ssl_context_callback;
}
#endif
private:
web::web_proxy m_proxy;
web::credentials m_credentials;
web::http::http_headers m_headers;
bool m_sni_enabled;
utf8string m_sni_hostname;
bool m_validate_certificates;
#if !defined(_WIN32) || !defined(__cplusplus_winrt)
std::function<void(boost::asio::ssl::context&)> m_ssl_context_callback;
#endif
};
/// <summary>
/// Represents a websocket error. This class holds an error message and an optional error code.
/// </summary>
class websocket_exception : public std::exception
{
public:
/// <summary>
/// Creates an <c>websocket_exception</c> with just a string message and no error code.
/// </summary>
/// <param name="whatArg">Error message string.</param>
websocket_exception(const utility::string_t& whatArg) : m_msg(utility::conversions::to_utf8string(whatArg)) {}
#ifdef _WIN32
/// <summary>
/// Creates an <c>websocket_exception</c> with just a string message and no error code.
/// </summary>
/// <param name="whatArg">Error message string.</param>
websocket_exception(std::string whatArg) : m_msg(std::move(whatArg)) {}
#endif
/// <summary>
/// Creates a <c>websocket_exception</c> from a error code using the current platform error category.
/// The message of the error code will be used as the what() string message.
/// </summary>
/// <param name="errorCode">Error code value.</param>
websocket_exception(int errorCode) : m_errorCode(utility::details::create_error_code(errorCode))
{
m_msg = m_errorCode.message();
}
/// <summary>
/// Creates a <c>websocket_exception</c> from a error code using the current platform error category.
/// </summary>
/// <param name="errorCode">Error code value.</param>
/// <param name="whatArg">Message to use in what() string.</param>
websocket_exception(int errorCode, const utility::string_t& whatArg)
: m_errorCode(utility::details::create_error_code(errorCode))
, m_msg(utility::conversions::to_utf8string(whatArg))
{
}
#ifdef _WIN32
/// <summary>
/// Creates a <c>websocket_exception</c> from a error code and string message.
/// </summary>
/// <param name="errorCode">Error code value.</param>
/// <param name="whatArg">Message to use in what() string.</param>
websocket_exception(int errorCode, std::string whatArg)
: m_errorCode(utility::details::create_error_code(errorCode)), m_msg(std::move(whatArg))
{
}
/// <summary>
/// Creates a <c>websocket_exception</c> from a error code and string message to use as the what() argument.
/// <param name="code">Error code.</param>
/// <param name="whatArg">Message to use in what() string.</param>
/// </summary>
websocket_exception(std::error_code code, std::string whatArg)
: m_errorCode(std::move(code)), m_msg(std::move(whatArg))
{
}
#endif
/// <summary>
/// Creates a <c>websocket_exception</c> from a error code and category. The message of the error code will be used
/// as the <c>what</c> string message.
/// </summary>
/// <param name="errorCode">Error code value.</param>
/// <param name="cat">Error category for the code.</param>
websocket_exception(int errorCode, const std::error_category& cat) : m_errorCode(std::error_code(errorCode, cat))
{
m_msg = m_errorCode.message();
}
/// <summary>
/// Creates a <c>websocket_exception</c> from a error code and string message to use as the what() argument.
/// <param name="code">Error code.</param>
/// <param name="whatArg">Message to use in what() string.</param>
/// </summary>
websocket_exception(std::error_code code, const utility::string_t& whatArg)
: m_errorCode(std::move(code)), m_msg(utility::conversions::to_utf8string(whatArg))
{
}
/// <summary>
/// Gets a string identifying the cause of the exception.
/// </summary>
/// <returns>A null terminated character string.</returns>
const char* what() const CPPREST_NOEXCEPT { return m_msg.c_str(); }
/// <summary>
/// Gets the underlying error code for the cause of the exception.
/// </summary>
/// <returns>The <c>error_code</c> object associated with the exception.</returns>
const std::error_code& error_code() const CPPREST_NOEXCEPT { return m_errorCode; }
private:
std::error_code m_errorCode;
std::string m_msg;
};
namespace details
{
// Interface to be implemented by the websocket client callback implementations.
class websocket_client_callback_impl
{
public:
websocket_client_callback_impl(websocket_client_config config) : m_config(std::move(config)) {}
virtual ~websocket_client_callback_impl() CPPREST_NOEXCEPT {}
virtual pplx::task<void> connect() = 0;
virtual pplx::task<void> send(websocket_outgoing_message& msg) = 0;
virtual void set_message_handler(const std::function<void(const websocket_incoming_message&)>& handler) = 0;
virtual pplx::task<void> close() = 0;
virtual pplx::task<void> close(websocket_close_status close_status, const utility::string_t& close_reason = {}) = 0;
virtual void set_close_handler(
const std::function<void(websocket_close_status, const utility::string_t&, const std::error_code&)>&
handler) = 0;
const web::uri& uri() const { return m_uri; }
void set_uri(const web::uri& uri) { m_uri = uri; }
const websocket_client_config& config() const { return m_config; }
static void verify_uri(const web::uri& uri)
{
// Most of the URI schema validation is taken care by URI class.
// We only need to check certain things specific to websockets.
if (uri.scheme() != _XPLATSTR("ws") && uri.scheme() != _XPLATSTR("wss"))
{
throw std::invalid_argument("URI scheme must be 'ws' or 'wss'");
}
if (uri.host().empty())
{
throw std::invalid_argument("URI must contain a hostname.");
}
// Fragment identifiers are meaningless in the context of WebSocket URIs
// and MUST NOT be used on these URIs.
if (!uri.fragment().empty())
{
throw std::invalid_argument("WebSocket URI must not contain fragment identifiers");
}
}
protected:
web::uri m_uri;
websocket_client_config m_config;
};
// Interface to be implemented by the websocket client task implementations.
class websocket_client_task_impl
{
public:
_ASYNCRTIMP websocket_client_task_impl(websocket_client_config config);
_ASYNCRTIMP virtual ~websocket_client_task_impl() CPPREST_NOEXCEPT;
_ASYNCRTIMP pplx::task<websocket_incoming_message> receive();
_ASYNCRTIMP void close_pending_tasks_with_error(const websocket_exception& exc);
const std::shared_ptr<websocket_client_callback_impl>& callback_client() const { return m_callback_client; };
private:
void set_handler();
// When a message arrives, if there are tasks waiting for a message, signal the topmost one.
// Else enqueue the message in a queue.
// m_receive_queue_lock : to guard access to the queue & m_client_closed
std::mutex m_receive_queue_lock;
// Queue to store incoming messages when there are no tasks waiting for a message
std::queue<websocket_incoming_message> m_receive_msg_queue;
// Queue to maintain the receive tasks when there are no messages(yet).
std::queue<pplx::task_completion_event<websocket_incoming_message>> m_receive_task_queue;
// Initially set to false, becomes true if a close frame is received from the server or
// if the underlying connection is aborted or terminated.
bool m_client_closed;
std::shared_ptr<websocket_client_callback_impl> m_callback_client;
};
} // namespace details
/// <summary>
/// Websocket client class, used to maintain a connection to a remote host for an extended session.
/// </summary>
class websocket_client
{
public:
/// <summary>
/// Creates a new websocket_client.
/// </summary>
websocket_client() : m_client(std::make_shared<details::websocket_client_task_impl>(websocket_client_config())) {}
/// <summary>
/// Creates a new websocket_client.
/// </summary>
/// <param name="config">The client configuration object containing the possible configuration options to initialize
/// the <c>websocket_client</c>. </param>
websocket_client(websocket_client_config config)
: m_client(std::make_shared<details::websocket_client_task_impl>(std::move(config)))
{
}
/// <summary>
/// Connects to the remote network destination. The connect method initiates the websocket handshake with the
/// remote network destination, takes care of the protocol upgrade request.
/// </summary>
/// <param name="uri">The uri address to connect. </param>
/// <returns>An asynchronous operation that is completed once the client has successfully connected to the websocket
/// server.</returns>
pplx::task<void> connect(const web::uri& uri)
{
m_client->callback_client()->verify_uri(uri);
m_client->callback_client()->set_uri(uri);
auto client = m_client;
return m_client->callback_client()->connect().then([client](pplx::task<void> result) {
try
{
result.get();
}
catch (const websocket_exception& ex)
{
client->close_pending_tasks_with_error(ex);
throw;
}
});
}
/// <summary>
/// Sends a websocket message to the server .
/// </summary>
/// <returns>An asynchronous operation that is completed once the message is sent.</returns>
pplx::task<void> send(websocket_outgoing_message msg) { return m_client->callback_client()->send(msg); }
/// <summary>
/// Receive a websocket message.
/// </summary>
/// <returns>An asynchronous operation that is completed when a message has been received by the client
/// endpoint.</returns>
pplx::task<websocket_incoming_message> receive() { return m_client->receive(); }
/// <summary>
/// Closes a websocket client connection, sends a close frame to the server and waits for a close message from the
/// server.
/// </summary>
/// <returns>An asynchronous operation that is completed the connection has been successfully closed.</returns>
pplx::task<void> close() { return m_client->callback_client()->close(); }
/// <summary>
/// Closes a websocket client connection, sends a close frame to the server and waits for a close message from the
/// server.
/// </summary>
/// <param name="close_status">Endpoint MAY use the following pre-defined status codes when sending a Close
/// frame.</param> <param name="close_reason">While closing an established connection, an endpoint may indicate the
/// reason for closure.</param> <returns>An asynchronous operation that is completed the connection has been
/// successfully closed.</returns>
pplx::task<void> close(websocket_close_status close_status, const utility::string_t& close_reason = {})
{
return m_client->callback_client()->close(close_status, close_reason);
}
/// <summary>
/// Gets the websocket client URI.
/// </summary>
/// <returns>URI connected to.</returns>
const web::uri& uri() const { return m_client->callback_client()->uri(); }
/// <summary>
/// Gets the websocket client config object.
/// </summary>
/// <returns>A reference to the client configuration object.</returns>
const websocket_client_config& config() const { return m_client->callback_client()->config(); }
private:
std::shared_ptr<details::websocket_client_task_impl> m_client;
};
/// <summary>
/// Websocket client class, used to maintain a connection to a remote host for an extended session, uses callback APIs
/// for handling receive and close event instead of async task. For some scenarios would be a alternative for the
/// websocket_client like if you want to special handling on close event.
/// </summary>
class websocket_callback_client
{
public:
/// <summary>
/// Creates a new websocket_callback_client.
/// </summary>
_ASYNCRTIMP websocket_callback_client();
/// <summary>
/// Creates a new websocket_callback_client.
/// </summary>
/// <param name="client_config">The client configuration object containing the possible configuration options to
/// initialize the <c>websocket_client</c>. </param>
_ASYNCRTIMP websocket_callback_client(websocket_client_config client_config);
/// <summary>
/// Connects to the remote network destination. The connect method initiates the websocket handshake with the
/// remote network destination, takes care of the protocol upgrade request.
/// </summary>
/// <param name="uri">The uri address to connect. </param>
/// <returns>An asynchronous operation that is completed once the client has successfully connected to the websocket
/// server.</returns>
pplx::task<void> connect(const web::uri& uri)
{
m_client->verify_uri(uri);
m_client->set_uri(uri);
return m_client->connect();
}
/// <summary>
/// Sends a websocket message to the server .
/// </summary>
/// <returns>An asynchronous operation that is completed once the message is sent.</returns>
pplx::task<void> send(websocket_outgoing_message msg) { return m_client->send(msg); }
/// <summary>
/// Set the received handler for notification of client websocket messages.
/// </summary>
/// <param name="handler">A function representing the incoming websocket messages handler. It's parameters are:
/// msg: a <c>websocket_incoming_message</c> value indicating the message received
/// </param>
/// <remarks>If this handler is not set before connecting incoming messages will be missed.</remarks>
void set_message_handler(const std::function<void(const websocket_incoming_message& msg)>& handler)
{
m_client->set_message_handler(handler);
}
/// <summary>
/// Closes a websocket client connection, sends a close frame to the server and waits for a close message from the
/// server.
/// </summary>
/// <returns>An asynchronous operation that is completed the connection has been successfully closed.</returns>
pplx::task<void> close() { return m_client->close(); }
/// <summary>
/// Closes a websocket client connection, sends a close frame to the server and waits for a close message from the
/// server.
/// </summary>
/// <param name="close_status">Endpoint MAY use the following pre-defined status codes when sending a Close
/// frame.</param> <param name="close_reason">While closing an established connection, an endpoint may indicate the
/// reason for closure.</param> <returns>An asynchronous operation that is completed the connection has been
/// successfully closed.</returns>
pplx::task<void> close(websocket_close_status close_status, const utility::string_t& close_reason = {})
{
return m_client->close(close_status, close_reason);
}
/// <summary>
/// Set the closed handler for notification of client websocket closing event.
/// </summary>
/// <param name="handler">The handler for websocket closing event, It's parameters are:
/// close_status: The pre-defined status codes used by the endpoint when sending a Close frame.
/// reason: The reason string used by the endpoint when sending a Close frame.
/// error: The error code if the websocket is closed with abnormal error.
/// </param>
void set_close_handler(const std::function<void(websocket_close_status close_status,
const utility::string_t& reason,
const std::error_code& error)>& handler)
{
m_client->set_close_handler(handler);
}
/// <summary>
/// Gets the websocket client URI.
/// </summary>
/// <returns>URI connected to.</returns>
const web::uri& uri() const { return m_client->uri(); }
/// <summary>
/// Gets the websocket client config object.
/// </summary>
/// <returns>A reference to the client configuration object.</returns>
const websocket_client_config& config() const { return m_client->config(); }
private:
std::shared_ptr<details::websocket_client_callback_impl> m_client;
};
} // namespace client
} // namespace websockets
} // namespace web
#endif
#endif